Windows下C语言如何用MPI并行编程?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 C语言 正文
  1. 安装 MPI 环境:在 Windows 上,最主流的选择是 Microsoft MPI (MS-MPI)。
  2. 配置开发环境:将 MPI 的头文件和库文件路径集成到你的 C 语言开发环境中(这里以 Visual Studio 为例,因为它对 MS-MPI 支持最好)。
  3. 编写 "Hello World" MPI 程序:一个最简单的例子来验证环境是否配置成功。
  4. 编译和运行 MPI 程序:使用 MPI 的编译和运行命令。
  5. 进阶与资源:提供更多学习资源和高级主题。

第 1 步:安装 MPI 环境 (Microsoft MPI)

Microsoft MPI 是微软官方支持的 MPI 实现,与 Windows 系统集成度高,是 Windows 平台上的首选。

windows c语言mpi
(图片来源网络,侵删)
  1. 下载 MS-MPI SDK

    • 访问 Microsoft MPI 官方下载页面:https://aka.ms/msmpisdk
    • 你会看到一个名为 Microsoft MPI SDK 的安装程序,下载它。
  2. 安装 MS-MPI SDK

    • 运行下载的安装程序(MicrosoftMPI_SDK_x64.msi)。
    • 按照安装向导的提示完成安装,默认安装路径通常是 C:\Program Files (x86)\Microsoft SDKs\MPI
    • 安装程序会自动将 C:\Program Files (x86)\Microsoft SDKs\MPI\Bin\ 添加到系统的 PATH 环境变量中,这样你就可以在命令行中直接使用 mpiexec 命令了。
  3. 验证安装

    • 打开一个新的 命令提示符 (CMD)PowerShell 窗口。
    • 输入以下命令:
      mpiexec
    • 如果安装成功,你会看到 mpiexec 的帮助信息,而不是 "'mpiexec' 不是内部或外部命令..." 这样的错误提示。

第 2 步:配置开发环境 (以 Visual Studio 2025/2025 为例)

虽然你可以用任何文本编辑器写代码,然后用命令行编译,但在 Visual Studio 中配置会方便得多。

  1. 安装 Visual Studio

    • 确保你安装了 Visual Studio。Community 版本是免费的,并且完全足够。
    • 在安装 Visual Studio 时,请确保勾选了 “使用 C++ 的桌面开发” (Desktop development with C++) 工作负载,这个工作负载包含了 C/C++ 编译器,这对于编译 MPI 程序是必需的。
  2. 配置项目属性

    • 打开 Visual Studio,创建一个新的 C++ 空项目 (Visual C++ -> Windows Desktop -> Console App)。

    • 解决方案资源管理器 中,右键点击你的项目,选择 “属性” (Properties)

    • 在弹出的属性页中,确保顶部的 “配置”“所有配置 (All Configurations)”“平台”“x64”,MPI 程序通常在 64 位系统上运行。

    • 配置包含目录 (Include Directories)

      • 在左侧导航栏中,展开 “配置属性” (Configuration Properties) -> “C/C++” -> “常规” (General)
      • 找到 “附加包含目录” (Additional Include Directories)
      • 点击下拉框,选择 “编辑” (Edit...)
      • 添加 MS-MPI 的头文件路径:
        C:\Program Files (x86)\Microsoft SDKs\MPI\Include

        如果你的 Visual Studio 是 32 位的,可能需要添加 C:\Program Files\Microsoft SDKs\MPI\Include,但通常我们都用 64 位编译器。

    • 配置库目录 (Library Directories)

      • 在左侧导航栏中,展开 “配置属性” (Configuration Properties) -> “链接器” (Linker) -> “常规” (General)
      • 找到 “附加库目录” (Additional Library Directories)
      • 点击下拉框,选择 “编辑” (Edit...)
      • 添加 MS-MPI 的库文件路径:
        C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64

        同样,根据你的平台选择 x64x86 目录。

    • 配置链接器输入 (Linker Input)

      • 在左侧导航栏中,展开 “配置属性” (Configuration Properties) -> “链接器” (Linker) -> “输入” (Input)
      • 找到 “附加依赖项” (Additional Dependencies)
      • 点击下拉框,选择 “编辑” (Edit...)
      • 添加 MS-MPI 的核心库文件:
        mpi.lib

你的 Visual Studio 项目已经配置好,可以用来编译 MPI 程序了。


第 3 步:编写 "Hello World" MPI 程序

这是一个经典的 MPI 程序,它会显示每个进程的编号和总进程数。

  1. 在 Visual Studio 项目中,找到 main.c 文件(或你创建的 .c 文件),将以下代码粘贴进去:
