多核和多CPU编程——并行计算的加速比

一、并行计算的衡量

并行计算和串行计算到底哪个好,或者说并行计算中哪个优哪个劣?这需要有一些衡量的标准:
多核和多CPU编程——并行计算的加速比_第1张图片

通过上述的参数的对比,可以在整体上有一个性能的参考。

二、加速比(Speedup)

加速比就是指并行计算比传统的串行执行速度提高了多少倍。即:
加速比(Sn)=单处理器最优算法串行时间/多核并行计算时间

它涉及到两个定律:
1、Amdahl定律
Gene Amdahl于1967年提出了这个定律,用于在并行计算相对于最优串行算法在性能上提升的理论上的最大值:

在这里插入图片描述

上面的主要说明如下:
n: 并行系统中处理器数
W: 问题规模(计算负载、工作负载,定义为给定问题的总计算量)
Ws: 应用程序中的串行分量
Wp: W中可并行化部分(Ws+Wp=W)
f: 串行分量比例
f =Ws/W
Ts: 串行分量的执行时间
Tp: 并行分量的执行时间
S: 加速比
E: 效率
通过上式可以看到,其实并行计算的效率提高是有边界的(串行分量参数越小越好),或者说和增加的核心数量并不成正比。这也当初提出阿姆达尔这个理论的人提倡使用单核的原因。

2、Gustafson定律
1988年Sandia实验室发布了超线性加速的现象,引起了广泛的关注,相应的提出了这个定律:
在这里插入图片描述

Amdahl定律主要的问题在于限定了问题规模的增长和处理器之间的关系。换句话说,它假定处理器的增长而问题规模是不增长的,这往往和实际情况是相反的。而Gustafson定律则假设问题规模增加后,串行执行的规模是固定的,程序在多核心处理器上执行的时间是一个常数。
这两个定律并不是相悖的,它们反而是等价的,之所以出现不同的结果,主要在于假设的前提不同。后来在1996年,Shi证明了二者的等价性。

三、总结

在实际的情况中,影响并行计算的量主要有两个,一个是串行分量;另外一个是并行计算的开销时长。如果考虑不周,结果未必心如人意。并行计算不是万能,但在某个场景下可以达到局部最优,不要妄想有一种东西可以普遍适用。该使用专业的就得用专业的东西来做。所谓成本和代价,就是这么来的。
多核和多CPU编程——并行计算的加速比_第2张图片

你可能感兴趣的:(C++,架构设计,c++)