并行程序的性能分析
原书:MPI与Open MP并行程序设计:C语言版
ISBN:9787302095552
评估方法概述
- Amdahl定律
帮助你决定一个程序是否值得并行化 - Gustafson Barsis定律
提供了评估并行程序性能的方法。 - Kap-Flatt度量
确定影响加速比的主要障碍是串行代码还是并行开销。 - 等效加速比度量
衡量在并行计算机上执行并行算法的可扩展性。它可以帮助你选择能够在处理器数目增加的情况下获得高性能的算法设计。
效率的简单定性分析
符号表示
- Ψ ( n , p ) Ψ(n,p) Ψ(n,p) : 表示在p个处理器上解决规模为n的问题时的加速比
- σ ( n ) σ(n) σ(n) :表示计算中内在的串行部分所需时间
- φ ( n ) φ(n) φ(n) :表示可以并行执行的计算所需时间
- κ ( n , p ) κ(n,p) κ(n,p) :表示并行计算开销所需的时间。
加速比
- 顾名思义,是串行程序执行时间与对应的并行程序执行时间之比
串行程序执行时间/并行程序执行时间
简单的性能分析
- 并行算法的操作主要分为:
○ 必须串行执行的计算;
○ 可以并行执行的计算;
○ 并行开销(通信操作和冗余计算)。 - 串行时间
● 在一个处理器上执行的串行程序,一次只能执行一项计算操作,因此需要
σ ( n ) + φ ( n ) σ(n) +φ(n) σ(n)+φ(n)
时间来执行所需的计算。
● 串行程序不需要处理器间通信,因此串行程序执行时间的表达式中不含有κ(n,p) . - 并行时间(理论上的最短时间,假定每个处理器上完全分配并行计算部分)
● 必须串行执行的部分不能从并行中受益,因此占有时间为:
σ ( n ) σ(n) σ(n)
● 在假定情况下每个处理器执行并行计算时间相同为:
φ ( n ) / p φ(n)/p φ(n)/p
● 还包括在规模为n下p个处理器的通信成本与冗余开销:
κ ( n , p ) κ(n,p) κ(n,p)
● 综上,理想情况下并行计算的时间为:
σ ( n ) + φ ( n ) / p + κ ( n , p ) σ(n) +φ(n)/p+κ(n,p) σ(n)+φ(n)/p+κ(n,p) - 加速比上界
根据上述假设情况,可以得到一个初步的加速比表达式:
Ψ ( n , p ) ≤ σ ( n ) + φ ( n ) σ ( n ) + φ ( n ) / p + κ ( n , p ) Ψ(n,p) \le \frac{σ(n) +φ(n)}{σ(n) +φ(n)/p+κ(n,p)} Ψ(n,p)≤σ(n)+φ(n)/p+κ(n,p)σ(n)+φ(n)
● 由于实际情况下每个处理器上的计算任务并不均衡因此并行计算时间会增加,而加速比会降低。
● 增加处理器个数有利于减少并行计算时间,从而提高加速比。但处理器个数的增多会导致通信成本和冗余开销的增加,因此,当处理器个数大于某值时,加速比会迎来拐点即随着处理器个数增多而降低。如下图所示:
● 并行程序的效率
○ 用于度量处理器的利用率
○ 定义:加速比除以使用的处理器数,即
串行执行时间/ (使用的处理器数x并行执行时间)
○ 符号:
ε
(
n
,
p
)
ε(n, p)
ε(n,p) 表示在p个处理器上解决规模为n的并行计算效率
○ 根据加速比上界可以得到效率上界:
ε
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
p
(
σ
(
n
)
+
φ
(
n
)
/
p
+
κ
(
n
,
p
)
)
⇒
≤
σ
(
n
)
+
φ
(
n
)
p
σ
(
n
)
+
φ
(
n
)
+
p
κ
(
n
,
p
)
\begin{aligned} ε(n, p) \le \frac{σ(n) +φ(n)}{p(σ(n) +φ(n)/p+κ(n,p))}\\ \Rightarrow\le \frac{σ(n) +φ(n)}{pσ(n) +φ(n)+pκ(n,p)} \end{aligned}
ε(n,p)≤p(σ(n)+φ(n)/p+κ(n,p))σ(n)+φ(n)⇒≤pσ(n)+φ(n)+pκ(n,p)σ(n)+φ(n)
显然,
ε
(
n
,
p
)
≤
1
ε(n, p) \le1
ε(n,p)≤1
Amdahl定律:
引入
由上知,加速比初步公式
Ψ
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
σ
(
n
)
+
φ
(
n
)
/
p
+
κ
(
n
,
p
)
Ψ(n,p) \le \frac{σ(n) +φ(n)}{σ(n) +φ(n)/p+κ(n,p)}
Ψ(n,p)≤σ(n)+φ(n)/p+κ(n,p)σ(n)+φ(n)
因为
κ
(
n
,
p
)
>
0
κ(n,p)>0
κ(n,p)>0,
Ψ
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
σ
(
n
)
+
φ
(
n
)
/
p
Ψ(n,p) \le \frac{σ(n) +φ(n)}{σ(n) +φ(n)/p}
Ψ(n,p)≤σ(n)+φ(n)/pσ(n)+φ(n)
令
f
=
σ
(
n
)
σ
(
n
)
+
φ
(
n
)
f=\frac{σ(n)}{σ(n) +φ(n)}
f=σ(n)+φ(n)σ(n),带入上式可得
Ψ
(
n
,
p
)
≤
1
f
+
(
1
−
f
)
/
p
Ψ(n,p) \le \frac{1}{f +(1-f)/p}
Ψ(n,p)≤f+(1−f)/p1
定理
f为计算中必须串行执行的部分所占的比例,0<f<1.那么该计算在p个处理器的并行计算机上所能达到的最大加速比ψ为:
Ψ
(
n
,
p
)
≤
1
f
+
(
1
−
f
)
/
p
Ψ(n,p) \le \frac{1}{f +(1-f)/p}
Ψ(n,p)≤f+(1−f)/p1
功能
当一个程序尝试使用并行优化时,可以根据处理器个数与串行计算比例,估计并行计算加速比的上界,以此来预期程序是否值得优化。
例:
假如我们实现了一个串行程序的并行版本,算法复杂度为
Θ
(
n
2
)
\Theta(n^2)
Θ(n2), n是数据集的大小。
假定输入数据和输出结果所需的时间是:
(
18000
+
n
)
μ
s
(18000+n) μs
(18000+n)μs
这是程序的串行部分。程序的计算部分可以并行执行,其执行时间为:
(
n
2
/
100
)
μ
s
(n^2/100)μs
(n2/100)μs
假定问题规模为10000
由Amdahl定律可得:
Ψ
≤
(
28000
+
1000000
)
μ
s
(
(
28000
+
1000000
)
/
p
)
μ
s
Ψ \le \frac{(28000+1000000)\mu s}{((28000+1000000)/p)\mu s}
Ψ≤((28000+1000000)/p)μs(28000+1000000)μs
可得下图:
局限性
在上一个例子中引入通信开销,假设通信点个数为
l
o
g
n
logn
logn,每个通信点通信时间为
10000
⌈
l
o
g
p
⌉
+
(
n
/
10
)
μ
s
10000\left\lceil\ logp \right\rceil+(n/10)\mu s
10000⌈ logp⌉+(n/10)μs
对于规模为10000的问题,总通信时间为:
14
(
10000
⌈
l
o
g
p
⌉
+
1000
)
μ
s
14(10000\left\lceil\ logp \right\rceil+1000)\mu s
14(10000⌈ logp⌉+1000)μs
将通信时间引入原始的加速比公式可得:
ψ
≤
(
28000
+
1000000
)
μ
s
(
(
28000
+
1000000
)
p
)
+
14
(
10000
⌈
l
o
g
p
⌉
+
1000
)
μ
s
\psi \le \frac{(28000+1000000)\mu s}{(\frac{(28000+1000000)}{p})+14(10000\left\lceil\ logp \right\rceil+1000)\mu s}
ψ≤(p(28000+1000000))+14(10000⌈ logp⌉+1000)μs(28000+1000000)μs
在图表中可以明显看出差异。
Amadahl效应
通常κ(n,p)的时间复杂度要比φ(n)的低,因此,当问题规模增加时,计算时间的增长速度要比额外开销的增长快,所以,当处理器数目确定时,加速比是问题规模的增函数,这种现象就是Amdahl效应。
对于上例,可作下图:
Gustafson Barsis定律
引入
由上可知,因为
κ
(
n
,
p
)
>
0
κ(n,p)>0
κ(n,p)>0有
Ψ
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
σ
(
n
)
+
φ
(
n
)
/
p
Ψ(n,p) \le \frac{σ(n) +φ(n)}{σ(n) +φ(n)/p}
Ψ(n,p)≤σ(n)+φ(n)/pσ(n)+φ(n)
令
s
=
σ
(
n
)
σ
(
n
)
+
φ
(
n
)
/
p
s=\frac{σ(n)}{σ(n) +φ(n)/p}
s=σ(n)+φ(n)/pσ(n)
则
1
−
s
=
φ
(
n
)
/
p
σ
(
n
)
+
φ
(
n
)
/
p
1-s=\frac{φ(n)/p}{σ(n) +φ(n)/p}
1−s=σ(n)+φ(n)/pφ(n)/p
所以
σ
(
n
)
=
(
σ
(
n
)
+
φ
(
n
)
/
p
)
s
σ(n)=(σ(n) +φ(n)/p)s
σ(n)=(σ(n)+φ(n)/p)s
φ
(
n
)
=
(
σ
(
n
)
+
φ
(
n
)
/
p
)
(
1
−
s
)
p
φ(n)=(σ(n) +φ(n)/p)(1-s)p
φ(n)=(σ(n)+φ(n)/p)(1−s)p
代入后可得:
Ψ
(
n
,
p
)
≤
(
σ
(
n
)
+
φ
(
n
)
/
p
)
(
s
+
(
1
−
s
)
p
)
σ
(
n
)
+
φ
(
n
)
/
p
⇒
≤
s
+
(
1
−
s
)
p
⇒
≤
p
+
(
1
−
p
)
s
\begin{aligned} Ψ(n,p)& \le \frac{(σ(n) +φ(n)/p)(s+(1-s)p)}{σ(n) +φ(n)/p}\\ &\Rightarrow \le s+(1-s)p\\ &\Rightarrow \le p+(1-p)s \end{aligned}
Ψ(n,p)≤σ(n)+φ(n)/p(σ(n)+φ(n)/p)(s+(1−s)p)⇒≤s+(1−s)p⇒≤p+(1−p)s
定理
用s表示在并行计算过程中花在内在的串行部分的时间比例。那么该计算在p个处理器的并行计算机上所能达到的最大加速比ψ为:
Ψ
(
n
,
p
)
≤
p
+
(
1
−
p
)
s
Ψ(n,p) \le p+(1-p)s
Ψ(n,p)≤p+(1−p)s
功能
从并行程序出发,估计并行计算比在单处理器上执行同样的计算可以快多少,由于单处理器系统处理相同规模数据时可能难以获得足够的内存条件,因此在单个处理器上处理相同问题的时间可能大大超过在多个处理器上并行处理的时间。因而在Gustafson Barsis定律中,如果单CPU系统有足够的内存,加速比是并行计算的时间去除在单CPU上解决同样问题所需的时间。把Gustafson-Baris定律所预测的加速比称为比例加速比(scaled speedup), 因为通过从并行计算而不是串行计算出发,它允许问题规模成为处理器个数的增函数。
例:
Vicki希望能够在一台有16 384个CPU的系统上,执行一个对其雇主非常重要的问题的时候可以达到15 000的加速比,以此来说明购买该3000万美元的超级计算机的正确性。求要达到上述目标,执行时间中可以用于串行操作的最大比例。
根据Gustafson-Baris定律:
15000
≤
16384
+
(
1
−
16384
)
s
≤
16384
−
16483
s
15000\le16384+(1-16384)s\\ \le16384-16483s
15000≤16384+(1−16384)s≤16384−16483s
解得:s=0.084,即执行时间中可以用于串行操作的最大比例
Kap-Flatt度量
引入
上述两种定律忽略了代表并行开销的项κ(n,p),因此可能会过高地估计加速比或比例加速比。Karp和Flatt提出了另-一个性能量度,称为实验决定的串行比例。
将规模为n的并行程序在p个处理器上的执行时间表示为:
T
(
n
,
p
)
=
σ
(
n
)
+
φ
(
n
)
/
p
+
κ
(
n
,
p
)
T(n,p)=σ(n) +φ(n)/p+κ(n,p)
T(n,p)=σ(n)+φ(n)/p+κ(n,p)
当p=1时,该程序为串行程序,因而没有通信开销,即:
T
(
n
,
1
)
=
σ
(
n
)
+
φ
(
n
)
T(n,1)=σ(n) +φ(n)
T(n,1)=σ(n)+φ(n)
令
e
=
(
σ
(
n
)
+
κ
(
n
,
p
)
)
/
T
(
n
,
1
)
e=(σ(n) +κ(n,p))/T(n,1)
e=(σ(n)+κ(n,p))/T(n,1)
则
σ
(
n
)
+
κ
(
n
,
p
)
=
T
(
n
,
1
)
e
σ(n) +κ(n,p)=T(n,1)e
σ(n)+κ(n,p)=T(n,1)e
因此,执行时间可表示为:
T
(
n
,
p
)
=
T
(
n
,
1
)
e
+
T
(
n
,
1
)
(
1
−
e
)
/
p
T(n,p)=T(n,1)e+T(n,1)(1-e)/p
T(n,p)=T(n,1)e+T(n,1)(1−e)/p
又因为
Ψ
(
n
,
p
)
=
T
(
n
,
p
)
T
(
n
,
1
)
Ψ(n,p)=\frac{T(n,p)}{T(n,1)}
Ψ(n,p)=T(n,1)T(n,p)
则
Ψ
(
n
,
p
)
=
e
+
(
1
−
e
)
/
p
⇒
e
=
1
/
Ψ
−
1
/
p
1
−
1
/
p
Ψ(n,p)=e+(1-e)/p\\\Rightarrow e=\frac{1/Ψ-1/p}{1-1/p}
Ψ(n,p)=e+(1−e)/p⇒e=1−1/p1/Ψ−1/p
定理
给定一个在p个处理器上展示了加速比ψ的并行计算,其中p>1,那么将由该次实验确定并行计算中的串行比例e定义为:
e
=
1
/
Ψ
−
1
/
p
1
−
1
/
p
e=\frac{1/Ψ-1/p}{1-1/p}
e=1−1/p1/Ψ−1/p
功能
例
在1~8个处理器上执行相同的并行程序,得到如下结果
由定理可知,实验中的串行比例如下:
由于:
- 考虑了通信与冗余开销
- 帮助发现并行程序执行中的其他开销
实验确定的串行比例e有很好的实用价值。显然当处理器个数增加时并行计算的串行比例应当增加,这在可以帮助我们确定影响并行效率的原因: - 程序缺乏并行性
- 算法或执行程序引入的开销
例如上例中,随着处理器增加,串行比例却没有增加,这说明影响并行程序执行的原因主要是程序的并行程度较低。
等效加速比度量
引入
由
Ψ
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
σ
(
n
)
+
φ
(
n
)
/
p
+
κ
(
n
,
p
)
⇒
≤
p
(
σ
(
n
)
+
φ
(
n
)
)
p
σ
(
n
)
+
φ
(
n
)
+
p
κ
(
n
,
p
)
\begin{aligned}Ψ(n,p) &\le \frac{σ(n) +φ(n)}{σ(n) +φ(n)/p+κ(n,p)}\\\Rightarrow&\le\frac{p(σ(n) +φ(n))}{pσ(n) +φ(n)+pκ(n,p)} \end{aligned}
Ψ(n,p)⇒≤σ(n)+φ(n)/p+κ(n,p)σ(n)+φ(n)≤pσ(n)+φ(n)+pκ(n,p)p(σ(n)+φ(n))
令
T
0
(
n
,
p
)
=
p
σ
(
n
)
+
φ
(
n
)
+
p
κ
(
n
,
p
)
−
(
σ
(
n
)
+
φ
(
n
)
)
=
(
p
−
1
)
σ
(
n
)
+
p
κ
(
n
,
p
)
\begin{aligned}T_{0}(n,p)&=pσ(n) +φ(n)+pκ(n,p)-(σ(n) +φ(n))\\&=(p-1)σ(n)+pκ(n,p) \end{aligned}
T0(n,p)=pσ(n)+φ(n)+pκ(n,p)−(σ(n)+φ(n))=(p−1)σ(n)+pκ(n,p)
也就是并行程序花费在程序原有串行算法外的开销
由此可得
Ψ
(
n
,
p
)
≤
p
(
σ
(
n
)
+
φ
(
n
)
)
σ
(
n
)
+
φ
(
n
)
+
T
0
(
n
,
p
)
⇒
ε
(
n
,
p
)
≤
σ
(
n
)
+
φ
(
n
)
σ
(
n
)
+
φ
(
n
)
+
T
0
(
n
,
p
)
⇒
ε
(
n
,
p
)
≤
1
1
+
T
0
(
n
,
p
)
σ
(
n
)
+
φ
(
n
)
⇒
ε
(
n
,
p
)
≤
1
1
+
T
0
(
n
,
p
)
T
(
n
,
1
)
⇒
T
(
n
,
1
)
≥
ε
(
n
,
p
)
1
−
ε
(
n
,
p
)
T
0
(
n
,
p
)
\begin{aligned}&Ψ(n,p) \le \frac{p(σ(n) +φ(n))}{σ(n) +φ(n)+T_{0}(n,p)}\\ &\Rightarrowε(n, p)\le\frac{σ(n) +φ(n)}{σ(n) +φ(n)+T_{0}(n,p)}\\ &\Rightarrowε(n, p)\le\frac{1}{1+\frac{T_{0}(n,p)}{σ(n) +φ(n)}}\\ &\Rightarrowε(n, p)\le\frac{1}{1+\frac{T_{0}(n,p)}{T(n,1)}}\\ &\Rightarrow T(n,1)\ge\frac{ε(n, p)}{1-ε(n, p)}T_{0}(n,p)\\ \end{aligned}
Ψ(n,p)≤σ(n)+φ(n)+T0(n,p)p(σ(n)+φ(n))⇒ε(n,p)≤σ(n)+φ(n)+T0(n,p)σ(n)+φ(n)⇒ε(n,p)≤1+σ(n)+φ(n)T0(n,p)1⇒ε(n,p)≤1+T(n,1)T0(n,p)1⇒T(n,1)≥1−ε(n,p)ε(n,p)T0(n,p)
定理
当我们希望一个并行程序效率在增加处理器个数并且保持效率不变时,
令
C
=
ε
(
n
,
p
)
1
−
ε
(
n
,
p
)
,
T
0
(
n
,
p
)
=
(
p
−
1
)
σ
(
n
)
+
p
κ
(
n
,
p
)
C=\frac{ε(n, p)}{1-ε(n, p)},T_{0}(n,p)=(p-1)σ(n)+pκ(n,p)
C=1−ε(n,p)ε(n,p),T0(n,p)=(p−1)σ(n)+pκ(n,p)
应当让问题规模n增加以保持不等式:
T
(
n
,
1
)
≥
C
T
0
(
n
,
p
)
T(n,1)\ge CT_{0}(n,p)
T(n,1)≥CT0(n,p)
成立
功能
我们可以使用并行系统的等效性来确定可以维持特定效率的处理器个数范围。
等效指的是当处理器个数变化时并行系统的效率不变。
由于在处理器个数增加时并行开销会增大,要保持效率就需要增加问题的规模。我们设计的算法假定所需的数据结构可以放在内存里完成,问题的规模受到主存容量的限制,因此空间是我们进行分析时的一-个限制性因素。
假设由等效加速比的出的等效关系为:
n
≥
f
(
p
)
n\ge f(p)
n≥f(p)
假设M(n)表示问题规模为n时处理器所需的内存空间大小,则M(f§)/p就是保持效率不变的情况下每个处理器内存容量的关于p的增加函数,称其为可拓展性函数
设
M
(
f
(
p
)
)
/
p
=
Θ
(
g
(
p
)
)
M(f(p))/p=\Theta(g(p))
M(f(p))/p=Θ(g(p))
则可通过
g
(
p
)
g(p)
g(p)来估计程序的可拓展性。
总结
○ Amdahl定律
这是向前看的定律。该定律依赖于对串行程序的评估来预测在并行计算系统上执行程序以加速程序中可并行部分的执行时,所能达到的加速比上限。
○ Gustafson Barsis定律
这是向后看的定律。该定律依赖于对并行程序的测试以预测程序在具有足够内存的串行处理器上的执行时间。由于处理器个数增加时可以增加问题的规模,我们称Gustafson-Baris定律提供了比例加速比的估算。
○ Kap-Flatt度量
考察了并行程序在解决固定规模问题时加速比。实验确定的串行比例可以用于预测程序在更多处理器上的性能。
○ 等效加速比度量
用于确定并行系统的可扩展性。在处理器个数增加时,如果增加问题规模可以保持并行效率,则该并行系统是完全可扩展的。由等效关系中推导出的可扩展性函数,确定了要维持相同效率,问题规模作为处理器个数的函数应如何增长
○