购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

我不是硬件工程师,而是软件开发者。在职业生涯中,我一直在开发各种不同类型的软件,以解决许多不同类型的问题。然而,一个偶然的机会,我经历了一段与硬件密切相关的软件开发职业生涯,这是大部分软件开发者接触不到的工作,一切都好像命中注定似的。

在早些年对计算机着迷的日子里,我很快发现,当时的计算机器件相较今天而言非常粗糙,如果我不学着使用汇编语言对其进行编程,几乎做不了任何有趣的工作。因此,我先后学习了Z80、6502和80×86汇编语言编程。

与使用高级语言编程相比,使用汇编语言编程有许多不同之处。它要求你熟悉硬件,了解内存布局,从而根据内存布局来调整代码。你不能忽视寄存器的使用,因为寄存器保存变量,所以必须精心设置寄存器与变量的映射关系。你还必须学习如何通过I/O端口与其他设备进行通信,这是数字设备相互通信的唯一手段。有一次,我在解决一个特别棘手的问题时,午夜惊醒,发现一直在做梦用80×86汇编语言编程。

我的事业发展了,更重要的是我接触的硬件也在不断发展。当时,我在一家计算机制造商的研发部门获得了梦寐以求的工作。我的工作是改进操作系统以适配我们的硬件,并构建能够利用我们生产的PC的特性的设备驱动程序。这类工作要求必须熟悉硬件的工作原理。

软件开发不断演进。我们使用的编程语言更加抽象,操作系统、虚拟机、容器和公有云基础设施对软件开发人员隐藏了越来越多的底层硬件细节。最近,我在社交媒体上和一位LISP程序员进行了对话,该程序员并没有意识到他喜欢的函数式声明结构最终会转换为CPU寄存器中的操作码和数值,看起来他不了解计算机的工作原理。他可能认为这些知识不是必需的,但是我认为,如果他想成为一个优秀的程序员,就必须了解这些知识。

后来,我曾开展世界级高性能系统的开发工作,我领导的团队的任务是构建世界上性能最好的金融交易系统。

为此,我们需要再次深入了解系统底层硬件的工作原理,这样,我们才能够充分利用现代硬件,从而达到业内领先的性能水平。在此期间,我们借用了赛车运动的一个名词来描述我们的方法。Jackie Stewart是20世纪70年代最好的一级方程式赛车手,他在采访时被问道:“要成为一位伟大的赛车手,你需要成为一名工程师吗?”Jackie回答:“不需要,但是你必须和赛车有机械共鸣。”Jackie的意思是你必须熟悉车的机械系统。事实上,只有充分了解底层硬件的功能,才能充分利用它们。

我们在工作中采纳了“机械共鸣”的理念。例如,在我们的交易系统中,最大的开销是缓存未命中。如果需要处理的数据没有位于缓存中的适当位置,我们的系统性能就会出现数量级的下降。因此,我们需要精心设计代码,即使它是用高级语言编写并在虚拟机中运行的,也要最大限度地增加数据在缓存中的机会。我们需要理解并管理多核处理器的并发性,识别并利用处理器缓存线以及内存和其他存储设备的块存储特征。这些带来了意想不到的性能提升。如果能够充分利用现代硬件的特征,将会产生意想不到的效果。

深入理解硬件不仅仅对高性能计算有效。虽然人们的关注点有所不同,但几乎所有人都认为,在碳排放中,很大一部分来源于为代码所在数据中心提供动力的电能消耗。我想不出还有哪个领域的工作像软件一样低效——对于大多数系统而言,如果多做一点工作来管理通过硬件的信息流,将性能提升至少100倍将不会太困难。几乎所有系统都可以通过一些更专用的工作实现1000倍的性能增长,然而,如果我们可以通过更好地理解代码如何工作,以及代码如何使用硬件,来获得10倍的性能提升,那么就能够将碳排放量减少到原来的1/10。

重要的是,你必须在一定程度上理解计算机的工作原理,与我们所依赖的硬件功能脱节会带来风险。我承认我是一个书呆子,喜欢探究事物如何运作。并不是每个人都需要将硬件使用到极致,但是理解硬件是系统工程的一部分,工程总是要权衡利弊。你会惊讶地发现,无论软件行为处于哪个层次(即使我们使用LISP语言编写基于云的系统),理解硬件的基本工作原理对软件行为的影响至关重要。

对于像我这样的人,本书令我特别着迷。

我不是硬件工程师,也不想成为硬件工程师。对于我这样的软件开发者来说,一项重要技能是了解我所依赖的硬件的实际工作原理。我需要维护并构建“机械共鸣”。

本书从计算的基本概念开始,介绍了第一台计算机和第一代CPU,再到量子计算的潜力以及其他未来的研究方向。你可能想了解现代处理器的工作原理,掌握它们惊人的效率,以及它们从存储器中获取数据的能力,而这些存储器的运行速度要比它们慢上数百倍。你也可能对那些硬件之外的复杂想法感兴趣,比如加密货币挖矿是如何工作的,现代自动驾驶汽车的架构是什么样子的。本书可以回答这些问题,以及更多其他问题。

我认为,除了计算机科学家和工程师,每个软件开发人员,如果他们对日常工作使用设备的工作原理有一定的理解,那么他们将能更好地开展工作。当我试图理解一些规模较大且比较复杂的软件时,我通常会想:“这仅仅是一些位、字节和操作码,它们到底如何工作?”这就相当于一个化学家理解分子和化合物,并能够使用基本原理来解决一些棘手的问题。这些是真正的基石,可以帮助我们更好地理解它们。

在未来几年里,我将会定期翻阅本书,我希望读者也喜欢做同样的事情。

Dave Farley
计算机体系结构简介独立软件工程顾问,持续交付有限公司(Continuous Delivery Ltd.)创始人 1ozRbdAB4NggXdZNVkr/j28/KhbwFAmyC0edc27UJ5ONW6A5rIKFW2hTN1i/SplQ

点击中间区域
呼出菜单
上一章
目录
下一章
×