通过行而不是列分散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)矩阵如上所述怎么办?
答案 0 :(得分:1)
是的,MPI_TYPE_VECTOR和MPI_TYPE_CREATE_SUBARRAY是你想要的。前者是你的第一个问题,后者是你的第二个问题。如果你想让我为你写电话,请评论!
答案 1 :(得分:0)
大多数MPI数据传输调用都没有stride
参数吗?将它设置为数据类型的大小乘以矩阵的高度,然后你去...
我已经查看了MPI reference并且没有明确的论据,但是如果你转到示例5.12,它们会显示如何使用MPI_Scatterv
发送大量的整数和MPI_Gatherv
。