1.6 并行程序设计
对于大多数意欲被并行化的应用,很容易就可以发现其中的许多部分能够并行执行,其原因在于这些部分之间不需要任何通信和协作。在写这本书的时候,还没有专门讲述如何辨别应用中可并行部分的指导大全。这种辨别技术要用到设计人员实际积累的关于并行划分的知识。但幸运的是,大多数情况下应用的可并行部分是显而易见的。然而,本书阐述另外一个更为本质的问题,这就是如何处理余下的那部分不可并行的程序。前述已知,由于程序需要存取共享数据以及在处理器之间进行通信和协作,所以剩下的部分很难被并行化。
本书的目的就是向读者揭示现代协作范例和并发数据结构中所隐藏的核心思想。从基本的原理到最优的实用技术,统一、全面地介绍了高效多处理器编程(www.cppentry.com)的关键要素。
多处理器编程(www.cppentry.com)面临着许多挑战,大到智能化问题小到微妙的工程技巧。我们采用逐步求精的方法来解决这些问题,先从理想化的数学模型开始,逐层细化到考虑工程设计原理的实际模型。
例如,对于最早提出的互斥问题(一个古老但很重要的问题),我们先从数学的抽象角度出发,在一个理想化的系统结构中研究各种算法的可计算性及正确性。虽然在现代的系统结构中这些算法并不实用,但它们却是一些经典的算法。况且,对这些经典算法的推理分析过程进行深入的研究,是学习如何分析设计更加复杂的实用算法的必经之路。尤其是要学会如何来分析和处理类似于饥饿和死锁这种微妙的活性问题。
一旦大体上掌握了这些算法的一般分析方法,就可以转向更加实际的情形。我们针对不同的多处理器系统结构,设计开发了一系列不同的算法和数据结构,其目的在于对比分析哪种算法的效率更高以及发生这种情形的原因。