sched_setaffinity
或pthread_attr_setaffinity_np
是否可以在OpenMP下设置线程亲和性?
相关:CPU Affinity
是的,命名调用可以设置线程关联。唯一的问题是固定线程数,并设置正确的亲和在正确的线程(你可以尝试使用for
循环的静态调度已知的线程数)。
据我所知,几乎每个openmp都允许通过环境设置亲和性。环境变量的名称各不相同(不久前还没有标准化)。我使用http://www.spec.org/omp2001/results/omp2001.html页面来查找openMP实现,并将搜索特定的环境变量名称。大约一半的specOMP结果设置了亲和性。在结果中也有一些额外的OpenMP性能调优设置。
。对于intel编译器,变量是
export KMP_AFFINITY=compact,0
对于sun编译器:
export SUNW_MP_PROCBIND=TRUE
gcc (pre-openmp 3.1)
export GOMP_CPU_AFFINITY=0-63
其中63为最大CPU数(从0开始计算)
更新的OpenMP标准版本3.1定义了环境变量OMP_PROC_BIND(见4.4节),这是OpenMP中设置亲和性的标准化方式。用法是:
export OMP_PROC_BIND=true