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

MPI Scattering 3D array to tetragonal prismas

大家好,我正在尝试以四角棱柱格式散布 3d 阵列。我希望这张照片能阐明我的意思。

认为大立方体是 3 维数组(可以说是 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(size) 整除)

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