4

4 つのプロセス (8 スレッドのクアッドコア Intel Core i7 CPU) を起動するだけの問題の最小限の例があり、何らかの理由MPI_Initで非常に長い時間がかかるようです。

これが私のコードです:

 1 program smear_sfs
 2
 3 integer, parameter :: ikind = 4
 4 integer, parameter :: rkind = 8
 5
 6 integer(kind = ikind) :: isize, iproc, ierr
 7 integer(kind = ikind) :: i, j
 8
 9 include "mpif.h"
10 integer(kind = ikind) :: istat(MPI_STATUS_SIZE)
11
12 print*, 'Section 1'
13
14 ! initialize mpi
15 write(*, '(a)', advance='no'), 'Calling MPI_Init ...'
16 call MPI_Init(ierr)
17 write(*, '(a)') 'done'
18 print*, 'ierr = ', ierr
19 call MPI_Barrier(MPI_COMM_WORLD, ierr)
20 call MPI_Comm_Rank(MPI_COMM_WORLD, iproc, ierr)
21 call MPI_Comm_Size(MPI_COMM_WORLD, isize, ierr)
22 do i = 0,isize
23   call MPI_Barrier(MPI_COMM_WORLD, ierr)
24   if(iproc.eq.i) write(*, '(a, i3, a)') 'rank(', iproc, ') reporting'
25   call MPI_Barrier(MPI_COMM_WORLD, ierr)
26 enddo
27
28 ! shutdown MPI
29 call MPI_Barrier(MPI_COMM_WORLD, ierr)
30 call MPI_Finalize(ierr)
31
32 end program smear_sfs

出力の(時間指定された)バージョンは次のとおりです。

 Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ... Section 1
Calling MPI_Init ...done
 ierr =            0
rank(  0) reporting
done
 ierr =            0
rank(  1) reporting
done
 ierr =            0
rank(  2) reporting
done
 ierr =            0
rank(  3) reporting

real    0m45.350s
user    1m25.794s
sys     1m31.731s

プログラムはすぐに出力Section 1し、次のものを出力しますが、その後、印刷と残りの出力のCalling MPI_Init ...前に長時間ハングします。doneなんらかの理由で、これは長い間ハングアップしており、その理由がわかりMPI_Initません。

まったく問題がある場合、これを初めて実行したときに、ファイアウォールから、コンピューターに何かが起こっていると主張する奇妙な警告が表示されましたが (orted.exe私はそうだったと思います)、そのエラーはもう発生していません。

これを cygwin64 を介して Windows 8 で実行し、MPIf90 でコンパイルしています。

ありがとう。

4

1 に答える 1

1

うまくいけば、最後の編集:

OpenMPI ユーザーのメーリング リストで質問しました。そこで私は、それが私の WLAN である可能性もあるというアドバイスを受けました。

本当に!それは私の WLAN で、少なくとも半分はテストしました。他の時は、インターネットへのアクセスにも使用する LAN でした。

そのため、[スタート] > [コントロール パネル] > [ネットワークとインターネット] > [ネットワークと共有センター] > [アダプターの設定の変更] で LAN と WLAN を無効にしてみてください。ただし、これは回避策にすぎません。


これは本当の答えではありませんが、この厄介な問題についての私の 5 時間の経験を共有したいと思います。(今でも時々悩みます)

私も同じ問題を抱えていました。プログラムをコンパイルして実行した後、ハングしているように見えますが、最終的には 1 ~ 2 分後に動作するようになります。

問題はノートブックで発生しましたが、デスクトップ PC では発生しませんでした。どちらも Win 7、cygwin 64 ビット、OpenMPI バージョン 1.8.3 r32794 (ompi_info)、g++ v 4.8.3 で動作します。後で実際にcygwinのインストールを同期しましたが、それでも機能しませんでしたが、再起動後に同期したため、問題が何らかの形でcygwinのインストールに失敗したことを実際に除外することはできません.

デスクトップ PC でプログラムを開始すると、Firewall Comodo 5.10 から orterun.exe (mpirun は orterun へのシンボリック リンクにすぎません) と myprogram.exe について通知されました。これら 2 つのプログラムを (永続的に) 許可した後も、開始されたプログラムは実行を再開しませんでした。プログラムをキャンセルして再起動すると、プログラムは問題なく実行され、高速に実行されました。このため、OpenMPI は、すぐに接続できない場合のエラー処理が不十分であると思われます。たぶん、これは問題に何らかの形で関連しています。

Comodo ファイアウォール 5.10 を使用しています。私のデスクトップにはまったくファイアウォールはなく、ノートブックの Windows ファイアウォール (非アクティブ化) もありません。私のノートブックに Comodo 5.10 をインストールしても役に立ちませんでした。しかし、再起動後にすべてが機能したので、ファイアウォールがまだ完全に整っていなかったのでしょうか? しかし、インストール プログラムは再起動を要求せず、ファイアウォールはすでに機能していたので ...

私のデスクトップ PC からコンパイルされたバージョンは、mpirun を使用してノートブックで実行されました...と思います。残念ながら、これを再現できず、何時間も試しました。このため、エラーはコンパイラまたは OpenMPI ライブラリにあると考えました。

ノートブックの cygwin インストールをデスクトップの cygwin インストールと同期し、影響を受けるすべてのプログラムを許可するファイアウォールをインストールし、ノートブックを再起動した後、最終的に機能しました...何が問題を正確に解決したのか、再起動が必要な理由はわかりません。

明らかに、問題は私のノートブックにかなりの月間存在していたので、問題が解決される前にノートブックを再起動しました。

VPN ソフトウェアが OpenMPI に干渉し、まさにこれらの問題を引き起こしたという話を他の人も持っていますが、私はそのようなソフトウェアを実行していませんでした。

編集: 数時間後、問題が再発しました! 私も無駄に試したこと:

  • TCP-IP 接続を妨害する可能性のあるプログラムを閉じる
  • ping 127.0.0.1 は 1 ミリ秒未満で動作します
  • 管理者として bash を実行する
  • cygwin-bash の代わりに Windows コマンドから orterun/mpirun を実行する
  • Windows ファイアウォール サービスと Windows Defender を完全に停止する
  • MPI_Init(NULL,NULL) を使用; MPI_Init(&argc,&argv); の代わりに
  • g++ の代わりに gcc でコンパイルする
  • mpirun で起動しなければプログラムは正常に動作しますが、mpirun -n 1 で起動しても動作しません。
  • Windows を更新する
  • セーフ モードの使用 (ネットワーク ドライバーを使用)
  • デバッグしようとしています (MPI_init 呼び出しへの有用なバックトレースを取得できません)
于 2014-10-22T06:29:50.140 に答える