【发布时间】:2019-12-14 23:24:42
【问题描述】:
我有以下代码
program mpi_io
use mpi
implicit none
integer :: mpierr, whoami, nproc, iout, STATUS(MPI_STATUS_SIZE),charsize
integer(kind=mpi_offset_kind):: OFFSET, fs
character(len=60) :: dd,de
character:: newline = NEW_LINE('FORTRAN')
call MPI_INIT ( mpierr )
call MPI_COMM_RANK ( MPI_COMM_WORLD, whoami, mpierr )
call MPI_COMM_SIZE ( MPI_COMM_WORLD, nproc, mpierr )
dd ='=========================' // INT2STR(whoami)//newline
de = 'special'// INT2STR(whoami)//newline
call MPI_FILE_OPEN( MPI_COMM_WORLD, 'test.dat', MPI_MODE_CREATE + MPI_MODE_WRONLY, MPI_INFO_NULL, IOUT, mpierr)
call mpi_type_size(mpi_byte, charsize , mpierr)
offset = charsize*len(TRIM(de))
if(whoami == 0)call MPI_FILE_WRITE_AT( iout,offset, TRIM(de), len(TRIM(de)), MPI_BYTE, status, mpierr)
call MPI_File_get_size(iout, fs, mpierr)
offset = fs
call MPI_FILE_SEEK(iout, fs, MPI_SEEK_SET, mpierr)
call MPI_FILE_WRITE_ordered( iout, TRIM(dd), len(TRIM(dd)), MPI_BYTE, status, mpierr)
!call MPI_FILE_WRITE_ordered( iout, dd, len(dd), MPI_CHARACTER, status, mpierr)
call mpi_file_close(iout,mpierr)
call mpi_finalize(mpierr)
contains
function INT2STR( i ) result( str )
integer, intent(in) :: i
character(:), allocatable :: str
character(RANGE(i)+2) :: tmp
write(tmp, '(I0)') i
str = TRIM(tmp)
end function
end program
我正在寻找的是仅由一个处理器写入文件的组合,有时由它们全部写入文件。正如你在这个例子中看到的,我首先只想写de,然后是所有处理器的dd。
现在写,我的de好像被覆盖了
如您所见,我尝试通过查询文件大小并执行 MPI_FILE_SEEK 来抵消它,但它似乎没有帮助 有没有人有想法。
我正在使用 IFORT v19
【问题讨论】:
标签: fortran mpi intel-fortran mpi-io