为什么MPI_Init接受指向argc和argv的指针?

时间:2010-04-15 05:41:57

标签: mpi argv argc

这就是我们如何使用MPI_Init函数

int main(int argc, char **argv)
{
    MPI_Init(&argc, &argv);
…
}

为什么MPI_Init使用指向argc和argv的指针而不是argv的值?

5 个答案:

答案 0 :(得分:19)

根据这里所说的答案:

Passing arguments via command line with MPI

大多数MPI实现将删除此函数中所有与mpirun相关的参数,以便在调用它之后,您可以解决命令行参数,就像它是正常的(非mpirun)命令执行一样。

即。之后

mpirun -np 10 myapp myparam1 myparam2

argc = 7(?)因为mpirun参数(它似乎也添加了一些)而且myparam1和myparam2的索引未知

但是

之后
MPI_Init(&argc, &argv)

argc = 3,myparam1位于argv [1],myparam2位于argv [2]

显然这不符合标准,但我已经在linux mpich上进行了测试,看起来确实如此。如果没有这种行为,将应用参数与mpirun参数区分开来将是非常困难的(不可能?)。

答案 1 :(得分:4)

我的猜测可能允许从命令行中删除mpi参数。 通过指针传递参数count允许从main点修改其值。

答案 2 :(得分:1)

我不是专家,但我相信简单的答案是,您正在使用的每个节点都在使用自己的代码副本。传递这些参数允许每个节点都可以访问argc和argv,即使它们没有通过命令行界面传递它们。 调用MPI_Init 的原始节点或主节点传递了这些参数。 MPI_Init也允许其他节点访问它们。

答案 3 :(得分:1)

根据OpenMPI手册页: MPI_Init(3) man page

  

Open MPI接受main的C / C ++ argc和argv参数,但既不修改,解释也不分发它们。

答案 4 :(得分:-3)

传递两个指针的开销较小。

相关问题