Skip to content

Commit

Permalink
Fix for KMP_AFFINITY=disabled and KMP_TOPOLOGY_METHOD=hwloc
Browse files Browse the repository at this point in the history
With these settings, the create_hwloc_map() method was being called causing an
assert(). After some consideration, it was determined that disabling affinity
explicitly should just disable hwloc as well. i.e., KMP_AFFINITY overrides
KMP_TOPOLOGY_METHOD. This lets the user know that the Hwloc mechanism is being
ignored when KMP_AFFINITY=disabled.

Differential Revision: https://reviews.llvm.org/D33208

llvm-svn: 304344
  • Loading branch information
jpeyton52 committed May 31, 2017
1 parent 9f5df8b commit e3e2aaf
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 1 deletion.
5 changes: 4 additions & 1 deletion openmp/runtime/src/kmp_affinity.cpp
Expand Up @@ -61,7 +61,10 @@ void KMPAffinity::pick_api() {
if (picked_api)
return;
#if KMP_USE_HWLOC
if (__kmp_affinity_top_method == affinity_top_method_hwloc) {
// Only use Hwloc if affinity isn't explicitly disabled and
// user requests Hwloc topology method
if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
__kmp_affinity_type != affinity_disabled) {
affinity_dispatch = new KMPHwlocAffinity();
} else
#endif
Expand Down
10 changes: 10 additions & 0 deletions openmp/runtime/src/kmp_settings.cpp
Expand Up @@ -5033,6 +5033,16 @@ void __kmp_env_initialize(char const *string) {
// affinity.
const char *var = "KMP_AFFINITY";
KMPAffinity::pick_api();
#if KMP_USE_HWLOC
// If Hwloc topology discovery was requested but affinity was also disabled,
// then tell user that Hwloc request is being ignored and use default
// topology discovery method.
if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
__kmp_affinity_dispatch->get_api_type() != KMPAffinity::HWLOC) {
KMP_WARNING(AffIgnoringHwloc, var);
__kmp_affinity_top_method = affinity_top_method_all;
}
#endif
if (__kmp_affinity_type == affinity_disabled) {
KMP_AFFINITY_DISABLE();
} else if (!KMP_AFFINITY_CAPABLE()) {
Expand Down
21 changes: 21 additions & 0 deletions openmp/runtime/test/env/kmp_aff_disable_hwloc.c
@@ -0,0 +1,21 @@
// RUN: %libomp-compile && env KMP_AFFINITY=disabled KMP_TOPOLOGY_METHOD=hwloc %libomp-run
// REQUIRES: hwloc
#include <stdio.h>
#include <stdlib.h>

// Test will assert() without fix
int test_affinity_disabled_plus_hwloc() {
#pragma omp parallel
{}
return 1;
}

int main(int argc, char **argv) {
int i, j;
int failed = 0;

if (!test_affinity_disabled_plus_hwloc()) {
failed = 1;
}
return failed;
}
1 change: 1 addition & 0 deletions openmp/runtime/test/lit.cfg
Expand Up @@ -64,6 +64,7 @@ if re.search('gcc', config.test_compiler) is not None:
append_dynamic_library_path(config.library_dir)
if config.using_hwloc:
append_dynamic_library_path(config.hwloc_library_dir)
config.available_features.add('hwloc')

# Rpath modifications for Darwin
if config.operating_system == 'Darwin':
Expand Down

0 comments on commit e3e2aaf

Please sign in to comment.