我目前正试图在群集上平行几个小的mpi作业,即群集上的每个节点都有16个核心,每个mpi作业最多使用4个核心,因此我想使用GNU Parallel来平行4个MPI通过使用4x4 mpi作业我可以完全使用16个核心的作业,我尝试使用以下2个脚本:
par_mpi.pbs:
#!/bin/bash
NPROCS=16 #use 16 cores
NJOBS=4 #4 small mpi jobs
export WDIR=/work/user/smallmpi
parallel -j $NPROCS --slf $PBS_NODEFILE --workdir $WDIR ./cmd_mpi.sh ::: seq 1 $NJOBS
在cmd_mpi.sh中,我使用4个进程定义了对mpirun的调用:
#!/bin/bash
WDIR=/work/fchen14/gpar/openmp
cd $WDIR
mpirun -np 4 ./mpi_lp #This is the mpi executable
然而,当我运行此脚本时 bash par_mpi.pbs 然后使用“top”命令监视所有内核的CPU使用情况按1,似乎只使用了4个CPU而其余的CPU都处于空闲状态:
top - 16:18:27 up 22 days, 4:24, 3 users, load average: 9.36, 3.30, 2.07
Tasks: 688 total, 13 running, 675 sleeping, 0 stopped, 0 zombie
Cpu0 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.3%us, 0.3%sy, 0.0%ni, 98.7%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
有人能指出我的程序有什么问题,是否对GNU Parallel有任何基本的了解?欢迎提出任何建议。
非常感谢!