OpenMP中定义的内核数量如何,此API如何知道核心的存在。OpenMP如何确定系统中的核心数量?
回答
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)
。
OpenMP确实在OpenMP 4.0+的线程放置API中具有核心概念。 Linux上的GCC和Intel OpenMP运行时分析'sysfs'中的CPU条目,以便找出拓扑信息。 –
@HristoIliev好点。我认为OP对于我试图解决的OpenMP线程有一些更基本的误解。编辑答案在技术上更加正确。 – Zulan
- 1. 如何将muti核心CPU转换为单核心系统
- 2. 如何确定PC的CPU核心数量?
- 3. 如何确定C++中Linux系统RAM的数量?
- 4. 核心数据与文件系统
- 5. EF核心2.0无法确定关系
- 6. 如何找到物理核心的数量在Windows系统的C++代码
- 7. OpenMP给出(核心转储)
- 8. 如何完全在多核系统上预留核心?
- 9. 矢量统计库 - 数学核心库
- 10. 如何从Lua脚本中确定系统的操作系统?
- 11. 在许多核心系统中如何访问共享内存
- 12. 如何使用核心数据关系?
- 13. 如何同步核心数据关系?
- 14. OpenMP,使用并行的所有核心
- 15. 核心操作系统LDAP集成
- 16. .NET核心Windows操作系统要求
- 17. 核心数据错误:如何正确
- 18. 确定asp.net核心中的端口
- 19. 获取核心数据中一对多关系的数量
- 20. 确定ASP.NET MVC核心区
- 21. 在文件系统与核心数据中存储图像
- 22. OpenMP仅检测多插槽/多核系统上的单个内核
- 23. 核心数据中的三元关系
- 24. 核心数据中的关系同步
- 25. 核心数据中的单向关系
- 26. 核心数据中的许多关系
- 27. 关系中的核心数据总和
- 28. OpenMP划分循环通过核心
- 29. 核心数据无关系
- 30. iOS核心数据 - 关系
@zulan我检查过,但它说nthreads-var的默认值是1,但核心数量通常大于1。所以这是否意味着它与no没有关系。核心? –
它在哪里说的? OpenMP标准4.5在2.3.2中说默认是* implementation defined *。 – Zulan