[Openmp-commits] [PATCH] D15867: New API for restoring current thread's affinity to initial affinity of application.

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Tue Jan 12 09:25:51 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL257489: New API for restoring current thread's affinity to init affinity of application (authored by jlpeyton).

Changed prior to commit:
  http://reviews.llvm.org/D15867?vs=43915&id=44644#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D15867

Files:
  openmp/trunk/runtime/src/kmp_affinity.cpp

Index: openmp/trunk/runtime/src/kmp_affinity.cpp
===================================================================
--- openmp/trunk/runtime/src/kmp_affinity.cpp
+++ openmp/trunk/runtime/src/kmp_affinity.cpp
@@ -4732,4 +4732,42 @@
     }
 }
 
+#if KMP_OS_LINUX
+// We don't need this entry for Windows because
+// there is GetProcessAffinityMask() api
+//
+// The intended usage is indicated by these steps:
+// 1) The user gets the current affinity mask
+// 2) Then sets the affinity by calling this function
+// 3) Error check the return value
+// 4) Use non-OpenMP parallelization
+// 5) Reset the affinity to what was stored in step 1)
+#ifdef __cplusplus
+extern "C"
+#endif
+int
+kmp_set_thread_affinity_mask_initial()
+// the function returns 0 on success,
+//   -1 if we cannot bind thread
+//   >0 (errno) if an error happened during binding
+{
+    int gtid = __kmp_get_gtid();
+    if (gtid < 0) {
+        // Do not touch non-omp threads
+        KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+            "non-omp thread, returning\n"));
+        return -1;
+    }
+    if (!KMP_AFFINITY_CAPABLE() || !__kmp_init_middle) {
+        KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+            "affinity not initialized, returning\n"));
+        return -1;
+    }
+    KA_TRACE(30, ( "kmp_set_thread_affinity_mask_initial: "
+        "set full mask for thread %d\n", gtid));
+    KMP_DEBUG_ASSERT(fullMask != NULL);
+    return __kmp_set_system_affinity(fullMask, FALSE);
+}
+#endif
+
 #endif // KMP_AFFINITY_SUPPORTED


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15867.44644.patch
Type: text/x-patch
Size: 1550 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20160112/99d16579/attachment.bin>


More information about the Openmp-commits mailing list