【发布时间】:2022-10-05 16:05:48
【问题描述】:
我们正在尝试在新的硬件平台上使用 OpenMP 优化 HPC 应用程序。这些应用程序需要精确放置/固定其内核,否则性能会下降一半。目前,我们为用户提供了针对每个平台的自定义 GOMP_CPU_AFFINITY 映射,但这很麻烦,因为每个硬件版本都不一样,甚至不同固件版本的平台有时会更改其 CoreID 物理映射——这对用户来说是不可能的即时检测。
如果 HPC 应用程序可以简单地将 GOMP_PROC_BIND 设置为 \"close\" 并且 OpenMP 会为给定平台做正确的事情,那将是一个很大的帮助 - 但要使这成为可能,硬件供应商需要定义什么是 \"close\"意味着每台机器。我们希望这样做,但我们无法确定 OpenMP 如何/在何处获取 CoreID 列表以用于关闭、展开等操作。(对于各种外部需求,这台机器上的 CoreID 空间模式会完全显示随机给软件作者。)
关于 OpenMP 在哪里/如何定义 OMP_PROC_BIND 的 CoreID 列表以便我们可以配置它们的任何建议?如果需要,我们可能需要为该平台提供自定义版本的 OpenMP(带有更改的源代码),我们对此感到满意。
感谢大家。 :)
- 杰夫
-
你是说你的编译器没有在你的平台上正确解释
OMP_PROC_BIND=close?还有一种语法有很多花括号,我觉得无法理解,但对你来说它可能会有所回报。您还可以深入研究 hwloc 来管理放置。