并行程序设计概述(视频)
串行计算模式
- 常规软件是串行的
并行计算模式
- 并行计算是同时应用多个计算资源解决一个计算问题
- 每个部分的指令在不同的处理器上执行
并行计算分布
- 金融
- …
Flynn矩阵
SISD | SIMD |
---|---|
单指令单数据 | 单指令多数据 |
MISD | MIMD |
多指令单数据 | 多指令多数据 |
SISD:一条指令处理一条数据
SIMD:一条指令处理多个数据,一群人搬砖
MISD:一个数据会有多个操作过程
MIMD:…
并行计算:常用SISD、SIMD
名词 | 解释 |
---|---|
Task(任务) | 可以去完整得到结果的一个程序,相对独立 |
Parallel Task (并行任务) | 多个并行计算去解决的一个任务 |
Serial Execution (串行执行) | 单一指令 |
Parallel Execution (并行执行) | 多个兄弟去搬砖 |
Shared Memory (共享存储) | 数据存储的地方,大家共享存储空间 |
Distributed Memory (分布式存储) | |
Communications (通信) | 并行执行的程序,交互 |
Synchronization (同步) | 容易导致性能的下降 |
Granularity (粒度) | 并行计算的任务划分后,每个任务的大小 |
Observed Speedup (加速比) | 比值,相同层次的计算系统的比较。 |
Parallel Overhead (并行开销) | |
Scalability (可扩展性) |
存储器架构
共享存储
分布式存储
混合 分布式-共享 存储
并行编程模型
- 共享存储模型Shared Memory Model
- 线程模型Threads Model
- 消息传递模型Message Passing Model
- 数据并行模型Data Parallel Model
具体实例
OpenMP
MPI
SPMD
MPMD
设计并行处理程序和系统
-
自动和手动并行
自动的并行化是追求的目标,但还不能完全代替手动
对于复杂的任务,需要人手动并行
-
理解问题和程序
对于很大的一个系统,怎么去解决,才能去设计我们的程序
-
分块和分割
数据的分块和数据的分割,在我们理解问题的基础上对任务的分割
-
通信
不同的分块和分割之间进行通讯
-
同步
-
数据依赖
墙的建设需要砖,但是砖还没来。
-
负载均衡
一个人搬很多砖,剩下的人不干,就不是很均衡,比如联发科
-
粒度
-
I/O
-
成本
性能满足的条件下,成本越低越好
-
性能分析和优化
数据和任务的分割
数据分割依据于我们的问题
通信和同步
广播模型(给所有人发送一样的东西)、Scatter模型(给每个人单独发送消息)
gather模型、reduction模型
Amdahl’s Law
程序的加速比取决于可以被并行化的比分
s p e e d u p = 1 1 − P speedup = \frac{1}{1-P} speedup=1−P1 P:可以被并行化的占比
s p e e d u p = 1 P N + s speedup = \frac{1}{\frac{P}{N}+s} speedup=NP+s1 P:并行部分 N:处理器数码 S:串行部分
加速比有极限
并行处理器的数量增加,加速比有上限。