MPI_SCATTER行的Fortran矩阵

时间:2010-03-22 21:14:20

标签: fortran mpi fortran90

通过行而不是列分散Fortran 90矩阵的最佳方法是什么?也就是说,假设我有一个矩阵a(4,50)并且我希望MPI_SCATTER它到两个进程,其中每个部分是alocal(2,50),其中rank 0有行1和2,而rank 1有3和4.现在,在C中,这很简单,因为数组是行主要的,但在Fortran 90中它们是列主要的。

我试图避免使用TRANSPOSE在散射之前翻转(即,将内存使用量加倍),并且我认为在MPI中必须有一种方法来执行此操作。它会是MPI_TYPE_VECTOR吗? MPI_TYPE_CREATE_SUBARRAY?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我已经查看了MPI reference并且没有明确的论据,但是如果你转到示例5.12,它们会显示如何使用MPI_Scatterv发送大量的整数和MPI_Gatherv