英特尔MPI_SIZEOF不适用于Fortran复杂类型

时间:2016-02-11 14:29:50

标签: fortran mpi intel-fortran

鉴于以下fortran代码:

integer, parameter :: double = kind(1.0d0)

integer :: integerTest
real(double) :: doubleTest
complex(double) :: complexTest
integer :: testSize
integer :: ierr

integerTest = 0
doubleTest = real(0.d0, kind=double)
complexTest = cmplx(0.d0, 0.d0, kind=double)

call MPI_SIZEOF(integerTest, testSize, ierr)
! ...
call MPI_SIZEOF(doubleTest, testSize, ierr)
! ...
call MPI_SIZEOF(complexTest, testSize, ierr)

使用英特尔MPI进行编译时,出现错误:

error #6285: There is no matching specific subroutine for this generic subroutine call. [MPI_SIZEOF]

就行了

 call MPI_SIZEOF(complexTest, testSize, ierr)

此代码使用OpenMPI编译并执行时没有任何问题。这个错误的原因是什么?看起来它正在寻找complexTest类型的特定匹配,但MPI_SIZEOF的全部内容是否几乎适用于任何类型?

1 个答案:

答案 0 :(得分:3)

可能是MPI库中的一个错误,他们可能忘记将此特定功能添加到模块中。 BTW "几乎任何类型" 肯定是错误的,MPI_SIZEOF仅适用于内在类型。

作为解决方法,您可以使用

testSize = storage_size(complexTest) / character_storage_size

(或只是/ 8