【发布时间】:2014-05-16 23:29:11
【问题描述】:
正如标题所说,我对数组本身和数组子集之间的类型差异很感兴趣。作为背景,我将数组传递给 MPI 函数,当使用零长度数组调用时,该函数会触发“数组索引越界”错误,但仅使用子集表示法。以下是手头问题的简化示例:
real(4), allocatable :: myData(:)
allocate(myData(numElements), STAT=iStat)
! The following calls only differ in the second argument
! Passing array itself always works (e.g. myData)
call MPI_FILE_WRITE_ALL(file, myData, MPI_REAL4, numElements, &
MPI_STATUS_IGNORE, mpiErr)
! Passing converted subset always works (e.g. real(myData(:), 4)
call MPI_FILE_WRITE_ALL(file, real(myData(:), 4), MPI_REAL4, numElements, &
MPI_STATUS_IGNORE, mpiErr)
! Passing subset works unless numElements is zero
call MPI_FILE_WRITE_ALL(file, myData(:), MPI_REAL4, numElements, &
MPI_STATUS_IGNORE, mpiErr)
这是documentation for MPI_FILE_WRITE_ALL 的链接,但它似乎只需要BUFFER(*)。关于为什么这些不同的调用表现如此不同的任何想法?
【问题讨论】: