【问题标题】:MPI RMA create windows for ghost cells in a multidimensional arrayMPI RMA 为多维数组中的幽灵单元创建窗口
【发布时间】:2013-11-19 14:27:51
【问题描述】:

如果我有一个数组 A[100][100][100],我如何为六个边缘子数组(幽灵单元)创建一个远程内存访问窗口,尤其是 A[0][:][:] 和A[100][:][:]。 在 MPI-1 中,我创建了向量类型来发送/接收幽灵单元。 在 MPI-2 和 -3 中,我需要暴露整个阵列还是只暴露幽灵单元?当然,如果可能的话,后者会好很多。

【问题讨论】:

    标签: mpi mpi-rma


    【解决方案1】:

    MPI RMA 窗口是内存中的连续区域,出于性能原因,实现可能需要使用MPI_ALLOC_MEM 专门分配它们。 3-D 阵列的 6 条边中的 4 条边上的边界单元在内存中是不连续的。一些实现还可能要求窗口在页面或其他类型的边界上开始对齐。因此,您必须注册一个跨越整个数组的窗口。

    虽然技术上可以为 A[0][:][:] 和 A[99][:][:] 公开两个单独的窗口,并且这些窗口不会公开数组的任何其他部分,但这很简单A[:][0][:]、A[:][99][:] 等由于它们的不连续字符而无法实现。

    我建议您使用MPI_ALLOC_MEM(或MPI_Alloc_mem,如果您使用C/C++ 编程)分配A。然后,您可以在 MPI_GETMPI_PUT 中使用适当的矢量类型,以便轻松访问远程晕圈单元以及要复制的本地单元。

    【讨论】:

    • 感谢您的回复。如果我们将整个阵列暴露在 RMA 窗口中,当我们远程放置/获取幽灵单元时,我们无法在本地加载/存储阵列的另一部分,这很糟糕。我还是更喜欢使用 Isend/Irecv。
    • MPI-3 RMA 的语义比 MPI-2 RMA 宽松得多,有很多方法可以为所欲为。
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2012-11-15
    • 2017-04-02
    相关资源
    最近更新 更多