2010-11-23 70 views
0

如何使用MPI_Comm_spawn啓動遠程節點上的工作進程?遠程節點上的mpi_comm_spawn

使用的openmpi 1.4.3,我試過這段代碼:

MPI_Info info; 
MPI_Info_create(&info); 
MPI_Info_set(info, "host", "node2"); 
MPI_Comm intercom; 
MPI_Comm_spawn("worker", 
     MPI_ARGV_NULL, 
     nprocs, 
     info, 
     0, 
     MPI_COMM_SELF, 
     &intercom, 
     MPI_ERRCODES_IGNORE); 

但失敗與此錯誤消息:

 
-------------------------------------------------------------------------- 
There are no allocated resources for the application 
    worker 
that match the requested mapping: 


Verify that you have mapped the allocated resources properly using the 
--host or --hostfile specification. 
-------------------------------------------------------------------------- 
-------------------------------------------------------------------------- 
A daemon (pid unknown) died unexpectedly on signal 1 while attempting to 
launch so we are aborting. 

There may be more information reported by the environment (see above). 

This may be because the daemon was unable to find all the needed shared 
libraries on the remote node. You may set your LD_LIBRARY_PATH to have the 
location of the shared libraries on the remote nodes and this will 
automatically be forwarded to the remote nodes. 
-------------------------------------------------------------------------- 

如果我取代 「節點2」 有名稱我的本地機器,然後它工作正常。如果我ssh進入node2並在那裏運行相同的東西(在info字典中使用「node2」),那麼它也可以正常工作。

我不想用mpirun啓動父進程,所以我只是尋找一種方法來動態生成遠程節點上的進程。這可能嗎?

回答

1

我不想啓動父 過程與的mpirun,所以我只是 尋找一種方式來動態產卵在遠程節點上 過程。這可能是 嗎?

我不確定你爲什麼不想用mpirun啓動它?無論如何,只要您點擊MPI_Init(),您就會默認啓動整個MPI機器,這樣您只需傳遞選項而不是依賴默認值即可。

這裏的問題很簡單,當MPI庫啓動時(在MPI_Init()),它看不到任何其他可用的主機,因爲你沒有給出--host或--hostfile選項到mpirun。它不會只是在你說的其他地方啓動進程(事實上,產卵不需要Info主機,所以一般來說它甚至不知道該去哪裏),所以它失敗了。

所以你需要做的 mpirun --host myhost,host2 -np 1 ./parentjob ,或者更一般地說,提供HOSTFILE,最好用可

myhost slots=1 
host2 slots=8 
host3 slots=8 

時隙數和啓動工作這種方式,mpirun --hostfile mpihosts.txt -np 1 ./parentjob這是一個特點,不是一個bug;現在MPI需要找出工作人員去哪裏,如果您沒有在信息中明確指定主機,它會嘗試將其置於未充分利用的地方。這也意味着你不必重新編譯來改變你將產生的主機。

+0

謝謝。我想避免mpirun的原因是我正在寫一個MATLAB mex文件來卸載一些計算。所以我只有一個MATLAB爲我調用的C文件,這意味着主機名需要以編程方式進行指定。我想這意味着我必須以某種方式從我的mex文件的新進程中調用mpirun? – krashalot 2010-11-24 00:25:59