如何在OpenMP中定义核心数量,此API如何了解核心的存在。
答案 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)
。