使用超过分配的CPU资源的MPI代码(过度使用)

时间:2019-02-14 19:07:29

标签: multithreading mpi cpu-usage hpc slowdown

这是情况: 我正在运行遗传算法(GA)优化代码,该代码调用独立程序包(ccx)进行功能评估。为了提高效率,GA代码使用MPI进行了并行处理。该程序在HPC群集上分配了N + 1个内核。然后,它将使用N个核并行调用独立评估程序包,等待它们完成,评估结果,然后生成一组新的参数以开始新一轮评估。重复此过程,直到满足特定条件为止。

这是问题所在: 程序有时过度使用分配的资源。 以下是群集管理员发送给我的top命令的示例输出。请注意,CPU使用率为200%。

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 7498 bgeng     20   0  148512  17912   5300 R 199.3  0.0 534:31.08 GATOOL

管理员告诉我,我的代码正在某个地方进行线程化。由于在群集上禁用了超线程(即1个核心1个进程),因此它在1个核心上运行两个进程,并减慢了整个计算节点的速度。

我不认为线程是在独立程序包中发生的,因为当我单独使用1个内核运行线程时,不会发生过量使用的情况。此外,过量分配似乎只在分配的所有MPI进程中的一个进程中发生。 可能会在什么地方或条件发生过度使用承诺?我对MPI知之甚少,而且我是用户,而不是程序开发人员。但是我可以尝试测试一些线索。如果问题太抽象,我道歉...

管理员要求我添加

export OMP_NUM_THREADS=1

在工作提交脚本中,我尝试了但没有帮助。

这是显示程序结构的伪代码

main()
{
  MPI_INIT()
  while(criteria not met){
   if(myid>0) execute_command_line('./ccx',wait=.ture.)
   if(myid==0) assess results
  }
  MPI_Finalize()
}


0 个答案:

没有答案