- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!