ona*_*atm 3 io mpi derived-types
我有一个并行编程类的并行I/O项目,我必须实现派生数据类型.我没有清楚地理解darray和子阵列之间的区别.darray可以从动态分配的数组派生吗?主要区别是什么?
子阵列允许您描述更大的多维数组的单个块/切片.如果每个MPI任务都有一个大型全局数组的单个切片/块,(或者如果您在任务之间传递本地数组的块),则MPI_Type_create_subarray是要走的路; 语法非常简单.为了解决常规网格上的PDE问题,这种分布非常普遍 - 每个处理器都有自己的全局网格块,尽可能多的网格单元是本地的.在MPI-IO的情况下,每个MPI任务将创建一个与其全局数组相对应的子数组,并使用该数据作为视图将其部分域读入/写入包含所有数据的文件.
MPI_Type_create_darray允许比单块每个更复杂的分布式阵列模式.对于分布式线性代数计算,逐行分配一些矩阵可能是有意义的 - 比方说,如果有5个mpi任务,任务0得到第0行,第5行,第10行......任务1得到第1,6行第1行, 11,依此类推.其他矩阵可能按列分布; 或者您可以将它们分布在行,列或两者中.这些数据分布与命运多HP的HPF中的数据分布相同,这使您可以逐个数组地以这种方式定义数组的数据并行布局.
我自己使用MPI_Type_create_darray的唯一方法,也是我见过它的唯一方法,就是创建一个大矩阵的MPI文件视图,以块循环的方式分配数据,这样就可以了读取文件然后使用scalapack在分布式矩阵上进行并行线性代数运算.