From: Timo Heister Date: Wed, 5 Feb 2014 20:35:58 +0000 (+0000) Subject: update affinity quicktest to work with 1 cpu and on mac X-Git-Tag: v8.2.0-rc1~874 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af03149f5a3f73dcebb09f3edf7d2f885bb32a34;p=dealii.git update affinity quicktest to work with 1 cpu and on mac git-svn-id: https://svn.dealii.org/trunk@32415 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/tests/quick_tests/CMakeLists.txt b/deal.II/tests/quick_tests/CMakeLists.txt index 1d6da9b8e8..a21bcc7200 100644 --- a/deal.II/tests/quick_tests/CMakeLists.txt +++ b/deal.II/tests/quick_tests/CMakeLists.txt @@ -82,7 +82,9 @@ FOREACH(_build ${DEAL_II_BUILD_TYPES}) ENDFOREACH() # Test whether thread affinity is well behaved +IF (DEAL_II_WITH_THREADS) make_quicktest("affinity" ${_mybuild} "") +ENDIF() # Test if MPI is configured correctly IF (DEAL_II_WITH_MPI) diff --git a/deal.II/tests/quick_tests/affinity.cc b/deal.II/tests/quick_tests/affinity.cc index e9d01a4ea0..ab0fca1bca 100644 --- a/deal.II/tests/quick_tests/affinity.cc +++ b/deal.II/tests/quick_tests/affinity.cc @@ -15,14 +15,20 @@ // --------------------------------------------------------------------- #include +#include #include + +#if defined(__linux__) #include +#include +#endif -int main () +bool getaffinity(unsigned int &bits_set,unsigned int &mask) { - // we need this, otherwise gcc will not link against deal.II - dealii::Triangulation<2> test; - + bits_set = 0; + mask = 0x00; + +#if defined(__linux__) cpu_set_t my_set; CPU_ZERO(&my_set); @@ -32,17 +38,45 @@ int main () if (ret!=0) { printf("sched_getaffinity() failed, return value: %d\n", ret); - return -1; + return false; } - - unsigned int bits_set = 0;//not supported on old kernels: CPU_COUNT(&my_set); for (int i=0;i test; + + unsigned int bits_set, mask; + if (!getaffinity(bits_set, mask)) + return 1; + + unsigned int nprocs = dealii::multithread_info.n_cpus; + unsigned int tbbprocs = dealii::multithread_info.n_threads(); + printf("aff_ncpus=%d, mask=%08X, nprocs=%d, tbb_threads=%d\n", + bits_set, mask, nprocs, tbbprocs ); + + if (bits_set !=0 && bits_set!=nprocs) + { + printf("Warning: sched_getaffinity() returns that we can only use %d out of %d CPUs.\n",bits_set, nprocs); + return 2; + } + if (nprocs != tbbprocs) { - printf("Warning: sched_getaffinity() returns that we can only use one CPU.\n"); - return 1; + printf("Warning: for some reason TBB only wants to use %d out of %d CPUs.\n", + tbbprocs, nprocs); + return 3; } - printf("ncpus=%d, mask=%08X\n", bits_set, *(unsigned int*)(&my_set)); + + return 0; }