0

MPI プログラムのエラーの原因を突き止めたいです。このプログラムは大きな while ループであり、反復ごとに、次のように ISEND と IRECV を使用して、各プロセッサとその隣接プロセッサの間で一連のメッセージ パッシングが行われます。

while ( t< 非常に大きな数 ) ...

do i=1,8
 if ( something that is almost always true ) then
   call MPI_ISEND(A,A_buffer,inewtype,neighrank(i),2,MPI_COMM_WORLD,isend,ierr)
   call MPI_WAIT(isend,istatus,ierr)
   call MPI_ISEND(B,B_buffer,MPI_INTEGER4,neighrank(i),3,MPI_COMM_WORLD,isend,ierr)
   call MPI_WAIT(isend,istatus,ierr)
 end if
end do

do i=1,8
 if ( something that is almost always true) then
   call MPI_IRECV(C,C_buffer,inewtype,neighrank(i),2,MPI_COMM_WORLD,irecv,ierr)
   call MPI_WAIT(irecv,istatus,ierr)
   call MPI_IRECV(D,D_buffer,MPI_INTEGER4,neighrank(i),3,MPI_COMM_WORLD,irecv,ierr)
   call MPI_WAIT(irecv,istatus,ierr)
   end if
end do
...

segmentation fault非常に多くの反復の後で、プログラムはエラーを生成します。各反復では、プロセッサ間で同じ量のデータがメッセージで渡されますが、ISEND と IRECV の呼び出し数は調整可能です (つまり、合計 80kb を渡すには 80 回の呼び出しを使用し、合計 160kb を渡すには 40 回の呼び出しを使用します)。呼び出し回数が少ない場合、プログラムは早期にクラッシュします。

私はInfiniBand についての何かを疑っています! がこのエラーを引き起こしていますが、insufficient virtual memory- が表示されないので、InfiniBand である可能性はありませんか? このエラーの原因は何ですか?

4

1 に答える 1

1

MPI コードは正常であることが判明しました。プログラムが実行されるまでに 1 ~ 2 時間かかるため、見分けるのは困難でしたSegmentation Fault。厳密なデバッグにより、MPI に関連しないバグが指摘されます。

于 2013-02-28T23:01:25.430 に答える