在AMD Epyc cpu上使用openblas进行固定和核心关联

时间:2018-03-01 14:59:39

标签: pinning openblas

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

我有一个2x 7601(即2 x32核心)的系统,我可以在所有核心上运行,并使用export OMP_NUM_THREADS = 64

从DGEMM获得一个正常的GFLOPS号码

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

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

2)我已退出,重新登录并尝试过 export OMP_NUM_THREADS = 2 numactl -C 0,31 ./mt-dgemm 但它又将它们转储到0和1核

3)我已经退出,重新登录并尝试了 export OMP_NUM_THREADS = 2 taskset -c 0,31 ./mt-dgemm 但它又将它们转储到0和1核

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

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

非常感谢!

(我使用的是带有GCC 7.2的CentOS 7.4)

3 个答案:

答案 0 :(得分:0)

我使用以下命令,它们适合您吗? export OMP_NUM_THREADS = 2 numactl --physcpubind = 0,31 ./mt-dgemm

答案 1 :(得分:0)

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

  
    

<强> OMP_PLACES =&#34; {0}&#34; OMP_PROC_BIND =传播OMP_NUM_THREADS = 64 ./mt-dgemm     这会将所有64个线程安排到核心0。

  

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

答案 2 :(得分:0)

要回答我自己的问题,在构建openblas时,请使用NO_AFFINITY = 1标志来禁用上述自动亲和力。因此;

make TARGET=zen NO_AFFINITY=1