diff options
author | Jonathan Peyton <jonathan.l.peyton@intel.com> | 2016-04-04 19:38:32 +0000 |
---|---|---|
committer | Jonathan Peyton <jonathan.l.peyton@intel.com> | 2016-04-04 19:38:32 +0000 |
commit | 50e8f18b526d5f56489371ceb1cb1f099ac37fe4 (patch) | |
tree | 3df067657b3c13d8d0fad4d9ed8026339bce7a5e /openmp/runtime/src | |
parent | 8874ef7cf114aa408686ed10ed8cb8aa4cd78af5 (diff) | |
download | bcm5719-llvm-50e8f18b526d5f56489371ceb1cb1f099ac37fe4.tar.gz bcm5719-llvm-50e8f18b526d5f56489371ceb1cb1f099ac37fe4.zip |
OMP_WAIT_POLICY changes
This change has OMP_WAIT_POLICY=active to mean that threads will busy-wait in
spin loops and virtually never go to sleep. OMP_WAIT_POLICY=passive now means
that threads will immediately go to sleep inside a spin loop. KMP_BLOCKTIME was
the previous mechanism to specify this behavior via KMP_BLOCKTIME=0 or
KMP_BLOCKTIME=infinite, but the standard OpenMP environment variable should
also be able to specify this behavior.
Differential Revision: http://reviews.llvm.org/D18577
llvm-svn: 265339
Diffstat (limited to 'openmp/runtime/src')
-rw-r--r-- | openmp/runtime/src/kmp_settings.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/openmp/runtime/src/kmp_settings.c b/openmp/runtime/src/kmp_settings.c index ac53c471cf2..23ed25636d2 100644 --- a/openmp/runtime/src/kmp_settings.c +++ b/openmp/runtime/src/kmp_settings.c @@ -712,6 +712,8 @@ __kmp_stg_print_inherit_fp_control( kmp_str_buf_t * buffer, char const * name, v // KMP_LIBRARY, OMP_WAIT_POLICY // ------------------------------------------------------------------------------------------------- +static char const *blocktime_str = NULL; + static void __kmp_stg_parse_wait_policy( char const * name, char const * value, void * data ) { @@ -725,9 +727,17 @@ __kmp_stg_parse_wait_policy( char const * name, char const * value, void * data if ( wait->omp ) { if ( __kmp_str_match( "ACTIVE", 1, value ) ) { - __kmp_library = library_turnaround; + __kmp_library = library_turnaround; + if ( blocktime_str == NULL ) { + // KMP_BLOCKTIME not specified, so set default to "infinite". + __kmp_dflt_blocktime = KMP_MAX_BLOCKTIME; + } } else if ( __kmp_str_match( "PASSIVE", 1, value ) ) { - __kmp_library = library_throughput; + __kmp_library = library_throughput; + if ( blocktime_str == NULL ) { + // KMP_BLOCKTIME not specified, so set default to 0. + __kmp_dflt_blocktime = 0; + } } else { KMP_WARNING( StgInvalidValue, name, value ); }; // if @@ -5025,6 +5035,9 @@ __kmp_env_initialize( char const * string ) { } }; // for i + // We need to know if blocktime was set when processing OMP_WAIT_POLICY + blocktime_str = __kmp_env_blk_var( & block, "KMP_BLOCKTIME" ); + // Special case. If we parse environment, not a string, process KMP_WARNINGS first. if ( string == NULL ) { char const * name = "KMP_WARNINGS"; |