У меня есть двойной массив, который разбивается на части и распределяется между процессами.Тем не менее, фрагменты соответствуют целочисленным индексированным местоположениям, которые могут дублироваться на других фрагментах.Как я могу усреднить двойные значения, которые соответствуют дублированным целочисленным индексам местоположения?
Например, у нас есть массив размером 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(:)