并行与分布式计算导论—性能分析

对应北大罗老师课件:PDC08.MPI.scalability以及书《MPI与OpenMP并行程序设计:C语言版》第七章
重要公式:

  • 加速比通用公式
  • Amdahl定律:决定一个程序是否值得并行化
  • Gustafson-Barsis定律:评估并行程序性能的方法
  • Karp-Flatt度量:确定影响加速比的障碍,来自串行部分/并行开销
  • 等效加速比度量:衡量在并行计算机上执行算法的可扩展性,帮助你选择在处理器数目增加的情况下怎样设计高性能算法

加速比&效率

加速比=串行程序执行时间/并行程序执行时间

  • Speedup=T(n,1)/T(n,p)

定义
S(n,p):p个处理器上解决规模为n的加速比Speedup (ppt的字母。书中用ψ(n,p))
E(n,p):p个处理器上解决规模为n的并行计算效率(书中为 ε(n,p))
σ(n):(无法并行的)串行部分
φ(n):可以并行执行的计算
k(n,p):并行多余出的开销

  • T(n,p) ≥ σ(n)+φ(n)/p+k(n,p)

  • S(n,p)=T(n,1)/T(n,p) ≤ σ(n)+φ(n)) / (σ(n)+φ(n)/p+k(n,p))
    (这里分子为串行时间,分母为并行时间,因为做了“最好情况下,可并行计算部分φ可完全在p个处理器均分”的假设,所以这里并行计算比计算出是一个最好的上界,故用小于等于号)

  • Cost(n,p)=p*T(n,p) p个机子上时间累加;显然,Cost(n,1)=T(n,1)

  • Efficiency: E(n,p)=Cost(n,1)/Cost(n,p)

  • To(n,p)=Cost(n,p)-Cost(n,1) = pT(n,p)-T(n,1) = (p-1)·σ(n)+p·k(n,p)
    (To为p个处理器总时间比1个处理器多出来的)

  • ∴ E(n,p) = Cost(n,1)/Cost(n,p)=1/[1+To(n,p)/T(n,1)]

性质:
  • 可从To(n,p) = (p-1)·σ(n)+p·k(n,p)看出,To随着p增而增;

且大部分情况下有:任意给定c>0,n足够大后有To(n,p)<cT(n,1)(根据实际得来,没有证orz)
这种情况下,固定p,n↑,Efficiency↑。或者想要一个不变的E,可以n↑且p↑,这种情况下该并行程序就是“可扩展的(scalable)”
可扩展性:随着处理器数量增加而提高性能的能力

Amdahl定律

考察结论:
S(n,p)=T(n,1)/T(n,p) ≤ σ(n)+φ(n)) / (σ(n)+φ(n)/p+k(n,p))
∵k>0,∴S(n,p)≤ (σ(n)+φ(n)) / (σ(n)+φ(n)/p)(直接舍去k)
让我们用f表示计算中的串行部分的占比,也即f=σ(n)/(σ(n)+φ(n)),则有:
在这里插入图片描述
提供了用一定数量处理器并行解决问题的加速比的上界。还可以用于确定在处理器增加的情况下的渐进加速比。

E.g.: 一个串行程序90%时间执行了可并行化的程序,10%在执行必须串行的函数。如果用8个处理器执行的话所期望最大加速比是多少?
解:f=0.1;S(n,p)≤1/(0.1+0.9/8)≈4.7

  • Amdahl效应:加速比往往是问题规模的增函数。
    在这里插入图片描述

Gustafson-Barsis定律

p个处理器,规模为n,s:总执行时间中串行比例,则

  • 最大加速比:S(n,p)≤p+(1-p)s

推导:s=σ(n)/[σ(n)+φ(n)p],∴σ=(σ+φ/p)s;φ=(σ+φ/p)(1-s)p
S(n,p)≤ (σ(n)+φ(n))/(σ(n)+φ(n)/p)=p+(1-p)s
与Amdalh定律:S(n,p)≤1/[f+(1-f)p]相比,A定律固定串行时间,通过预测在p个处理器上的计算速度来确定加速比;GB定律则是固定并行时间,预测串行时间来计算加速比。

