代码之家  ›  专栏  ›  技术社区  ›  Emre EREN

MPI散射三维阵列到四方棱镜

  •  0
  • Emre EREN  · 技术社区  · 6 年前

    大家好,我正在尝试以四方棱镜格式分散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(size)均匀整除)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gilles Gouaillardet    6 年前

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