【发布时间】:2014-08-25 04:52:43
【问题描述】:
我一直在测试 mpi 如何与以下代码一起工作
#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char *argv[]){
r = 3.0;
int id;
int p;
int a[100];
for(int i=0;i<100;++i){a[i]=i+5; }
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
MPI_Comm_size(MPI_COMM_WORLD, &p);
cout<<id<<" "<<r<<" "<<a[id]<<endl;
MPI_Finalize();
cout<< "Hello world " <<endl;
return 0;
}
我使用 30 个内核来运行代码。但输出在 2 个方面令人惊讶,
- 这里question 说如果你在 MPI_Init() 之前初始化一个变量,除了 0 之外的其他进程将对初始化值视而不见,但在我的输出文件中,所有不同 id 的进程输出 r=3 和
a[i]的正确值,这是否意味着我可以在调用 MPI_Init() 之前初始化变量或数组,并且所有进程将共享该变量的相同值? - 输出中有很多行“Hello world”,这显然表明每个进程在调用 MPI_Finalize() 后仍在打印“Hello world”,这是为什么呢?
顺便说一下,我正在使用 mpicc 来编译代码。
【问题讨论】: