我有一個大的Fortran90應用程序,我試圖進行調試。我試圖讓所有的處理器在程序給定的位置拋售他們的特定變量的值,但我只得到了處理器的子集,有時反覆處理器行列使用下面的代碼:使用MPI_Barrier在所有處理器上打印變量的值
call mpi_barrier(mpi_comm_world, imstat)
do i = 0, nprocs
if (rank == i) print*, rank, ! ... hopefully useful stuff
call mpi_barrier(mpi_comm_world, imstat)
end do
我以前在這個特定的應用程序中遇到了堆棧損壞的問題,所以我懷疑我的問題是這樣的錯誤。但是我很難弄清楚我在所有處理器上看不到該值的原因是該錯誤還是我的傾銷代碼有問題。
輸出我第一次調用程序(用於nprocs = 30
)是
rank, ntiltin = 29 1 m rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 24 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
rank, ntiltin = 26 14
而另一位,下一次我打電話同常規:
rank, ntiltin = 20 5
rank, ntiltin = 28 5
rank, ntiltin = 20 5
rank, ntiltin = 20 5
rank, ntiltin = 20 5
它也像我有輸出緩衝的問題,但我編譯使用ifort,谷歌搜索產生了一個結果(Enable buffered I/O to stdout with Intel ifort compiler),似乎表明緩衝到標準輸出不是什麼ifort會做的。我將輸出重定向到一個文件,所以也許有一些系統緩衝,那是我的問題?
所以我的問題是,這看起來像是一個合理的代碼片段來轉儲出所有處理器上的變量的值,或者是我缺乏睡眠趕上我?
在此先感謝!
添喜禁用它們 - 以最快的方式來解決這類問題是使用一個調試器 - 因爲這些報告完全正在發生,沒有輸出緩衝的霧。見:http://stackoverflow.com/questions/5985424/parallel-debuggers一些意見和建議。 – David