[Openmp-commits] [PATCH] D34118: Reset initial affinity in children processes

Jonathan Peyton via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Mon Jun 12 13:09:51 PDT 2017


jlpeyton created this revision.

If OpenMP is initialized before fork()-ing occurs and affinity is set to
something like compact, then the master thread will be pinned to a single HW
thread/core after initialization.  If the master (or any other thread) then
forks N processes, all N processes will then be pinned to that same single HW
thread/core.  To reset the affinity for the new child process, the atfork
handler for the child process can call kmp_set_thread_affinity_mask_initial() to
reset its affinity to the initial affinity of the application before it
re-initializes libomp.  The parent process will not be affected and still
keeps its affinity setting.


Repository:
  rL LLVM

https://reviews.llvm.org/D34118

Files:
  runtime/src/kmp.h
  runtime/src/z_Linux_util.cpp


Index: runtime/src/z_Linux_util.cpp
===================================================================
--- runtime/src/z_Linux_util.cpp
+++ runtime/src/z_Linux_util.cpp
@@ -1280,6 +1280,12 @@
 
   ++__kmp_fork_count;
 
+#if KMP_AFFINITY_SUPPORTED && KMP_OS_LINUX
+  // reset the affinity in the child to the initial thread
+  // affinity in the parent
+  kmp_set_thread_affinity_mask_initial();
+#endif
+
   __kmp_init_runtime = FALSE;
 #if KMP_USE_MONITOR
   __kmp_init_monitor = 0;
Index: runtime/src/kmp.h
===================================================================
--- runtime/src/kmp.h
+++ runtime/src/kmp.h
@@ -3268,6 +3268,9 @@
 extern int __kmp_aux_unset_affinity_mask_proc(int proc, void **mask);
 extern int __kmp_aux_get_affinity_mask_proc(int proc, void **mask);
 extern void __kmp_balanced_affinity(int tid, int team_size);
+#if KMP_OS_LINUX
+extern int kmp_set_thread_affinity_mask_initial(void);
+#endif
 #endif /* KMP_AFFINITY_SUPPORTED */
 
 extern void __kmp_cleanup_hierarchy();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D34118.102234.patch
Type: text/x-patch
Size: 1007 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20170612/f4f4fd79/attachment.bin>


More information about the Openmp-commits mailing list