如何在 MPI 中计算 3D 数据集的平均 2D 切片

计算科学 并行计算 数字 高性能计算 mpi
2021-12-17 07:50:52

我有一组 3D 数据v(i,j,k),我想计算平均 2D 切片,该切片沿其第三维vmean(i,j)求和nz该组的切片。v(i,j,k)我写下了这段 FORTRAN90 代码,但它没有产生正确的结果。任何人都可以建议我的解决方案?提前致谢

gbl_sum = 0.0
do j    = mystarty,myendy
   do i = mystartx,myendy

      lcl_sum = sum(v(i,j,mystartz:myendz))

      call MPI_REDUCE(lcl_sum, gbl_sum(i,j), &
      1, real, mpi_sum, root,mpi_comm_world,err)

      gbl_sum(i,j) = lcl_sum

   enddo
enddo

call mpi_BCAST(gbl_sum,gbl_sumSize,real,root,&
mpi_comm_world,err)

do j    = mystarty,myendy
   do i = mystartx,myendy
      vmean(i,j) = gbl_sum(i,j)/real(nz)
   enddo
enddo
1个回答
  1. 通过首先进行局部减少然后减少单个标量,您正在做正确的事情。
  2. 您使用的是 Reduce,然后是 Bcast:您确实应该使用 Allreduce。
  3. 您的代码看起来是正确的,但是您掩盖了一个关键细节:您的“v”数组是如何分配的?您是否为此使用了明确的下限?
  4. 您指定“真实”具有 MPI 类型。那存在吗?那不应该是 MPI_REAL4 左右吗?我想知道你是否有精度问题。