MPICH2的gethostbyname失败

28

我不理解这个错误信息。我正在尝试在安装了MPICH2版本1.4或1.5到/ opt / mpich2 之后运行一个MPICH2应用程序(两个版本都使用相同的错误失败)。我的MPI应用程序是使用1.3编译的,但我能够在另一台工作站上使用mpi 1.4运行它。我正在Ubuntu 12.04上测试它。

Fatal error in PMPI_Init_thread: Other MPI error, error stack:
MPIR_Init_thread(467)..............: 
MPID_Init(177).....................: channel initialization failed
MPIDI_CH3_Init(70).................: 
MPID_nem_init(319).................: 
MPID_nem_tcp_init(171).............: 
MPID_nem_tcp_get_business_card(418): 
MPID_nem_tcp_init(377).............: gethostbyname failed, localhost (errno 3)
6个回答

22

macOS的解决方案

我在macOS 10.12.1上遇到了这个问题。

解决方法是将127.0.0.1 computername.local添加到/etc/hosts中。您的文件看起来会像这样:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
127.0.0.1   computername.local
255.255.255.255 broadcasthost
::1             localhost 

如果你前往系统偏好设置 > 共享 > 计算机名,你可以更改或检查你的电脑名称。


在我的情况下,我的计算机名称不知何故改变了。我认为在编译和安装MPI时应该保持不变。当我把它改回去后,一切都正常了!但还是感谢您指出了正确的方向! - astroboylrx
我不得不在MacOS 10.14.6上只添加了127.0.0.1 computername(没有.local)。 - Vyassa Baratham

17

对我有用的方法如下:

确保以下1和2的主机名相同:

  1. 终端主机名
  2. "/etc/hosts" 主机名

因此,如果您在终端中键入 cat /etc/hosts,它应该如下所示:

// 127.0.0.1       my_hostname

我的主机名在1和2上不一样,当我把它们改成一样的后,我的MPI程序就可以执行了。

要更改终端主机名,请输入以下命令:sudo scutil --set HostName my_new_host_name

要更改/etc/hosts主机名,请输入以下命令:sudo nano /etc/hosts

然后添加以下行:

127.0.0.1       my_new_hostname

我在原帖发布一年后遇到了完全相同的问题,而这个答案为我提供了解决方案。http://stackoverflow.com/questions/42041706/mpi4py-fatal-error-in-simple-hello-world?noredirect=1#comment71258508_42041706 - aph

6

这个错误表示解析localhost存在问题。请检查你的/etc/hosts文件,确保正确定义了localhost,并且指向127.0.0.1。尝试使用ssh连接localhost,确保它也能正常工作。


ssh到本地主机可以工作。我会尝试寻找其他事情并稍后回来。 - biocyberman
6
以下是需要翻译的内容: 这是我解决问题所需做的事情:通过 sudo scutil --set HostName 设置适当的主机名,然后将新主机名(比如 my_computer.local)添加到 /etc/hosts 文件中,例如 127.0.0.1 my_computer.local。另外,你需要在“共享”设置中启用SSH访问,并将你的公钥添加到 authorized_keys 文件中 (cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys)。 - herrherr

2

谢谢你的回答。我错过了错误信息的第一行。 - biocyberman

0

-1

可能你的 /dev/shm 目录已满,请尝试清理一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接