大家好,我试图以四边形prisma格式散布3d数组。我希望这张照片能说明我的意思。
想想大立方体是3d阵列(比方说4x4x4尺寸),P0..3是处理器。 (P0将取大数组的[0..1] [0..1] [0..3]部分)。我使用数据类型来执行此操作,我创建了2种数据类型;
MPI_Datatype dtype1, surface,dtype2,tetragonal;
MPI_Type_vector((N)/sqrt(size),
(N),
(N),
MPI_FLOAT,
&dtype1);
MPI_Type_commit(&dtype1);
MPI_Type_create_resized(dtype1, 0, 1*sizeof(float), &surface);
MPI_Type_commit(&surface);
MPI_Type_vector(N/sqrt(size),
1,
sqrt(size),
surface,
&dtype2);
MPI_Type_commit(&dtype2);
MPI_Type_create_resized(dtype2, 0, 1*sizeof(float), &tetragonal);
MPI_Type_commit(&tetragonal);
然而,我得到了非常奇怪的结果,我是MPI环境的新手,所以我需要一些帮助来解决这个问题,以了解数据类型的实际工作方式。 谢谢。
(假设处理器大小是平方数,N可以被sqrt(大小)整除)
答案 0 :(得分:0)
您不能将MPI_Scatter()
与此派生数据类型一起使用,但您可以使用MPI_Scatterv()
(所有计数相等,但您需要手动计算位移)。