MPI_类型_向量在不同的过程中会有不同的维度吗?

MPI_类型_向量在不同的过程中会有不同的维度吗?,mpi,Mpi,我想使用MPI\u Type\u vector将矩阵的子域分散到每个进程。例如,矩阵为5x5,由2x2子域分解。因此,子域的维度为: _____________________ | | | | 0 | 1 | | (2,2) | (3,2) | | | | |_________|_________| 5 | | | | 2 | 3

我想使用
MPI\u Type\u vector
将矩阵的子域分散到每个进程。例如,矩阵为5x5,由2x2子域分解。因此,子域的维度为:

 _____________________
 |         |         |
 |    0    |    1    |
 |  (2,2)  |  (3,2)  |
 |         |         |
 |_________|_________|   5
 |         |         |
 |    2    |    3    |
 |  (2,3)  |  (3,3)  |
 |         |         |
 |_________|_________|

           5
我在每个进程上定义了一个具有自己维度的
MPI\u Type\u向量。我希望进程0和1上定义的向量的大小不同。但它们的手柄是一样的。看起来MPI只使用了其中一个定义的向量

谢谢


PS:我已经通过手动打包和解包数据实现了这个功能,但是我想使用一些更方便的方法。

MPI_数据类型
只是一个可以传递的句柄,它不直接包含关于您所创建类型的任何信息。查看该句柄的值也不会告诉您类型。我见过的大多数实现都使用
int
s作为这个句柄,每个用户定义的数据类型递增一个。因此,如果两个向量数据类型句柄都是该内核上声明的第一个数据类型,那么它们在不同的内核上具有相同的值,我并不感到奇怪

回到关于区域分解的主要问题,如果核心之间使用不同声明的向量类型进行通信,那么通信将失败——发送核心和接收核心将需要处理相同长度的向量。因此,发送核心将需要使用与接收核心预期接收的数据量相对应的类型


在干净的域分解方面,我建议使用
MPI\u Cart
函数(有一个Web 1.0教程)。

MPI\u数据类型
只是一个可以传递的句柄,它不直接包含关于所创建类型的任何信息。查看该句柄的值也不会告诉您类型。我见过的大多数实现都使用
int
s作为这个句柄,每个用户定义的数据类型递增一个。因此,如果两个向量数据类型句柄都是该内核上声明的第一个数据类型,那么它们在不同的内核上具有相同的值,我并不感到奇怪

回到关于区域分解的主要问题,如果核心之间使用不同声明的向量类型进行通信,那么通信将失败——发送核心和接收核心将需要处理相同长度的向量。因此,发送核心将需要使用与接收核心预期接收的数据量相对应的类型


关于干净的域分解,我建议使用
MPI\u Cart
函数(有一个Web1.0教程).

MPI句柄对于注册它们的进程来说是本地的,只应被视为不透明类型-您永远不应该根据句柄的实际值来决定任何事情,您应该只使用MPI提供的比较函数来比较句柄后面的对象(例如,
MPI\u Comm\u compare
)。例如,在开放式MPI中,
MPI\u数据类型
是指向C绑定的
ompi\u数据类型
结构的指针,是Fortran绑定指针表中的
整数
索引


如果您的子域大小相同(例如,所有子域都是
2x2
)然后,一个具有调整大小的MPI数据类型的集合将允许您使用
MPI\u Scatterv
/
MPI\u Gatherv
来分散/收集它们。因为您的子域具有不同的大小,如果您想使用单个集合MPI调用来分散/收集它们,则需要使用带有精心提供的参数的
MPI\u Alltoallw
。您可以也可以使用它来实现聚集操作。

MPI句柄是注册它们的进程的本地,只应被视为不透明类型-永远不要根据句柄的实际值来决定任何事情,并且只应使用比较函数比较句柄后面的对象MPI提供的(例如,
MPI\u Comm\u compare
)。例如,在开放式MPI中,
MPI\u数据类型是指向C绑定的
ompi\u数据类型的指针,是Fortran绑定指针表中的
INTEGER
索引


如果您的子域大小相同(例如,所有子域都是
2x2
)然后,一个具有调整大小的MPI数据类型的集合将允许您使用
MPI\u Scatterv
/
MPI\u Gatherv
来分散/收集它们。因为您的子域具有不同的大小,如果您想使用单个集合MPI调用来分散/收集它们,则需要使用带有精心提供的参数的
MPI\u Alltoallw
。您可以还可以使用它来实现聚集操作。

感谢您提供有关“MPI_Cart”的信息。它将简化笛卡尔拓扑的区域分解处理。感谢您提供有关“MPI_Cart”的信息。它将简化笛卡尔拓扑的区域分解处理。