注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

平安甜橙博客

家俭则兴,人勤则健,能勤能俭,永不贫贱

 
 
 

日志

 
 
 
 

cygwin下HPC开发环境的搭建  

2014-11-20 18:55:54|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

需要软件及配置,首先是CYGWin下需要安装的软件包。

并行计算环境的搭建需要rsh-server 以及rlogin的支持,所以需要安装这两个包,这两个包位于Net->inetdutils下,安装时选择安装即可。

如果需要开发基于OpenGL的程序,请安装Graphics下的freeglut包以及opengl

mpich2的安装需要perl的支持,请安装Perl下的perl包。 mpich2官方网站http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz

 

配置并行环境:

系统rsh的配置:inetd 服务包的配置文件位于/etc/inetd.conf inetd的每次启动都会去读取这个文件。

注销掉不需要的服务:只留下rlogindrshd两个服务。通过以下的命令

 $ inetd --install-as-service

 $ inetd --remove-as-service

来把inetd安装为系统服务或者注销。

通过如下的命令来重启或者停止inetd服务。

 $  net start inetd

 $  net stop inetd

通过$ inetd --install-as-service以及$  net start inetdinetd服务启动。

在当前用户目录$HOME下创建文件$touch .rhosts 里面写入你希望不用密码就可以登陆本机的主机名称,并把权限设置为644

$ cd $HOME

$ touch .rhosts

$ echo “localhost” > .rhosts

$ chmod 644 .rhosts

然后用rsh localhost 命令测试是否可以无需密码验证即可登入。

如果不能需要检查/etc下的hosts以及hosts.equiv文件。

/etc/下面创建hosts.equiv文件,里面是你允许登入的主机名称和用户名,中间用tab键隔开,同rhosts。 hosts.equiv文件的具体用法参考:http://www.unet.univie.ac.at/aix/files/aixfiles/hosts.equiv.htm 里面有详细的用例。可同时参考我的另一篇文章,关于rh4rsh的设定一文。

 

# See "man 8 inetd" for more information.

# If you make changes to this file, either reboot your machine or restart

# inetd:

#   "net stop inetd"

#   "net start inetd"

# The inetd will then re-read this file.

# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>

#

echo    stream  tcp     nowait  root    internal

echo    dgram   udp     wait    root    internal

discard stream  tcp     nowait  root    internal

discard dgram   udp     wait    root    internal

daytime stream  tcp     nowait  root    internal

daytime dgram   udp     wait    root    internal

chargen stream  tcp     nowait  root    internal

chargen dgram   udp     wait    root    internal

time    stream  tcp     nowait  root    internal

time    dgram   udp     wait    root    internal

#

# The external services are typically called via 'tcpd' for

# security reasons, eg.

# ftp   stream  tcp     nowait  root    /usr/sbin/tcpd in.ftpd

#

# but tcpd is not part of the inetutils, unfortunately.

# Nevertheless there's a port contributed by Prentis Brooks <prentis@aol.net>

#

# We are calling the services here directly.

#

# These are standard services.

#

#ftp     stream  tcp     nowait  root    /usr/sbin/in.ftpd in.ftpd

#telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd in.telnetd

#

# Shell, login, exec and talk are BSD protocols.

#

shell   stream  tcp     nowait  root    /usr/sbin/in.rshd in.rshd -L

login   stream  tcp     nowait  root    /usr/sbin/in.rlogind in.rlogind

#exec    stream  tcp     nowait  root    /usr/sbin/in.rexecd in.rexecd

#talk    dgram   udp     wait    root    /usr/sbin/in.talkd in.talkd

#ntalk   dgram   udp     wait    root    /usr/sbin/in.talkd in.talkd

#

# The Internet UUCP service.

#

#uucp    stream  tcp     nowait  uucp    /usr/sbin/in.uucpd in.uucpd

#

# Tftp service is provided primarily for booting.  Most sites

# run this only on machines acting as "boot servers."

#

# tftp  dgram   udp     wait    nobody  /usr/sbin/in.tftpd in.tftpd

下面就进入到了mpi的安装。

mpi的实现版本有许多。开源的主要有mpich 和 lammpi。个人比较倾向于mpich,所以文中的安装以mpich为例。mpich目前的版本主要有mpich1.2 mpich2,由于mpich2实现的是mpi2的标准,是以后的发展趋势,所以文中选用了mpich2-1.0.3作为本机上的mpi版本。

mpich2安装过程如下:

 

 

 

$ tar zxvf mpich2-1.0.3.tar.gz

$ cd mpich2-1.0.3

$ ./configure –-prefix=/usr/local/mpich2-1.0.3 –-enable-cxx --disable-f77 --disable-f90

$ make && make install

附注:因为我的开发中不需要fortran,所以明白的disable掉了。增加了C++ binding

安装完成后,需要设置mpich的路径, 在$HOME目录下,修改.bash_profile文件,在其中增加如下部分:

export MPICH2_HOME=/usr/local/mpich2-1.0.3

export PATH=$MPICH2_HOME/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/mpich2-1.0.3/lib:$LD_LIBRARY_PATH

$HOME目录下创建.mpd.conf文件,包含“secretword=<secretword>”行,并把权限设置为600.

$ cd $HOME

$ touch .mpd.conf

$ echo “secretword=abcdef” > .mpd.conf

$ chmod 600 .mpd.conf

下面测试mpi是否可用了。

 $ mpd &

 $ mpdtrace

 $ mpdallexit

第一条命令启动进程管理工具mpd,如果成功,第二条会输出主机名称。最后一条退出所有的mpd进程。

如果是一个集群,在文件mpd.hosts定义的所有主机(或者部分主机)上启动deamon进程。

$ mpdboot -n <number to start> -f  mpd.hosts

其中启动时指定的数目可以比文件mpd.hosts中指定的主机数目+1小,但是不能比mpd.hosts中指定的主机数目+1大。无论本地的主机名称是否在mpd.hosts文件中指定,mpd都是在运行的。如果你只打算在本机上模拟多个进程,就不需要这一步了。

下面进行实例的测试:

到安装目录所在的examples目录。并行执行计算pi的程序cpi

$ cd /usr/local/mpich2-1.0.3/examples

$ mpiexec -n 5 ./cpi

表示用5个进程执行cpi程序。

在我的机器上测试结果如下:

在编译mpi的过程中,加入了C++ bindings , 而C++跟stdio.h定义的SEEK_SET, SEEK_CUR, and SEEK_END.有冲突,官方描述如下:

// There is a name conflict between stdio.h and the MPI C++ binding

 // with respect to the names SEEK_SET, SEEK_CUR, and SEEK_END.  MPI

 // wants these in the MPI namespace, but stdio.h will #define these

 // to integer values.  #undef'ing these can cause obscure problems

 // with other include files (such as iostream), so we instead use

 // #error to indicate a fatal error.  Users can either #undef

 // the names before including mpi.h or include mpi.h *before* stdio.h

 // or iostream. 

解决方案中的一个就是在包含mpi.h时,要放在stdio.h或者iostream前面。

另外关于opengl的使用说明需要参考/usr/share/doc/opengl-1.1.0目录下的README.txt里面有库的详细调用情况。(在link时需要的主要事项。)

Reference:

1. MPICH2 user-install doc

  评论这张
 
阅读(75)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018