热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

并行计算之MPI(二)

1.并行编程模型目前两种最重要的并行编程模型是数据并行和消息传递数据并行编程模型的编程级别比较高编程相对简单但它仅适用于数据并行问题消息传递编程模型的编程级别相对较低但消息传递编

1.并行编程模型

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

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

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


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


在这里插入图片描述


2.并行语言

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

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


3.并行算法

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


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

并行算法设计


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


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


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


在这里插入图片描述


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


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


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



推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
author-avatar
用户19910071
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有