[OpenMP] Support setting POSIX thread name on *BSD's and Solaris (#106489)

This commit is contained in:
Brad Smith 2024-08-31 16:53:33 -04:00 committed by GitHub
parent ec58817537
commit 37e109c6f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 7 deletions

View File

@ -23,8 +23,8 @@ function(libomp_get_definitions_flags cppflags)
else()
libomp_append(cppflags_local "-D _GNU_SOURCE")
libomp_append(cppflags_local "-D _REENTRANT")
# or use HAVE_PTHREAD_SETNAME_NP from top-level cmake/config-ix.cmake
libomp_append(cppflags_local "-D LIBOMP_HAVE_LINUX_PTHREAD_SETNAME" LIBOMP_HAVE_LINUX_PTHREAD_SETNAME)
libomp_append(cppflags_local "-D LIBOMP_HAVE_PTHREAD_SETNAME_NP" LIBOMP_HAVE_PTHREAD_SETNAME_NP)
libomp_append(cppflags_local "-D LIBOMP_HAVE_PTHREAD_SET_NAME_NP" LIBOMP_HAVE_PTHREAD_SET_NAME_NP)
endif()
# CMake doesn't include CPPFLAGS from environment, but we will.

View File

@ -102,9 +102,8 @@ if(${LIBOMP_FORTRAN_MODULES})
endif()
# Check non-posix pthread API here before CMAKE_REQUIRED_DEFINITIONS gets messed up
if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
check_symbol_exists(pthread_setname_np "pthread.h" LIBOMP_HAVE_LINUX_PTHREAD_SETNAME)
endif()
check_symbol_exists(pthread_setname_np "pthread.h" LIBOMP_HAVE_PTHREAD_SETNAME_NP)
check_symbol_exists(pthread_set_name_np "pthread.h;pthread_np.h" LIBOMP_HAVE_PTHREAD_SET_NAME_NP)
# Check for Unix shared memory
check_symbol_exists(shm_open "sys/mman.h" LIBOMP_HAVE_SHM_OPEN_NO_LRT)

View File

@ -71,6 +71,9 @@
#if KMP_OS_NETBSD
#include <sched.h>
#endif
#if KMP_OS_OPENBSD
#include <pthread_np.h>
#endif
#elif KMP_OS_SOLARIS
#include <libproc.h>
#include <procfs.h>
@ -878,12 +881,18 @@ void __kmp_create_worker(int gtid, kmp_info_t *th, size_t stack_size) {
KMP_SYSFAIL("pthread_create", status);
}
#ifdef LIBOMP_HAVE_LINUX_PTHREAD_SETNAME
// Rename worker threads for improved debuggability
if (!KMP_UBER_GTID(gtid)) {
#if defined(LIBOMP_HAVE_PTHREAD_SET_NAME_NP)
pthread_set_name_np(handle, "openmp_worker");
#elif defined(LIBOMP_HAVE_PTHREAD_SETNAME_NP) && !KMP_OS_DARWIN
#if KMP_OS_NETBSD
pthread_setname_np(handle, "%s", const_cast<char *>("openmp_worker"));
#else
pthread_setname_np(handle, "openmp_worker");
}
#endif
#endif
}
th->th.th_info.ds.ds_thread = handle;