c - MPI 中派生数据类型的范围

标签 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);

We couldn't just use MPI_Scatter() (or even scatterv) with these types yet, because these types have an extent of 16 integers;

最佳答案

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

关于c - MPI 中派生数据类型的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611528/

相关文章:

从地址构造 C 中的指针

c - MPI编程中如何随机选择主处理器?

c - 使用C语言在Linux中使用文件映射和并行处理大文件

c# - 并行化 IO 绑定(bind)(网络)ForEach 循环

与 scanf() 或 if() 混淆

c - 赋值从没有强制转换的整数生成指针 - rand()

c++ - 如何将 MPI 与 QT 一起使用?

c++ - MPI 多次发送和接收循环

C++ memcpy问题:(

c - 数据包捕获 C 代码不会终止显示捕获的数据包数量