Merge commit 73bb8d9d92f6 from llvm-project (by Jonathan Peyton):

[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

This should fix OpenMP processes sometimes getting stuck on a single CPU
core.

PR:		278845
Reported by:	Cassidy B. Larson <cbl@cbl.us>
MFC after:	3 days
This commit is contained in:
Dimitry Andric 2024-05-08 20:44:28 +02:00
parent da15ed2e98
commit 22b3e7898e

View File

@ -6426,6 +6426,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;