弱扩展和强扩展都是高性能计算里的名词,也就是并行计算相关方面的。对于超级计算机而言,有成千上万的服务器节点,而如何充分的利用到这些服务器,我们需要设计合适的算法来利用好这些服务器,而强扩展性和弱扩展性是描述对应算法的指标。
强扩展性(Strong Scalability)
表示问题规模不变,变化处理器的数量,看性能的提升,用加速比来衡量。加速比(强可扩展性),P个处理器的加速比=单个处理器时间/P个处理器时间。
例如,一个算法原来使用单个处理器需要的时间是2000s,而后面用了P个处理器后只需要1000s,那么加速比便为2倍,即,同理如果变成了20s的话,那么加速比便是100倍。
但由于机器传输以及其他因素的影响,并不是使用5台机器,加速比就为5倍,这时候我们就需要一个良好的算法,来实现好的强扩展性,使的强扩展性尽量呈现线性趋势。也就是如下图,其意义便是在处理器数量增加的同时,使得运行时间尽可能的减少。
而在强扩展性中,还会收到Amdahl法则的影响,Amdahl法则是由美国的一位科学家提出来的。指的是在一个算法中,有多少是并行计算的部分,有多少是必须串行的部分。
按照以下公式计算:
Speedup(P) = Time(1)/Time(P) <= 1/(s + (1-s)/P) <= 1/s
s = 必须串行做的工作比例, 所以(1-s)是可以并行计算的比例
P = 处理器数目
比如S是30%,不管投入多少处理器,加速比一定小于1÷0.3即3.33倍。而清楚了这个问题后,我们就能够决定需要使用多少处理器。这在计算机科学研究中也非常重要的。
弱扩展性(Weak Scalability)
而弱扩展性描述的是并行效率,指处理器个数与每个处理器效率(也就是每个处理器的利用的程度)的关系。也就是在增加处理器数量的同时,保证每个处理器的任务量不变,处理器并行效率的变化。和之前的强扩展性做对比,强扩展性强调的是问题规模不变,增加处理器的数量,系统的扩展性如何。弱扩展性强调并行效率,也就是我增加了处理器的数量,变化后的处理器是否还能够充分的利用。
假设阿里巴巴刚创建的时候,10万用户,用10台机器,处理运算用2分钟,后来有20万用户,还需要2分钟运算,机器增加到20台,当30万用户,如果机器增加到30台,能否还保持2分钟的运算。在这一过程中,好的算法也是尤为重要的。