并行程序设计基础

简介:

并行程序设计难的原因

Ø  技术先行,缺乏理论指导

Ø  程序的语法/语义复杂, 需要用户自已处理

任务/数据的划分/分配

数据交换

同步和互斥

性能平衡

Ø  并行语言缺乏代可扩展和异构可扩展, 程序移植困难, 重写代码难度太大

Ø  环境和工具缺乏较长的生长期,缺乏代可扩展和异构可扩展

并行语言的构造方法

3种并行程序设计方法比较:

 

方法

实例

优点

缺点

库例程

MPI, PVM

易于实现, 不需要新编译器

无编译器检查, 分析和优化

扩展

Fortran90

允许编译器检查、分析和优化

实现困难,需要新编译器

编译器注释

SGI powerC, HPF

介于库例程和扩展方法之间, 在串行平台上不起作用.

 

并行性问题

进程的同构性

SIMD: 所有进程在同一时间执行相同的指令

MIMD:各个进程在同一时间可以执行不同的指令

SPMD: 各个进程是同构的,多个进程对不同的数据执行相同的代码(一般是数据并行的同义语),常对应并行循环,数据并行结构,单代码

MPMD:各个进程是异构的, 多个进程执行不同的代码(一般是任务并行,或功能并行,或控制并行的同义语),常对应并行块,多代码

静态并行性和动态并行性:

静态并行性: 程序的结构以及进程的个数在运行之前(如编译时, 连接时或加载时)就可确定, 就认为该程序具有静态并行性.  

动态并行性: 否则就认为该程序具有动态并行性. 即意味着进程要在运行时创建和终止

进程编组

目的:支持进程间的交互,常把需要交互的进程调度在同一组中

一个进程组成员由:组标识符+ 成员序号唯一确定.

划分与分配

原则: 使系统大部分时间忙于计算, 而不是闲置或忙于交互; 同时不牺牲并行性(度).

划分: 切割数据和工作负载

分配:将划分好的数据和工作负载映射到计算结点(处理器)上

分配方式:

显式分配: 由用户指定数据和负载如何加载

隐式分配:由编译器和运行时支持系统决定

就近分配原则:进程所需的数据靠近使用它的进程代码

并行度(Degree of Parallelism, DOP):同时执行的分进程数.

并行粒度(Granularity): 两次并行或交互操作之间所执行的计算负载.

Ø  指令级并行

Ø  块级并行

Ø  进程级并行

Ø  任务级并行

并行度与并行粒度大小常互为倒数: 增大粒度会减小并行度.

增加并行度会增加系统(同步)开销

交互/通信问题

交互的类型

Ø  通信:两个或多个进程间传送数的操作

    通信方式:

共享变量

父进程传给子进程(参数传递方式)

消息传递

Ø  同步:导致进程间相互等待或继续执行的操作

 同步方式:

原子同步

控制同步(路障,临界区)

数据同步(锁,条件临界区,监控程序,事件)

Ø  聚集(aggregation):用一串超步将各分进程计算所得的部分结果合并为一个完整的结果, 每个超步包含一个短的计算和一个简单的通信或/和同步.

聚集方式:

归约

扫描

交互的方式

同步的交互: 所有参与者同时到达并执行交互代码C

异步的交互: 进程到达C后, 不必等待其它进程到达即可执行C

交互的模式

按交互模式是否能在编译时确定分为:

Ø  静态的

Ø  动态的

按有多少发送者和接收者参与通信分为

Ø  一对一:点到点(point topoint)

Ø  一对多:广播(broadcast),播撒(scatter)

Ø  多对一:收集(gather), 归约(reduce)

Ø  多对多:全交换(TatalExchange), 扫描(scan) , 置换/移位(permutation/shift)

 

五种并行编程风范

Ø  相并行(PhaseParallel)

一组超级步(相)

步内各自计算

步间通信、同步

BSP

方便差错和性能分析

计算和通信不能重叠

Ø  分治并行(Divideand Conquer Parallel)

父进程把负载分割并指派给子进程

递归

重点在于归并

分治设计技术(6.2)

难以负载平衡

Ø  流水线并行(PipelineParallel)

一组进程

流水线作业

流水线设计技术

Ø  主从并行(Master-SlaveParallel)

主进程:串行、协调任务

子进程:计算子任务

划分设计技术

与相并行结合

主进程易成为瓶颈

Ø  工作池并行(WorkPool Parallel)

初始状态:一件工作

进程从池中取任务执行

可产生新任务放回池中

直至任务池为空

易与负载平衡

临界区问题(尤其消息传递)

并行程序设计模式

隐式并行模型

Ø  概况:

程序员用熟悉的串行语言编程

编译器或运行支持系统自动转化为并行代码

Ø  特点:

语义简单

可移植性好

单线程,易于调试和验证正确性

