1.并行编程模型

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

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

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

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

2.并行语言

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

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

3.并行算法

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

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

并行算法设计

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

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

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

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

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

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

并行计算之MPI(二)相关推荐

  1. 并行计算之MPI(三)

    了解MPI 什么是MPI (1)MPI是一个库而不是一门语言,许多人认为MPI就是一种并行语言,这是不准确的.但是按照并行语言的分类可以把FORTRAN+MPI或C+MPI.看作是一种在原来串行语言基 ...

  2. 并行计算之MPI(一)

    MPI学习 1. 了解并行计算 为什么要采用并行计算? (1)这是因为它可以加快速度即在更短的时间内解决相同的问题或在相同的时间内解决更多更复杂的问题特别是对一些新出现的巨大挑战问题: (2)节省投入 ...

  3. 并行计算之MPI(五)

    MPI的6个基本函数 MPI_Init 任何MPI程序都应该首先调用该函数. 此函数不必深究,只需在MPI程序开始时调用即可(必须保证程序中第一个调用的MPI函数是这个函数). MPI_Init(&a ...

  4. Julia并行计算笔记(二)

    (持续修订中,最近更新于2020年8月10日.) 四.远程调用之一 上一节讲了Julia的协程(Task)级并行,本节讲的是进程级并行.协程只能在单台计算机上并行,而进程可以在多台计算机上并行.一切开 ...

  5. mpi并行 写同一文件_并行计算调度策略的笔记(001)

    Load Balancing & Termination 因为并行程序的运行速度主要取决于最慢的那个进程.所以保证每个进程的运行时间差不多是非常重要的,这也是负载平衡. 并行计算中的任务调度 ...

  6. Windows系统下搭建MPI(并行计算)环境

    Windows系统下搭建MPI环境 MPI的全称是Message Passing Interface即标准消息传递界面,可以用于并行计算.MPI的具体实现一般采用MPICH.下面介绍如何在Window ...

  7. MPI多机器实现并行计算

    最近使用一个系统的分布式版本搭建测试环境,该系统是基于MPI实现的并行计算,MPI是传统基于msg的系统,这个框架非常灵活,对程序的结构没有太多约束,高效实用简单,下面是MPI在多台机器上实现并行计算 ...

  8. Windows系统下搭建MPI环境

    Windows系统下搭建MPI环境 MPI的全称是Message Passing Interface即标准消息传递界面,可以用于并行计算.MPI的具体实现一般采用MPICH.下面介绍如何在Window ...

  9. 【Python-分布式】MPI集群环境搭建

    [我的笔记] 1. 准备 用which mpicc和which mpiexec检查是否安装MPICC. 在一台机器ping另一台机器,看是否连通. 2.执行MPI文件: 在home根目录(也可以是其他 ...

最新文章

  1. POJ 1144 Network (求割点)
  2. Zend Studio 10正式版破解(2013-02-26更新)
  3. 一步步写一个符合Promise/A+规范的库
  4. python读取序列5之后的数据_Python核心编程读笔 5: python的序列
  5. Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)
  6. 写了人生中第一个完整模块的用例
  7. 2.Linux环境下配置Solr4.10.3
  8. 敏捷与可靠:极米科技携手华为云,共同开启家庭娱乐新视界
  9. python壁纸数据抓取_Python《wallhaven壁纸爬取》
  10. 企业IP地址怎么划分
  11. ONVIF系列——海康摄像头设置onvif协议开启
  12. 传奇服务器人物技能怎么修改,传奇服务端上线0级技能,直接设置3级技能的设置方法...
  13. 用java做打字训练测试软件,《打字训练测试软件-Java课程设计》.doc
  14. 舅妈的计算机课1-9,山东省济南市历下区2017届九年级教学三模语文试题(word版含答案)...
  15. 想一想就感觉到生活还是充满很多正能量的
  16. Ardiuno智能电蚊拍
  17. 基于java的微信支付之JSAPI公众号充值
  18. TC数据库相关整理(持续更新)
  19. 程序员 计算机网络,程序员必备计算机网络知识
  20. 让excel朗读英文单词本

热门文章

  1. ISIS DIS(学习笔记+实验验证)
  2. 面具卡米怎么删模块_红米K20Pro/尊享版开启双扬声器-面具模块-享受更立体的声音...
  3. koa2框架使用心得
  4. WordPress图片防盗链的几种方法
  5. nwjs sdk linux x64,Ubuntu环境下的nwjs安装及使用教程
  6. 2022-2027年中国速冻米面食品行业发展前景及投资战略咨询报告
  7. Swagger2 被拦截处理
  8. 一文搞明白域前置(Domain Fronting)技术
  9. SELECT行列转换
  10. Html 中的块级元素和行内元素(内联元素)