linux下使用mpi求自然数和
搭建MPI并行计算环境,编写 MPI程序,求和 1 +2+3+....+1 0000。 要求:
-
1.使用100个进程;
-
2.进程0计算1 +2+...+100,
进程1计算101+ 102+...+ 200,
.....
进程99计算9901 + 9902+... +10000;
-
3.调用计时函数,分别输出每个进程的计算时间;
-
4.需使用MPI集群通信函数和同步函数
基本概念
解释的很好:MPI 与并行计算入门 - 知乎 (zhihu.com)
安装
下载:Downloads | MPICH
配置文件设置 ./configure --disable-fortran
编译安装 make -j 8; (设置8个进程进行编译会快一些)sudo make install
相关执行脚本:mpic++ mpicc mpirun mpichversion mpiexec mpicxx mpifort mpivars
确保已安装环境gcc 、cmake、gfortran,如下操作

下载mpi压缩包,解压后进行配置:


配置完后,执行编译安装

添加环境变量,注意这里的路径一定是前面配置时设置的路径,这里踩坑了
vim ~./bashrc 修改后source启用

测试安装完成

代码编写
#include <stdio.h>
#include <mpi.h>int main(int argc, char *argv[]) {int rank, size;MPI_Init(&argc, &argv); // 初始化MPI环境MPI_Comm_rank(MPI_COMM_WORLD, &rank); // 获取进程编号MPI_Comm_size(MPI_COMM_WORLD, &size); // 获取进程总数if (size != 100) {if (rank == 0) {printf("需要100个进程,请确保启动时指定了100个进程。\n");}MPI_Finalize();return 1;}// 每个进程计算的起点和终点int start = rank * 100 + 1;int end = (rank + 1) * 100;// 计时开始double start_time = MPI_Wtime();// 计算部分和long long local_sum = 0;for (int i = start; i <= end; i++) {local_sum += i;}// 计时结束double end_time = MPI_Wtime();double elapsed_time = end_time - start_time;// 输出每个进程的计算时间printf("进程 %d 计算时间: %f 秒\n", rank, elapsed_time);// 使用MPI_Reduce收集所有部分和,结果存储在进程0long long total_sum = 0;MPI_Reduce(&local_sum, &total_sum, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD);// 进程0输出最终总和if (rank == 0) {printf("1 + 2 + ... + 10000 的总和为: %lld\n", total_sum);}MPI_Finalize(); // 结束MPI环境return 0;
}
代码分析
-
MPI初始化
MPI_Init: 初始化MPI环境,所有进程开始运行。MPI_Comm_rank: 获取当前进程的编号(rank)。MPI_Comm_size: 获取总进程数(size)。
-
计时函数
使用MPI_Wtime()计算每个进程的运行时间。 -
进程间通信
MPI_Reduce: 将所有进程的部分和累加到进程0。MPI_SUM: 指定归约操作为求和。
-
同步
MPI中的MPI_Reduce隐含了同步,因为它会等待所有进程计算完成。
运行方法
假设代码文件名为mpi_sum.c,在终端中执行以下命令:
mpicc mpi_sum.c -o mpi_sum # 编译代码
mpirun -np 100 ./mpi_sum # 使用100个进程运行程序
运行结果

