串行计算模式
常规软件是串行的
设计运行于一个中央处理器上(CPU)
通过离散的指令序列完成一个问题的解决
一条一条指令的执行
同时只有一条指令在执行
并行计算模式
并行计算是同时应用多个计算资源解决一个计算问题
涉及多个计算资源或处理器
问题被分解为多个离散的部分,可以同时处理(并行)
每个部分可以由一系列指令完成。
每个部分的指令在不同的处理器上执行
概念:
Flynn 矩阵
SISD single Instruction,Single Data | SIMD Single Instruction, Multiple Data |
MISD Multiple Instruction, Single Data | MIMD Multiple Instruction, Multiple Data |
常见名词
Task(任务):可完整得到结果的程序,一个或者若干个代码段,相对独立。
Parallel Task (并行任务):可用并行计算解决的一个任务。
Serial Execution(串行执行):一串
Parallel Execution(并行执行):
Shared Memory(共享存储):
Distributed Memory(分布式存储):
Communications(通信):并行单元需要交互
Synchronization(同步):相同的执行顺序,破坏了独立性原则。导致性能下降
Granularity(粒度):任务划分,每个任务大小
ObservedSpeedup(加速比):对比标志程序并行程序的性能提升。同层次计算性能的比较。
Parallel Overhead(并行开销):为了完成并行预算的开销,通信的开销最大。
Scalability(可扩展性):核数增加后加速比是否为线性增加。
存储器架构
Shared Memory
Distributed Memory
Hybrid Distributed-Shared Memory混合分布式共享存储
并行编程模型
共享存储模型Shared Memory Model:所有处理单元去共享存储器取数据
线程模型Threads Model:开多个线程,线程切换,数据放置比较近
消息传递模型 Message Passing Model:MPI独立存储单元,消息模式传递
数据并行模型 Data Parallel Model:数据进行切分
具体实例
OpenMP
MPI
SPMD(Single Program Multiple Data):每一个代码段处理
MPMD(Multiple Program Multiple Data):多个任务同时处理
设计并行处理程序和系统
自动和手动并行:单一模式下自动模式很好了,负责模型需要手动并行。
理解问题和程序:理解要处理问题的特性,并行的部分在哪里。
分块分割:数据分块和任务分割。
通信:不同分块分区之间数据交互,开销比较大,可扩展性影响较大部分
同步:步调一致
数据依赖:
负载均衡:多个独立人物之间负荷,是否均衡
粒度:任务细分大小
I/O:
成本:
性能分析和优化:
数据和任务的分割:
通信和同步:
同步:broadcast scatter gather reduction
Amdahl's Law
程序可能的加速比取决于可以被并行化的部分
如果没有并行化and the speedup=1(no speedup)
如果全部可以并行化and the speedup is infinite(in theory)
如果50%则可以冰箱话, maximum speedup=2。
如果有N个处理器并行处理
P=并行部分,N=处理器数码,and S=串行部分
并行化的可扩展性极限