【问题标题】:Extent of derived datatypes in MPIMPI 中派生数据类型的范围
【发布时间】:2017-05-27 11:06:41
【问题描述】:

我正在尝试为 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 个整数;

【问题讨论】:

    标签: c parallel-processing mpi


    【解决方案1】:

    事实上,我认为它们的范围是 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 中发布了更完整的解释

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 2014-12-03
      • 2012-02-03
      • 2014-08-08
      • 2012-11-27
      • 2017-02-06
      • 2018-02-26
      • 1970-01-01
      相关资源
      最近更新 更多