MPI_ERR_RANK:无效排名

时间:2017-09-07 07:59:39

标签: c mpi

我在C中运行以下程序时遇到了上述错误。该程序使用3-d超立方体拓扑来查找8元素数组的所有元素的总和。它使用MPI库。:

#moreActionsDropdown

通过调用

使用8个进程
#include<stdio.h>
#include<mpi.h>

int main(int argc, char **argv)
{
    int rank, n, src, dest;
    MPI_Init(&argc, &argv);
    MPI_Status status;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &n);
    int tag = 100;
    int receive;
    int array[8] = {10, 20, 30, 40, 50, 60, 70, 80};

    if (rank&1 == 1)
        MPI_Send(&array[rank], 1, MPI_INT, rank-1, tag, MPI_COMM_WORLD);
    else
    {
        MPI_Recv(&receive, 1, MPI_INT, rank+1, tag, MPI_COMM_WORLD, &status);
        array[rank] += receive;
        if (rank&2 == 1)
            MPI_Send(&array[rank], 1, MPI_INT, rank-2, tag, MPI_COMM_WORLD);
        else
        {
            MPI_Recv(&receive, 1, MPI_INT, rank+2, tag, MPI_COMM_WORLD, &status);
            array[rank] += receive;
            if (rank&4 == 1)
                MPI_Send(&array[rank], 1, MPI_INT, rank-4, tag, MPI_COMM_WORLD);
            else
            {
                MPI_Recv(&receive, 1, MPI_INT, rank+4, tag, MPI_COMM_WORLD, &status);
                array[rank] += receive;
                printf("\n%d \n", array[0]);
            }
        }
    }
    MPI_Finalize();
    return 0;
}

运行时错误消息:

mpirun -n 8 ./a.out

1 个答案:

答案 0 :(得分:1)

使用bitwise和。

的方式看起来像是一个错误

例如,它应该是

if (rank & 2)

而不是

if (rank&2 == 1)

rank&2是按位的,这意味着它的值为02(并且它永远不会是1