#期末复习 ###PPT2:
- 并行计算的意义
- 并行计算是解决计算挑战的必由之路
- ** 并发与并行的区别√**
- 扩展性
-A computer system, including all its hardware and software resources, is called scalable if it can scale up (i.e. improve its resources) to accommodate ever-increasing performance and functionality demand and/or scale down (i.e. decrease its resources) to reduce cost.
- Resource Scalability
- Application Scalability
- Technology Scalability
- 加速比
- 概念
- 描述对程序并行化之后获得的性能收益
- 计算公式
- S: 程序中串行部分的比例,n: 机器规模(或处 理器核的数目)
- nt = 最优串行算法执行时间/并行程序执行时间
- 定律
- Amdahl定律
- 固定问题规模(工作负载), 减少响应时间
- 加速比 = 1/(S + (1-S)/n)
- Gustafson定律
- 固定计算时间,扩大问题 规模,提高计算精度
- 扩展加速比=(1-S) * n + S
- 概念
###PPT3:
-
** Flynn分类法(根据同时执行的指令数和数据流来分类) **
- SISD (Single Instruction , Single Data stream)
- 传统的机器
- SIMD
- 矢量运算
- MISD
- 不存在的机器,或者用于容错率
- MIMD
- General Purpose Parallel Machines
- MIMD works asynchronously
- SISD (Single Instruction , Single Data stream)
-
spmd(了解)
- Single Program, Multiple Data
- Multiple autonomous processors simultaneously executing the same program (but at independent points, rather than in the lockstep that SIMD imposes) on different data.
-
共享存储器的层次结构
-
并行计算中的操作和开销
- 操作
- Computation operations 计算操作
- Parallel operations 管理进程操作
- Interaction operations 进程间同步操作
- 开销
- Prarllelism overhead 进程管理产生的开销
- Communication overhead 交换信息产生的开销
- Synchronization overhead 执行同步指令的开销
- Load imbalance overhead 负载不均开销(当某些处理器空闲,某些处理器忙碌时产生的开销)
- 操作
-
PRAM模型,例子好好看
- Parallel Random Access Machine
- 同构性 n=1, SISD; n>1, MIMD
- 同步性
- 指令级同步
- 交互机制
- 进程间通过共享变量(或共享存储器)进行交互
- 地址空间
- 单地址空间;均匀存储器访问
- 存储器模型
- EREW
- 应用
- 问题:n个处理器的EREW PRAM 上,对两个N维向量A、B求内积S,当N很大时,加速比为多少?(假设乘法和加法各占一个时钟周期)
- 串行:
2N-1
个周期 - 并行:
[2N-1-(n-1)]/n + logn
个周期 - 加速比:
n/{1+[(nlogn-n+1/(2N-1))]}
- 特别
N>>n
时,加速比近似为n
- 优缺点
- 优点
- 简单。多数的理论并行算法,均用PRAM模型或其变异加以描述。也被广泛用来分析并行计算复杂度
- 缺点
- 对零通信开销和指令集同步的不现实假设
- 优点
-
APRAM 不考
-
BSP 看
-
多级存储结构 看
- 为了解决内存墙(memory wall)性能瓶颈问题。
- 在节点内部的cache称为二级cache(L2 cache)。
- 在处理器内部更小的cache成为一级cache(L1 cache)。
- L1 cache连接 CPU寄存器和L2 cache,负责缓存L2 cache中的数据到寄存器中
- 映射策略
- 直接映射策略
- n路组关联映射策略
- 全关联映射策略
-
并行计算机访存模型
- UMA (Uniform Memory Access) 模型
- 物理存储器被所有节点共享
- 所有节点访问任意存储单元的时间相同
- 放生访问竞争时,种菜策略平等对待每个节点,即每个节点机会均等;
- 各节点的CPU可以带有局部私有高速缓存
- 外围I/O设备也可以共享,且每个节点有平等的访问权利。
- NUMA (Non-Uniform Memory Access) 模型
- 物理存储器被所有节点共享,任意节点可以直接访问任意内存模块
- 节点访问内存模块的速度不同,访问本地存储的速度一般是访问其他节点内存模块的3倍以上
- 发生访问竞争时,仲裁策略对节点可能是不等价的
- 各节点的CPU可带有局部私有告诉缓存
- 外围的I/O设备也可以共享,但对各个节点是不等价的。
- UMA (Uniform Memory Access) 模型
-
COMA NOMA 不考
-
CC-NUMA 不考
-
物理机模型(看)
- SMP(Symmetric Multi-Processor)
- PVP(Parallel Vector Processors)
- MPP(Massive Parallel Processor)
- Cluster
###并行编程基础
-
并行编程模型(3种)
- 共享存储器编程
- 消息传递编程
- 数据并行编程
-
显式、隐式并行
- 显式并行
- 在源程序中由程序员使用专用语言构造、编译器命令或库函数对并行性加以显示说明
- 共享变量模型、消息传递模型、数据并行模型
- 隐式并行
- 程序员不显式地说明并行性,而是让编译器或运行支持系统自动加一开发
- 并行化编译器、运行时间并行化
- 显式并行
-
考编程题
-
各个编程模型的特点(详论述) | 特征 | 消息传递 | 共享存储 | 数据并行 | |-----------|--------| |典型代表 |MPI,PVM |OpenMP |HPF,IPP| |可移植性 |所有主流并行计算机 |SMP,DSM |SMP,DSM,MPP| |并行粒度 |进程级最大粒度 |线程级细粒度|进程级细粒度| |并行操作方式|异步 |异步 |松散同步| |数据存储方式|分布式存储 |共享存储 |共享存储| |数据分配方式|显示 |隐式 |半隐式| |学习入门难度|较难 |容易 |偏易|
-
分解——将应用程序划分成多个独立的任务,并确定这些任务之前的相互依赖关系(相关性)
-
任务分解
- 根据功能分解
-
数据分解
- 数据层级的并行
-
数据流分解
-
总结 |分解方式|设计|说明 |---| |任务分解|不同的程序行为采用不同的线程或进程实现|常用于GUI应用程序| |数据分解|多个进程或者线程对不同的数据块执行相同的操作|常用于音频、图像处理和科学计算应用程序| |数据流分解|对数据处理阶段的不同操作进行分解|应注意尽量消除启动和排空延迟|
-
-
范型或者模式
- 任务并行
- 阶段并行(Phase Parallel)
- 分治法
- 几何分解
- 流水线
- 总结
- |范例或模式 |分解方式| |----| | 阶段并行 | 任务分解 / 数据分解| |分治模式 |任务分解 / 数据分解 | |几何分解模式 |数据分解 | |流水线模式 | 数据流分解 |
- 任务并行
###并行编程 ####WinAPI
-
创建线程
-
管理线程
-
线程同步
- 事件、其他同步对象、互锁函数(原子操作)
- 消息队列
-
其他
- 线程池
- 线程优先级
- 处理器亲和
-
创建线程
- CreateThread() & ExitThread() 最基础、最简单
-
CreateThread( lpThreadAttributes , dwStackSize , lpStartAddress , lpParameter , dwCreationFlags , dwCreationFlags , lpThreadId )
- void ExitThread(dwExitCode) - ThreadFunc(data) { //do the work of the thread return 0; }
-
- _beginthreadex() & _endthreadex() 广泛使用
- _beginthreadex( security , stack_size, start_address, arglist , initflag , threadID )
- _endthreadex(retval);
- 只存在于C/C++运行时库的多线程版本中
- 封装CreateThread() & ExitThread()
AfxBeginThread()
&AfxEndThread()
for MFC
- CreateThread() & ExitThread() 最基础、最简单
-
Linux
-
OMP 编程或者读题,重点是新功能和数据环境