MPI Fortran-跨处理器取平均值的方法

时间:2018-12-17 23:53:09

标签: arrays sorting duplicates fortran mpi

我有一个双精度数组,它在进程之间分块并分布。但是,这些块对应于整数索引位置,该位置可以在其他块上重复。如何计算与重复的整数位置索引相对应的double值?

例如,我们有一个大小为9的数组,分为两个处理器。每个处理器上的数组值的屏幕输出为

    proc=0
    idx value
    1   0.4324
    2   0.5
    3   0.7433

    proc=1
    idx value
    2  1.0
    4  0.432
    5  0.406
    6  0.843

该代码的理想行为是发现idx = 2是重复的,因此索引位置= 2的平均值应为(0.5 + 1.0)/2.0 = 0.75。

我的想法是执行MPI_Send / Recv并比较整数。然后,以某种方式,对于那些重复的值,对关联的双精度值求平均值,并替换数组中的平均值。

    sbuf(:) = indexarr(:)
    sbufdouble(:) = values(:)
    do iproc=1,nproc
       call MPI_Send(sbuf, size(sbuf), MPI_REAL, iproc... 
      ! Should I send the double values as well? 
    enddo

    do iproc=1,nproc
       call MPI_Recv(rbuf,...) 
    enddo

   !  Do some comparison between rbuf and the array chunk 
      indexarr owned by this processor

   !  If integers match, average the corresponding double values 
      between the two

   !  Replace the averaged value in indexarr(:) 

0 个答案:

没有答案