MPI2 允许我们创建派生数据类型并通过编写发送它们
call mpi_type_create_indexed_block(size,1,dspl_send,rtype,DerType,ierr)
call mpi_send(data,1,DerType,jRank,20,comm,ierr)
通过这样做,数据(N)的位置dspl_send由MPI库发送。
现在,对于矩阵data(M,N),我们可以通过以下代码发送它的位置:
call mpi_type_create_indexed_block(size,M,dspl_send,rtype,DerTypeM,ierr)
call mpi_send(data,1,DerTypeM,jRank,20,comm,ierr)
即发送条目data(i, dspl_send(j))。
我的问题是关于 1 在随后的 mpi_send 中的作用。它必须始终为 1 吗?其他尺寸可能吗?MPI 派生的数据类型在 Internet 上的许多文档中都有很好的解释,但是 send/recv 中的大小始终为1,而没有提及是否允许其他大小以及如何使用它。
如果我们想使用大小 M 在调用之间变化的矩阵data(M,N),我们是否需要在调用时始终创建派生数据类型?是否无法使用DerType发送矩阵data(M,N)或data(N,M)?