我有一台 2 插槽机器,每台机器都有 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
不过,我遇到了同样的错误。
有什么想法吗?
编辑:在我进行上述实验之前,代码对于任意数量的线程都可以正常工作。