gpt4 book ai didi

c - MPI_Init 只能由一个线程调用

转载 作者:太空狗 更新时间:2023-10-29 16:11:35 26 4
gpt4 key购买 nike

ref MPI_Init 的声明:

This routine must be called by one thread only. That thread is called the main thread and must be the thread that calls MPI_Finalize.

如何做到这一点?我的意思是我见过的每个例子看起来都像 this在我的代码中,我尝试了:

MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
bool mpiroot = (mpirank == 0);
if(mpiroot)
MPI_Init(&argc, &argv);

但是我得到了:

Attempting to use an MPI routine before initializing MPICH

但是,请注意这会正常工作,如果我像示例中那样保留它,我只需要重新检查,因为我的代码失败了 here .


我在想,因为我们调用了 mpiexec -n 4 ./test,所以会产生 4 个进程,因此它们都会调用 MPI_Init。我只是在 main() 的第一行打印了一些东西,它们的打印次数与进程数一样多。

最佳答案

MPI_Init 必须是您的 MPI 程序调用的第一个 MPI 函数。它必须被每个进程调用。请注意,进程与线程不同!如果您继续从进程中生成线程,这些线程不得再次调用 MPI_Init

所以你的程序应该是这样的:

 int main(int argc, char **argv) 
{
MPI_Init(&argc, &argv);
int mpirank;
MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
// No more calls to MPI_Init in here
...
MPI_Finalize();
}

关于c - MPI_Init 只能由一个线程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31833664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com