2015-10-15 66 views
2

我有一个在C++中使用MPI(使用端口)的客户端服务器系统。它的运行良好。正在做我打算做的事情。使用互联通讯器进行远程内存访问

我最近读了关于使用MPI_Win内存窗口的MPI中的远程内存访问(RMA)。我想知道是否可以创建一个类似于使用RMA的客户端服务器的系统。 (可以说,访问同一块内存的客户端之间的同步是以某种方式处理的。)

我想在服务器上创建一个窗口并使客户端通过此窗口访问内存。

有人已经有这种模式的一些经验?欢迎任何评论。

+0

前段时间我写了[这个超级简单的例子](http://stackoverflow.com/a/32646142/5239503),它使用了单向的MPI通信。虽然这使用了一个内部沟通者,但这可能会让你对这些内容有所了解。 – Gilles

回答

1

RMA窗口的创建是一个集体操作,涉及intracommunicator的进程组。要使其与交流通讯器一起工作,您必须先通过MPI_INTERCOMM_MERGE合并两个处理组,然后使用生成的intracommunicator进行RMA操作。请注意,这样做可以消除部分互通器提供的绝缘好处。

+0

在MPICH和OpenMPI的文档中,没有提到通信是否只应该是intraCommunicator。它只是另一个MPI_Comm。 @Hristo – AdityaG

+2

所以用[MPI标准](http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf),第11.2节:_“MPI提供了以下窗口初始化函数:'MPI_WIN_CREATE','MPI_WIN_ALLOCATE','MPI_WIN_ALLOCATE_SHARED'和'MPI_WIN_CREATE_DYNAMIC',**,这些是内部通讯器上的集体** ** _ –

+1

我大量参与了与RMA有关的MPI论坛,@HristoIliev完全正确。 – Jeff