Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 如何在小型MPI作业中使用GNU并行_Parallel Processing_Mpi_Multicore_Gnu Parallel - Fatal编程技术网

Parallel processing 如何在小型MPI作业中使用GNU并行

Parallel processing 如何在小型MPI作业中使用GNU并行,parallel-processing,mpi,multicore,gnu-parallel,Parallel Processing,Mpi,Multicore,Gnu Parallel,我目前正在尝试并行化集群上的几个小型mpi作业,即集群上的每个节点有16个核心,每个mpi作业最多使用4个核心,因此我想使用GNU并行化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

我目前正在尝试并行化集群上的几个小型mpi作业,即集群上的每个节点有16个核心,每个mpi作业最多使用4个核心,因此我想使用GNU并行化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并行有任何基本的理解?欢迎提出任何建议


多谢各位

您是否有可能使用OpenMPI作为MPI实现?然后将
--bind to none
添加到
mpirun
选项中。您好,Hristro,感谢您的评论,这确实改变了CPU的使用率,但是似乎只使用了12个CPU,而不是16个,即使我更改了NPROCS=20或更大,似乎GNU Parallel没有完全使用计算节点上的所有可用内核?抱歉,我不知道GNU并行是如何工作的。为了澄清我之前的评论:在一系列广泛的条件下,OpenMPI默认情况下会将每个进程绑定到一个特定的核心。由于不同的MPI作业对彼此的存在一无所知,因此库将所有作业固定到同一组内核上<代码>--bind to none将完全关闭绑定。无论如何,感谢您的回复,我发现问题在于我需要在seq 1 10周围加上反勾号,使其成为
seq 1 10
,否则,它们只是3个字符串组合,这就是为什么只使用3x4内核的原因……您是否碰巧使用开放MPI作为MPI实现?然后将
--bind to none
添加到
mpirun
选项中。您好,Hristro,感谢您的评论,这确实改变了CPU的使用率,但是似乎只使用了12个CPU,而不是16个,即使我更改了NPROCS=20或更大,似乎GNU Parallel没有完全使用计算节点上的所有可用内核?抱歉,我不知道GNU并行是如何工作的。为了澄清我之前的评论:在一系列广泛的条件下,OpenMPI默认情况下会将每个进程绑定到一个特定的核心。由于不同的MPI作业对彼此的存在一无所知,因此库将所有作业固定到同一组内核上
--bind to none
将完全关闭绑定。无论如何,感谢您的回复,我发现问题在于我需要在seq 1 10周围加上反勾号,使其成为
seq 1 10
,否则它们只是3个字符串组合,这就是只使用3x4个核的原因。。。