MPI中

时间:2018-04-16 12:54:26

标签: mpi

执行MPI_Recv时,我收到以下错误输出:

MPI_Recv(buf=0x000000D62C56FC60, count=1, MPI_INT, src=3, tag=0, MPI_COMM_WORLD, status=0x0000000000000001) failed
Message truncated; 8 bytes received but buffer size is 4

我的函数需要找到ind位置具有最大元素的行号。

我的功能代码如下:

int find_row(Matr matr, int ind)
{
    int max = ind;
    for (int i = ind + 1 + CurP; i < N; i += Pnum)
        if (matr[i][ind] > matr[max][ind])
            max = i;

    int ans = max;
    if (CurP != 0)
    {
        MPI_Send(&max, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
        MPI_Barrier(MPI_COMM_WORLD);
    }
    else
    {
        MPI_Barrier(MPI_COMM_WORLD);
        for (int i = 1; i < Pnum; i++)
        {
            MPI_Recv(&max, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
            printf("max %d %Lf! Process %d;\n", max, matr[max][ind], i);
            fflush(stdout);
            if (matr[max][ind] > matr[ans][ind])
                ans = max;
        }
    }
    return ans;
}

Matr是以下类型定义:typedef vector<vector<long double> >& Matr;

CurPPnum按以下方式初始化:

MPI_Comm_size(MPI_COMM_WORLD, &Pnum);
MPI_Comm_rank(MPI_COMM_WORLD, &CurP);

请帮我解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

这是我的失败。我从代码的另一部分中的所有进程执行MPI_Bcast。