gsa*_*ras 3 c distributed-computing cluster-computing mpi mpich
MPI_Init 的引用指出:
此例程只能由一个线程调用。该线程称为主线程,并且必须是调用MPI_Finalize的线程。
这该怎么做?我的意思是,我看到的每个示例都是这样,并且在我的代码中,我尝试过:
MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
bool mpiroot = (mpirank == 0);
if(mpiroot)
MPI_Init(&argc, &argv);
Run Code Online (Sandbox Code Playgroud)
但是我得到了:
Attempting to use an MPI routine before initializing MPICH
Run Code Online (Sandbox Code Playgroud)
但是,请注意,如果我将其保留为示例中的代码,则可以正常工作,因为我的代码在此处失败,因此只需重新检查即可。
我在想,因为我们调用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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |