mparray中的darray和subarray有什么区别?

| 我有一个用于并行编程类的并行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、11等。其他矩阵可能会按列分布。或者您可以将它们分布在行,列或两者的块中。这些数据分布与命运不佳的HPF中的数据分布相同,后者可让您以这种方式在逐个阵列的基础上定义阵列的数据并行布局。 我自己曾经使用过MPI_Type_create_darray的唯一方法,而且实际上我曾经见过的唯一方法是创建一个大矩阵的MPI文件视图,以块循环的方式分配数据,这样可以读入文件,然后使用scalapack在分布式矩阵上进行并行线性代数运算。

要回复问题请先登录注册