如果我有一个数组 A[100][100][100],我如何为六个边缘子数组(幽灵单元)创建一个远程内存访问窗口,尤其是 A[0][:][:] 和 A[100 ][:][:]。在 MPI-1 中,我创建了向量类型来发送/接收幽灵单元。在 MPI-2 和 -3 中,我需要暴露整个阵列还是只暴露幽灵单元?当然,如果可能的话,后者会好得多。
问问题
274 次
1 回答
2
MPI RMA 窗口是内存中的连续区域,出于性能原因,实现可能需要使用MPI_ALLOC_MEM
. 3-D 阵列的 6 条边中的 4 条边上的边界单元在内存中是不连续的。一些实现还可能要求窗口在页面或其他类型的边界上开始对齐。因此,您必须注册一个跨越整个数组的窗口。
虽然技术上可以为 A[0][:][:] 和 A[99][:][:] 公开两个单独的窗口,并且这些窗口不会公开数组的任何其他部分,但这对于A[:][0][:]、A[:][99][:] 等等,因为它们具有不连续的特性。
我建议您A
使用MPI_ALLOC_MEM
(或者MPI_Alloc_mem
如果您使用 C/C++ 编程)进行分配。然后,您可以使用适当的向量类型,MPI_GET
以便MPI_PUT
轻松访问远程光环单元以及要复制的本地单元。
于 2013-11-07T21:37:55.313 回答