这是一个相当基础的MPI问题,但我无法理解它。我有一个调用另一个使用MPI的函数的主函数。我希望主函数以串行方式执行,而其他函数以并行方式执行。我的代码如下:
int main (int argc, char *argv[])
{
//some serial code goes here
parallel_function(arg1, arg2);
//some more serial code goes here
}
void parallel_function(int arg1, int arg2)
{
//init MPI and do some stuff in parallel
MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
//now do some parallel stuff
//....
//finalize to end MPI??
MPI_Finalize();
}
我的代码运行良好并得到了预期的输出,但问题是主函数也在单独的进程中运行,因此串行代码执行了多次。我不知道它为什么会运行多次,因为我甚至还没有调用MPI_Init(如果在调用parallel_function之前在main中printf,我会看到多个printf)
我该如何在完成后停止程序并行运行?
感谢任何回复!
main
函数之前运行。这仅在MPI调用必须在此类构造函数中避免时才相关,即使MPI_Init
是main
函数的第一行。 - suszterpattmpirun
或mpiexec
的情况下运行MPI程序,并且可以通过任何其他系统传递消息(意思是MPI_Send(.. /特定于IP地址/)和MPI_Recv(/特定于IP/)? - programmerMPI_Init
之前应尽可能少地执行操作,包括加载外部dll。至于你的第二个问题,我不知道,你需要查看这些函数的规范,以确定你想要做的是否可行。如果你有一个新问题,最好将其作为一个新问题发布,而不是作为旧问题或答案的评论。 - Chris