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 である可能性はありませんか? このエラーの原因は何ですか?