OpenMP如何确定系统中的核心数?

时间:2016-12-28 07:35:30

标签: parallel-processing operating-system openmp cpu cpu-cores

如何在OpenMP中定义核心数量,此API如何了解核心的存在。

1 个答案:

答案 0 :(得分:4)

OpenMP定义了一个内部控制变量(ICV) nthreads-var ,它基本上控制了并行区域的线程数。

nthreads-var 的初始值(如果未由环境变量OMP_NUM_THREADS定义)是实现定义的。核心数似乎是合理的默认值。 GCC(libgomp)在gomp_init_num_threads中为BSD,Linux,mingw32,POSIX,rtems实现它。您可以查看libgomp/config/<platform>/proc.c下的具体实施。

Linux通过pthread_getaffinity_np检查线程关联,并将线程数设置为允许进程运行的CPU数。 MinGW同样通过GetProcessAffinityMask。其余平台基本上使用sysconf(_SC_NPROCESSORS_ONLN)