如何在共享内存模式(如OpenMP)中运行MPI-3.0


14

我正在并行化代码以数字方式求解5维人口平衡模型。当前,我在FORTRAN中有一个很好的MPICH2并行化代码,但是随着我们增加参数值,数组变得太大而无法在分布式内存模式下运行。

我可以访问具有15个节点的群集,其中每个节点具有两个8个核心CPU和128GB RAM。我想在共享内存模式下以MPI-3.0编写运行程序,以便每个进程都不会生成每个数组的自己的副本。

在集群上运行任何东西之前,必须在运行Ubuntu的桌面上对其进行测试。它实质上是集群的一个刀片,因为它具有两个8个核心CPU和128 GB的RAM。我将在上面编写和测试我的代码,因此请针对在Ubuntu计算机上运行程序调整您的响应。

我已经读到有一种方法可以在共享内存模式(如OpenMP)而不是其默认的分布式内存模式下运行MPI-3.0。

问题:

  1. 我将如何更改我的代码?我是否需要添加对其他MPI函数的调用MPI_WIN_ALLOCATE

  2. 如何编译我的代码以在共享内存模式下运行MPI-3.0?如果跨越多个节点,情况会有所不同吗?

请提供示例编译脚本。我也只有GNU编译器。我使用的群集不支持Intel编译器。


1
是的,您应该能够在共享内存系统上运行MPI。但是,它的实际编程方式将是相同的。对于共享和分布式内存系统,您的代码应该相同。唯一的区别是运行方式。
NoseKnows15年

此外,尽管我尚未对此进行测试,但我相信您应该能够使用该命令mpiexec -n 8 /path/to/application来运行您的代码,以使您的计算机伪造为它具有8个不同的节点。
NoseKnows15年

我已经在共享内存系统上运行了它,但是我希望计算核心共享RAM,例如在OpenMP中。我的某些阵列为6 GB,因此我需要每个节点上的所有内核都可以在共享内存模式下运行。
富兰克林·贝滕

2
好吧,这是一个研究项目。因此,我需要扩大问题的规模。我已经有可用的代码,因此防止扩展的唯一原因是所需的内存。我从MPI会议上看过一些文档和Powerpoint,它们暗示MPI-3.0可以与在单面通信类别下添加的新呼叫功能共享内存。像MPI_WIN_ALLOCATE_SHARE之类的功能
Franklin Betten

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/...
富兰克林贝滕

Answers:


0

我还在堆栈溢出中找到了此链接。我发誓我一直在寻找像我这样的问题,但是似乎在堆栈溢出时搜索问题的最好方法是开始提出问题,并且它会建议类似的帖子。

无论如何,这里的链接实际上表明您可以在共享内存模式(如openmp)中运行MPI3.0 +。我发现还有其他来源也可以建议您,但有些可以说明您可以但不解释如何或提供资源解决该问题。

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

遵循此链接中此处给出的建议后,我遇到了将USE'mpi_f08'放在我的代码顶部的问题。我正在使用gfortran-4.8,它目前显然没有对USE mpi_f08的足够的FORTRAN2008支持。此链接中的某个人可能正在使用intel fortran 2008编译器。您可以使用USE mpi,它可以很好地涵盖Fortran2003。但是,我不认为Fortran 2003具有使用远程内存访问功能所需的Type()函数,例如MPI_WIN_ALLOCATE_SHARED,因此如果没有FORTRAN2008,则不能使用它们。但是我确实没有足够的资源可以肯定地说一个事实,但是我发现的确表明了这一点。


1
您可以将MPI_Win_allocate_shared与所有三个Fortran接口一起使用。此外,您可以使用Fortran 2003 ISO_C_BINDING和C接口编写自己的代码。
杰夫

请告诉我为什么需要Type()才能使用Fortran的RMA?我知道没有这种限制。RMA已与F77一起使用多年。
杰夫,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.