summaryrefslogtreecommitdiff
path: root/libcilkrts
diff options
context:
space:
mode:
Diffstat (limited to 'libcilkrts')
-rw-r--r--libcilkrts/ChangeLog7
-rw-r--r--libcilkrts/configure32
-rw-r--r--libcilkrts/configure.ac20
-rw-r--r--libcilkrts/runtime/os-unix.c5
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