2

私は MPI-IO を学習しており、チュートリアル(PDF ダウンロードはこちら)に従っています。

1 つの演習では、正しいコードは次のとおりです。

Program MPI_IOTEST
Use MPI
Implicit None
Integer :: wsize,wrank
Integer :: ierror
Integer :: fh,offset
Call MPI_Init(ierror)
Call MPI_Comm_rank(MPI_COMM_WORLD,wrank,ierror)
Call MPI_Comm_size(MPI_COMM_WORLD,wsize,ierror)
offset=4*wrank; ! because 4 bytes is one signed int
! --- open the MPI files using a collective call
Call MPI_File_Open(MPI_COMM_WORLD,'test.dat',MPI_MODE_RDWR+MPI_MODE_CREATE,MPI_INFO_NULL,fh,ierror);

Write(*,*)'rank',wrank


Call MPI_FILE_WRITE_AT(fh, offset, wrank,1,MPI_INTEGER,mpi_status_ignore,ierror);

Call MPI_File_close(fh,ierror)
Call MPI_Finalize(ierror)
End Program MPI_IOTEST

次に、それを 24 個の MPI タスクとしてビルドして実行するだけです。次に、検証のために、単純に od -i test/dat を実行します。以下に示すチュートリアルとまったく同じ結果が得られます。

0000000           0           1           2           3
0000020           4           5           6           7
0000040           8           9          10          11
0000060          12          13          14          15
0000100          16          17          18          19
0000120          20          21          22          23
0000140

しかし、1numに変更すると:

Call MPI_FILE_WRITE_AT(fh, offset, wrank,1,MPI_INTEGER,mpi_status_ignore,ierror);

の中へ

Call MPI_FILE_WRITE_AT(fh, offset, wrank,num,MPI_INTEGER,mpi_status_ignore,ierror);

そしてその前に定義する

integer :: num
num=1

rm test.dat の後、ファイルを再ビルドして実行すると、次のようになります。

0000000           0           0           0           0
*
4

1 に答える 1