[Openmp-commits] [openmp] r265339 - OMP_WAIT_POLICY changes
Jonathan Peyton via Openmp-commits
openmp-commits at lists.llvm.org
Mon Apr 4 12:38:33 PDT 2016
Author: jlpeyton
Date: Mon Apr 4 14:38:32 2016
New Revision: 265339
URL: http://llvm.org/viewvc/llvm-project?rev=265339&view=rev
Log:
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
Added:
openmp/trunk/runtime/test/env/
openmp/trunk/runtime/test/env/omp_wait_policy.c (with props)
Modified:
openmp/trunk/runtime/src/kmp_settings.c
Modified: openmp/trunk/runtime/src/kmp_settings.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_settings.c?rev=265339&r1=265338&r2=265339&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_settings.c (original)
+++ openmp/trunk/runtime/src/kmp_settings.c Mon Apr 4 14:38:32 2016
@@ -712,6 +712,8 @@ __kmp_stg_print_inherit_fp_control( kmp_
// 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
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 * strin
}
}; // 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";
Added: openmp/trunk/runtime/test/env/omp_wait_policy.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/env/omp_wait_policy.c?rev=265339&view=auto
==============================================================================
--- openmp/trunk/runtime/test/env/omp_wait_policy.c (added)
+++ openmp/trunk/runtime/test/env/omp_wait_policy.c Mon Apr 4 14:38:32 2016
@@ -0,0 +1,40 @@
+// RUN: %libomp-compile && env OMP_WAIT_POLICY=active %libomp-run active
+// RUN: %libomp-compile && env OMP_WAIT_POLICY=passive %libomp-run passive
+//
+// OMP_WAIT_POLICY=active should imply blocktime == INT_MAX
+// i.e., threads spin-wait forever
+// OMP_WAIT_POLICY=passive should imply blocktime == 0
+// i.e., threads immediately sleep
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+#include "omp_testsuite.h"
+
+void usage() {
+ fprintf(stderr, "usage: omp_wait_policy active|passive\n");
+}
+
+int main(int argc, char** argv)
+{
+ int blocktime, retval=1;
+ const char* env_var_value;
+
+ if (argc != 2) {
+ usage();
+ return 1;
+ }
+
+ blocktime = kmp_get_blocktime();
+
+ env_var_value = argv[1];
+ if (!strcmp(env_var_value, "active")) {
+ retval = (blocktime != INT_MAX);
+ } else if (!strcmp(env_var_value, "passive")) {
+ retval = (blocktime != 0);
+ } else {
+ usage();
+ retval = 1;
+ }
+
+ return retval;
+}
Propchange: openmp/trunk/runtime/test/env/omp_wait_policy.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: openmp/trunk/runtime/test/env/omp_wait_policy.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Rev URL
Propchange: openmp/trunk/runtime/test/env/omp_wait_policy.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
More information about the Openmp-commits
mailing list