并行计算之MPI(二)

article/2025/9/13 14:46:35

1.并行编程模型

目前两种最重要的并行编程模型是数据并行和消息传递数据并行编程模型的编程级别比较高编程相对简单但它仅适用于数据并行问题消息传递编程模型的编程级别相对较低但消息传递编程模型可以有更广泛的应用范围

数据并行即将相同的操作同时作用于不同的数据因此适合在SIMD及SPMD并行计算机上运行在向量机上通过数据并行求解问题的实践也说明数据并行是可以高效地解决一大类科学与工程计算问题的。

数据并行编程模型是一种较高层次上的模型它提供给编程者一个全局的地址空间一般这种形式的语言本身就提供并行执行的语义因此对于编程者来说只需要简单地指明执行什么样的并行操作和并行操作的对象就实现了数据并行的编程。

数据并行编程模型虽然可以解决一大类科学与工程计算问题但是对于非数据并行类的问题如果通过数据并行的方式来解决一般难以取得较高的效率数据并行不容易表达甚至无法表达其它形式的并行特征

在这里插入图片描述

2.并行语言

并行程序是通过并行语言来表达的并行语言的产生主要有三种方式:
1 设计全新的并行语言;
2 扩展原来的串行语言的语法成分使它支持并行特征;
3 不改变串行语言仅为串行语言提供可调用的并行库。

并行编程模型除了数据并行和消息传递之外还有共享变量模型函数式模型等等但它们的应用都没有数据并行和消息传递那样普遍
并行语言的发展其实十分迅速并行语言的种类也非常多但真正使用起来并被广为接受的却寥寥无几,因此这里并没有介绍某一具体的并行语言而只是给出了并行语言产生的基本方法。对FORTRAN和C的扩充是最常见的并行语言产生方法,MPI并行程序设计就是和FORTRAN或C结合起来实现的。

3.并行算法

分类:
并行算法是给定并行模型的一种具体明确的解决方法和步骤按照不同的划分方法。

  1. 并行算法有多种不同的分类:根据运算的基本对象的不同可以将并行算法分为数值并行算法(数值计算)和非数值并行算法(符号计算)。当然这两种算法也不是截然分开的,比如在数值计算的过程中会用到查找匹配等非数值计算的成分,当然非数值计算中也一般会用到数值计算的方法。划分为什么类型的算法主要取决于主要的计算量和宏观的计算方法。
  2. 根据进程之间的依赖关系可以分为同步并行算法(步调一致)异步并行算法(步调进展互不相同)和纯并行算法(各部分之间没有关系)。对于同步并行算法任务的各个部分是同步向前推进的,有一个全局的时钟来控制各部分的步伐,而对于异步并行算法各部分的步伐是互不相同的。它们根据计算过程的不同阶段决定等待继续或终止。纯并行算法是最理想的情况各部分之间可以尽可能快地向前推进不需要任何同步或等待但是一般这样的问题是少见的。
  3. 根据并行计算任务的大小可以分为粗粒度并行算法(一个并行任务包含较长的程序段和较大的计算量)细粒度并行算法(一个并行任务包含较短的程序段和较小的计算量)以及介于二者之间的中粒度并行算法。一般而言并行的粒度越小就有可能开发更多的并行性提高并行度,这是有利的方面,但是另一个不利的方面就是并行的粒度越小,通信次数和通信量就相对增多,这样就增加了额外的开销,因此合适的并行粒度需要根据计算量,通信量,计算速度,通信速度进行综合平衡这样才能够取得高效率。

并行算法设计

并行算法基本上是随着并行机的发展而发展的从本质上说不同的并行算法是根据问题类别的不同和并行机体系结构的特点产生出来的一个好的并行算法要既能很好地匹配并行计算机硬件体系结构的特点又能反映问题内在并行性。

对于机群计算有一个很重要的原则就是设法加大计算时间相对于通信时间的比重减少通信次数甚至以计算换通信。这是因为对于机群系统一次通信的开销要远远大于一次计算的开销。因此要尽可能降低通信的次数或将两次通信合并为一次通信。
基于同样的原因,机群计算的并行粒度不可能太小,因为这样会大大增加通信的开销。如果能够实现计算和通信的重叠,那将会更大地提高整个程序的执行效率,因此对于机群计算可以是数值或非数值的计算这些都不是影响性能的关键。也可以是同步、松同步或异步的但,以同步和松同步为主并行的粒度一般是大粒度或中粒度的一个好的算法一般应该呈现如下的计算模式:
在这里插入图片描述

图 5 没有考虑计算与通信的重叠若能够实现计算与通信的重叠那将是更理想的计算模式

在这里插入图片描述

图 6 是加入了计算和通信重叠技术后的SPMD并行算法的计算模式

对于MPMD并行算法各并行部分一般是异步执行的,而不是象SPMD那样的同步或松同步方式。因此只要能够大大降低通信次数增大计算相对于通信的比重,则该MPMD算法就可以取得较高的效率,图 7 给出了MPMD算法的一种比较合适的计算模式。
在这里插入图片描述

并行算法设计也是并行程序设计的前提没有好的并行算法就没有好的并行程序因此在并行程序设计之前必须首先考虑好并行算法该算法要能够将并行机和实际的问题很好地结合起来既能够充分利用并行机体系结构的特点又能够揭示问题内在的并行性


http://chatgpt.dhexx.cn/article/kKD6scEs.shtml

相关文章

Matlab 并行

