并行程序设计基础

简介:

并行程序设计难的原因

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

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

任务/数据的划分/分配

数据交换

同步和互斥

性能平衡

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

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

并行语言的构造方法

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

异步

单一地址空间

显式同步

隐式数据分布

隐式通信


相关文章
|
应用服务中间件 数据中心 Windows
Minecraft开服教程(windows)
阿里云服务器安装bds官方服
Minecraft开服教程(windows)
|
弹性计算 固态存储 大数据
阿里云服务器租用一年多少钱?2024年最新版阿里云服务器租用价格表
阿里云服务器价格亲民,2024年最新优惠中,轻量应用服务器2核2G3M带宽仅82元/年,折合6.8元/月;ECS经济型e实例2核2G3M带宽99元/年,新老用户同享;2核4G5M带宽ECS u1实例199元/年。此外,4核16G10M带宽服务器70元/月起,8核32G10M带宽160元/月起。另有GPU服务器优惠,如gn6v最高配置月费4685.20元。系统盘提供高效云盘、SSD云盘和ESSD云盘等多种选择。续费优惠方面,续费一年享7.5折,最长可达3折。详情请参考官方页面获取最准确的报价与活动信息。
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之程序初始化mysql没有完成就报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
574 58
|
JavaScript 前端开发 NoSQL
使用Node.js进行后端开发入门
【8月更文挑战第10天】恭喜你完成了Node.js后端开发的入门之旅!这只是个开始,Node.js的世界远比这广阔。随着你对Node.js的深入学习和实践,你将能够构建更复杂、更强大的后端应用。不断探索、学习和实践,你将在Node.js的道路上越走越远。
|
前端开发 小程序 测试技术
靠谱:开源IM项目OpenIM压测程序介绍-自己动手测试性能和稳定性
靠谱:开源IM项目OpenIM压测程序介绍-自己动手测试性能和稳定性
1003 0
|
弹性计算 运维 容灾
从人工到自动,泛微云上自动化部署实践
泛微借助阿里云的底层优势,将部分客户的服务迁移到云上,从硬件和网络上保证用户能够高效访问 OA 系统
从人工到自动,泛微云上自动化部署实践
|
机器学习/深度学习 人工智能 资源调度
阿里云天池大赛赛题解析——机器学习篇-赛题一(7)
阿里云是国内知名的云计算、大数据、人工智能技术型公司,是阿里巴巴集团最重要的技术部门。阿里云天池是阿里云面向开发者和教育行业的资源输出部门,天池大赛是国内最大规模的人工智能算法赛事,致力于汇聚全球AI精英为企业解决真实问题。自2014年至今已举办数十次行业顶级算法赛事,全球参赛开发者超过30万人。然而对于更广大的普通开发者和大学生群体来说,高规格的算法大赛仍然具有很高的门槛。本书就是针对受众最广泛的新手人群而编写的,精选阿里巴巴最典型的人工智能算法应用案例,邀请天池大赛最顶级的获奖选手联合编撰,公开那些鲜为人知的技术秘籍,力图使每一个涉足数据智能算法技术的开发者从中获益......
阿里云天池大赛赛题解析——机器学习篇-赛题一(7)
|
机器学习/深度学习 分布式计算 运维
阿里云ACP大数据认证有用吗?考试内容是什么?
现在大数据是我们生活中非常重要的一部分,我们的生活、工作、学习都离不开它,而且大数据很贴心,能帮助我们更快速、更方便地找到自己需要的东西,甚至我们想要的东西会主动来到我们面前。
1124 0
阿里云ACP大数据认证有用吗?考试内容是什么?
|
存储 关系型数据库 数据库
数据库范式与反范式设计,是一门艺术
在日常业务研发过程中,我们常常需要与数据库表打交道。设计范式是数据表设计的基本原则,对于数据表的设计范式,我们特别容易忽略它的存在。很多时候,当数据库运行了一段时间之后,我们才发现数据表设计上有问题。然后重新调整数据表的结构,需要做数据迁移,还有可能影响程序处理的业务逻辑,甚至系统的正常服务运行。
数据库范式与反范式设计,是一门艺术
|
存储 算法 安全
实验验证:鲁棒性图像感知哈希
实验验证:鲁棒性图像感知哈希
827 0
实验验证:鲁棒性图像感知哈希