我有一個Python應用程序,需要加載相同的大 陣列(〜4 GB),並做一個完美的並行功能 該陣列的塊。該陣列開始保存到磁盤。Python混合多處理/在同一節點共享內存的MPI
我通常與 類似,比方說,10個節點,每個節點都具有8個 計算核心和大約32GB總RAM運行集羣計算機上此應用程序。
最簡單的方法(不起作用)是做 n = 80 mpi4py。它不起作用的原因是每個MPI內核都會加載4GB的地圖,這將耗盡 的32GB內存,導致MemoryError
。
另一種是rank=0
是裝入 4GB的陣中唯一的過程,它農場出數組的塊到MPI核其餘 - 但這種方法是因爲網絡 帶寬問題慢。
最好的辦法是,如果僅1芯在每個節點負載 4GB的陣列和該陣列由可作爲共享存儲器 (通過multiprocessing
?)對於每個 節點上剩餘的7根芯。
我該如何做到這一點?我如何讓MPI瞭解節點 並使其與multiprocessing
協調?
雖然我還沒有嘗試過,這已經指着我說: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Array ,以此來與'多共享內存' – dbrane
這有效地模擬了共享內存,但是它比內存映射慢,因爲它依賴於具有代理功能的同步過程來讀取並從其正確讀取(這不是通信高效的)。另外,如果你需要線性代數,你將無法使用高效的numpy計算。 –