一、基础概念剖析:
1、延迟:发送内存请求——>实际完成数据移动所需的时间。可以理解为家到公司的距离
2、带宽:单位时间移动数据量,即数据传输的速度。可以理解为家到公司中间马路的宽度
我们这里举个例子,计算机的延迟与带宽分别是α和1/β:
- 带宽为1/β表示单位时间可以移动1/β大小的数据量,那么移动一个大小为1的数据就需要β时间
- 移动N个长度为1的数据需要时间N(α+β)
- 移动一个长度为N的数据需要时间α+βN
更形象点的图片如下:
其中蓝色的就是所谓的带宽。
3、冯诺依曼体系架构
这个架构是最早提出的架构,其中要点如下: - 计算和存储分离:IO设备的访问远远慢于CPU的计算速度
- 访存受限:现代计算机的缺陷在于计算速度很快,但是数据的访存跟不上,整体的运行时间受到访存限制
- 内存(存储器):数据访问速度比IO设备快,输入数据先放到内存,CPU直接从内存读取,处理以后写回内存,内存写回输出设备
意思是cpu的计算速度大于数据传输速度,所以如果想让计算效率高,那么cpu一定尽可能的处于计算过程中。所以内存是个利用空间换速度的产物(后续还有cache等)。
4、多级存储
这个也是老生常谈的内容了,全局内存容量大速度慢,多级缓存容量中等速度中等,寄存器容量小速度快。现代计算机一般包含的L2或者L3 Cache,再继续增加缓存,计算机成本进一步提高:
5、访问数据时间计算
这里又有几个概念:
(1)缓存命中率 r N r_N rN:数据data在 L N L_N LN Cache中成功访问的概率,如果在访问失败,说明需要在下级存储继续寻找
(2)假设从全局内存访问数据的时间是 T 0 T_0 T0,从 L N L_N LN Cache中访问数据的时间是 T N T_N TN
那么data访问的平均时间计算为:
只有一级缓存,如果在一级缓存命中,那么时间为 T 1 T_1 T1,否则时间为 T 0 T_0 T0,平均时间为 A 1 A_1 A1= r 1 T 1 r_{1}T_1 r1T1+ ( 1 − r 1 ) T 0 (1−r_1)T_0 (1−r1)T0
存在二级缓存,如果在一级缓存命中,那么时间为 T 1 T_1 T1,否则时间为 a 2 = r 2 T 2 + ( 1 − r 2 ) T 0 a_2=r_2T_2+(1−r_2)T_0 a2=r2T2+(1−r2)T0,平均时间为 A 2 = r 1 T 1 + ( 1 − r 1 ) a 2 A_2=r_1T_1+(1−r_1)a_2 A2=r1T1+(1−r1)a2/
这里假设 T 0 T_0 T0 = 400, T 1 T_1 T1 = 40, r N r_N rN = 0.9:
只有一级缓存的话:平均时间为0.9(40)+0.1(400)=36+40=76.
继续增加缓存,访问时间的降低不明显,但是计算机的成本快速提高
6、并行计算三大定律:阿姆达尔定律
假设α∈[0,1]是任务无法并行处理部分占用的比例,假设工作量固定,那么对于任意N个机器,相比于1个机器来说,加速比S(N)= T ( 1 ) T ( N ) < 1 α \frac{T(1)}{T(N)}<\frac1α T(N)T(1)<α1
公式推导:
看起来很抽象,这里我们举个例子,例如一个任务有做饭和吃饭,其中做饭10min,吃饭10min。
其中α=0.5,也就是无法并行的时间为10min,做饭的10min。其中任务是处理1kg饭,也就是不管多少人都可以一起吃饭,这里面举了10个人一起吃饭的,由于做饭不能并行,所以固定10分钟。后面可以并行,一个人1min可以处理0.1kg,N个人在10/N的时间内处理完。所以总时长为10+10/N,加速比不超过2.
具体的定义:
任务(task):并行计算处理的对象
工作量(workload):完成任务的全部开销总和
执行率(execution rate):单个处理器单位时间处理的工作量
加速比(scalability):固定工作量下单机处理时间÷多机处理时间
理想加速比(ideal scalability):处理器增多的比例
并行效率(parallel effiency):加速比÷理想加速比
7、古斯塔夫森定律(Gustafson’s Law)
这个定律跟阿姆达尔定律不同,阿姆达尔定律强调串行部分是加速的主要限制因素,而古斯塔夫森定律强调通过扩展问题规模,可以改善并行计算性能。并行计算的加速比不仅取决于串行部分的比例,还与问题规模成正比。换句话说,通过增加问题规模,程序的并行部分可以显著增加,从而提高并行效率。
古斯塔夫森定律的加速比公式为:
S ( p ) = p − α ⋅ ( p − 1 ) S(p) = p - α⋅(p−1) S(p)=p−α⋅(p−1)
S§: 并行计算的加速比。
p: 并行处理器的数量。
α: 程序中串行部分所占的比例(0 ≤ α ≤ 1)。
(1)串行部分限制加速:如果程序的串行部分比例较大,即 α 较大,那么无论增加多少处理器,程序的加速比都受限制。
(2)并行部分与问题规模有关:通过增加问题规模,可以降低串行部分的相对比例,提高整体的并行效率。
这里依旧举一个例子:
我们运行一个图像处理程序,其中:
串行部分占总计算时间的 α=10%。并行部分占 90%。使用 p=4 个并行处理器。
还有孙倪定律,这里不在详细介绍了,感兴趣的可以后面自己搜索。接下来是应用举例:
假设有一个输入向量 z = [ z 1 , z 2 , . . . , z n ] z = [z_1, z_2, ..., z_n] z=[z1,z2,...,zn],Softmax函数输出的向量 σ ( z ) \sigma(z) σ(z) 的第 i i i 个元素计算公式为:
σ ( z ) i = e z i ∑ j = 1 n e z j \sigma(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}} σ(z)i=∑j=1nezjezi
这里, e z i e^{z_i} ezi 表示自然指数函数应用于 z i z_i zi,分母是对所有可能的输出类别应用了指数函数后的值求和,以确保输出向量的所有元素之和为1。
用并行计算的话这里的softmax算子: y i = x i − M S y_i = \frac{x_i - M}{S} yi=Sxi−M, M = m a x { x i } M = max\{{x_i}\} M=max{xi}, S = ∑ i e x i − M S = \sum_{i} e^{x_i-M} S=∑iexi−M,计算M和S都可以并行,但是保存M和S这两个中间结果不能并行。
说实话这里我听不懂,。。换下一章
计算密度和roof line模型
性能:可以简单理解为单位时间内处理的数据量 = min{峰值性能,单位时间处理的数据量} = min{峰值性能,带宽x计算密度}
那么对于访存密集型任务,提高计算密度可以提高性能,但是交界处是什么?
对于访存密集型任务,随着计算密度越大峰值计算速度也越大,但是到了交界处:
内存带宽限制:交界处的斜线表示内存带宽的限制。当任务的计算密度较低时(靠近左下角),任务主要受限于内存带宽,因为每次计算所需的内存访问较多。
计算能力限制:当任务的计算密度较高时(靠近右上角),任务主要受限于计算能力,因为计算量大而内存访问相对较少。