TSUBAME3.0計算サービスのWebページはこちら

TSUBAME2.5からTSUBAME3.0へのデータ移行方法の資料はこちら

MPIプログラムでの分散ファイルの作成方法を教えてください。

 MPIプログラムで分散ファイル化する場合、次の点に注意してください。

1.データの入力
パラメータ等の小さなファイルは rank=0で読み込み配信します。
同様に、小さなテキストファイルの出力などもrank=0で集めて出力します。

2.プログラムでの記述
  このプログラムでは、配列 A(N,M) を全領域としてN を分割しています。
  パラメータでN,Mを配信して、受信したパラメータから自分の担当領域を決定します。

      integer irank, isize,ierr,NM(2)
      call MPI_init(ierr)
      call MPI_Comm_size(MPI_COMM_WORLD, isize, ierr)
      call MPI_Comm_rank(MPI_COMM_WORLD, irank, ierr)
      if(irank.eq.0)  read(5,*) NM(1),NM(2)
      call MPI_Bcast(NM,2,mpi_integer,0,MPI_COMM_WORLD,ierr)
      N=NM(1)
      M=NM(2)
!  ----- ここまでがパラメータのセット、以下は自分の領域の決定
      Nsize=N/isize
      Nst=Nsize*irank + 1
      Ned=Nsize*(irank+1)
      write(*,*) irank,Nsize,isize,Nst,Ned   ←(確認です)
!  ----- 計算の開始
      ALLOCATE ( A(Nst:Ned,M) )
      do j=1,M
         do i=Nst,Ned
       :

3.結果の出力
MPIプログラムの場合、プロセスが同時に動作しますので、中間ファイルなどで、
ファイル名を指定しない場合、共有ディレクトリで実行すると上書きの恐れがあります。
各ファイルがユニークになるように配慮してください。
ユニークにする方法の一つとして、ファイル名にプロセス番号を入れます。以下、例です。

      character*4 crank
      character*12 fname
      write(crank,' (i4.4) ') irank
      fname='out.'//crank
      open(10,file=fname,status='new',form='unformatted')
      write(10) A

 これにより、out.0000~という結果ファイルを出力します。

4.注意点
出力は、書式無し形式で、一括出力が一番早い処理になります。
テキストファイル等の連続出力はLustreの負荷が高くなります。