MPI:在MPI

时间:2016-12-16 16:53:21

标签: c mpi

我需要一些如何一次运行一个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必须存在某种原子事件阻塞,对吗?

0 个答案:

没有答案