Will sched_setaffinity
or pthread_attr_setaffinity_np
work to set thread affinity under OpenMP?
Related: CPU Affinity
Will sched_setaffinity
or pthread_attr_setaffinity_np
work to set thread affinity under OpenMP?
Related: CPU Affinity
Yes, named calls will work to set thread affinity. The only problem is to fix thread number and to set right affinity in right thread (you can try using static scheduling of for
loop for known number of threads).
As I know, almost every openmp allows to set affinity via environment. The name of environment variable varies (it was not standartized some time ago). I use http://www.spec.org/omp2001/results/omp2001.html page to find openMP implementation and the will search for specific environment variable name. Affinity is set in ~half of specOMP results. There are some additional OpenMP performance-tuning settings in results too.
E.g. For intel compiler the variable is
export KMP_AFFINITY=compact,0
export SUNW_MP_PROCBIND=TRUE
export GOMP_CPU_AFFINITY=0-63
where 63 is maximum CPU number (when counted from 0)
And newer OpenMP Standard, version 3.1 defines environment variable OMP_PROC_BIND (see section 4.4) which is standardized way of setting affinity in OpenMP. Usage is:
export OMP_PROC_BIND=true