相关文章:
linux下使用mpi求自然数和
搭建MPI并行计算环境,编写 MPI程序,求和 1 23....1 0000。 要求: 1.使用100个进程; 2.进程0计算1 2...100, 进程1计算101 102... 200, ..... 进程99计算9901 9902... 10000; 3.调用计时函数,分别输出每个进程的计算时间; 4.需使用MPI集群通信函数和同…...
WebGl学习使用attribute变量绘制一个水平移动的点
在WebGL编程中,attribute变量是一种特殊类型的变量,用于从客户端传递数据到顶点着色器。这些数据通常包括顶点的位置、颜色、纹理坐标等,它们是与每个顶点直接相关的信息。attribute变量在顶点着色器中声明,并且对于每个顶点来说都…...
机器学习四大框架详解及实战应用:PyTorch、TensorFlow、Keras、Scikit-learn
目录 框架概述PyTorch:灵活性与研究首选TensorFlow:谷歌加持的强大生态系统Keras:简洁明了的高层 APIScikit-learn:传统机器学习的必备工具实战案例 图像分类实战自然语言处理实战回归问题实战 各框架的对比总结选择合适的框架 1…...
linux源码安装slurm以及mung和openssl
一、源码安装munge 1、编译安装munge (1)下载munge地址:https://github.com/dun/munge/releases (2)解压编译安装: 1 2 3 4 5 6 7 8 创建/data目录 复制文件munge-0.5.15.tar.xz 到/data目录下 tar -Jx…...
分享蓝牙耳机A2DP音频卡顿原因及解决思路
背景 最近一直在更新博客,我觉得写博客有三个好处,一是很多东西时间久了就会忘,记下来方便自己以后回忆和总结,二是记下来可以加深自己对知识的理解,三是可以知识分享,方便他人。 言归正传,今天…...
Mac 下编译 libaom 源码教程
AV1 AV1是一种开放、免版税的视频编码格式,由开放媒体联盟(AOMedia)开发,旨在提供高压缩效率和优秀的视频质量。AV1支持多种分辨率,包括SD、HD、4K和8K,并适用于视频点播(VOD)、直播…...
【成品设计】基于Arduino平台的物联网智能灯
《基于Arduino平台的物联网智能灯》 整体功能: 这个任务中要求实现一个物联网智能灯。实际测试环境中要求设备能够自己创建一个热点,连接这个热点后能自动弹出控制界面(强制门户)。 功能点 基础功能 (60分) 要求作品至少有2个灯…...
安装和配置k8s可视化UI界面dashboard-1.20.6
安装和配置k8s可视化UI界面dashboard-1.20.6 1.环境规划2.初始化服务器1)配置主机名2)设置IP为静态IP3)关闭selinux4)配置主机hosts文件5)配置服务器之间免密登录6)关闭交换分区swap,提升性能7&…...
VLAN:虚拟局域网
VLAN:虚拟局域网 交换机和路由器协同工作后,将原先的一个广播域,逻辑上,切分为多个广播域。 第一步:创建VLAN [SW1]dispaly vlan 查询vlan VID(VLAN ID):用来区分和标定不同的vlan 由12位二进制构成 范围: 0-4…...
利用可解释性技术增强制造质量预测模型
概述 论文地址:https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习(ML)模型性能的方法。该方法已用于铣削质量预测,这一过程首先训练 ML 模型,然后使用可解释性技术识别不需要的特征并去…...
FlexMatch: Boosting Semi-Supervised Learning with Curriculum Pseudo Labeling
FlexMatch: Boosting Semi-Supervised Learning with Curriculum Pseudo Labeling 摘要:引言:背景3 flexMatch3.1 Curriculum Pseudo Labeling3.2 阈值预热3.3非线性映射函数实验4.1 主要结果4.2 ImageNet上的结果4.3收敛速度加速4.4 消融研究5 相关工作摘要: 最近提出的Fi…...
Spring Cloud 3.x 集成eureka快速入门Demo
1.什么是eureka? Eureka 由 Netflix 开发,是一种基于REST(Representational State Transfer)的服务,用于定位服务(服务注册与发现),以实现中间层服务的负载均衡和故障转移ÿ…...
线性代数 矩阵
一、矩阵基础 1、定义 一组数按照矩形排列而成的数表;形似行列式,区别点是 矩阵行列式符号()或[]| |形状方阵或非方阵方阵本质数表数属性A|A|是A诸多属性中的一种维度m *n (m 与n可以相等也可以不相等)n*n 同型矩阵 若A、B两个矩阵都是mn 矩阵&#x…...
【C语言】使用结构体实现位段
文章目录 一、什么是位段二、位段的内存分配1.位段内存分配规则练习1练习2 三、位段的跨平台问题四、位段的应用五、位段使用的注意事项 一、什么是位段 在上一节中我们讲解了结构体,而位段的声明和结构是类似的,它们有两个不同之处,如下&…...
univer实现excel协同
快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…...
JavaScript进阶笔记--深入对象-内置构造函数及案例
深入对象 创建对象三种方式 利用对象字面量new Object({…})利用构造函数 // 1. 字面量创建对象const obj1 {name: pig,age: 18};console.log(obj1); // {name: "pig", age: 18}// 2. 构造函数创建对象function Pig(name, age) {this.name…...
网络爬虫自动化Selenium模拟用户操作
自动化测试和网络爬虫在现代软件开发中占据着重要的位置。它们通过自动化用户操作,减少了人工重复操作的时间成本。Selenium作为一个功能强大且应用广泛的自动化工具,不仅能在不同的浏览器中运行自动化测试,还能进行跨平台测试,并允许与多种编程语言集成。本教程将介绍如何…...
尚硅谷rabbitmq 2024 流式队列2024指定偏移量 第55节答疑
rabbitmq的stream: 4、对比 autoTrackingstrategy方式:始终监听Stream中的新消息(狗狗看家,忠于职守)指定偏移量方式:针对指定偏移量的消息消费之后就停止(狗狗叼飞盘,回来就完) 这两种分别怎么写?java 在 RabbitMQ 中,…...
NSSCTF-WEB-pklovecloud
目录 前言 正文 思路 尝试 结尾 前言 许久未见,甚是想念. 今天来解一道有意思的序列化题 正文 思路 <?php include flag.php; class pkshow {function echo_name(){return "Pk very safe^.^";} }class acp {protected $cinder;public $neutron;public $…...
深入Postman- 自动化篇
前言 在前两篇博文《Postman使用 - 基础篇》《玩转Postman:进阶篇》中,我们介绍了 Postman 作为一款专业接口测试工具在接口测试中的主要用法以及它强大的变量、脚本功能,给测试工作人员完成接口的手工测试带来了极大的便利。其实在自动化测试上,Postman 也能进行良好的支…...
YimMenu终极配置指南:从零开始掌握GTA V高级菜单工具
YimMenu终极配置指南:从零开始掌握GTA V高级菜单工具 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...
UEFITool解析指南:三步骤掌握固件逆向分析的核心技术
UEFITool解析指南:三步骤掌握固件逆向分析的核心技术 【免费下载链接】UEFITool UEFI firmware image viewer and editor 项目地址: https://gitcode.com/gh_mirrors/ue/UEFITool UEFITool是一款功能强大的UEFI固件分析工具,能够帮助你深入探索计…...
UVa 366 Cutting Up
题目描述 拼布者经常需要将布料切割成 111 \times 111 的小正方形。他们有一种特殊工具(旋转切割刀),可以一次切割多层布料,切割层数的上限由布料类型决定(题目输入的第一个参数 KKK)。切割时,无…...
Rulebook-AI:用规则引擎为AI智能体构建可控决策框架
1. 项目概述:一个基于规则的AI智能体框架最近在探索如何让AI智能体(Agent)的行为更可控、更符合业务逻辑时,我遇到了一个挺有意思的开源项目:botingw/rulebook-ai。乍一看这个名字,可能会觉得它又是一个试图…...
FinalBurn Neo:终极开源街机模拟器技术深度解析
FinalBurn Neo:终极开源街机模拟器技术深度解析 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo(简称FBNeo)是一款专业级的开源街机模拟器,…...
开源机械臂技能化控制:从硬件驱动到应用集成的实践指南
1. 项目概述:从开源机械臂到技能控制台最近在机器人控制领域,一个名为esmatcm/openclaw-control-console-skill的项目引起了我的注意。乍一看,这像是一个围绕开源机械臂OpenClaw的控制台技能项目。作为一名长期混迹于硬件开源社区和机器人应用…...
Midjourney Mud印相实战手册(含12组高保真历史文物级Mud Prompt库+对应seed校验表)
更多请点击: https://intelliparadigm.com 第一章:Midjourney Mud印相的技术起源与美学范式 Mud印相(Mud Printing)并非传统暗房工艺的直系衍生物,而是Midjourney V6 模型在高语义控制模式下催生的一种跨模态视觉隐喻…...
【独家首发】ElevenLabs马拉雅拉姆文支持状态实测报告(含ISO 639-2代码验证、音素对齐误差率<0.8%)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs马拉雅拉姆文支持的现状与战略意义 ElevenLabs 作为全球领先的语音合成平台,自2023年11月起正式将马拉雅拉姆语(Malayalam,ISO 639-1: ml)纳入…...
【Midjourney胶片摄影风格终极指南】:20年影像工程师亲授7种不可外传的参数组合与暗房逻辑复刻法
更多请点击: https://intelliparadigm.com 第一章:胶片摄影的数字复刻本质与Midjourney底层成像机制 胶片摄影的“颗粒感”“色偏”“晕影”并非缺陷,而是光化学反应在银盐乳剂中非线性响应的物理印记;Midjourney 并不模拟胶片&a…...
SingleFile CLI架构解析:高性能网页批量保存解决方案与实战指南
SingleFile CLI架构解析:高性能网页批量保存解决方案与实战指南 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile SingleFile…...
