0

我有一台 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

不过,我遇到了同样的错误。

有什么想法吗?

编辑:在我进行上述实验之前,代码对于任意数量的线程都可以正常工作。

4

1 回答 1

0

即使再次启用 CPU,OMP 线程的数量也只有一半(因为我禁用了奇数线程)。

解决方案:最后我不得不重新启动服务器。在此之后,一切正常。

于 2017-08-26T18:42:32.120 回答