我想用C编写一个程序,该程序将有一个文件作为输入,并且在该文件中将定义NxM大小的矩阵。因此,在我的MPI程序中,我希望矩阵的每个单元都有N * M个过程。

我将使用makefile和hosts文件运行该程序

run:

    mpirun --hostfile ${HOSTFILE} ./${TARGET}


我已经搜索了Internet和stackoverflow,但徒劳无功,所以请您解释一下如何实现?

最佳答案

一般而言,MPI实施将需要在等级实际开始之前需要先知道等级总数的“先验”知识。此要求排除了使用等级0来读取输入文件并确定运行时等级的数量。

实际上,在调用mpirun时必须知道等级的数量(我暂时不考虑生成和连接/接受路径)。用于在主机文件中为每个条目启动一个以上等级的特定语法取决于实现。有关更多信息,请参见提供的文档。

两种“显而易见的”选择是:


手动检查每个输入文件,并在调用mpirun命令之前记下NxM大小(也许在文件名中)。
让“脚本”检查文件(直接检查文件,或使用从应用程序代码派生的“帮助程序”程序)检查文件,确定NxM大小,并格式化适当的mpirun命令。


“ Spawn”是另一种可能的解决方案,但是会给整个解决方案增加很多麻烦。总的来说,上面列出的简单蛮力方法是可取的。

关于c - MPI如何决定我们创建多少个流程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20925500/

10-15 05:23