Parallel processing OpenMP如何确定系统中的内核数?

Parallel processing OpenMP如何确定系统中的内核数?,parallel-processing,operating-system,openmp,cpu,cpu-cores,Parallel Processing,Operating System,Openmp,Cpu,Cpu Cores,OpenMP如何定义内核数,此API如何知道内核的存在。OpenMP定义了一个内部控制变量(ICV)nthreads var,它基本上控制并行区域的线程数 nthreads var的初始值(如果未由环境变量OMP\u NUM\u THREADS定义)由实现定义。内核的数量似乎是一个合理的默认值。GCCs(libgomp)在gomp_init_num_threads中为BSD、Linux、mingw32、POSIX、rtems实现它。您可以在libgomp/config//proc.c下查看具体的

OpenMP如何定义内核数,此API如何知道内核的存在。

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

nthreads var的初始值(如果未由环境变量
OMP\u NUM\u THREADS
定义)由实现定义。内核的数量似乎是一个合理的默认值。GCCs(libgomp)在
gomp_init_num_threads
中为BSD、Linux、mingw32、POSIX、rtems实现它。您可以在
libgomp/config//proc.c
下查看具体的实现


Linux通过
pthread\u getaffinity\u np
检查线程相关性,并将线程数设置为允许进程运行的CPU数。通过
GetProcessAffinityMask
进行类似的MinGW。其余平台基本上使用sysconf(\u SC\u NPROCESSORS\u ONLN)

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

nthreads var的初始值(如果未由环境变量
OMP\u NUM\u THREADS
定义)由实现定义。内核的数量似乎是一个合理的默认值。GCCs(libgomp)在
gomp_init_num_threads
中为BSD、Linux、mingw32、POSIX、rtems实现它。您可以在
libgomp/config//proc.c
下查看具体的实现


Linux通过
pthread\u getaffinity\u np
检查线程相关性,并将线程数设置为允许进程运行的CPU数。通过
GetProcessAffinityMask
进行类似的MinGW。其余的平台基本上使用sysconf(\u SC\u NPROCESSORS\u ONLN)

OpenMP在OpenMP 4.0+的线程放置API中确实有核心的概念。Linux上的GCC和Intel OpenMP运行时都会解析sysfs中的CPU条目,以找出拓扑信息。@hristoilev说得对。我认为OP对OpenMP线程有一些更基本的误解,我正试图解决这些误解。将答案编辑为技术上更正确。OpenMP在OpenMP 4.0+的线程放置API中确实有核心的概念。Linux上的GCC和Intel OpenMP运行时都会解析sysfs中的CPU条目,以找出拓扑信息。@hristoilev说得对。我认为OP对OpenMP线程有一些更基本的误解,我正试图解决这些误解。编辑了答案,使其在技术上更加正确。@zulan我检查过了,但它说nthreads var的默认值是1,但核心数通常大于1。那么这是否意味着它与磁芯的数量无关?它在哪里说的?OpenMP标准4.5在2.3.2中说默认值是实现定义的。@zulan I已检查,但它说nthreads var的默认值是1,但核心数通常大于1。那么这是否意味着它与磁芯的数量无关?它在哪里说的?OpenMP标准4.5在2.3.2中指出,默认值由实现定义。