鉴于以下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
的全部内容是否几乎适用于任何类型?
答案 0 :(得分:3)
可能是MPI库中的一个错误,他们可能忘记将此特定功能添加到模块中。 BTW "几乎任何类型" 肯定是错误的,MPI_SIZEOF
仅适用于内在类型。
作为解决方法,您可以使用
testSize = storage_size(complexTest) / character_storage_size
(或只是/ 8
)