【发布时间】:2018-04-25 12:34:40
【问题描述】:
我已经将矩阵按块划分并使用 Fox 算法将其相乘。
当结果矩阵由不同进程中的块存储时,如何将结果矩阵打印到屏幕上,而不将这些块发送回等级为 0 的进程?
例如。
乘法后我得到:
Block A:
83 64
112 76
Block B:
118 44
152 34
Block C:
54 68
67 56
Block D:
89 85
114 68
Entire matrix should look like:
83 64 118 44
112 76 152 34
54 68 89 85
67 56 114 68
到目前为止,我已经完成了:
发送两个包含一行的块并将其打印到屏幕上。但是是否可以在不发送多个块来处理 0 的情况下打印整个结果矩阵?
// Function for gathering the result matrix
// pCBlock - one block containing part of entire result matrix
// Size - matrix dimension
// BlockSize - block dimension
void ResultCollection(double* pCblock, int Size,
int BlockSize) {
double * pResultRow = new double[Size*BlockSize];
for (int i = 0; i<BlockSize; i++) {
MPI_Gather(&pCblock[i*BlockSize], BlockSize, MPI_DOUBLE,
&pResultRow[i*Size], BlockSize, MPI_DOUBLE, 0, RowComm);
}
//print two matrix rows from two blocks
delete[] pResultRow;
}
这无济于事
(Ordering Output in MPI)
因为对于矩阵输出,我需要打印的不是整个块A,而不是B,而不是C,而不是D,
而是
来自A 的一行(在进程0 中),来自B 的一行(来自进程1),
来自A 的一行(在进程0 中),来自B 的一行(来自进程1),
来自C 的一行(来自进程2),来自D 的一行(来自进程3)
等等。
【问题讨论】:
-
Ordering Output in MPI 的可能重复项。这个问题听起来可能有点不同,但答案很好地解释了为什么您的问题的答案基本上只是否。
标签: c matrix parallel-processing mpi