使用 MPI 派生数据类型和进程排名重排序提升 MPI 应用性能
1. MPI 派生数据类型在矩阵操作中的应用
在数值计算中,MPI 派生数据类型在处理分布式二维数据结构的重新分布操作时非常有用。下面将介绍如何使用 MPI 派生数据类型进行矩阵转换,并展示相关实验结果。
1.1 矩阵转换方法
可以使用 MPI 派生数据类型在连续编号的块分布式矩阵和 Elemental 的双循环块之间进行转换。具体步骤如下:
1. 进程标识 :通过笛卡尔网格中的坐标来标识进程,可使用 MPI 笛卡尔拓扑功能。
2. 选择通信函数 :由于发送和接收块的起始位置不是均匀跨步的,因此需要使用不规则的 MPI Alltoallv 函数。
3. 定义数据类型 :使用 MPI 函数定义发送和接收块的数据类型。
以下是相关代码示例:
// shape of Elemental submatrix
MPI_Type_vector(n/(c*c),1,c,MPI_DOUBLE,&ErowTvec);
MPI_Type_create_resized(ErowTvec,0,n/c*sizeof(double),&ErowT);
MPI_Type_vector(n/(r*r),1,r,ErowT,&EblockTfull);
MPI_Type_create_resize(EblockTfull,0,1*sizeof(double),&EblockT);
MPI派生类型与排名重排序提升应用性能
超级会员免费看
订阅专栏 解锁全文
17

被折叠的 条评论
为什么被折叠?



