寻宝处理器的引人入胜之旅
当出版社的编辑介绍万木杨的这本书给我时,我对书名《大话处理器》是有一定担心的,其一:处理器和计算机的发展几十年来风起云涌,其间有天才的创新、看似偶然的分叉和囿于商业市场考量的成功与失败,一部技术发展史绝不比波谲云诡的社会史逊色。一部“大话”处理器的书会不会流于一部围绕处理器发展种种轶事的大话技术史?读书时固然会津津乐道,兴趣斐然,然而掩卷沉思后,会不会仍然无法对处理器的体系结构有更清晰的认识?其二:处理器的发展是和软件、操作系统的发展互为作用的,其中很多技术点和概念都值得深入讨论。采用“大话”的方式能否既保证技术书籍叙述的准确性,又不至于陷入对某些概念旁征博引的“Rat hole”式的罗列,而变得像很多剪贴式编著的IT书籍一样?
但其后数次断续读稿时沉浸其中的体验打消了我的顾虑。我几次阅读书稿都是在出差途中(如飞机上),一个很深的体验是一旦开始阅读就不愿终止,一直读到不得不将书稿收起走路为止。另一个体验是,从任何一个间断点,都可以把本书当作入口,去找寻别的书籍进一步深入学习其中的一些关键技术,就好像函数调用一般,这是我所期望的带领读者进入处理器世界的导游书籍,因此非常愿意向广大的读者推荐这本书。
在技术书籍的阅读中,我偏爱爱因斯坦阐释的方法——“在所阅读的书中,找出可以把自己引向深入的东西,把其他的一切统统抛掉。”这就是抛掉使大脑负担过重和把自己诱离要点的一切。
万木杨的这本书,在选材上围绕处理器的核心技术,从计算机发展的形态、历史展开叙述,在简略介绍了处理器的周边设备后,迅速深入处理器的抽象模型,以计算机软件生态系统中最重要的指令集体系结构ISA切入到探索处理器的微架构,对处理器微架构的一些核心技术,如流水线、乱序执行、指令级并行、线程级并行、缓存结构和算法、缓存一致性等概念,言简意赅地做了原理阐释。而了解这些核心概念,是理解其后第六章优化代码效率的基础。窃以为这些章节是本书的“hardcore”,很值得一读。
在本书的写作风格上,作者运用了很多崭新的网络元素和鲜活的比拟来厘清概念,比如用《我的兄弟叫顺溜》中的顺溜装配子弹的例子来开展指令流水线的讨论,既不流于表面、为举例而举例,又一以贯之地将每个案例充分展开、把问题说透,这样的例子在本书中比比皆是,也是我推荐该书的原因之一。这体现了“抛掉使大脑负担过重”的原则,以及作者对所叙述的技术的深度把握。没有这种把握,是很难用好这种比拟的,反而容易变成“画虎不成反类犬”。
由于长期从事性能优化工作,此前也出版了一本针对并行优化指南的书,因此对本书中阐述并行处理和编写高效代码的章节仍觉意犹未尽,这让我想起了两件事:
其一,我在2001年左右从事针对多核DSP的手写汇编代码优化工作,就是本书里所总结的VLIW并行实现机制,当时一个很深的感触是,人类大脑的并行度很低,至少在汇编这个层级,能够持续对多个计算单元实现高效并行处理编程的上限恐怕就是四级并行了,人的大脑有所谓“一心不可二用”的限制,因此,此后在IA平台上,多核、多进程一直到大规模集群的并行开发的方向就很清楚了,就是必须依赖高级语言的开发工具,支持并行实现的编译器、数学库和线程,MPI进程追踪工具和类似Vtune这样的指令微架构行为的示波器,来解放人的大脑。另一方面就是开发新的并行编程模型和语言,进一步释放多核处理器的性能。
其二,在一本论述并行超级计算机体系架构的英文专著上,我曾读到一段话,似可借来总结处理器性能发展的方向。即,要做快、做好一件事,基本上有三种方法。一是把事情本身缩短、少做事,这就是处理器流水线效率、分支预测命中率等等技术的发展,体现在软件上就是更好的算法和更短的代码关键路径。二是做得更快、更勤些,这就是处理器上更多的浮点计算单元、更高效的缓存、新的高效指令集直到AVX这样的高密度向量计算指令。三是让别人去做或者和别人一起做,这就是并行,多线程和多进程的并行工作。处理器的发展,从性能上看,基本上也可以归为上述三点,比照本书的结构,读者也可以做个归纳。
未来的发展,我们看到了SOC的兴起,我们看到CPU和GPU的混合计算,我们也看到英特尔即将推出的、针对大规模并行应用、集成众核架构的协处理模式的处理器。正如丘吉尔所言,“你能看见多久的过去,就能看见多远的未来”。回顾本书中提到的那些引人入胜的处理器技术的来龙去脉,背后的技术原因或是市场竞争要素,奇妙之处在于,处理器的技术史是我们创造出来的,而身处其中之人却难以知晓,那就让我们“把其他的一切统统抛掉”,一起踏上本书寻宝处理器的引人入胜之旅!是为序。
何万青 博士
英特尔数据中心产品部 高性能计算/工作站架构师