Skip to content

Commit

Permalink
devel/llvm16: openmp Fix child processes affinity
Browse files Browse the repository at this point in the history
Backport upstream 73bb8d9d92f6:
    [OpenMP] Fix child processes to use affinity_none (#91391)

PR:		278843
Submitted by:	cbl@cbl.us
  • Loading branch information
brooksdavis committed May 10, 2024
1 parent fdb8b51 commit db92b24
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion devel/llvm16/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PORTNAME= llvm
DISTVERSION= 16.0.6
PORTREVISION= 10
PORTREVISION= 11
CATEGORIES= devel lang
MASTER_SITES= https://github.com/llvm/llvm-project/releases/download/llvmorg-${DISTVERSION:S/rc/-rc/}/ \
https://${PRE_}releases.llvm.org/${LLVM_RELEASE}${RCDIR}/
Expand Down
40 changes: 40 additions & 0 deletions devel/llvm16/files/patch-backport-73bb8d9d92f6
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
commit 73bb8d9d92f689863c94d48517e89d35dae0ebcf
Author: Jonathan Peyton <jonathan.l.peyton@intel.com>
Date: Wed May 8 09:23:50 2024 -0500

[OpenMP] Fix child processes to use affinity_none (#91391)

When a child process is forked with OpenMP already initialized, the
child process resets its affinity mask and sets proc-bind-var to false
so that the entire original affinity mask is used. This patch corrects
an issue with the affinity initialization code setting affinity to
compact instead of none for this special case of forked children.

The test trying to catch this only testing explicit setting of
KMP_AFFINITY=none. Add test run for no KMP_AFFINITY setting.

Fixes: #91098

diff --git openmp/runtime/src/kmp_settings.cpp openmp/runtime/src/kmp_settings.cpp
index b9c8289b5c51..8b6092cb1085 100644
--- openmp/runtime/src/kmp_settings.cpp
+++ openmp/runtime/src/kmp_settings.cpp
@@ -6420,6 +6420,8 @@ void __kmp_env_initialize(char const *string) {
}
if ((__kmp_nested_proc_bind.bind_types[0] != proc_bind_intel) &&
(__kmp_nested_proc_bind.bind_types[0] != proc_bind_default)) {
+ if (__kmp_nested_proc_bind.bind_types[0] == proc_bind_false)
+ __kmp_affinity.type = affinity_none;
if (__kmp_affinity.type == affinity_default) {
__kmp_affinity.type = affinity_compact;
__kmp_affinity.flags.dups = FALSE;
diff --git openmp/runtime/test/affinity/redetect.c openmp/runtime/test/affinity/redetect.c
index dba83b72cc42..4b96d1bd92ee 100644
--- openmp/runtime/test/affinity/redetect.c
+++ openmp/runtime/test/affinity/redetect.c
@@ -1,4 +1,5 @@
// RUN: %libomp-compile
+// RUN: %libomp-run
// RUN: env KMP_AFFINITY=none %libomp-run
// REQUIRES: linux

0 comments on commit db92b24

Please sign in to comment.