Я хотел бы найти позицию и значение минимального элемента очень длинного массива в Фортране.
Встроенная функция MINLOC работает хорошо:
position = MINLOC(long_array(:), 1)
value = long_array(position)
Однако это очень медленно из-за размера массива. Я хотел бы распараллелить это с помощью MPI.
К моему удивлению, кажется, что MPI_MINLOC может дать вам значение минимума, а также ранг, который удерживает это значение, но не позицию в этом ранге.
Что-то вроде (из MPI Get Processor с минимальным значением ):
local = long_array[slice]
MPI_Allreduce(local, global, 1, MPI_2INT, MPI_MINLOC, MPI_COMM_WORLD)
print*,'Rank ',global[1]
print*,'Value', global[0]
где «slice» - 1 / n часть массива, где n - числоКонечно.
Есть ли эффективный способ получить глобальную позицию минимума и значения?
Большое спасибо, Лучший, Сэм