在mpi环境下用多个线程进行自然数求和

在mpi环境下用多个线程进行自然数求和

实验前提:

  • mpi环境已搭建;
  • 代码编译器:visual studio2022
    环境搭建在我主页上传的资源里,手把手搭建环境

实验要求:

1+2+3+…+10000。
1.使用100个进程;
2.进程0计算1+2+…+100
进程1计算101+102+…+200
进程99计算9901+9902
+…+10000;
3.调用计时函数,分别输出每
个进程的计算时间;

实验内容

实验步骤:创建一个C++控制台程序:

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

// 计算从start到end的和
long long sum(int start, int end) {
    long long result = 0;
    for (int i = start; i <= end; ++i) {
        result += i;
    }
    return result;
}

int main(int argc, char* argv[]) {
    int rank, size;
    long long total_sum = 0;
    int start, end;
    double start_time, end_time;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    // 计算每个进程的工作范围
    int total_numbers = 10000;
    int chunk_size = total_numbers / size;
    int remainder = total_numbers % size;

    if (rank < remainder) {
        // 前remainder个进程多处理一个数
        start = rank * (chunk_size + 1) + 1;
        end = start + chunk_size;
    }
    else {
        // 其余进程
        start = rank * chunk_size + remainder + 1;
        end = start + chunk_size - 1;
    }

    // 开始计时
    start_time = MPI_Wtime();

    // 计算部分和
    long long partial_sum = sum(start, end);

    // 结束计时
    end_time = MPI_Wtime();

    // 输出每个进程的计算时间和范围
    printf("Process %d computed sum from %d to %d in %.6f seconds\n", rank, start, end, end_time - start_time);

    // 将部分和汇总到进程0
    MPI_Reduce(&partial_sum, &total_sum, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD);

    // 进程0输出总和
    if (rank == 0) {
        printf("Total sum from 1 to %d is %lld\n", total_numbers, total_sum);
        printf("Number of processes used: %d\n", size);
    }

    MPI_Finalize();
    return 0;
}

编译生成exe文件
在这里插入图片描述
这里要知道exe生成路径;可以
在顶部菜单栏中,选择"生成" > “生成解决方案”。 这将编译你的 MPI 程序并生成可执行文件 (.exe)。

找到生成的 .exe 文件的位置。通常位于你的项目目录的 bin\Release 或 bin\Debug 子目录中。

注意:

由于 Visual Studio 的调试配置确实存在一些限制,无法完全支持 MPI 程序的多进程运行。

一种解决方案是:

在 Visual Studio 中编写和编译你的 MPI 程序,但不要直接在 Visual Studio 中运行。

转到命令行或终端,切换到你的程序所在目录。

使用 mpiexec 命令手动启动你的 MPI 程序,并指定要使用的进程数,例如:

mpiexec -n 100 ./your_mpi_program.exe

这里的100是你想使用的进程数,可以根据需要调整。
这里我是路径:D:\VsProject\Project2\Project2\x64\Debug

程序为:Project2.exe
在这里插入图片描述

在cmd中运行:
请添加图片描述

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值