我在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)
答案 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