MPIプログラムはすぐに起動しません(Fedora)

MPIプログラムはすぐに起動しません(Fedora)

申し訳ありません。ここで尋ねるのが良いかどうか、Stack Overflowに尋ねる方が良いかどうかわかりません。しかし、これは新しいFedora 39のインストールに関するもので、dnfを介してインストールされたパッケージであるmpich-devel、openmpiを使用しました。 devel と (linux-homebrew で) openmpi でも同じ問題が発生します。どうやらシステムと関連があるようで、ここに聞いてみた方がいいと思いました。

デフォルトでは、MPI_Initを含むMPIプログラムを実行しようとすると実行されますが、実際には起動に時間がかかります。すぐに現れず、top何らかの理由で遅れているようです。そうした時、予想したほど速く働きました。これはFortran言語で書かれた単純なHello World MPIプログラムです。

program hello_world
    use mpi
    implicit none
    integer :: mpi_size, mpi_rank
    integer :: ierr
    double precision :: t1, t2

    call MPI_Init(ierr)
    t1 = MPI_Wtime()

    call MPI_Comm_size(MPI_COMM_WORLD, mpi_size, ierr)
    call MPI_Comm_rank(MPI_COMM_WORLD, mpi_rank, ierr)

    print*, "Hello from rank ", mpi_rank, " of ", mpi_size, "."

    t2 = MPI_Wtime()
    print*, "time for full program", t2-t1
    call MPI_Finalize(ierr)

end program hello_world

mpif90(エラーなし)でコンパイルし、数分遅れて実行できます。この問題の原因が何であるかを調べ、同様の投稿で他のプログラムを閉じてWi-Fiを無効にすることを提案しましたが(理由はわかりません)、どちらも役に立ちませんでした。

これが出力ですtime mpirun -np 2 ./a.out

 Hello from rank            0  of            2 .
 time for full program   1.3940195000000001E-002
 Hello from rank            1  of            2 .
 time for full program   1.4017349000000000E-002

real    2m27.524s
user    0m0.033s
sys 0m0.163s

比較のために、ここでより簡単なHello Worldプログラムがあります。

program hello
    print *, 'Hello, World!'
end program hello

を使用してコンパイルしmpif90て時間を測定すると(ここではgfortranと比較するために1つのプロセッサを使用して実行)、次の結果が得られます。

 Hello, World!

real    1m13.201s
user    0m0.016s
sys 0m0.074s

./a.outgfortranを使用する(または使用して実行しても構いませんmpirun -np 1 ./a.out

 Hello, World!

real    0m0.002s
user    0m0.001s
sys 0m0.001s

また、待たずに断続的に動作するようです。 (更新で問題が解決したと思って問題を削除しても十分でしたが、再実行したときに問題が再発生しました。)

編集:何とか問題があるようですMPI_Init。次のようにダイヤルできます。

    call date_and_time(values=values)
    print *, values(5),":",values(6),":",values(7),":",values(8)

特定の行の時間を見つけると、ボトルネックが発生しますMPI_Init

例: プログラム開始時間:

17 : 20 : 6 : 221

後ろにMPI_Init:

17 : 21 : 21 : 128

後ろにMPI_Finalize:

17 : 21 : 21 : 132

ベストアンサー1

mpiexec -n 4 ./my_program私は実際に何もする前にタスク全体が90秒以上実行される同様の問題を解決しました。プログラム自体はMPIなしで約0.15秒で実行されます。

回避策は、すべてのネットワーク接続を無効にすることです。(WiFi、VPN...)ランタイムがmpiexec1秒未満に短縮されます。

何百ものデバイスを介してeduroam WiFiに接続し、パブリックIPアドレスを持っています。これは、バックグラウンドのネットワークタイムアウトの問題が原因で発生する可能性があります。

誰かがCygwinメーリングリストで同様の問題をすでに解決しています。 https://sourceware.org/legacy-ml/cygwin/2016-12/msg00192.html。 Kernel 6.6.26、OpenMPI 5.0.2、および g++ 12.3.0 を実行する Linux ボックスで同じ問題に直面しているため、この問題は Windows システムと Cygwin にのみ関連しない場合があります。

ヘルプを有効または無効に設定すると、-H localhost効果は最初の段落でこれらのパラメータなしで実行するのと同じです-H 127.0.0.1mpiexec

おすすめ記事