并发编程下的性能定律(翻译)
并发编程下的性能定律 ( 翻译 ) 理解 Amdahl 定律 如果你想利用多核的优势在尽可能少的时间运行尽可能多的指令,那么就需要以并行的序列分离代码。然而,大多的算法需要运行一些串行代码来调整并行执行。例如,并行执行很多代码块,最后收集他们执行的结果。那些分解并行执行工作复杂和收集执行结果的代码是串行代码,它是不能利用并行的优势的。如果你的算法中有很多这样的代码片段,那么串行代码所占的比例就会增加,并且能够获取到的性能收益就会减少。 Gene Amdahl 是一个著名计算机架构师,当一个系统中仅有少量的计算机改善硬件的时候,那么能够获得最大的性能改善是多少呢?他做了大量与这方面有关的观察研究。他使用这些观察结果定义了 Amdable’s Law ,它是由一个预测使用多核处理器在理论上可以获得最大性能改善的公式组成。它也使用于那些运行在多核处理器上的并发算法。 Maximum speedup ( in times ) = 1/((1-p) + p/n) 在这个公式中 P 就是代码中可以完全并行执行的部分。 n 就是可用的执行单元的数目(处理器或者物理核心)。 根据这个公式,如果你有一个仅有 50% ( P = 0.5 )的工作需要并行执行的算法,那么在双核微处理器可以获得的最大速度是 1.33 倍。图 1-8 阐述了一个拥有 1000 个工作单元的算法分解成 500