libgomp:线程创建失败:禁用/启用CPU后参数无效

时间:2017-08-19 18:52:35

标签: multithreading linux-kernel openmp cpu-cores linuxthreads

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

尽管如此,我还是遇到了同样的错误。

有什么想法吗?

编辑:在我进行上述实验之前,代码对任意数量的线程都运行良好。

1 个答案:

答案 0 :(得分:0)

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

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