- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Given the following fortran code:
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)
I get the error:
error #6285: There is no matching specific subroutine for this generic subroutine call. [MPI_SIZEOF]
on the line
call MPI_SIZEOF(complexTest, testSize, ierr)
This code compiles and executes with no issue using openmpi. What is the cause of this error? It seems like it's looking for a specific match for the type of complexTest, but the whole point of MPI_SIZEOF is to work generically with nearly any type.
링크가 복사됨
4 응답
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
This appears to be a bug in Intel MPI. It looks like the double complex overload is missing. However, with credit to Vladimir F. at StackOverflow, the following solution works:
use iso_fortran_env ! ... testSize = storage_size(complexTest) / character_storage_size
Incidentally, this whole exercise was to properly select the MPI data type to use. In all cases, test size was used in a call to
call MPI_TYPE_MATCH_SIZE(MPI_TYPECLASS_COMPLEX, mpiType, testSize, ierr)
