【发布时间】:2014-09-27 08:55:04
【问题描述】:
我的每个进程都有一个值数组 v 和一个进程 ID 数组 pid 大小相同。 pid[i] 指定将项目 v[i] 发送到哪个进程。
我需要实现一个分散操作(当然还有相应的聚集操作)。
进程 ID 数组很可能只包含(但不完全是)相邻进程(在笛卡尔拓扑的意义上),并且大多数时候只包含它自己的进程 ID。 (MPI_Comm_rank() 返回的那个)。此外,地图只初始化一次,并且在我的整个计算过程中保持不变,而分散/收集操作经常被调用。
我自己的实现已经完成了一半,从某种值开始,以便将相邻元素发送到同一个进程,然后再发送很多 ISend 和 IRecv。现在我遇到了MPI_Alltoallv 函数,我想知道是我自己编码更好还是应该使用MPI 内部函数。有任何人对此有经验吗?
【问题讨论】: