【发布时间】:2016-09-01 08:40:54
【问题描述】:
在我正在处理的具体问题中,安排在 3D 拓扑中的进程必须相互交换 3D 数组 A(:,:,:) 的部分。特别是,每个人都必须将给定数量的A 切片发送到六个定向方向上的进程(例如,A(nx-1:nx,:,:) 发送到正第一维的进程,A(1:3,:,:) 负一维,A(:,ny-3:ny,:)在正 y 维度,依此类推)。
为此,我将定义一组用于通信的子数组类型(通过MPI_TYPE_CREATE_SUBARRAY)(可能是MPI_NEIGHBOR_ALLTOALL,或其V 或W 扩展名)。问题是关于性能方面的更好选择:
- 定义 3 个子数组(每个维度一个),每个子数组实际上是一个 2D 数组,然后使通信沿每个维度在两个方向上发送不同数量的这些类型,或者
- 定义6个子数组(每个方向一个),每个子数组仍然是一个3D数组,然后让通信沿每个维度发送两个方向上两种类型的一个元素?
最后,更笼统地说,如标题所示,是定义更多“基本”MPI 派生数据类型并在通信中使用大于 1 的counts,还是定义“更大”类型并使用counts = 1 在通讯中?
【问题讨论】:
标签: performance mpi derived-types