[問題] mpi4py矩陣如何有效率的合併?

作者: dogs1231992 (河豚)   2018-12-20 05:16:47
各位前輩們大家好,小弟最近遇到一個問題
我要從一個檔案內讀取10000個分子模擬的快照
每個快照都包含66個原子,其中,每個原子都有7個數值是我想要讀取的
因此矩陣大小會是 [10000,66,7]
由於資料量很大,如果用一個CPU讀取的話要花費約480秒左右
因此我最近改用mpi4py來寫,使用64個CPU讀取,只要7秒左右
最近遇到的問題是,我在程式碼內創造一個Data_properties矩陣
Data_properties = np.zeros((Number_images,Max_number_atoms,7))
然後要求每個CPU各自讀取一個片段 (第一個CPU讀取0-156,第二個CPU讀取157-312...)
在我輸出數值時我發現,64個CPU裡面各自包含一個名為Data_properties的矩陣
並不是共用同一個矩陣,因此總共有64個矩陣
基於上面的讀取指令,每個矩陣都只有一小片段是正確的
(例如:第一個CPU只有0-156是有數值的,其他部分都是0)
目前想到的方法是再用一個矩陣來讀取這64個矩陣,把數值正確的部分提取出來
但是這樣又會增加運算量 (目前更在乎的是後面要處理數據時會有非常龐大的運算需求)
因此想請問是否有比較好的方法來執行上述的過程呢?
使用"from multiprocessing import Pool"模組是否能解決此類問題呢?
還希望有跑過模擬的鄉民們能幫小弟解惑,謝謝 :)
作者: Solccp (斌斌)   2018-12-20 08:48:00
關鍵字: MPI_Gather
作者: yoyololicon (蘿莉大好)   2018-12-20 08:51:00
這資料感覺也沒很大,你讀取是怎麼讀的?不應該這麼久
作者: sma1033 (死馬)   2018-12-20 13:13:00
我也覺得這資料量沒很大,速度慢應賅是其他的問題

Links booklink

Contact Us: admin [ a t ] ucptt.com