MPI中派生数据类型的范围

时间:2017-01-12 11:04:20

标签: c parallel-processing mpi

我正在尝试为2D子矩阵创建数据类型并使用MPI处理它。到目前为止我发现的是this问题。答案完全涵盖了我的问题。我唯一无法理解的是如何计算子数组数据类型的范围。任何解释都会非常有用。

以下是从该问题的答案中复制的代码和声明:

MPI_Datatype newtype;
int sizes[2]    = {6,6};  /* size of global array */
int subsizes[2] = {3,3};  /* size of sub-region */
int starts[2]   = {0,0};  /* let's say we're looking at region "0",
                             which begins at index [0,0] */

MPI_Type_create_subarray(2, sizes, subsizes, starts, MPI_ORDER_C, MPI_INT, &newtype);
MPI_Type_commit(&newtype);
  

我们不能只使用这些类型的MPI_Scatter()(甚至是scatterv),因为这些类型的范围是16个整数;

1 个答案:

答案 0 :(得分:0)

事实上,我认为这些整数有36个整数而不是16个?在任何情况下,你都是正确的,这个程度意味着在Scatter或Scatterv操作中子阵列类型并不容易。

您需要使用MPI_Type_create_resized将范围修复为更有用的内容,例如一个整数。

我在C - MPI - Send/Receive Subarrays to Array回答了类似问题 - Jonathan Dursi在sending blocks of 2D array in C using MPI

中发布了更完整的解释