我们从并行化应用程序中可以期待什么样的速度,这取决于应用程序中可以并行化的部分。如果可并行化部分所花费时间的百分比为30%,则并行部分的100倍加速将使执行时间减少不超过29.7%。整个应用程序的加速速度将仅为1.4倍左右。事实上,即使在并行部分进行无限的加速,也只能减少30%的执行时间,实现不超过1.43倍的加速。通过并行执行可以达到的加速水平可能会受到应用程序的可并行部分的严重限制,这一事实被称为Amdahl定律。另一方面,如果99%的执行时间在并行部分,则将并行部分加速100倍将应用程序执行减少到原始时间的1.99%。这使整个应用程序速度提高了50倍。因此,对于大规模并行处理器来说,应用程序的绝大部分执行都在并行部分非常重要,以有效加快其执行速度。
研究人员在某些应用中实现了超过100倍的速度。然而,这通常只有在算法增强后进行广泛优化和调整后才能实现,以便超过99.9%的应用程序执行时间处于并行执行。在实践中,应用程序的直接并行化通常饱和内存(DRAM)带宽,导致速度仅提高约10倍。诀窍是弄清楚如何绕过内存带宽限制,这涉及进行许多转换之一,以利用专门的GPU片上存储器来大幅减少对DRAM的访问次数。然而,人们必须进一步优化代码,以绕过有限的芯片内存容量等限制。这本书的一个重要目标是帮助读者充分理解这些优化,并熟练掌握这些优化。
请记住,通过单核CPU执行实现的加速水平也可以反映CPU对应用程序的适用性:在某些应用程序中,CPU性能非常好,因此使用GPU更难加快性能。大多数应用程序都有部分可以由CPU更好地执行。因此,必须给CPU一个公平的执行机会,并确保编写代码,以便GPU补充CPU执行,从而正确利用组合CPU