这是情况: 我正在运行遗传算法(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()
}