MPI编程--Parallel Rank

用MPI实现并行排序算法——奇偶交换排序(C++) 本文主要讨论并行排序算法的实现,将串行的奇偶排序算法并行化。同时本文也涉及MPI通信安全方面的讨论,MPI_SendRecv函数提供了有关进程通信的调度,用它替代send和recv函数使程序更安全 阅读详情

问题概述
每一个进程随机产生一个数字存储在本地,然后对比所有进程所包含的整个数字集,进行排序,最后将排序号输出。
算法思路
整个程序所要做的就是收集所有进程产生的一个随机数,然后进行排序,最后将排序结果发送给各自进程,最后将排序结果输出。
随机数可以用rand()产生,用MPI_Gather将各自数字收集进0进程,排序选用冒泡排序,排序之后利用MPI_Scatter将排序结果分发给各自进程。最后进行输出。

代码及分析

首先,利用随机数种子在每一个进程中产生随机数模拟
int rank,size,i,j;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
srand(rank*1000);
int send = rand();
收集所有随机数进入根进程
MPI_Gather(&send, 1, MPI_INT, rbuf, 1, MPI_INT, 0, MPI_COMM_WORLD);
在根进程中对所有随机数代表的进程进行排序
if(rank==0)
{

for(i=0;i<size;i++){
  sort[i] = rbuf[i];
  printf("%d ",rbuf[i]);
}
    putchar('\n');

int t;
for(i=0;i<size;i++){
    for(j=i+1;j<size;j++){
    if(sort[i]<sort[j]){
      t = sort[i];
      sort[i] = sort[j];
      sort[j] = t;
    }
    }
}

利用一个sbuf数组存储每一个进程的排序数
for(i=0;i

MPI编程-----Parallel Rank 原理: 如图所示,假设每一个进程代表一个节点,在集群中,由于每台设备的性能不同,那么获取集群中每台设备的速度就显得尤为必要,了解每台设备的情况可以更加高效地进行任务分配。 现在,每个进程都拥有一个随机数,我们需要将其收集上来并进行排序,然后将对应的排名顺序分发给各个子进程,这样每个子进程都可以知道自己在整个系统中的排名。 代码如下: #include &lt;stdio.h&gt; #... 阅读详情

相关推荐

MPI+OpenMP混合并行编程:5种模式解析与实战调优

并行计算是处理大规模科学计算与数据分析的核心技术,其核心原理在于将计算任务分解,同时在多个处理单元上执行以提升性能。MPI(消息传递接口)和OpenMP(共享内存并行)是两种主流的并行编程模型,分别适用于跨节点和单节点内的并行。混合并行编程结合了二者的优势,旨在提升资源利用率和扩展性,其技术价值在于能有效降低通信开销、减少MPI进程数并匹配现代NUMA硬件架构。在应用场景上,它广泛用于气候模拟、计算流体力学、分子动力学等高性能计算领域。本文聚焦于解决混合编程中的常见挑战,如libiomp5md.dll初始化

weixin_30634661的博客 372

使用MPI实现冒泡排序

下面是使用 MPI 实现冒泡排序的基本步骤: 初始化 MPI 环境。使用 MPI_Init 函数来初始化 MPI 环境,并使用 MPI_Comm_size 函数来获取进程的数量,使用 MPI_Comm_rank 函数来获取当前进程的编号。 将输入数据平均分配给所有进程。使用 MPI_Scatter 函数将输入数据平均分配给所有进程。每个进程将获得一个子数组,该子数组包含输入数据的一部分。 在...

weixin_35756624的博客 231

MPI+OpenMP混合并行编程:从环境搭建到性能调优的四阶段实战指南

并行计算是提升大规模科学计算与工程仿真性能的核心技术,其原理在于将复杂任务分解为多个子任务,同时在多个处理单元上执行。在分布式内存系统中,MPI(消息传递接口)是实现进程间通信与协调的基石;而在共享内存架构中,OpenMP则提供了便捷的线程级并行编程模型。混合并行编程技术融合了MPI与OpenMP的优势,旨在构建层次化的并行架构,以同时发挥跨节点分布式计算与节点内多核协同的计算潜力,从而有效应对**计算流体力学**等领域的超大规模数值模拟挑战。这种MPI负责宏观进程间通信、OpenMP负责微观线程并行的模式

weixin_33896726的博客 400

MPI并行编程实战:从Hello World到计算π的完整流程(Ubuntu+MPICH环境)

本文详细介绍了在Ubuntu系统上使用MPICH进行MPI并行编程的完整流程。从环境搭建、核心概念讲解,到编写并运行“Hello World”程序,最后通过并行计算圆周率π的实战项目,深入演示了MPI多进程编程的任务分解、计算与通信机制,帮助开发者快速上手高性能计算。

weixin_29300241的博客 113

C++并行分布式系统实战:从数据分解到MPI+OpenMP混合编程

并行计算与分布式存储是应对海量数据处理的核心技术。其基本原理是将大规模计算任务分解为多个子任务,通过多处理器核心或计算节点同时执行,并利用分布式文件系统管理超大规模数据。这项技术的核心价值在于突破单机内存与算力限制,实现性能的线性扩展。在科学计算、气候模拟、流体力学等高性能计算(HPC)场景中,它对于处理TB乃至PB级数据至关重要。本文聚焦于C++工程实践,深入探讨如何结合MPI与OpenMP构建混合并行系统,并针对数据洪流场景,详细解析了包括域分解、幽灵层通信在内的关键实现细节与性能调优方法。

weixin_33863087的博客 374

并行程序设计mpi、冒泡、快速

适合初学者学习的MPI程序,具体为冒泡排序和快速排序

【MPI并行计算】Parallel Rank程序

该题的背景是不同的进程在运行时可能会有不同的状态,在这里用数值表示,有时需要让每个进程知道自己在所有进程中处于什么位置。首先每个进程使用自己的进程号作为随机数种子生成自己的一个随机数由于选择一个进程对所有进程数值进行排序时,该进程不仅要知道每个进程的数值,还要知道这个数值来自于哪个进程,所以这里使用结构体来存储进程号和进程数值,使用MPI_Gather时传递的是一个结构体用于计算的进程接收所有结构...

superce的博客 1896

MPI和openMP并行计算-冒泡排序

MPI和openMP并行计算-冒泡排序

并行计算编程入门

datatype为变量类型,注意该位置的变量类型是MPI预定义的变量类型,比如需要传递的是C++的int型,则在此处需要传入的参数是MPI_INT,其余同理。dest为接收的进程号,即被传递信息进程的进程号。在C和C++中,status的变量类型为MPI_Status,分别有三个域,可以通过status.MPI_SOURCE,status.MPI_TAG和status.MPI_ERROR的方式调用这三个信息。该函数为发送函数,用于进程间发送消息,如进程0计算得到的结果A,需要传给进程1,就需要调用该函数。

mc_故事与你的博客 1098

ROST_CM6软件之词频分析、社会网络和语义网络分析、情感分析

简介 ROST CM 6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。 社会网络和语义网络分析(S) 数据 注意,保存时编码要为ANSI 所以这里需要转换一下 准备自定义表与停词表 例如 同时,点击快速分析后,将会弹出网络图 对网络图进行设置 对布局进行设置 对节点、边进行设置 最终效果图 修改 情感分析

积一时之步,臻千里之遥程 9万+

Ubuntu更新后VirtualBox报错rc=-1908?手把手教你修复Kernel driver not installed

本文详细解析了Ubuntu更新后VirtualBox报错rc=-1908的原因,并提供了完整的修复方案。通过重新安装VirtualBox、处理DKMS内核模块以及解决Secure Boot问题,帮助用户快速恢复虚拟机功能。特别针对Kernel driver not installed错误,给出了从诊断到修复的详细步骤。

weixin_42519781的博客 339

别再死记硬背了!用MPI和OpenMP手把手教你理解并行快排的通信与递归

本文深度解析了MPI和OpenMP在并行快速排序中的实现差异,通过实战代码展示两种并行编程模型的核心思想与优化技巧。从数据分发策略到递归并行化,帮助开发者理解分布式内存与共享内存模型的本质区别,并提供性能对比与选型指南,助力高效实现并行排序算法。

weixin_30410119的博客 460

CKA考试实战指南--从备考到通关的完整攻略

本文提供了一份全面的CKA考试实战指南,涵盖从备考规划、资源选择到高效练习环境搭建的全过程。重点解析了考试核心内容,特别是占分30%的故障排除难点,并分享了集群升级、etcd备份等高频考点的突破技巧与临场实战策略,帮助考生系统掌握Kubernetes实操技能,顺利通过认证。

weixin_28839549的博客 490

MPI并行程序的调试技巧

http://galoisplusplus.gitcafe.com/blog/2013/06/08/mpi-debug-tips/" style="width:100%; height:100%"> backup content

yszheda的专栏 1万+

新手也能搞定的ANPC三电平逆变器Simulink仿真:从SPWM调制到开关损耗优化

本文详细介绍了如何在Simulink中搭建ANPC三电平逆变器仿真模型,从SPWM调制基础到开关损耗优化技巧。通过分层设计思路和实用代码示例,帮助新手快速掌握ANPC拓扑的核心功能,包括中点平衡控制和性能指标分析,为电力电子系统设计提供实践指导。

weixin_30335575的博客 407

论文理解【LLM-Agent】——【SkillOpt】Executive Strategy for Self-Evolving Agent Skills

SkillOpt 将 agent skill 从人工或一次性 prompt artifact 转化为可验证、可控、可迁移的文本空间“可训练状态”,通过有界编辑、验证门控、拒绝编辑反馈和 slow/meta update,在不更新模型权重的情况下显著提升多类 agent 任务表现

佚失的诗篇 584

别再死磕单线程了!用MPI和OpenMP给C语言快排加速,实测性能提升对比

本文探讨了如何利用MPI和OpenMP并行编程模型优化C语言快速排序算法,显著提升大规模数据处理效率。通过对比分析MPI和OpenMP在不同硬件环境下的性能表现,提供了详细的实现代码和优化技巧,帮助开发者突破单线程性能瓶颈。实测数据显示,在128核集群上MPI处理10亿数据比OpenMP快3倍,而在16核PC上OpenMP反而比MPI快40%。

weixin_30568591的博客 517

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8908

从课堂实验到真实场景:手把手教你用MPI+OpenMP混合编程优化C语言快排

本文详细介绍了如何利用MPI+OpenMP混合编程优化C语言快速排序算法,从课堂实验扩展到真实计算场景。通过分层并行化设计,结合MPI的进程间并行和OpenMP的线程级并行,显著提升排序性能。文章包含混合架构设计、实现细节、性能调优及实战案例,帮助开发者掌握高性能计算技术。

weixin_30621959的博客 298

这个AI工具可以把产品说明书转成演示视频,老板狂喜

回顾本文,我们从“传统视频制作的痛点”出发,拆解了AI将产品说明书转为视频的核心技术(NLP文本理解→CV画面生成→视频合成),并提供了3类工具实操方案(SaaS/开源/API)。推广成本降80%,制作效率提90%,产品迭代与推广终于能“同频”;摆脱对专业团队的依赖,自己就能快速产出高质量视频;对技术爱好者来说,这是一个“AI多模态融合”的绝佳实践案例(NLP+CV+语音合成的综合应用)。今天就找一份产品说明书,用HeyGen或Pictory试做一个视频。

AIGC应用创新大全的博客 322

【机器学习】一文搞懂算法模型之:Transformer

必会算法模型之:Transformer

商务合作 | 面试培训 | 职场规划 ==>主页扫码 5608

Dropzone混合提交实战:文件+表单数据一起上传,params与sending事件技巧大全

Dropzone 是一款轻量、易用的拖拽上传库,自带图片预览与进度条。而**混合提交**——即把文件和表单数据一起上传——是很多新手搭建"带图文章页、头像+昵称、发票+报销单"页面时最常用、却最容易踩坑的场景。本文带你快速掌握实现混合提交的两大核心技巧:`params` 选项与 `sending` 事件,从配置、用法到源码原理一次讲透。 [![Dropzone拖拽上传库品牌横幅:文件+表单数据混

gitblog_00352的博客 355

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MPI 4.0 + OpenMP 5.0 混合编程实战:矩阵乘法性能提升 3.8 倍(附代码)

本文详细介绍了如何通过MPI 4.0与OpenMP 5.0混合编程实现矩阵乘法性能的显著提升,最高可达3.8倍加速比。内容涵盖从环境配置、算法设计到完整代码实现的实战指南,特别适合需要优化并行计算性能的开发者。文章还提供了性能对比分析和常见问题排查方法,帮助读者快速掌握混合并行编程技巧。

weixin_30693683的博客 371

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Fatal error in MPI_Isend: Internal MPI error!, error stack:

程序调用非阻塞通信函数MPI_Isend(), MPI_Irecv(),接收时有MPI_wait()操作 迭代到第5000多次时出现如下错误: 5280 -1.272734378291617E-004 1.271885446338949E-004

We need more…… 4701

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

保姆级教程:在Windows上用MPI和VS2019跑通Cannon算法(附完整代码)

本文提供了一份详细的Windows平台MPI实战教程,指导读者在VS2019环境下配置MPI环境并实现Cannon并行矩阵乘法算法。教程涵盖环境搭建、算法原理、完整代码实现及性能优化技巧,特别适合需要高效处理大规模矩阵运算的开发者。通过本指南,读者可以快速掌握MPI并行计算的核心技术。

weixin_30443813的博客 449
上一篇: QT编程--用户注册程序的设计与实现
下一篇: 基于OpenCV的车辆压黄线检测
Harun Sun
博客等级 码龄11年 49粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值