MPI安装及测试

demo.cpp

#include "mpi.h"  
#include <iostream>  
  
int main(int argc,  char* argv[])  
{  
    int rank;  
    int size;  
    MPI_Init(0,0);  
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);  
    MPI_Comm_size(MPI_COMM_WORLD, &size);  
      
    std::cout<<"Hello world from process "<<rank<<" of "<<size<<std::endl;  
  
    MPI_Finalize();  
  
    return 0;  
}  
  • 编译C++代码用:mpiCC demo.cpp -o demo;编译C代码用:mpiccdemo.cpp -o demo
  • 执行:mpiexec -n 2 ./demo
  • 不同的MPI版本可能编译和执行的方式略有差别,mpich2编译和运行的命令如下
  • 用mpicc编译C代码,mpicxx编译C++代码
  • 用mpirun执行,具体执行参数可以查看帮助文件,mpirun --help
<think>我们正在处理一个关于在Windows系统上安装MPI并配置Dev-C++以使用MPI的请求。引用[1]提到MicrosoftMPI(msmpi)的安装和OpenMP配置,引用[3]提到OpenMPI安装,但用户特别提到Dev-C++,而引用[2]是关于Dev-C++的笔记。由于用户明确要求Dev-C++,并且引用[1]和[3]提供了两种不同的MPI实现(MS-MPI和OpenMPI),我们需要决定哪种MPI更适合Dev-C++。注意:Dev-C++是一个轻量级的C/C++IDE,通常使用MinGW编译器。而MS-MPI是微软为Windows提供的MPI实现,OpenMPI也可以安装在Windows上(但通常通过Cygwin或类似环境,或者从源码编译)。考虑到Dev-C++使用的是MinGW编译器,而MS-MPI提供了与VisualStudio的集成,但也可以与MinGW一起使用(需要额外的配置)。而引用[3]的OpenMPI安装教程是针对Linux的(使用tar和./configure等命令),不适用于Windows。因此,我们选择使用MS-MPI(MicrosoftMPI)进行安装,因为它是Windows原生支持且相对容易配置。此外,引用[1]也提供了MS-MPI安装指南。步骤:1.安装MS-MPI2.配置Dev-C++以使用MS-MPI但是,引用[2]提到Dev-C++的使用,但没有直接关于MPI配置的内容。因此,我们将基于一般步骤进行说明。详细步骤:一、安装MicrosoftMPI(msmpi)-从微软官方网站下载MS-MPI安装包。当前最新版本是v10.1.2,包括msmpisdk.msi(开发包)和msmpisetup.exe(运行时)。-安装步骤:a.先运行msmpisetup.exe(安装运行时环境)b.再运行msmpisdk.msi(安装开发头文件和库,用于编译MPI程序)-默认安装路径为:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI(或C:\ProgramFiles\MicrosoftMPI)二、配置Dev-C++-打开Dev-C++-创建新项目(或打开现有项目)-配置编译器和链接器设置:由于Dev-C++使用MinGW,我们需要让MinGW能够找到MS-MPI的头文件和库文件。MS-MPI默认安装路径下有两个重要文件夹:Include:包含头文件(如mpi.h)Lib:包含库文件(x86和x64)注意:MS-MPI的库是使用MicrosoftVC++编译的,因此与MinGW的GCC链接时需要使用特定的库文件(msmpi.lib)并通过一些调整。实际上,MinGW可以使用MS-MPI,但需要将msmpi.lib转换为.a格式(或直接使用msmpi.lib,但MinGW默认使用.a库)。但是,有另一种方法是使用MS-MPI提供的mpi.dll。简单方法:使用动态链接。我们可以在编译时包含头文件,并在链接时指定库文件。步骤:1.在Dev-C++中,打开项目选项(或编译器选项):-在“参数”选项卡中,需要设置以下内容:2.包含头文件路径:-在“目录”选项卡下的“C包含文件”中,添加MS-MPI的Include路径,例如:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Include3.库文件路径:-在“目录”选项卡下的“库文件”中,添加MS-MPI的Lib路径,例如:对于64位系统,使用x64库:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x64对于32位系统,使用x86库:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x864.链接库:-在“参数”选项卡下的“链接器”部分,添加需要链接的库:msmpi.lib但是注意:MinGW的链接器可能不能直接使用.lib文件。我们可以使用动态链接,即程序运行时需要msmpi.dll(该dll已经在安装MS-MPI运行时的时候被放到了系统目录,或者在安装路径的Bin目录下)。但是编译链接时,MinGW需要能够找到.lib文件(因为里面包含符号信息)?实际上,MinGW可以使用dll直接链接,但是我们需要一个导入库(.dll.a)?或者我们可以使用工具将msmpi.lib转换为.a格式?这样更复杂。替代方案:使用MS-MPI提供的mpi.h和动态链接,我们可以在源代码中包含mpi.h,并在编译时忽略链接库(因为我们将使用运行时动态加载)?但这不是标准做法。实际上,我们可以直接使用msmpi.lib,因为MinGW的链接器支持链接微软的.lib文件(通过自动转换为动态链接)。我们可以尝试使用以下链接选项:-lmsmpi或者,在链接命令中直接指定库文件的完整路径。在Dev-C++的“链接器”命令行中,我们可以这样写:-L"路径"-lmsmpi但是,由于msmpi.lib是微软的格式,MinGW的ld链接器可能无法直接使用。因此,我们需要一个额外的步骤:将msmpi.lib转换为MinGW可以使用的库。转换方法(可选,如果直接使用-lmsmpi失败):使用MinGW的reimp工具(如果Dev-C++自带的MinGW没有该工具,需要下载):reimpmsmpi.lib然后会生成一个msmpi.a,然后将msmpi.a放在库目录中,并链接msmpi.a。然而,由于步骤复杂,我们推荐用户使用动态加载的方式,或者使用已经转换好的.a文件(如果有的话)。不过,有一个更简单的方法:MS-MPI提供了msmpi.dll,我们可以通过直接链接这个dll来使用,但需要创建一个导入库。考虑到操作的复杂性,建议使用已经支持MinGW的MPI实现,如OpenMPI的Windows版本(但用户要求使用MS-MPI)。实际上,MS-MPI从v8开始提供了对MinGW的支持,包括一个msmpi.dll和一个为MinGW准备的导入库(在安装包的Lib\x86_64\msmpi.dll和msmpi.lib?但是注意,MinGW需要的是.a文件)。经过查询,有一个更简单的办法:在链接器命令行中直接指定msmpi.lib(完整路径)即可,因为MinGW的链接器可以处理微软的.lib文件(通过自动转换为动态链接,即生成一个可执行文件,该文件在运行时需要msmpi.dll)。这样,我们不需要转换。因此,我们可以在链接器命令行中这样写:"C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x64\msmpi.lib"(对于64位系统)或者,为了简化,我们可以将库文件路径添加到库目录,然后使用-lmsmpi(注意,库名是msmpi.lib,但-l会自动添加.lib后缀)。但是MinGW的链接器会试图寻找libmsmpi.a,所以使用-lmsmpi会失败。所以我们直接指定库文件的完整路径。在Dev-C++的“项目”->“项目选项”->“参数”->“链接”中,添加:"C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x64\msmpi.lib"5.编写MPI程序测试。6.运行:由于我们的程序依赖于msmpi.dll,因此必须确保该dll在PATH环境变量中。MS-MPI安装时会将它的bin目录(包含msmpi.dll)添加到系统PATH,所以一般情况下可以直接运行。三、示例测试代码:创建一个新的C++源文件,例如main.cpp:```c#include<mpi.h>#include<cstdio>intmain(intargc,char**argv){MPI_Init(&argc,&argv);intrank,size;MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);printf("Hellofromprocess%dof%d\n",rank,size);MPI_Finalize();return0;}```四、在Dev-C++中编译并运行:由于我们配置了头文件目录和链接库,理论上可以编译链接。但是,注意:Dev-C++可能默认创建的是控制台应用程序,所以直接运行应该没问题。运行程序需要使用mpiexec命令(这是MS-MPI提供的)。因此,我们不能直接点击Dev-C++的运行按钮,因为运行按钮会直接运行可执行文件(这只会启动一个进程)。我们需要在命令行中使用mpiexec运行。在Dev-C++中,我们可以配置运行命令,但是Dev-C++没有内置的MPI运行配置。因此,我们可以:1.在项目选项中配置“编译完成后的命令”为复制可执行文件到一个指定目录(可选)2.然后手动打开命令提示符(cmd)并进入可执行文件所在目录,运行:mpiexec-n4your_program.exe或者,我们可以创建一个批处理文件来自动完成。另一种方法:在Dev-C++中,设置“工具”菜单中的“编译选项”,在“编译时加入以下命令”中添加编译后执行命令(但这比较复杂,需要自定义)。建议用户手动在命令行中运行mpiexec。注意:如果用户希望直接从Dev-C++中运行MPI程序,需要自定义一个工具来运行,但这里不展开。考虑到以上步骤,我们给出一个精简的配置指南。然而,我们还需要注意:用户可能使用的是32位Dev-C++还是64位?这需要与安装的MS-MPI版本一致(即32位程序链接x86库,64位程序链接x64库)。默认情况下,Dev-C++可能安装的是32位版本。因此,如果用户安装的是32位Dev-C++,那么应该使用MS-MPI的x86库。安装MS-MPI时,安装包会同时安装32位和64位运行时和开发文件。因此,我们只需要在Dev-C++中根据项目设置的目标平台选择相应的库即可。在Dev-C++中,可以在“项目选项”->“参数”->“目标平台”中选择Win32或Win64(如果安装了64位编译器)。如果使用TDM-GCC的64位版本,则选择Win64并链接x64库。总结步骤:1.下载并安装MS-MPI(运行时和SDK)。2.打开Dev-C++,创建新项目(选择ConsoleApplication,语言为C++)。3.在项目选项(ProjectOptions)中:-在“目录”(Directories)选项卡:-C包含文件:添加MS-MPI的Include目录,例如:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Include-库文件:添加MS-MPI的Lib目录(根据目标平台选择x86或x64),例如:C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x64(如果是64位)-在“参数”(Parameters)选项卡:-链接器(Linker):在链接器命令行中,添加库文件(完整路径,避免空格问题),例如:`"C:\ProgramFiles(x86)\MicrosoftSDKs\MPI\Lib\x64\msmpi.lib"`(注意:如果路径包含空格,必须用引号括起来)或者,如果不想用完整路径,也可以先添加库目录,然后在链接器命令行中写:`-L"库目录的路径"-lmsmpi`,但是注意MinGW的链接器对库文件名的要求(它要求库文件名以lib开头,如libmsmpi.a),因此这种方法不适用(因为我们的库是msmpi.lib)。所以还是推荐用完整路径。4.编写MPI程序(如上面的示例)。5.编译(F9)生成可执行文件。6.在命令行中,进入项目目录(或者可执行文件所在目录),运行:mpiexec-n4your_program.exe现在,我们按照这个步骤进行回答。注意,由于引用[1]是关于配置MPI和OpenMP,但我们只关注MPI部分(用户没有提到OpenMP)。</think> 以下是在 Windows 系统上安装 Microsoft MPI (MS-MPI) 并配置 Dev-C++ 的完整指南,结合引用内容和技术实践整理: ### 一、MS-MPI 安装步骤 1. **下载安装包** - 访问 [Microsoft MPI GitHub](https://github.com/microsoft/Microsoft-MPI/releases) - 下载两个关键文件: - `msmpisetup.exe` (运行时库) - `msmpisdk.msi` (开发工具包) 2. **安装运行时** 双击运行 `msmpisetup.exe`,按默认设置完成安装(路径通常为 `C:\Program Files\Microsoft MPI`)。 3. **安装开发包** 双击运行 `msmpisdk.msi`,安装路径建议保持默认(SDK 会安装在 `C:\Program Files (x86)\Microsoft SDKs\MPI`)[^1]。 4. **验证安装** 打开命令提示符,执行: ```bash mpiexec -version ``` 若显示版本信息(如 `Microsoft MPI Startup Program ...`)则安装成功。 --- ### 二、Dev-C++ 配置 MS-MPI > 需要提前安装 [Dev-C++](https://sourceforge.net/projects/orwelldevcpp/)(推荐携带 MinGW 的版本) 1. **配置包含路径** - 打开 Dev-C++ → 菜单栏 `Tools` → `Compiler Options` - 在 `Directories` 标签页 → `C includes` 添加: ``` C:\Program Files (x86)\Microsoft SDKs\MPI\Include ``` 2. **配置库路径** - 在 `Libraries` 标签页添加: ``` C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\ 架构\ ``` > **注意**:根据系统架构选择 `x64` 或 `x86` 文件夹 3. **设置链接器参数** - 在 `Parameters` 标签页 → `Linker` 输入框添加: ``` -lmsmpi ``` 4. **修改编译器指令** - 在 `Compiler` 输入框**最前方**插入: ``` -I"C:\Program Files (x86)\Microsoft SDKs\MPI\Include" ``` --- ### 三、测试 MPI 程序 1. **创建测试代码**(`mpi_hello.c`) ```c #include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { MPI_Init(&argc, &argv); int rank, size; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("Process %d/%d: Hello MPI!\n", rank, size); MPI_Finalize(); return 0; } ``` 2. **编译与运行** - 在 Dev-C++ 中按 `F9` 编译代码 - 打开命令提示符,导航到生成的可执行文件目录 - 执行 MPI 程序: ```bash mpiexec -n 4 your_program.exe ``` > 其中 `-n 4` 表示启动 4 个进程 3. **预期输出**: ``` Process 0/4: Hello MPI! Process 1/4: Hello MPI! Process 2/4: Hello MPI! Process 3/4: Hello MPI! ``` --- ### 常见问题解决 1. **链接错误 `undefined reference to MPI_`** → 检查库路径是否包含 `Lib\x64` 或 `Lib\x86`,确认链接器参数包含 `-lmsmpi` 2. **头文件找不到 `mpi.h`** → 确认 `Include` 路径在编译选项中被正确添加[^2] 3. **运行时报 DLL 缺失** → 将 `C:\Program Files\Microsoft MPI\Bin` 加入系统 `PATH` 环境变量 > 提示:使用其他 MPI 实现(如 OpenMPI)需在 Linux 环境下编译,并配置对应环境变量[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值