diff --git a/libcilkrts/configure b/libcilkrts/configure index 91da0a8..63181d7 100644 --- a/libcilkrts/configure +++ b/libcilkrts/configure @@ -14420,6 +14420,38 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +# Check for pthread_{,attr_}[sg]etaffinity_np. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _GNU_SOURCE + #include +int +main () +{ +cpu_set_t cpuset; + pthread_attr_t attr; + pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + if (CPU_ISSET (0, &cpuset)) + CPU_SET (1, &cpuset); + else + CPU_ZERO (&cpuset); + pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + pthread_attr_init (&attr); + pthread_attr_getaffinity_np (&attr, sizeof (cpu_set_t), &cpuset); + pthread_attr_setaffinity_np (&attr, sizeof (cpu_set_t), &cpuset); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_PTHREAD_AFFINITY_NP 1" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + # Must be last cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure diff --git a/libcilkrts/configure.ac b/libcilkrts/configure.ac index 30fac99..61b45b0 100644 --- a/libcilkrts/configure.ac +++ b/libcilkrts/configure.ac @@ -164,5 +164,25 @@ AC_SUBST(toolexeclibdir) AC_SUBST(lt_cv_dlopen_libs) +# Check for pthread_{,attr_}[sg]etaffinity_np. +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#define _GNU_SOURCE + #include ], + [cpu_set_t cpuset; + pthread_attr_t attr; + pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + if (CPU_ISSET (0, &cpuset)) + CPU_SET (1, &cpuset); + else + CPU_ZERO (&cpuset); + pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + pthread_attr_init (&attr); + pthread_attr_getaffinity_np (&attr, sizeof (cpu_set_t), &cpuset); + pthread_attr_setaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);])], + AC_DEFINE(HAVE_PTHREAD_AFFINITY_NP, 1, +[ Define if pthread_{,attr_}{g,s}etaffinity_np is supported.])) + + # Must be last AC_OUTPUT diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c index dbca21f..fafb91d 100644 --- a/libcilkrts/runtime/os-unix.c +++ b/libcilkrts/runtime/os-unix.c @@ -311,6 +311,10 @@ static pid_t linux_gettid(void) */ static int linux_get_affinity_count (int tid) { +#if !defined HAVE_PTHREAD_AFFINITY_NP + return 0; +#else + cpu_set_t process_mask; // Extract the thread affinity mask @@ -337,6 +341,7 @@ static int linux_get_affinity_count (int tid) } return available_procs; +#endif } #endif