多个MPI进程使用相同的数组指针

时间:2018-07-20 20:38:49

标签: c arrays pointers multidimensional-array mpi

我有以下标准方法来创建连续的2D数组(双精度)

double** array2D (int r, int c)
{
    /*Creates a 2D array*/
    double* B = (double *)malloc(r*c* sizeof(double));
    assert(NULL != B);
    double** A = (double **)malloc(sizeof(double *)*r);
    assert(A);
    A[0] = B;
    for (int i=1; i<=r; i++) A[i] = A[i-1] + c;
    return A;
}

使用此函数,我将为MPI中的不同等级进程创建不同长度的数组。这是代码(numtasks是进程总数,taskid是进程等级,MASTER被定义为0):

if (taskid==numtasks-1)
    {
        u_old = array2D(rend+1,c);
        u_new = array2D(rend+1,c);
        MPI_Recv(&u_old[0][0], (rend+1)*c, MPI_DOUBLE, MASTER, 75, MPI_COMM_WORLD, &status);
    }   
    else if(taskid!=0 && taskid!=numtasks-1)
    {
        u_old = array2D(rend+2,c);
        u_new = array2D(rend+2,c);
        MPI_Recv(&u_old[0][0], (rend+2)*c, MPI_DOUBLE, MASTER, 75, MPI_COMM_WORLD, &status);
    }

说,当我用4个进程运行这部分代码时,else if块由进程1和2运行。在使用Arm DDT调试器时,我看到u_old和{ {1}}的进程1和2具有相同的内存地址(我没想到!),而进程3的u_new和{{1}具有不同的地址}。如何使进程1和2分别为各自的u_oldu_new具有不同的存储位置?

0 个答案:

没有答案