【发布时间】:2021-12-20 16:55:19
【问题描述】:
我有二维整数数组。我想将它处理到新数组。新数组的每个元素是具有给定边距的主数组元素邻居的平均值。简单的算法是:
double *buffer = new double[bufferSize];
for (int row = margin; row < arraySize - margin; row++)
for (int col = margin; col < arraySize - margin; col++) {
fillBuffer(row, col, buffer);
nextData[row][col] = average(buffer);
}
fillBuffer 函数:
void fillBuffer(int row, int col, double *buffer) {
int counter = 0;
for (int i = row - margin; i <= row + margin; i++)
for (int j = col - margin; j <= col + margin; j++)
buffer[counter++] = data[i][j];
}
我想使用 MPI 将其并行化。我想知道是否可以使用 MPI_Scatter 函数为每个等级拆分主数组,但每个等级仍然需要来自另一个等级的数据来计算数组块边缘的值。也许我可以将主阵列发送到所有等级,但如何管理它们只处理它们的一部分?那么如何将数组的计算元素与另一个需要它计算边缘元素的rank共享?
由于我是 MPI 新手,因此任何提示都可能会有所帮助。
【问题讨论】:
-
一种典型的方法是使用幽灵单元(有时称为光环),请参阅stackoverflow.com/questions/22033222/… 和答案中的链接。