2016-12-28 404 views
0

OpenMP中定义的内核数量如何,此API如何知道核心的存在。OpenMP如何确定系统中的核心数量?

+0

@zulan我检查过,但它说nthreads-var的默认值是1,但核心数量通常大于1。所以这是否意味着它与no没有关系。核心? –

+0

它在哪里说的? OpenMP标准4.5在2.3.2中说默认是* implementation defined *。 – Zulan

回答

3

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

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

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

+1

OpenMP确实在OpenMP 4.0+的线程放置API中具有核心概念。 Linux上的GCC和Intel OpenMP运行时分析'sysfs'中的CPU条目,以便找出拓扑信息。 –

+0

@HristoIliev好点。我认为OP对于我试图解决的OpenMP线程有一些更基本的误解。编辑答案在技术上更加正确。 – Zulan