E.g.:一个应用程序在64个处理器上需要执行220秒,测试发现5%时间华仔程序串行部分上。则该程序加速比为?
解:S(n,p)=64+(1-64)*0.05=60.85

Karp-Flatt量度

某一程序真实运行条件:p个处理器,加速比为S,p>1。则串行比例:在这里插入图片描述
推导:
定义并行计算实验中确定的串行部分e=(σ+k)/T(n,1) ,T(n,1)=σ+φ
(理解:e分子为并行下“新串行”时间,分母为老串行时间,一个新比老的比例)
因此,σ+k=T(n,1)e,T(n,p)=σ+φ/p+k = T(n,1)e+T(n,1)(1-e)/p。
再根据加速比S定义,用T(n,1)=T(n,p)S替换,T(n,p)=T(n,p)Se+T(n,p)S(1-e)/p,所以有e=(1/S-1/p)/(1-1/p)

该量度优点:考虑了并行开销k(而上两个定律忽略了);发现简单并行程序模型中忽略的其他开销来源(例如可能划分不均匀从而T(n,p)达不到φ/p那么好)
E.g.:在这里插入图片描述
(这里一个点是,串行比例e=0.1,为啥说大部分计算本质是串行的?个人觉得是因为随着p增大,)

等效指标

To有关结论:

  • 从To(n,p)≥ (p-1)·σ(n)+p·k(n,p)看出,To随着p增而增
  • 为了在p↑情况下维持效率不变,n↑时必须有:T(n,1)≥CTo(n,p),其中C=E(n,p)/[1-E(n,p)]

P.S.第二条证明:S≤(σ+φ)/(σ+φ/p+k)=p(σ+φ)/(pσ+φ+pk)
=p(σ+φ)/[(σ+φ)+(p-1)σ+pk]
由To≥(p-1)σ+pk可得,S≤p(σ+φ)/(σ+φ+To)
因为效率E=加速比/p=S/p,所以E≤(σ+φ)/(σ+φ+To)
设C=E/(1-E),则T(n,1)≥CTo(n,p)

假定一个并行系统由T(n,1)>=CTo(n,p)可推出等加速比关系:n≥f(p ),如果M(n)表示所需内存,M-1(n)≥f§表示为了保持效率不变,所需内存大小该是p的怎样的一个函数。

  • 定义:等效关系n≥f(p )
  • 定义:M(f(p ))/p为可扩展性函数

该数的复杂度确定了可保持常数效率的处理器的个数范围。举例:M(f(p ))/p=1,则每个处理器所需要的内存为常数,并行系统是完全可扩展的(就是说随着p的增大,每个p仍然是原来的那些内存也完全ok);如果=Θ§(比如说=p),那么说明随着p增大,每个处理器需要的内存也线性增大,如果单个最大内存为8,那可能容下的最多处理器个数也就是8,9个后开始每个处理器需要的内存数=p=9>8就不行了。
E.g.1:在这里插入图片描述E.g.2:来自罗老师ppt
在这里插入图片描述
在做矩阵乘法时按照行拆分A,则有:时间复杂度为O(n2)=T(n,1);并行时间复杂度:O(n2/p);all-to-all-bc信息交换复杂度:O(logp+n/p*(p-1));并行总复杂度:O(n2/p+n+logp)
当n足够大,信息传递所用时间O(logp+n/p*(p-1)=O(n),也就是To(n,p)=O(n)
等效关系:T(n,1)=n2≥To(n,p)=Cpn -> n≥Cp
内存需要:M(n)=n2
所以可扩展函数:M(Cp)/p=C2p
该函数可扩展性不是很好,因为每个处理器所需内存为O(p )

总结:等效关系-》求出可扩展函数,确定问题规模n作为处理器个数p的函数应该如何增长,才能维持原来效率不变。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值