[Openmp-commits] [PATCH] D33210: Address default pinning OpenMP process with multiple processor groups
Jonathan Peyton via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Wed May 31 13:34:15 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL304343: Address default pinning OpenMP process with multiple processor groups (authored by jlpeyton).
Changed prior to commit:
https://reviews.llvm.org/D33210?vs=99046&id=100914#toc
Repository:
rL LLVM
https://reviews.llvm.org/D33210
Files:
openmp/trunk/runtime/src/kmp_settings.cpp
Index: openmp/trunk/runtime/src/kmp_settings.cpp
===================================================================
--- openmp/trunk/runtime/src/kmp_settings.cpp
+++ openmp/trunk/runtime/src/kmp_settings.cpp
@@ -5063,6 +5063,33 @@
if (KMP_AFFINITY_CAPABLE()) {
#if KMP_GROUP_AFFINITY
+ // This checks to see if the initial affinity mask is equal
+ // to a single windows processor group. If it is, then we do
+ // not respect the initial affinity mask and instead, use the
+ // entire machine.
+ bool exactly_one_group = false;
+ if (__kmp_num_proc_groups > 1) {
+ int group;
+ bool within_one_group;
+ // Get the initial affinity mask and determine if it is
+ // contained within a single group.
+ kmp_affin_mask_t *init_mask;
+ KMP_CPU_ALLOC(init_mask);
+ __kmp_get_system_affinity(init_mask, TRUE);
+ group = __kmp_get_proc_group(init_mask);
+ within_one_group = (group >= 0);
+ // If the initial affinity is within a single group,
+ // then determine if it is equal to that single group.
+ if (within_one_group) {
+ DWORD num_bits_in_group = __kmp_GetActiveProcessorCount(group);
+ int num_bits_in_mask = 0;
+ for (int bit = init_mask->begin(); bit != init_mask->end();
+ bit = init_mask->next(bit))
+ num_bits_in_mask++;
+ exactly_one_group = (num_bits_in_group == num_bits_in_mask);
+ }
+ KMP_CPU_FREE(init_mask);
+ }
// Handle the Win 64 group affinity stuff if there are multiple
// processor groups, or if the user requested it, and OMP 4.0
@@ -5073,7 +5100,8 @@
&& (__kmp_nested_proc_bind.bind_types[0] == proc_bind_default))
#endif
|| (__kmp_affinity_top_method == affinity_top_method_group)) {
- if (__kmp_affinity_respect_mask == affinity_respect_mask_default) {
+ if (__kmp_affinity_respect_mask == affinity_respect_mask_default &&
+ exactly_one_group) {
__kmp_affinity_respect_mask = FALSE;
}
if (__kmp_affinity_type == affinity_default) {
@@ -5150,7 +5178,7 @@
{
if (__kmp_affinity_respect_mask == affinity_respect_mask_default) {
#if KMP_GROUP_AFFINITY
- if (__kmp_num_proc_groups > 1) {
+ if (__kmp_num_proc_groups > 1 && exactly_one_group) {
__kmp_affinity_respect_mask = FALSE;
} else
#endif /* KMP_GROUP_AFFINITY */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33210.100914.patch
Type: text/x-patch
Size: 2495 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20170531/aaa61730/attachment-0001.bin>
More information about the Openmp-commits
mailing list