我正在尝试为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个整数;
答案 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
中发布了更完整的解释