1.2 并行化与阿姆达尔定律
在深入挖掘GPU的潜力之前,我们首先要说明的是,与Intel/AMD公司的中央处理器(CPU)的算力相比,GPU的优势在哪里。GPU的优势并不在于拥有比CPU更高的时钟频率,也不在于单个内核的复杂性或特殊设计。与现代单个CPU内核相比,单个GPU内核其实很简陋,这方面它并不占优势,因为CPU内核应用了很多复杂的工程技术,比如通过分支预测来降低计算的延迟等。这里所谓的“延迟”,指的是执行一次计算从开始到结束所用的时间。
GPU的强大之处在于它比CPU拥有多得多的内核,这意味着其吞吐量有了巨大的进步。这里的“吞吐量”指的是可以同时进行的计算数量。下面让我们通过类比来进一步理解这到底意味着什么。GPU就像一条非常宽阔的城市道路,可以同时通过很多辆行驶较慢的汽车(高吞吐量、高延迟),而CPU就像一条狭窄的公路,只能同时容纳几辆汽车,但可以让每一辆车更快地抵达目的地(低吞吐量、低延迟)。
对于新发行的GPU设备,我们只需考察其内核数量,就能大体了解其吞吐量的提升情况。举例来说,Intel或AMD公司的CPU平均只有2~8个内核,而入门级、消费级NVIDIA GTX 1050 GPU则有640个内核,新的顶级NVIDIA RTX 2080 Ti则有4352个内核!因此,只要我们知道如何正确地并行化需要加速的程序或算法,就可以充分利用GPU巨大的吞吐量所带来的优势。所谓的“并行化”,指的是通过重写程序或算法,将其工作负载分割成更小的单位,以便同时在多个处理器上并行运行。下面让我们来思考一个现实生活中的例子。
假设你正在建造一所房子,并且已经准备好了所有的设计资料和建材。如果你只聘请1个工人的话,那么建造这座房子估计需要100小时。假设这所房子的建造方式比较特殊,即相关工作可以完美地分配给额外增加的每个工人——也就是说,聘请2个工人建造这座房子需要50小时,聘请4个工人需要25小时,聘请10个工人需要10小时。那么,建造房子的所需小时数等于100除以所聘请的工人数量。这就是一个可并行化任务的例子。
我们注意到,与1个工人独自建造(串行建造)房子相比,2个工人完成这项任务的速度是其2倍,而10个工人一起完成(并行完成)这项任务的速度则是其10倍——也就是说,如果N是工人的数量,那么建造速度将是原来的N倍。在本例中,N被称为任务的串行版本的并行加速比。
对于给定的算法,在开发并行化版本进行之前,通常我们需要先估计并行化的潜在加速比,以确定是否值得花费资源和时间来实现程序的并行化。现实生活中的例子比这个例子要复杂得多,我们显然很难对程序的所有部分完美地并行化。在大多数情况下,只有一部分程序可以被很好地并行化,而其余的部分则不得不串行运行。