【问题标题】:How does OpenMP determine the Number of cores in the system?OpenMP 如何确定系统中的核心数?
【发布时间】:2016-12-28 07:35:29
【问题描述】:

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

【问题讨论】:

  • @zulan 我查了,但它说nthreads-var的默认值为1但核心数通常大于1。这是否意味着它与否无关。核心?
  • 它在哪里说的? OpenMP 标准 4.5 在 2.3.2 中说默认是实现定义

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


【解决方案1】:

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)

【讨论】:

  • OpenMP 在 OpenMP 4.0+ 的线程放置 API 中确实有一个内核的概念。 Linux 上的 GCC 和 Intel OpenMP 运行时都会解析sysfs 中的 CPU 条目,以找出拓扑信息。
  • @HristoIliev 好点。我认为 OP 对我试图解决的 OpenMP 线程有一些更基本的误解。编辑了答案,使其在技术上更正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
相关资源
最近更新 更多