说到 MPI,我是个菜鸟,但这没有任何意义。所以我在这里有一段使用 MPI_Recv 和 MPI_Send 的代码,但是在告诉我我的网格大小之后,事情会在第一个“我在这里成功”之前冻结。被发送到屏幕上。
我不明白为什么。第一个“我在这里成功”和输出到屏幕的最后一个内容之间实际上没有任何内容。
这是代码片段
void initMesh(double* &phi, double &h, double &riptime,
double &deltat, int &x, int &y, int &xlength, int &ylength, int &tlength, int &ttasks, int &jtasks, int &itasks, int &tstart, int &jstart, int &istart, int &myrank, int &cores) {
int tasksize, remains, tremains;
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &cores);
if (myrank == 0) {
cout << "How large would you like the mesh"
<<" to be in the x-direction?" << endl;
cin >> x;
cout << "How large would you like the mesh"
<< " to be in the y-direction?\n";
cin >> y;
cout << "What is the distance between each x/y spot h (equal distance)?\n";
cin >> h;
cout << "How much time would you like the program to run for?\n";
cin >> riptime;
cout << "What would you like the time-step for the analysis to be?\n";
cin >> deltat;
xlength = (int) (x/h);
ylength = (int) (y/h);
tlength = (int) (riptime/deltat);
cout << "Mesh x-points = " << xlength << endl;
cout << "Mesh y-points = " << ylength << endl;
cout << "Mesh time points = " << tlength << endl;
cout << "I made it here!";
}
//GOOD UP TO HERE!!! Then it freezes when I run the thing with 3 or more processors
for (int i=1; i < cores; i++) {
if (myrank==0) {
cout << "I made it here!";
MPI_Send(&xlength, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
}
else {
MPI_Recv(&xlength, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
cout << "I made it here!";
}
}
for (int i=1; i < cores; i++) {
if (myrank==0) {
MPI_Send(&ylength, 1, MPI_INT, i, 1, MPI_COMM_WORLD);
}
else {
MPI_Recv(&ylength, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
for (int i=1; i < cores; i++) {
if (myrank==0) {
MPI_Send(&tlength, 1, MPI_INT, i, 2, MPI_COMM_WORLD);
}
else {
MPI_Recv(&tlength, 1, MPI_INT, 0, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
cout << "I made it here!";
上面的部分代码就是现在的问题所在。