Я пытаюсь сделать сумму MPI в 2 байта целым числом:
INTEGER, PARAMETER :: SIK2 = SELECTED_INT_KIND(2)
INTEGER(SIK2) :: s_save(dim)
На самом деле это массив, который принимает целочисленные значения от 1 до 48 макс., Поэтому 2 байта достаточно по соображениям памяти.
Поэтому я попробовал следующее:
CALL MPI_TYPE_CREATE_F90_INTEGER(SIK2, int2type, ierr)
CALL MPI_ALLreduce(MPI_IN_PLACE, s_save, nkpt_in, int2type, MPI_SUM, world_comm, ierr)
Это хорошо работает для Gfortran + openmpi.
Однако в случае с Intel происходит сбой:
MPI_Allreduce(1000)......: MPI_Allreduce(sbuf=MPI_IN_PLACE, rbuf=0x55d2160, count=987, dtype=USER<f90_integer>, MPI_SUM, MPI_COMM_WORLD) failed
MPIR_SUM_check_dtype(106): MPI_Op MPI_SUM operation not defined for this datatype
Есть ли правильный (или рекомендуемый) способ сделать это так, чтобы он работал для большинства компиляторов?