2017-01-12 31 views
0

我正在尝试为2D子矩阵创建数据类型并使用MPI对其进行处理。我迄今发现的是this问题。对它的回答完全覆盖了我的问题。我唯一无法理解的是如何计算子数组数据类型的范围。任何解释都会很有帮助。MPI中派生数据类型的范围

这里是代码和答案复制到这个问题的声明:

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

事实上,我认为这些有36个整数不是16的程度?无论如何,你认为这个范围意味着在Scatter或Scatterv操作中将子类型子类化并不容易。

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

C - MPI - Send/Receive Subarrays to Array回答过类似的问题 - 一个更完整的解释被张贴乔纳森·德西在sending blocks of 2D array in C using MPI