[Openmp-commits] [PATCH] D18577: OMP_WAIT_POLICY changes.

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Mon Apr 4 12:43:52 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL265339: OMP_WAIT_POLICY changes (authored by jlpeyton).

Changed prior to commit:
  http://reviews.llvm.org/D18577?vs=51982&id=52603#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D18577

Files:
  openmp/trunk/runtime/src/kmp_settings.c
  openmp/trunk/runtime/test/env/omp_wait_policy.c

Index: openmp/trunk/runtime/src/kmp_settings.c
===================================================================
--- openmp/trunk/runtime/src/kmp_settings.c
+++ openmp/trunk/runtime/src/kmp_settings.c
@@ -712,6 +712,8 @@
 // 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 @@
 
     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 @@
         }
     }; // 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";
Index: openmp/trunk/runtime/test/env/omp_wait_policy.c
===================================================================
--- openmp/trunk/runtime/test/env/omp_wait_policy.c
+++ openmp/trunk/runtime/test/env/omp_wait_policy.c
@@ -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;
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18577.52603.patch
Type: text/x-patch
Size: 2913 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20160404/545ab81c/attachment.bin>


More information about the Openmp-commits mailing list