MPI Scatterv更改排名

时间:2017-01-06 16:53:41

标签: c++ mpi

我的目标是将一个矩阵(保存在向量中)分发给N个处理器。 由于分布式块是重叠的,我想使用MPI_Scatterv函数。

但是,在通话后每个等级都设置为零,之后我得到一个mpi错误代码11(SegFault)

为了测试,我打印了这些行列。在hello0,排名为0,1,2,3,但在hello2,它们变为0,0,0,0

TBH我不确定,我的代码总体上是多么正确,但是在注释掉MPI_Scatter函数调用时问题就消失了。

代码:

    int rank, size;
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    //Matrix is NxN
    int N = 16;

    //ghostlines(How many overlapping lines)
    int X = 1;

    //basic chunk size
    int rsize = (N * N / size);

    //bigger than need be
    std::vector<double> rbuff(2*rsize + 2 * X, 0);

    std::cout << "hallo0 "<<rank<<std::endl;

    //is filled with some random numbers before being sent
    std::vector<double> v1(N * N, X0);

    // For N=16, size = 4, X=1 
    // sizes = {65, 66, 66, 65} 
    // disps = {0, 62, 124, 186}
    MPI_Scatterv(v1.data(), sizes, disps, MPI_DOUBLE, &rbuff, sizes[rank], MPI_DOUBLE, 0, MPI_COMM_WORLD);

    std::cout << "hallo2 "<<rank<<std::endl;

0 个答案:

没有答案