通过MPI\U Bcast发送列

通过MPI\U Bcast发送列,c,mpi,broadcast,C,Mpi,Broadcast,我正在解决一个问题,其中一个进程对一列进行一些计算,我将该列保存在一个临时数组中,并使用MPI_Bcast将其广播给所有其他进程,但最终总是在接收端获取数组中的所有零 下面是我正在使用的代码: //nProc = no of processors; //helperA = 2D Array i.e. helperA[size][size] // colK = 1D Array i.e. colK[size] for (int k = 0; k < size; ++k) { if

我正在解决一个问题,其中一个进程对一列进行一些计算,我将该列保存在一个临时数组中,并使用MPI_Bcast将其广播给所有其他进程,但最终总是在接收端获取数组中的所有零

下面是我正在使用的代码:

//nProc = no of processors;
//helperA = 2D Array i.e. helperA[size][size]
// colK = 1D Array i.e. colK[size]

for (int k = 0; k < size; ++k) {
    if (k % nProc == rank) {
                    // One of the process will do this calculation
        int temp = 0;
        for (int j = k + 1; j < size; ++j) {
            helperA[j][k] = helperA[j][k]/helperA[k][k];
            colK[temp++] = helperA[j][k];
        }
    }

    MPI_Bcast(colK, size - k - 1, MPI_DOUBLE, rank, MPI_COMM_WORLD);    
    // After this other process should get the colK updated with the calculation

    for (int i = k + 1; i < size; ++i) {
        if (i % nProc == rank) {
            int temp = 0;
            for (int j = k + 1; j < size; ++j) {
                                    // Here colK is always zero
                printf("%d %f \n", rank, colK[temp]);
                helperA[j][i] = helperA[j][i] - (colK[temp++] * helperA[k][i]);
            }
        }
    }
}
//nProc=处理器数量;
//helperA=2D数组,即helperA[size][size]
//colK=1D数组,即colK[大小]
对于(int k=0;k
我不确定我在这里做错了什么。请提供任何帮助/建议。

(我真的不喜欢通过文本框调试代码,因此我假设您在发送前已经进行了基本检查,以确保
colK
中确实有数据,并且
size-k-1
在所有级别上都是正确的值。)


传递给
MPI\u BCAST
调用的秩值应该是“根”进程的秩。即,具有要广播的所有数据的处理。对于所有调用进程,此参数必须相同。您的代码似乎通过了每个调用进程的排名,因此每个人都将尝试与不同的根进程通信。

谢谢。是的,我已经做了错误检查,数据是他们的,但是你的观点是正确的。如果是这样的话,我会检查并更新你。事实就是这样:)非常感谢你的帮助!!