MPI_ALLreduce с Fortran и 2-байтовым целым числом - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь сделать сумму 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

Есть ли правильный (или рекомендуемый) способ сделать это так, чтобы он работал для большинства компиляторов?

...