diff options
Diffstat (limited to 'libcilkrts')
-rw-r--r-- | libcilkrts/ChangeLog | 7 | ||||
-rw-r--r-- | libcilkrts/configure | 32 | ||||
-rw-r--r-- | libcilkrts/configure.ac | 20 | ||||
-rw-r--r-- | libcilkrts/runtime/os-unix.c | 5 |
4 files changed, 64 insertions, 0 deletions
diff --git a/libcilkrts/ChangeLog b/libcilkrts/ChangeLog index 5ac0e4863db..b564ef07d6c 100644 --- a/libcilkrts/ChangeLog +++ b/libcilkrts/ChangeLog @@ -1,3 +1,10 @@ +2014-01-20 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR other/58996 + * configure.ac: Added a check for pthread affinity support. + * runtime/os-unix.c: Likewise. + * configure: Regenerate. + 2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> bootstrap/59094 diff --git a/libcilkrts/configure b/libcilkrts/configure index 91da0a83a2c..63181d78ba5 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 <pthread.h> +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 30fac992172..61b45b00723 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 <pthread.h>], + [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 dbca21f6f3c..fafb91d91a1 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 |