From fad360509e523a023cf1445508e8ffd7c3c0725e Mon Sep 17 00:00:00 2001 From: Craig Warren Date: Thu, 24 Mar 2016 18:09:30 +0000 Subject: [PATCH] Added setting of some environment variable for OpenMP for better performance. --- gprMax/input_cmds_singleuse.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/gprMax/input_cmds_singleuse.py b/gprMax/input_cmds_singleuse.py index bfc52880..580ef967 100644 --- a/gprMax/input_cmds_singleuse.py +++ b/gprMax/input_cmds_singleuse.py @@ -60,7 +60,10 @@ def process_singlecmds(singlecmds, G): # Number of processors to run on (OpenMP) cmd = '#num_threads' - ompthreads = os.environ.get('OMP_NUM_THREADS') + os.environ['OMP_WAIT_POLICY'] = 'active' + os.environ['OMP_DYNAMIC'] = 'false' + os.environ['OMP_PROC_BIND'] = '1' + if singlecmds[cmd] != 'None': tmp = tuple(int(x) for x in singlecmds[cmd].split()) if len(tmp) != 1: @@ -68,15 +71,18 @@ def process_singlecmds(singlecmds, G): if tmp[0] < 1: raise CmdInputError(cmd + ' requires the value to be an integer not less than one') G.nthreads = tmp[0] - elif ompthreads: - G.nthreads = int(ompthreads) + os.environ['OMP_NUM_THREADS'] = str(G.nthreads) + elif os.environ.get('OMP_NUM_THREADS'): + G.nthreads = int(os.environ.get('OMP_NUM_THREADS')) else: # Set number of threads to number of physical CPU cores, i.e. avoid hyperthreading with OpenMP G.nthreads = psutil.cpu_count(logical=False) - if G.nthreads > psutil.cpu_count(logical=False): - print('\nWARNING: You have specified more threads ({}) than available physical CPU cores ({}). This may lead to degraded performance.'.format(G.nthreads, psutil.cpu_count(logical=False))) + os.environ['OMP_NUM_THREADS'] = str(G.nthreads) + if G.messages: print('Number of threads: {}'.format(G.nthreads)) + if G.nthreads > psutil.cpu_count(logical=False): + print('\nWARNING: You have specified more threads ({}) than available physical CPU cores ({}). This may lead to degraded performance.'.format(G.nthreads, psutil.cpu_count(logical=False))) # Spatial discretisation