+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// Copyright (C) 2013 - 2015 by the deal.II authors
-//
-// This file is part of the deal.II library.
-//
-// The deal.II library is free software; you can use it, redistribute
-// it, and/or modify it under the terms of the GNU Lesser General
-// Public License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-// The full text of the license can be found in the file LICENSE at
-// the top level of the deal.II distribution.
-//
-// ---------------------------------------------------------------------
-
-#include <deal.II/grid/tria.h>
-#include <deal.II/base/multithread_info.h>
-#include <stdio.h>
-
-#if defined(__linux__)
-#include <sched.h>
-#include <sys/sysinfo.h>
-#endif
-
-bool getaffinity(unsigned int &bits_set,unsigned int &mask)
-{
- bits_set = 0;
- mask = 0x00;
-
-#if defined(__linux__)
- cpu_set_t my_set;
- CPU_ZERO(&my_set);
-
- unsigned int len = sizeof(my_set);
- int ret = sched_getaffinity(0, len, &my_set);
-
- if (ret!=0)
- {
- printf("sched_getaffinity() failed, return value: %d\n", ret);
- return false;
- }
- for (int i=0;i<CPU_SETSIZE;++i)
- bits_set += CPU_ISSET(i,&my_set);
-
- mask = *(int*)(&my_set);
-#else
- // sadly we don't have an implementation
- // for mac/windows
-#endif
- return true;
-}
-
-
-int main ()
-{
- // we need this, otherwise gcc will not link against deal.II
- dealii::Triangulation<2> test;
-
- unsigned int bits_set, mask;
- if (!getaffinity(bits_set, mask))
- return 1;
-
- unsigned int nprocs = dealii::MultithreadInfo::n_cores();
- unsigned int tbbprocs = dealii::MultithreadInfo::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: for some reason TBB only wants to use %d out of %d CPUs.\n",
- tbbprocs, nprocs);
- return 3;
- }
-
- return 0;
-}
## ---------------------------------------------------------------------
##
-## Copyright (C) 2013 by the deal.II authors
+## Copyright (C) 2015 by the deal.II authors
##
## This file is part of the deal.II library.
##
)
FOREACH(test ${ALL_TESTS})
- IF (${test} MATCHES "^affinity" AND NOT EXISTS ${test}-OK)
- MESSAGE("
-The affinity test can fail when you are linking in a library like BLAS
-which uses OpenMP. Even without calling any BLAS functions, OpenMP messes
-with the thread affinity which causes TBB to run single-threaded only. You
-can fix this by exporting OMP_NUM_THREADS=1.\n"
- )
- ENDIF()
-
IF (${test} MATCHES "^step-petsc" AND NOT EXISTS ${test}-OK)
MESSAGE("
Additional information about PETSc issues is available