效率很低

数据并行模型

Ø  概况:

SIMD的自然模型

局部计算和数据选路操作

Ø  特点:

单线程

并行操作于聚合数据结构(数组)

松散同步

单一地址空间

隐式交互作用

显式数据分布

消息传递模型

Ø  概况:

MPP, COW的自然模型

Ø  特点:

多线程

异步

多地址空间

显式同步

显式数据映射和负载分配

显式通信

共享变量模型

Ø  概况:

PVP, SMP, DSM的自然模型

Ø  特点:

多线程:SPMD,MPMD

异步

单一地址空间

显式同步

隐式数据分布

隐式通信


相关文章
|
8月前
|
缓存 NoSQL 应用服务中间件
性能基础之大型网站架构演化(整理篇)
【2月更文挑战第14天】性能基础之大型网站架构演化(整理篇)
103 1
性能基础之大型网站架构演化(整理篇)
|
PyTorch 算法框架/工具
pytorch诞生逻辑和演化过程
pytorch诞生逻辑和演化过程
96 0
|
算法 Java 测试技术
【Java数据结构及算法实战】系列004:程序性能的两种确定方式
本节是《Java数据结构及算法实战》系列的第4节,主要介绍程确定序性能的两种方式。
123 0
【Java数据结构及算法实战】系列004:程序性能的两种确定方式
|
缓存 算法 NoSQL
【Java数据结构及算法实战】系列003:程序性能的两种表示方式
本节是《Java数据结构及算法实战》系列的第3节,主要介绍程序性能的两种表示方式。 评价一个程序好坏的指标非常多,比如易用性、稳定性、可维护性等等,但一个最为重要的评价指标是性能。性能是其他评价指标的基础。 比如,在Web网站响应时间方面,业界的评判标准是主样的: 在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。 在5秒之内给客户响应被用户认为是“比较不错”的用户体验。 在10秒之内给客户响应被用户认为是“糟糕”的用户体验。 如果超过10秒还没有得到响应,那么大多数用户会认为这次请求是失败的。 由此我们可以得出结论,Web网站的性能越好,处理时间越短,响应时间越短,则会有更好
157 0
|
C# 编译器 存储
带你读《C# 7.0核心技术指南》之二:C#语言基础
本书前三章将集中介绍C#语言。首先介绍最基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。其余各章则涵盖了.NET Framework的核心功能,包括LINQ、XML、集合、并发、I/O和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第6章和第7章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ相关的三个章节最好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第14章中介绍。
|
存储 编解码
带你读《计算思维导论》之二:计算基础
本书设计了9个章节,分别是绪论、计算基础、计算平台、计算机网络基础、数据库技术基础、逻辑思维、问题求解、数据挖掘基础、计算机新技术。通过本书的学习,学生能够了解利用计算手段求解社会问题或自然问题的基本思维模式,理解网络的原理与构建,从而形成网络化思维,了解抽象复杂系统或复杂问题的基本思维模式,了解由问题到算法再到程序的问题求解思维模式,了解数据管理和挖掘的手段,并体验基于数据库和数据挖掘的数据运用方法,理解大数据、人工智能等技术的社会影响。
带你读《计算思维导论实验 与习题指导》之三:计算机原理与硬件组装
本书围绕《计算思维导论》主教材,设计了13个实验,并针对前8章内容设计了习题,包括单选题、多选题、填空题、判断题等。通过实验和习题,能帮助学生:了解计算思维的概念和计算机发展简史;理解进制转换、字符编码和中文编码等相关知识,掌握数制转换的方法和口诀;了解计算机硬件并学会配置与组装计算机,同时能够对简单故障进行判断和排除;掌握上网浏览、查询资料、收发电子邮件等信息时代的必备知识,同时学会局域网的搭建、WWW和FTP服务器的构建;掌握利用Access创建数据库的方法,并能初步设计与管理数据库;掌握命题符号化方法,以及基本的推理理论,并能利用真值表、等值演算等方法进行简单的逻辑推理等能力。
|
机器学习/深度学习 并行计算 算法
一个生鸡蛋的实验,原来为了更好诠释E-HPC的并行计算环境
9月12日,在北京,阿里云异构与高性能计算媒体沟通会智能进化主题上。记者问,生鸡蛋这个实验是之前谁做的,是那位窦非教授做的么?之前用了多少时间,在云上用了多少时间。
1504 0
|
并行计算 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 3.6 第一个并行PIConGPU实现
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.6节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1568 0
|
测试技术 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 导读
这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的、高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上。具体而言,书中演示了使用PGI、Cray和PathScale等供应商提供的编译器编译示例代码,并在Intel x86处理器、Cavium 96核64位ARMv8处理器芯片集和NVIDIA GPU上运行。
2277 0

热门文章

最新文章

下一篇
开通oss服务