嘗試運行boost::mpi tutorial中的第一個示例時,我無法在兩臺以上的計算機上運行。具體而言,這似乎運行正常:無法在兩臺以上的計算機上運行OpenMPI
mpirun -hostfile hostnames -np 4 boost1
與主機名的每個主機名<node_name> slots=2 max_slots=2
。但是,當我將進程數量增加到5時,它就會掛起。當我超過2臺機器時,我已將slots
/max_slots
的數目減少爲1,結果相同。在節點上,這表明了在任務列表:
<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823
另外,如果我殺了它,我得到這個消息:
node2- daemon did not report back when launched
node3- daemon did not report back when launched
的集羣建立與mpi
和boost
庫訪問在NFS掛載的驅動器上。我是否遇到NFS的僵局?或者,其他事情還在繼續?
更新:要清楚,我正在升壓程序
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
return 0;
}
從@Dirk Eddelbuettel的recommendations,我編譯並運行MPI例如hello_c.c
,如下
#include <stdio.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("Hello, world, I am %d of %d\n", rank, size);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
它在具有多個進程的單臺機器上運行良好,包括進入任何節點並運行。每個計算節點與通過NFS從遠程計算機安裝的工作目錄和mpi/boost目錄完全相同。當從文件服務器運行boost程序時(與boost/mpi以外的節點相同)是本地的),我可以在兩個遠程節點上運行。對於「世界你好」,但是,運行命令mpirun -H node1,node2 -np 12 ./hello
我得到
[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)
,而所有的「Hello World的」打印和它掛在末尾。但是,從遠程節點上的計算節點運行時的行爲不同。
從節點2運行時,「Hello world」和升壓代碼都掛起mpirun -H node1 -np 12 ./hello
,反之亦然。 (掛起的意思與上面相同:ort正在遠程計算機上運行,但未通信回傳。)
事實上,該行爲與mpi庫在本地和計算節點上運行的文件服務器上的運行不同,這表明我可能會遇到NFS死鎖。這是一個合理的結論嗎?假設情況如此,我如何配置mpi來允許我靜態鏈接它?此外,我不知道如何從文件服務器運行時得到的錯誤,有什麼想法?
@Dirk:感謝您的建議。我已經用這些觀察結果更新了我的問題。 – rcollyer 2010-03-23 14:35:48