Matlab 并行 1. 检查是否有并行附加功能2. 创建和删除并行2.1 创建默认的并行池2.2 在本地创建2.3 在集群创建2.4 删除 3. Parallel pool 包含的一些函数3.1 parfor3.2 parfeval 初学,肯定有理解不够的地方。看官方文件更靠谱。 1. 检查是否有并行附加功能 如果没有…

并行处理及分布式系统期末总结笔记

并行处理及分布式系统期末总结笔记 1、任务并行、数据并行的应用2、冯诺依曼体系结构的瓶颈及改进,Flynn分类法涉及的几种模型及其特点3、Cache的特点,Cache缺失、Cache命中、Cache一致性及解决方法、伪共享、流水线、多发射4、加速比、效率、阿姆达尔定…

并行程序设计导论期末复习

任务并行、数据并行的应用 任务并行 将待解决问题所需要执行的各个任务分配到各个核上执行。 数据并行 将待解决问题所需要处理的数据分配给各个核,每个核在分配到的数据集上执行大致相似的操作。 冯诺依曼体系结构的瓶颈及改进,Flynn分类法涉及的几…

并行程序设计导论 概念总结

Parallel Programing caiyi 2021/6/17 第一章 1.为什么要构建并行系统? 电路晶体管密度过大会使处理器能耗增加,散热的问题使通过继续增快集成电路密度提高处理器性能不再现实,因此集成电路商决定构建多核处理器。 2.为什么要编写并行程序&#xf…

cuda 并行计算

1 简介 2006年,NVIDIA公司发布了CUDA,CUDA是建立在NVIDIA的GPU上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPU的并行计算引擎来更加高效地解决比较复杂的计算难题。CUDA是NVIDIA公司所开发的GPU编程模型,它提供了GP…

数据 并行

first 含义是计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。 将并行处理技术引入信息检索领域 把数…

并行的常见问题和注意事项

关于Oracle中的并行,可以说是一把双刃剑,用得好,可以充分利用系统资源,提升数据库的处理能力,用得不好,可能会适得其反。 并行的基本使用方法,对于大部分SQL开发者和DBA来说,并行的一…

并发和串行、并行的概念

先抛开语言不管,只聊概念,说起并发,就很容易想到它和串行、并行的区别。 串行:一次只能取得一个任务并执行这个任务,这个任务执行完后面的任务才能继续; 并发:指的是在同一个时间段内&#xf…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(二)

发现问题 之前有一篇博客是因为存储过程中没有添加相应的函数,导致出现了“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数”,这次继续出现了这样一个问题,但是出现的错误就不再过程函数中了,而…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(三)

发现问题 这篇博客是建立在“牛腩新闻发布–过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数(二)”,因为在那篇博客中说出了我当时遇到的“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,…

【牛腩】-'T_news_selectByCaId' 需要参数 '@caid',但未提供该参数。”

问题截图 解决方案: 改动存储过程 BEGINselect n.id,n.title,n.createTime,c.[name],n.caId from T_news ninner join T_category c on n.caIdc.id and n.caIdcaidorder by n.createTime desc END检查传参是或否正确如果以上都没有错误,那就看一下是否…

【重要补充】关于第三方潜在SDK导致的5.1.2Data use sharing

接上一篇《关于IDFA、CAID和「5. 1.2 - Data use & sharing」》后,我们发现,苹果在14.5出来前,对于IDFA替代方案之数据收集的审核打击力度越来越大。 因5.1.2条款被拒,目前可以确认的原因有以下两大: 一、如果你…

spring笔记⑬——spring事务

事务的四个特征 CAID是事务的四个特征,所有事务都必须满足以下特性。 原子性(Atomicity):一个事务要么全部执行,要么不执行一致性(Consistency):事务的运行并不改变数据库中数据的一致性隔离性&#xff0…

SQL查询语句(内联,as,in,通配符)

最近在学习牛腩新闻发布系统,正如牛老师所说,作为一个优秀的.NET开发人员,对SQL语句不熟怎么能行呢,接下来就总结下牛老师写的存储过程中SQL语句,挺经典,举一反三 首先先展示出来适用于系统的三张表 新闻类…

【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼作者简介:一名大一在校…

获取苹果收集设备ID的方法

目录 问题 解决 问题 如果我们想要通过工具获取苹果手机 iPhone 或者 iPad 的设备 ID,也就是 UDID。这个时候,很多人可能会问 UDID 是什么,UDID 是 iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,…

浅谈大数据广告下个人隐私保护,开发者视角的广告原理

本文已收录于 Github CodeClass 和 Gitee CodeClass 致力于打造高质量编程学习课堂,内含百篇原创技术文章,千本计算机开源电子书,谷歌、阿里大神开源 LeetCode 题解,各类编程学习资源,欢迎 star ,一起学习&…

简单理解MySQL的存储引擎

1、什么是存储引擎? 在说明存储引擎之前,首先你需要简单了解MqSQL的整体架构。 从上图可知,存储引擎位于整体架构的最底层。 存储引擎真正负责了MySQL中数据的存储和提取。 可以这样理解: 其实我们平时写的各种SQL语句相当于指…

iOS隐私新规如何破局?盗版SKAdnetwork可行吗?

背景:   在2020年的开发者大会上,苹果宣布iOS14设备将会在App首次打开时主动弹窗请求是否选择允许广告追踪,即被获取设备的IDFA。这也就意味着新系统需要用户手动选择允许,而旧系统是手动选择关闭,这一关键改变无异…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(一)

发现问题 今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行: 将这个更改完之后就可以在数据库中调取到应需要的数据了,但是…