在 AMD Epyc cpu 上使用 openblas 固定和核心亲和力

pinning and core affinity with openblas on AMD Epyc cpu

我在 AMD Epyc 'zen' CPU 上使用 openblas。要安装它,我只是做了 TARGET=ZEN

我的系统有 2 个 7601(即 2 个 x32 内核),我可以 运行 跨所有内核并使用 export OMP_NUM_THREADS=64[=11= 从 DGEMM 获得一个好的 GFLOPS 数]

但我现在正试图将它固定到一组较小的内核上,只有 2 个内核,1 个内核在 1 个插槽上,第二个内核在另一个插槽上。所以我设置

1) 导出 OMP_NUM_THREADS=2 导出 GOMP_CPU_AFFINITY="0 32" 但它总是将 2 个线程转储到前 2 个内核。

2) 我已经注销,重新登录并尝试 导出 OMP_NUM_THREADS=2 numactl -C 0,31 ./mt-dgemm 但它再次将它们转储到核心 0 和 1

3) 我已经注销,重新登录并尝试 导出 OMP_NUM_THREADS=2 taskset-c 0,31 ./mt-dgemm 但它再次将它们转储到核心 0 和 1

但是如果我只尝试一个核心,OMP_NUM_THREADS=1 然后执行一个任务集或 numactl 并将核心 ID 更改为 4 或 8 或 52 或任何它然后成功地将那个单线程固定到我要求的核心。

当我尝试将 2 个或更多内核固定到特定 CPU id 时,有人知道我做错了什么吗?

非常感谢!

(我使用的是 CentOS 7.4 和 GCC 7.2)

我使用以下命令,它们对你有用吗? 导出 OMP_NUM_THREADS=2 numactl --physcpubind=0,31 ./mt-dgemm

可以使用 openMP 环境变量控制线程放置:OMP_PLACES & OMP_PROC_BIND 例如:

OMP_PLACES="{0}" OMP_PROC_BIND=spread OMP_NUM_THREADS=64 ./mt-dgemm This will schedule all 64 threads to core 0.

您可以从下面获得更多信息 link: http://pages.tacc.utexas.edu/~eijkhout/pcse/html/omp-affinity.html

为了回答我自己的问题,在构建 openblas 时使用 NO_AFFINITY=1 标志禁用上面看到的自动关联。因此;

make TARGET=zen NO_AFFINITY=1