我有一个并行编程类的并行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