MPICH2在Visual Studio 2008 C++项目下如何设置

 

    网上的很多文章针对性不是很强,自己写一个针对自己电脑环境的配置,这样配置起来快一点。
    我使用的是新版本的MPICH即MPICH2;IDE使用的是Visual Studio 2008 C++。系统是WinXP。
0)首先安装好MPICH2,可以去其官方网站下载
http://www.mcs.anl.gov/research/projects/mpich2/,我使用的最新版本是mpich2-1.0.7-win32-ia32.msi
1)然后用VS创建一个C++的Win32控制台空项目,加入你的资源文件。
2)打开项目属性对话框。
3)进入配置属性
    1>配置为Debug和Release的时候,“C/C++”选项卡里面的“代码生成”选项卡,选择“运行时库”为“多线程(/MT)”;
    2>配置为所有配置的时候,“C/C++”选项卡里面的“常规”选项卡,为“附加包含目录”加入目录“C:/Program Files/MPICH2/Include”;
    3>配置为所有配置的时候,“链接器”选项卡里面的“常规”选项卡,为“附加库目录”加入目录“C:/Program Files/MPICH2/Lib”;
    4>配置为所有配置的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“mpi.lib,fmpich2.lib”。
    5>配置为Debug的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“cxxd.lib”;
    6>配置为Release的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“cxx.lib”。
    7>上面库文件中mpi.lib是用于C语言库,cxx.lib是用于C++语言库(cxxd.lib是debug版本),fmpich2.lib是用于Fortran语言库,可根据使用情况相应增减。
    8>进入常规->(项目默认值)MFC的使用,右边选择->在静态库中使用 MFC,可使生成的.exe文件拷贝到其它电脑也能单独运行。
4)配置完成,可以编译并运行你的并行程序了,呵呵。

 

MPICH2在WinXP下的配置和使用

一、预备工作
0.在自己电脑上建立一个用于并行计算的帐户并设置密码。

二、下载
1. 去官方网站
http://www.mcs.anl.gov/research/projects/mpich2/下载自己电脑的相应版本。
三、安装
2. 用具有管理权限的帐户登陆计算机。
3. 执行mpich2-1.0.7-win32-ia32.msi,选择所有缺省安装。
   这里假设文件安装在D:/Program Files/MPICH2/
4. 在每台计算机上均执行上述过程2、3。
四、配置
5. 运行配置工具
   开始->所有程序->MPICH2->wmpiregister.exe,利用先前建立的计算机帐户名和密码注册。
6. 开始->所有程序->MPICH2->wmpiconfig.exe,搜索并加入已经安装MPICH2的主机,可以用的主机名在搜索完后会显示绿色。
7.点击 [Apply] 保存
8 点击 [OK] 退出
五、测试
9. 打开MPICH2的例子文件:D:/Program Files/MPICH2/examples/examples.sln
10. 按照文章前半部分的方法,编译调试该cpi和cxxpi项目。
11. D:/Program Files/MPICH2/examples/Release/cpi.exe和cxxpi.exe 到每一台机器某一同样路径目录。
     如:C:/Temp/cpi.exe和cxxpi.exe
12. 打开命令窗口,改变当前路径到 c:/temp 下(与前相同)
13. 执行命令
D:/Program Files/MPICH2/bin/mpiexec.exe -hosts 2 hosta 2 hostb 1 -noprompt C:/Temp/cpi.exe
D:/Program Files/MPICH2/bin/mpiexec.exe -hosts 2 hosta 2 hostb 1 -noprompt C:/Temp/cxxpi.exe
-hosts 2表示有两台主机。
hosta 2 hostb 1表示主机hosta开2个进程,主机hostb开1个进程。
注意,多机并行计算时,进程很容易被防火墙挡住,所以计算时最好关闭防火墙。而多核电脑的单机多进程并行计算则不受防火墙影响。
当然直接选择开始->所有程序->MPICH2->wmpiexec.exe进入图形界面运行效果一样,也更直观容易理解了。

附上最简单的测试代码如下:


#include "mpi.h"
#include <cstdio>
#include <math.h>

int main(int argc, char* argv[])
{
    int myid,numprocs;
    int namelen;
    char processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(&argc,&argv);/**//*程序初始化*/
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);/**//*得到当前进程号*/
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);/**//*得到总的进程数*/
    MPI_Get_processor_name(processor_name,&namelen);/**//*得到机器名*/

    fprintf(stderr," Process %d of %d SAY HELLO TO MPI on %s/n",
    myid, numprocs, processor_name);
   
    MPI_Finalize();/**//*结束*/
return 0;

}

你可能感兴趣的:(多线程,C++,防火墙,mfc,语言,fortran)