我在所有级别上都有一个相同长度的数组(假设10)。数组中的某些值包含处理器的级别。例如..。
Proc 1: [1 0 0 0 0 1 0 0 0 1]
Proc 2: [0 2 2 0 0 0 0 2 2 0]
Proc 3: [0 0 0 3 3 0 3 0 0 0]现在,让所有处理器以以下数组结尾的最有效的方法(使用MPI-2)是什么?
[1 2 2 3 3 1 3 2 2 1]它可以被认为是所有数组(分布在所有级别上)的总和。性能很重要,因为我想在1K+核上快速完成这个任务。
发布于 2012-06-04 18:52:03
这可以由MPI_Allreduce()使用MPI_SUM或MPI_MAX运算符完成。请参阅全减的文档。对于给定的体系结构,它应该以一种可能的最佳方式实现。
int arr_a[LEN], arr_b[LEN];
...
// Fill in arr_a
MPI_Allreduce(arr_a, arr_b, LEN, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
// Result is now in arr_b或者,如果内存不足,可以使用就地操作,但这会影响性能:
MPI_Allreduce(MPI_IN_PLACE, arr_a, LEN, MPI_INT, MPI_SUM, MPI_COMM_WORLD);https://stackoverflow.com/questions/10885970
复制相似问题