我需要一些如何一次运行一个MPI节点。我正在打印与每个MPI节点特定的阵列相关的信息。我根据排名为每个MPI节点格式化了print语句。但是,我无法打印出所有数组而不会出现死锁或打印格式的混乱,因为所有节点都会立即打印它们的语句。
我还是MPI的新手,我现在唯一知道的功能是MPI Barrier。这是我的代码;我一直在考虑它并将MPI屏障放在不同的地方......但是,就像我说的那样,在打印出一个或两个数组之后,我似乎只会遇到死锁,或者只是随机打印语句。
在当前配置中,我以随机顺序获取打印语句;但是,没有死锁(将底部屏障向上移动两行到for循环内部,从第4行开始会生成一个或两个格式正确的打印语句,但会导致死锁):
if (debug == 1) {
if (iterations == 0) {
MPI_Barrier(MPI_COMM_WORLD);
for (j = 0; j < mpi_nodes; j++) {
if (rank == j) {
printf("\n\nrank %d\n", j);
printf("\n");
for (i = 0; i < m2; i++) {
j = i / m;
k = i % m;
if (k == 0) {
printf("\n"); //
}
printf("%1.f ", f[i]);
}
printf("\n");
}
}
printf("\n reached.");
MPI_Barrier(MPI_COMM_WORLD);
printf("\n passed.\n");
}
}
我如何实现MPI命令,使得在第5行的等级测试之后的打印循环为每个MPI节点运行,一次一个(并且优选地从等级0到n的顺序)。
要使代码运行,它只需要数组,
int m = 5;
int m2 = m*m;
double f[m2] = etc.
但我认为这只是一个知识问题...... MPI必须存在某种原子事件阻塞,对吗?