每逢我们在多处理器平台上进行编程时,往往会有这么一种感觉:即使已熟练掌握了系统提供的各种同步原语,但所编制的并行程序的实际性能似乎总有些差强人意,并不十分理想。
究其原因,问题的根结在于多处理器编程应是一门科学和艺术完美结合的学科。若要在多处理器系统结构上编制出性能良好的并行程序,要求设计者不仅要精通多处理器系统结构、并行算法以及一些系统构建工具,还应能基于一种设计理念,充分发挥个人的想象空间,合理搭配这些知识和资源,从而和谐地构建完整的系统,使设计者能比底层硬件和操作系统“做得更好”。也就是说,在编写多处理器程序时,要能同时从宏观和微观两种角度分析问题,并能在这两种角度之间灵活地转换。
自20世纪中叶第一台通用电子计算机研制成功以来,程序的编制大多是基于顺序计算模型的,程序的执行过程是操作的有序序列。由于顺序计算机能够用图灵机精确地描述,因此顺序计算的编程能在一组易于理解且完备定义的抽象之上进行,而不需要了解底层的细节。近年来,尽管单处理器仍在发展,但由于指令级并行的开发空间正在减少,再加上散热等问题限制了时钟频率的继续提高,所以单处理器发展的速度正在减缓,这最终导致了起源于在单独一个晶片上设计多个内核的多处理器系统结构的出现。多处理器系统结构允许多个处理器执行同一个程序,共享同一程序的代码和地址空间,并利用并行技术来提高计算效率。在这种计算模型中,并发程序的执行可以看做是多个并发线程对一组共享对象的操作序列,为了在这种异步并发环境中获得更好的性能,底层系统结构的细节需要呈现给设计者。
作为一名优秀的程序设计员,在编写多处理器程序之前首先应弄清楚:多处理器计算机的能力和限制是什么;在异步并发计算模型中什么问题是可解决的,什么问题是不可解决的;是什么使得某些问题很难计算,而又使另一些问题容易计算。这要求设计者具备一定的多核并行计算理论基础知识,掌握多处理器系统结构上并发计算模型的可计算性理论及复杂性理论。其次,应掌握基本的多核平台上的并行程序设计技术,包括并行算法、同步原语以及各种多核系统结构。
Maurice Herlihy 教授和 Nir Shavit教授在并发程序设计领域具有很深的造诣,并拥有40年以上一起从事并发程序设计教学的合作经验。他们对多处理器并行程序设计技术做出了巨大的贡献,并因此而成为2004年ACM/EATCS哥德尔奖和2012年分布式计算领域Dijkstra奖的共同获得者。《多处理器编程的艺术》由他们合著的专著致力于解决如何采用更好的并行算法来克服多核并发程序并行度低的问题。
Amdahl定律早已明确地告诉我们,从程序本身可获得的并行度是有限的,加速比的提高主要取决于程序中必须增加的串行执行部分,而这部分又往往包含着具有相对较高开销的通信和协作。因此,在多处理器系统结构上,如何提高程序中必须串行部分的并行度,以及降低并行处理器中远程访问的时延是我们目前面临的两大技术挑战。这些问题的有效解决,必须依靠软件技术和硬件技术的改进和发展。本书则侧重于对前一个挑战的研究。
作者先从宏观的抽象角度出发,在一个理想化的共享存储器系统结构中研究各种并行算法的可计算性及正确性。通过对这些经典算法的推理分析,向读者揭示了现代协作范例和并发数据结构中所隐藏的核心思想,使读者学会如何分析饥饿和死锁等微妙的活性问题,深层次地研究现代硬件同步原语所应具有的能力及其特性。随后,从微观的实际角度出发,针对当今主流的多处理器系统结构,设计了一系列完美高效的并行算法及并发数据结构,并对各种算法的效率及其机理进行了分析。所有的设计全部采用Java程序设计语言详细地描述,可以非常容易地将它们扩展到实际应用中。
本书的前6章讲述了多处理器程序设计的原理部分,着重于异步并发环境中的可计算性问题,借助于一个理想化的计算模型来阐述如何描述和证明并行程序的实际执行行为。由于其自身的特点,多处理器程序的正确性要比顺序执行程序的正确性复杂得多,书中为我们展现了一系列不同的辅助论证工具,令人有耳目一新之感。随后的11章阐述了多处理器程序设计的实践部分。由于在多处理器环境中编写程序时,底层系统结构的细节并不像编写顺序程序那样被完全隐藏在一种编程抽象中,因此,本书附录B介绍了多处理器硬件的基础知识。最后的第18章介绍了当今并发问题研究中最先进的事务方法,可以预言这种方法在今后的研究中将会越来越重要。
相关推荐
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的...
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的...
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备...
现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的...
并发编程是计算机科学中的一个重要领域,尤其是在当前多核心处理器普及的时代,理解并掌握多处理器编程技巧至关重要。 并发编程的核心目标是通过同时执行多个任务来提高系统的整体效率和性能。在多处理器系统中,每...
通过《Nvidia图形处理器编程指南(中文版)》,读者不仅可以掌握CUDA编程的基本技能,还能深入了解GPU的内部运作机制,从而更好地利用GPU的并行计算能力,解决复杂问题,提升应用程序性能。这份指南对于希望在游戏...
《多处理器编程艺术》不仅是一本深入介绍并发编程技术的书籍,也是学习和掌握多处理器系统中并发编程挑战的理想教材。通过阅读本书,读者不仅可以获得坚实的理论基础,还能学到实用的编程技巧和策略,从而能够在实际...
《NVIDIA图形处理器编程指南2.2.0(中文版)》是一本深入解析NVIDIA GPU编程技术的专业书籍,旨在帮助开发者...通过阅读这本书,你可以深入理解GPU的工作原理,掌握高效编程技巧,从而提升你的图形应用程序的质量和性能。
总的来说,通过掌握和应用NX数控铣编程后处理器的制作技巧,用户可以自定义适合特定设备的后处理程序,从而避免手动编辑带来的问题,提升整个制造流程的效率和准确性。这对于制造业信息化和专业指导具有重要的参考...
"C语言最新编程技巧200例"是针对这一经典语言的学习资源,旨在帮助开发者掌握更多的编程技巧,提高代码编写效率和质量。这份资料可能是书籍的形式,包括了200个实际编程示例,涵盖了C语言的各个方面。 1. **基本...
NVIDIA GPU图形处理器编程指南的知识点涵盖了CUDA编程模型、编程接口、硬件实现以及性能优化策略等多个方面。本知识点详述如下: 1. 导论部分介绍了GPU从图形处理到通用并行计算的演变,CUDA作为NVIDIA的并行计算...
通过上述章节内容的学习,我们可以了解到针对Blackfin处理器的C语言编程不仅需要掌握基础的编程技巧,还需要深入了解处理器架构特点和优化方法。本课程提供了从理论到实践的全面指导,帮助开发者构建出既高效又可靠...
《C语言编程技巧程序集》是一本专门为C语言学习者和开发者编写的指南,它涵盖了C语言编程的多个重要方面,旨在提升读者的编程技能和解决问题的能力。这本书以丰富的实例为载体,深入浅出地讲解了C语言的核心概念和...
3. 计算单元:描述了处理器的浮点功能部件和SIMD(单指令多数据)功能部件,为开发者提供了进行高性能计算的指导。 4. 存储:涉及Cache(L1、L2、L3级缓存)、内存、ECC寄存器读写等方面,是关于处理器内部存储系统...
DSP 编程技巧之详解浮点运算的定点编程是指在不支持硬件浮点运算的处理器上,对浮点数的处理需要通过编译器来完成。在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的方法就是直接使用浮点类型。 在实际应用中...