2015-10-15 67 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