// main.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
    // 1. 初始化 MPI 环境
    // MPI_Init 会解析 argc 和 argv,并启动 MPI 执行环境
    MPI_Init(&argc, &argv);
    // 2. 获取当前进程的编号(Rank)
    // Rank 是一个从 0 到总进程数-1 的整数,用于标识每个进程
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    // 3. 获取 MPI 通信域中的总进程数
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    // 4. 打印 "Hello World" 消息
    // 每个进程都会打印自己的信息
    printf("Hello from process %d of %d\n", world_rank, world_size);
    // 5. 终止 MPI 环境
    // MPI_Finalize 会清理所有 MPI 资源
    MPI_Finalize();
    return 0;
}

第 4 步:编译和运行 MPI 程序

在 Visual Studio 中,直接按 F5Ctrl+F5 运行程序,它只会使用一个进程(因为你的本地机器只有一个 "节点"),为了看到 MPI 的并行效果,你必须使用 mpiexec 命令。

在 Visual Studio 中运行 (推荐)

  1. 设置启动命令

    • 右键点击项目,选择 “属性” (Properties)
    • 在左侧导航栏中,展开 “配置属性” (Configuration Properties) -> “调试” (Debugging)
    • “命令” (Command) 字段中,输入 mpiexec
    • “参数” (Arguments) 字段中,输入 -n 4 "$(TargetPath)"
      • -n 4:告诉 mpiexec 启动 4 个进程,你可以根据你的 CPU 核心数来修改这个数字。
      • $(TargetPath):这是 Visual Studio 的宏,会自动替换为你的可执行文件的完整路径(C:\...\x64\Debug\YourProject.exe)。
  2. 运行程序

    • 现在按 F5 或点击 “本地 Windows 调试器” 按钮。
    • Visual Studio 会调用 mpiexec 来启动你的程序,你应该会在 “输出” (Output) 窗口中看到类似下面的结果(顺序可能不同):
    Hello from process 1 of 4
    Hello from process 0 of 4
    Hello from process 3 of 4
    Hello from process 2 of 4

    你会看到 4 行 "Hello" 输出,分别对应 4 个不同的进程。

在命令行中编译和运行

如果你想不依赖 Visual Studio IDE 进行编译,可以使用命令行。

  1. 打开 x64 Native Tools 命令提示符

    在 Windows 开始菜单中,搜索 "x64 Native Tools Command Prompt for VS 2025" (或你安装的 VS 版本),这个终端已经预设好了所有编译环境和库路径。

  2. 编译代码

    • 使用 cl.exe 编译器进行编译。cl.exe 是 Visual Studio 的 C/C++ 编译器。
    • 假设你的代码文件是 main.c,在终端中运行:
      cl main.c /link mpi.lib
    • 这会生成一个 main.exe 文件。
  3. 运行程序

    • 使用 mpiexec 命令运行生成的可执行文件:
      mpiexec -n 4 main.exe
    • 你会看到和在 Visual Studio 中运行时一样的输出结果。

第 5 步:进阶与资源

常见 MPI 函数简介

  • MPI_SendMPI_Recv:MPI 最核心的两个函数,用于进程间的点对点通信,一个进程发送数据,另一个进程接收数据。
  • MPI_Bcast:广播函数,一个进程(根进程)将数据发送到通信域中的所有其他进程。
  • MPI_ScatterMPI_Gather:分散和聚集函数。Scatter 将一个数组中的数据分散到各个进程中,每个进程获得一部分。Gather 则是相反的操作,将各个进程的数据收集到一个数组中。
  • MPI_Reduce:归约函数,对各个进程提供的数据进行某种操作(如求和、求最大值等),并将最终结果存放在一个指定的进程中。

学习资源

  1. 官方文档

  2. 在线教程

    • Introduction to High-Performance Computing for Scientists and Engineers: 这本书有免费的在线版本,其中的 MPI 部分非常经典。
    • YouTube 上的教程: 搜索 "MPI tutorial C" 或 "MPI for beginners",有很多优秀的视频教程。
  3. 更多例子

    可以在 GitHub 上搜索 "MPI examples C",找到大量开源的示例代码。

在 Windows C 语言下使用 MPI 的标准流程是:

  1. 安装 Microsoft MPI SDK。
  2. 配置 Visual Studio 项目的包含目录、库目录和附加依赖项。
  3. 编写 C 代码,并包含 mpi.h 头文件。
  4. 使用 mpiexec -n N your_program.exe 来运行程序,以启动 N 个并行进程。

掌握了这个流程,你就可以开始在 Windows 平台上进行 C 语言的 MPI 并行编程了。

-- 展开阅读全文 --
头像
dede如何调用一二级栏目名称?
« 上一篇 01-22
void main能作为C语言标准主函数吗?
下一篇 » 01-22

相关文章

取消
微信二维码
支付宝二维码

目录[+]