[英]Extent of derived datatypes in MPI
我正在尝试为2D子矩阵创建数据类型并使用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个整数。
实际上,我认为它们的范围是36个整数而不是16个? 无论如何,您是正确的,这种程度意味着在Scatter或Scatterv操作中子数组类型的划分并不容易。
您需要使用MPI_Type_create_resized将范围固定为更有用的范围,例如单个整数。
我在C中回答了类似的问题-MPI- 向数组发送/接收子数组 -乔纳森·杜尔西(Jonathan Dursi)发表了更完整的解释,其中涉及使用MPI在C中发送2D数组块
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.