Я просмотрел множество примеров, и я все еще смущен. Я скомпилировал простую программу проверки задержки с here, и она отлично работает на одном хосте, но когда я пытаюсь запустить ее на двух хостах, она зависает. Тем не менее, работает что-то вроде hostname
работает отлично:Запуск MPI на двух хостах
[[email protected] 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
Но вот собранная программа латентности:
[[email protected] 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)
Мой текущий догадаться, что есть что-то не так с моими правилами брандмауэра (например, имя хоста не сообщается между хостами, но программа задержек).
[[email protected] latency]$ cat rankfile
rank 0=10.0.2.4 slot=0
rank 1=10.0.2.5 slot=0
[[email protected] latency]$ cat hostfile
10.0.2.4 slots=2
10.0.2.5 slots=2
Это компонент 'tcp' BTL, который пытается установить соединение между узлом' 4' и узлом '5', чтобы начать отправку сообщений и сбой. Вы правильно разбираетесь - 'hostname' не выполняет MPI-коммуникацию, и поэтому он отлично работает. Просто проинструктируйте свои брандмауэры как принимать соединения с другого хоста. –
Христо - если бы вы ответили как ответ, я был бы рад принять его! выключение IPTables внутри lan отлично работало! – Hamy
Там вы идете - ответ на ваш конкретный вопрос и некоторую дополнительную информацию, которая может пригодиться для других, которые испытывают ту же проблему, но по другой причине. –