私は多くの例を調べましたが、まだ混乱しています。ここから簡単な遅延チェックプログラムをコンパイルしました。1つのホストで完全に実行されますが、2つのホストで実行しようとするとハングします。ただし、次のようなものをhostname
実行すると正常に実行されます。
[hamiltont@4 latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 hostname
[4:16622] [[5908,0],0] odls:default:fork binding child [[5908,1],0] to slot_list 0
4
[5:12661] [[5908,0],1] odls:default:fork binding child [[5908,1],1] to slot_list 0
5
しかし、コンパイルされたレイテンシープログラムは次のとおりです。
[hamiltont@4 latency]$ mpirun --report-bindings --hostfile hostfile --rankfile rankfile -np 2 latency
[4:16543] [[5989,0],0] odls:default:fork binding child [[5989,1],0] to slot_list 0
[5:12582] [[5989,0],1] odls:default:fork binding child [[5989,1],1] to slot_list 0
[4][[5989,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 10.0.2.5 failed: Connection timed out (110)
私の現在の推測では、ファイアウォールルールに何か問題があります(たとえば、ホスト名はホスト間で通信しませんが、遅延プログラムは通信します)。
[hamiltont@4 latency]$ cat rankfile
rank 0=10.0.2.4 slot=0
rank 1=10.0.2.5 slot=0
[hamiltont@4 latency]$ cat hostfile
10.0.2.4 slots=2
10.0.2.5 slots=2