4

按行而不是列分散 Fortran 90 矩阵的最佳方法是什么?也就是说,假设我有一个矩阵 a(4,50),我想将 MPI_SCATTER 分配到两个进程上,其中每个部分都是 alocal(2,50),其中等级 0 有第 1 行和第 2 行,等级 1 有 3 和4. 现在,在 C 中,这很简单,因为数组是行优先的,但在 Fortran 90 中,它们是列优先的。

我试图避免在散射之前使用 TRANSPOSE 来翻转 a(即,内存使用量加倍),我认为 MPI 中必须有一种方法可以做到这一点。会是 MPI_TYPE_VECTOR 吗?MPI_TYPE_CREATE_SUBARRAY?

同样,如果我有一个 3d 数组 b(4,50,3) 并且我想要两个分散的 blocal(2,50,3) 矩阵,如上分布?

4

2 回答 2

1

是的,MPI_TYPE_VECTOR 和 MPI_TYPE_CREATE_SUBARRAY 是你想要的。前者用于您的第一个问题,后者用于您的第二个问题。如果你想让我为你写电话,请发表评论!

于 2010-03-23T09:38:02.737 回答
0

大多数 MPI 数据传输调用没有stride参数吗?将其设置为数据类型的大小乘以矩阵的高度,然后就可以了...

我查看了MPI 参考并没有明确的论据,但是如果您转到示例 5.12,它们会显示如何使用MPI_Scattervand发送跨步整数MPI_Gatherv

于 2010-03-23T09:41:30.363 回答