多核编程提高程序效率的试验(OpenMP和MPICH2)

来源:互联网 发布:淘宝触屏版手机版 编辑:程序博客网 时间:2024/05/17 03:17

最近要做一个程序引擎优化的报告,要达到1500万的数据在1秒内处理完成。先是测试了OpenMP,效果很不错。实现也简单,i7处理器能把处理时间缩短到三分之一左右,基本达到要求。

 

然后作为比较,探讨了多台电脑并性处理的可能性。发现效率也很不错,似乎比自己用OpenMP实现要好。而且通信的时间基本可以忽略,对处理时间没有什么影响,很不错,以后可以又多了一个思路。

 

实现结果如下。

两台电脑传送400byte数据的时间

 

C:/public>mpiexec -hosts 2 kisyu 1 127.0.0.1 1 P2PTest
        wall clock time = 0.000011

 

C:/public>mpiexec -hosts 2 kisyu 1 127.0.0.1 1 P2PTest
        wall clock time = 0.000011

 

C:/public>mpiexec -hosts 2 kisyu 1 127.0.0.1 1 P2PTest
        wall clock time = 0.000011

 

运行同时例子里cpi.exe(计算圆周率)

(cpi.exe intervals:1000000000)
        线程数            1                 2             4                6             8
        时间(本地)   6.244453 3.231248 2.094743 1.862757 1.721809
        时间(远程)  6.255718 3.229636 2.262906 1.832473 1.721826
        两台            3.922634 1.588577 1.639943 1.145696 0.986242

 

这次试验用的MPICH2是与MPI-2相对应的MPICH实现版本,包含了MPI-2相对于MPI-1扩充后的一些功能,比如动态任务管理,并行I/O等。当前最新版本是MPICH2-1.3.2p1

的安装与配置

安装MPICH2 for Microsoft Windows 对系统有如下要求:

1.   Windows 7/2003/XP/ Professional Server 版(不支持Windows 95/98

2.   所有主机必须能够建立TCP/IP 连接

3.    MPICH支持的编译器有:MS VC++ 6.xMS VC++.NET Compaq Visual Fortran 6.x,Intel Fortrangcc,以及g77。安装MPICH,必须以管理员的身份登录。

本次实验使用的是MPICH2 for Microoft Windows 版本是1.3.2p1

下载后直接运行,安装即可。下载地址是:http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads

分为32位和64位,要注意。以管理员的身份登录每台主机,在所有主机上建立一个同样的有管理权限的账户(当然也可以每个机器使用不同的用户名和账户,然后建立一个配置文件,使用命令行的方式运行程序),然后,运行下载的安装文件,将MPICH 安装到每台主机上。安装后会添加一个“MPICH2 Process Manager, Argonne National Lab”的服务,开机时自动运行。并且打开“任务管理器”中的“进程”选项卡,查看会有一个smpd.exe 的进程。

添加 MPICH2 路径到Windows,以便后面可以在任何路径下使用mpiexec:

1.   右击 “My Computer” and 点击 properties.

2.   选择 Advanced 标签.

3.   选择 Environment Variables 按钮.

4.   ”System Variables”下选中 “path”变量并且单击edit. 添加 “C:/Program Files/MPICH2/bin” 到列表的末尾, 注意要将它与前一个路径用分号隔开.

安装好MPICH2 之后还必须对每台计算机进行注册和配置才能使用。其中注册必须每台计算机都要进行,配置只要在主控的计算机执行就行了。注册的目的是,将先前在每台计算机上申请的账号与密码注册到MPICH2 中去,这样MPICH2 才能在网络环境中访问每台主机。配置方法:运行“mpich2/bin目录下的wmpiregister.exe” , 

程序的设置很简单,只要在Account中输入你当前登录Windows所使用的用户名,注意必须是管理员权限.password中输入该用户名对应的密码即可。MPICH2不能使用没有密码的用户,如果当前用户没有密码,则应该为其创建一个,然后再运行wmpiregister进行配置。输入完成后,单击Register进行注册即可。显示Password encrypted into the Registry,即表示注册成功。点击Register按钮,则上面的信息将写入硬盘,否则保存在内存中,再重新启动之后就不存在了。

为了让程序在许多主机上执行,而不需建立配置文件来给出相应的各个主机的信息,主控机必须知道当前可用的主机的信息。这时就需要运行MPICH2的配置程序来进行配置了。

MPICH2提供的配置程序是一个图形界面的程序,可以从“开始->程序->MPICH2->Wmpiconfig.exe”启动。 

Domain下拉菜单中选择当前工作组.点击Get Hosts,可以在下面看到工作组中所有计算机.点击Scan for Version将搜索安装了MPICH2的主机.安装成功的主机将用绿色显示其名称及版本.没有安装的将以灰色显示.

需要注意的事项

1. MPICH2 windows版本需要至少DotNet frameworks 1.1,所以要先下载安装DotNet frameworks1.12.0。建议安装Visual Studio2005,它自带Dotnet frameworks2.0。

2. 假设MPICH2安装在%MPICH2ROOT%目录,下面会有include, lib, bin, examples, jumpshot。将libinclude加入到VC的对应的目录中。examples下是一个例子程序cpi,有c, c++,fortun的源代码。配置时可以使用这个例子进行测试。

3. MPICH2会创建一个服务MPICH2 Process Manager, Argonne National Lab,提供服务的镜像是%MPICH2ROOT%/bin/smpd。这个程序是MPICH2的进程管理器。

4. MPICH2还需要一个帐号来运行。假设创建本地帐号mpiaccount,注意所有参加集群的机器的运行帐号最好一致。

5.如果连接不上本机或某个节点,可以这台电脑上命令行运行“smpd -uninstall”卸载服务,然后运行“smpd -install -phrase behappy”重新安装服务。

 

原创粉丝点击