1

在許多分佈式計算應用程序中,您維護着一個分佈式對象數組。每個進程管理一組可獨自讀寫的對象,此外還管理一組只能讀取的對象(其內容由其他進程創作並經常接受)。在MPI中用於並行數字的分佈式陣列

這是非常基本的,很可能已經完成了數十次,直到現在爲止 - 例如,MPI。因此,我想有一種類似MPI的開源擴展,它提供了用於計算的分佈式數組的基本功能。

理想情況下,它將用C(++)編寫,並模仿官方的MPI標準界面風格。有人知道這樣的事嗎?謝謝。

回答

3

從我從您的問題中收集的信息中,您正在尋找允許問題空間的全局視圖(只讀)的機制,但每個進程都擁有一段數據的所有權(讀寫) 。

MPI是一個簡單的API規範,用於並行應用程序的進程間通信,並且它的任何實現都將在低於您要查找的級別上工作。

在HPC應用程序中,以您提到的方式執行數據分解是非常普遍的,MPI用於將共享數據同步到其他進程。然而,每個應用程序具有不同的共享模式和要求(有些人可能希望只與相鄰節點交換暈區,也可能使用非阻塞調用來重疊通信其他計算),以便通過利用問題域的知識來提高性能。

的事情是,使用MPI同步數據跨進程是簡單的,但實現它上面的層,以處理一般目的分發陣列同步即使用方便靈活地處理不同的使用情況可以是相當trickly。

道歉了那麼久才切入正題,但回答你的問題,AFAIK有沒有擴展到MPI或庫,可以有效地處理所有的情況,同時仍然容易使用比簡單地使用MPI。但是,可以在保持分佈式數據的MPI級別以上工作。例如:

  • 使用PGAS模型處理您的數據。然後,您可以使用諸如Global Arrays(支持C,C++,Fortran,Python的接口)或支持PGAS的語言(如UPCCo-Array Fortran)(即將納入Fortran標準)的庫。還有專門爲這種並行性而設計的語言,即, FortressChapelX10
  • 自己動手。例如,我的工作對使用MPI做最髒最累的工作,但通過提供應用程序域創建自定義的數據類型,以及暴露的API,如隱藏了複雜庫:
    • X_Create(MODE, t_X):實例化數組,由所有進程調用MODE指示當前進程是否需要讀寫或只讀訪問
    • X_Sync_start(t_X):非阻塞調用以在後臺啓動同步。
    • X_Sync_complete(t_X):數據是必需的。如果同步尚未完成,則阻止。
    • ...以及其他調用刪除數據以及執行可能需要MPI調用的特定於域的任務。

說實話,在大多數情況下,它往往是簡單的堅持基本的MPI或OpenMP或如果存在的話,可使用應用程序域編寫的並行求解器。這當然取決於你的要求。

2

對於密集陣列,請參閱全局陣列和元素(Google會爲您找到它們)。

對於稀疏陣列,請參閱PETSc。

我知道這是一個非常簡短的答案,但其他地方有太多的文檔來打擾重複它。