【问题标题】:Shared memory access control mechanism for processes created by MPIMPI创建的进程的共享内存访问控制机制
【发布时间】:2013-06-09 12:39:58
【问题描述】:

我有一个由多个进程使用的共享内存,这些进程是使用MPI 创建的。

现在我需要一种机制来控制对共享内存的访问。

我知道named semaphoreflock 机制可用于执行此操作,但只是想知道 MPI 是否为共享内存使用提供任何特殊锁定机制?

我正在 Linux 下使用 C 语言。

【问题讨论】:

    标签: c linux mpi shared-memory semaphore


    【解决方案1】:

    不,MPI 不提供对共享内存的任何支持。事实上,MPI 并不想支持共享内存。原因是使用 MPI 编写的程序应该扩展到大量处理器,而大量处理器永远不会共享内存。

    但是,少数处理器组(在该组大量处理器中)确实可能会发生并且经常发生共享内存。但是,为了利用该共享内存,使用了OpenMP

    OpenMP 非常简单。我强烈建议你学习它。

    【讨论】:

    • 感谢您的回答!我做了更多研究并遇到了 mpi.deino.net/mpi_functions/MPI_Win_lock.html ,我仍在努力(试图理解 MPI_win* 命令)。你认为这能解决我在这里遇到的问题吗?
    • 我通常不建议依靠 MPI 共享内存,因为那样你就不能在 Linux 集群或超级计算机等上实际运行该程序,而 MPI 是用于这些的。不过,这些功能似乎与您的需求相关。
    • +1。感谢您的建议,当然我需要做更多的研究才能开始实施。将尝试在此处更新我的发现。
    【解决方案2】:

    MPI 现在确实提供了对共享内存的支持(从 3.0 版开始)。您可以尝试查看从 MPI_WIN_ALLOCATE_SHARED (11.2.3) 开始的单向通信章节 (http://www.mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf)。要使用它,您必须确保您有一个支持它的实现。我知道 MPICH 和 Open MPI 的最新版本都可以工作。

    【讨论】:

    • 你能分享一些关于它是如何工作的例子吗?我阅读了您共享的 pdf,但不清楚如何使用 mpi_win* 函数。我也看到了mpi.deino.net/mpi_functions/MPI_Win_lock.html,但也没有太大帮助。我只需要跨进程共享一个int,任何进程都可以读取/写入该整数。还有 MPI 提供的这种类型的共享内存的访问控制机制吗?谢谢!
    • 要使用 RMA 在多个进程之间共享数据,您需要使用 MPI_Win_allocate 或 MPI_Win_allocate_shared 创建一个 MPI_Window。然后您可以使用 MPI_Put 和 MPI_Get 来访问数据。您需要围绕数据访问添加同步函数 MPI_Win_lock 和 MPI_Win_unlock 以确保准确同步。我不认为我可以在这里发布太多链接,但是如果您在 Google 上搜索“MPI RMA 教程”,您应该能够找到一些讨论如何使用它的幻灯片。
    • 需要注意的一点是 RMA 的共享内存版本是 MPI-3 的新版本,因此如果您正在查看教程和文档,请检查日期以查看它是否在谈论分布式内存 RMA ( 2.0 版之前)或分布式和共享内存 RMA(3.0 版)。 MPI 3.0 版刚刚于 2012 年 9 月发布,因此尚未普及。所有旧教程仍然适用,但您可能需要添加一些内容才能使用共享内存。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2019-12-15
    • 2016-09-11
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多