我有一台双插槽机器,每个机器都有14个核心,并启用了超线程-因此总共有14*2*2 = 56个处理单元或逻辑CPU。
我通过执行以下操作禁用了所有奇数CPU(1、3、5、7、...、53、55):
for i in {1..55..2}; do echo 0 > /sys/devices/system/cpu/cpu$i/online; done
/sys/devices/system/cpu/online shows 0 2 4 6 ... 52 54现在,每当我尝试使用OpenMP创建多个线程(=28)时,我得到了以下错误:
libgomp: Thread creation failed: Invalid argument我通过执行以下操作将其还原:
for i in {1..55..2}; do echo 1 > /sys/devices/system/cpu/cpu$i/online; done
/sys/devices/system/cpu/online shows 0-55尽管如此,我还是得到了同样的错误。
有什么想法吗?
编辑:在我做上述实验之前,代码在任何数量的线程上都工作得很好。
发布于 2017-08-27 02:42:32
即使在再次启用CPU之后,OMP线程的数量也只有一半(因为我禁用了奇数)。
解决方案:我不得不在最后重启服务器。在此之后,一切都会正常工作。
https://stackoverflow.com/questions/45775251
复制相似问题