MPI将3D阵列散射到四角形棱柱

时间:2017-12-07 22:26:57

标签: arrays 3d mpi openmpi

大家好,我试图以四边形prisma格式散布3d数组。我希望这张照片能说明我的意思。

shape

想想大立方体是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(大小)整除)

1 个答案:

答案 0 :(得分:0)

您不能将MPI_Scatter()与此派生数据类型一起使用,但您可以使用MPI_Scatterv()(所有计数相等,但您需要手动计算位移)。