我在所有等级上都有一个相同长度的数组(让我们假设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]
Run Code Online (Sandbox Code Playgroud)
现在,所有处理器以下列数组结束的最有效方式(使用MPI-2)是什么
[1 2 2 3 3 1 3 2 2 1]
Run Code Online (Sandbox Code Playgroud)
这可以被认为是所有数组的总和(分布在所有等级上).性能很重要,因为我想在1K +内核上快速完成这项工作.
Hri*_*iev 10
这将是可行的MPI_Allreduce()
用MPI_SUM
或MPI_MAX
运营商.请参阅MPI_Allreduce的文档.它应该以给定体系结构的最佳方式之一实现.
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
Run Code Online (Sandbox Code Playgroud)
或者,如果内存不足,您可以使用就地操作,但这会影响性能:
MPI_Allreduce(MPI_IN_PLACE, arr_a, LEN, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1647 次 |
最近记录: |