首先,我不是一个专业的程序员,但我必须为我的项目编写代码(虽然我对C++和python有一定的熟练程度)。当我被困在这里的时候,我经常来到这里,大多数时候我都从这里得到了很好的解决方案,但是现在我有了关于MPI编程的基本问题,否则我不知道它的概念,我就无法真正继续下去。
这是我对问题的描述,
我想为科学计算的算法创建一个代码。代码可分为两部分。
A.)矩阵-矩阵的向量乘法和逆。这个部分相对简单,我甚至有自己的MPI代码来处理这个部分。
( B.)为更复杂的计算调用外部MPI准备程序(这部分也应该很简单,因为它只是调用一个UNIX命令行)。
我遇到的问题是如何将这两个部分连接在一起?我的算法是这样的,
对于指定范围内的k,将大小为6NMx1的状态向量除以M块,让每个M节点处理这些块。操作大小为6NMx1的状态向量(根据A)(在A之后并行)已完成,运行B)使用并行/*中的M节点--这就是我被困在*/更新状态向量结束的地方
),我必须使用mpirun来调用UNIX命令,
mpirun -np #PPN my_app > some_output我要问的问题是
Python脚本:
for k in specified range
mpirun A.) --> This is straightforward for me
mpirun B.)
end for(b.伪码)
/* THIS PROGRAM SHOULD HAVE 16M PROCESSES */
if rank % 16 == 0
mpirun -np 16 my_app > output
end if
/* I WANT M CALLS TO THIS PROGRAM IN PARALLEL */
MPI_COMM.BARRIER你认为这个方案将使用16M进程并行于B)吗?如果有更好的方法来实现B)比这个,甚至更好的,包装在同一个代码与A),请建议我!
3.)这是我的原型代码,所以我不关心效率。我只是需要它的工作,我会关心优化以后。
如果我的描述混乱,请问我,我会回来澄清。谢谢你抽出时间,我真的很感谢你的帮助!)
发布于 2014-03-04 18:03:49
Mpirun只是一个命令,它运行您在选项命令行中所需的作业数,它可能会检测您拥有和使用哪种机器。
回答第二个问题很复杂,因为如果您使用的是具有多个节点的集群,那么您可能应该使用专用协议。例如,使用slurm,您可以通过一个S批处理协议运行您的程序,如下所示:
// number of proc on one node
#SBATCH -n 2
// number of node
#SBATCH -N 4
run ./a.out这意味着您将在4个节点上运行您的程序,每个节点上有2个procs。
我真的不知道以下的原因,因为这对我来说有点混乱,但也许你应该重新考虑一下你的问题。如果在节点中工作,则不需要MPI,但应该使用openMP。
如果在节点中使用非共享内存,则需要MPI。
我希望它能对你的工作有所帮助。
https://stackoverflow.com/questions/22177562
复制相似问题