我有一個並行編程類的並行I/O項目,我必須實現派生數據類型。我沒有清楚地理解darray和子陣列之間的區別。 darray可以從動態分配的數組中派生嗎?主要區別是什麼?darray和mpi中的子數組有什麼區別?
3
A
回答
5
子數組允許您描述更大的多維數組的單個塊/切片。如果每個MPI任務都有一個大型全局數組的單個片/塊(或者如果您正在任務之間傳遞本地數組的塊),那麼MPI_Type_create_subarray是要走的路;語法非常簡單。爲了解決像常規網格上的PDE這樣的事情,這種分佈非常普遍 - 每個處理器都有自己的全局網格塊,儘可能多的網格單元是本地的。在MPI-IO的情況下,每個MPI任務都會創建一個與其全局數組相對應的子數組,並使用它作爲視圖將其部分域讀入/寫出到包含所有數據的文件中。
MPI_Type_create_darray允許比單個塊更復雜的分佈式陣列模式。對於分佈式線性代數計算,分佈某些矩陣可能是有意義的 - 比方說,如果有5 mpi的任務,任務0獲得第0,5,10行...和任務1獲得第1,6,6,8行, 11,等等。其他矩陣可能按列分佈;或者您可以將它們分佈在行,列或兩者的塊中。這些數據分佈與命運不佳的HPF中的數據分佈相同,因此您可以通過這種方式逐個數組地定義數組的數據並行佈局。
我自己曾經使用MPI_Type_create_darray的唯一方法,也是我見過它的唯一方法,就是創建一個大矩陣的MPI文件視圖,以便以block-cyclic的形式分配數據,這樣可以讀取該文件,然後使用scalapack在分佈式矩陣上執行並行線性代數運算。
相關問題
- 1. MPI和OpenMP有什麼區別?
- 2. BSP和MPI有什麼區別?
- 3. IEnumerable和數組有什麼區別?
- 4. int和char數組有什麼區別?
- 5. malloc和數組有什麼區別
- 6. 數組和ArrayList有什麼區別?
- 7. 字典和數組有什麼區別?
- 8. 數組和散列有什麼區別?
- 9. Smalltalk中的數組和字面數組有什麼區別?
- 10. 子類和子類有什麼區別?
- 11. 有什麼區別`和$(Bash中有什麼區別?
- 12. 插座和襪子有什麼區別?
- 13. 帖子和頁面有什麼區別
- 14. 「原子」和「cstdatomic」有什麼區別?
- 15. 叉子和線程有什麼區別?
- 16. Firebase - ref和孩子有什麼區別?
- 17. 函子和「泛型」有什麼區別
- 18. 鉤子和回調有什麼區別?
- 19. 這些例子(*和&)有什麼區別?
- 20. CPU和芯片組有什麼區別?
- 21. 元組和compress_pair有什麼區別?
- 22. 組件和指令有什麼區別?
- 23. 組件和涼亭有什麼區別?
- 24. LAM MPI和OpenMPI的區別
- 25. 字符串和Javascript中的字符數組有什麼區別?
- 26. Rank和指定數組中的[,]有什麼區別?
- 27. C中的靜態和動態數組有什麼區別?
- 28. ndarray和numpy中的數組有什麼區別?
- 29. ruby中的數組和範圍有什麼區別?
- 30. java和C++中的多維數組有什麼區別?
很好的解釋!謝謝! – onatm 2012-04-01 19:45:31