返回介绍

6.1 摩尔定律

发布于 2023-05-19 13:36:37 字数 14754 浏览 0 评论 0 收藏 0

关于摩尔定律,本书中已经提到了很多次。摩尔定律是由美国英特尔公司的戈登 · 摩尔(Gordon Moore)提出的,指的是“集成电路中的晶体管数量大约每两年翻一倍”。下面我们就摩尔定律进行一些更深入的思考。

实际上,在 1965 年的原始论文中写的是“每年翻一倍”,在 10 年后的 1975 年发表的论文中又改成了“每两年翻一倍”。在过去的 40 年中,CPU 的性能大约是每一年半翻一倍,因此有很多人以为摩尔定律的内容本来是“每 18 个月翻一倍”。

其实,在几年前对此进行考证之前,我也是这么以为的。然而,似乎没有证据表明戈登 · 摩尔提出过“18 个月”这个说法。但英特尔公司的 David House 曾经在发言中提到过“LSI(大规模集成电路)的性能每 18 个月翻一倍”,因此 18 个月一说应该是起源于他。

虽然摩尔定律也叫定律,但它并非像物理定律那样严格,而只是一种经验法则、技术趋势或者说是目标。然而,令人惊讶的是,从 1965 年起至今,这一定律一直成立,并对社会产生了巨大的影响。

呈几何级数增长

“两年变为原来的两倍”,就是说 4 年 4 倍、6 年 8 倍、2_n_ 年 2 的 n 次方倍这样的增长速度。像这样“n 年变为 Km 次方倍”的增长称为几何级数增长。

对于我们来说,摩尔定律的结果已经司空见惯了,也许一下子很难体会到其惊人的程度。下面我们通过一个故事,来看一看这种增长的速度是何等令人震惊。

很久很久以前,在某个地方有一位围棋大师,他的围棋水平天下无双,于是领主说:“你想要什么我就可以赏给你什么。”大师说:“我的愿望很简单,只要按照棋盘的格子数,每天给我一定数量的米就可以了。第一天一粒米,第二天两粒米,每天都比前一天的粒数翻倍。”

“什么嘛,从一粒米开始吗?”领主笑道,“你可真是无欲无求啊。好,明天就开始吧。”围棋的棋盘有 19×19 个格子,也就是说领主要在 361 天中每天赏给大师相应的米。第一天给 1 粒,第二天是两粒,然后是 4 粒、8 粒、16 粒、32 粒。一开始大家都觉得:“也就这么点米嘛。”但过了几天之后情况就发生了变化。两周还没到,赏赐的米粒一碗已经装不下了,要用更大的盆子才能装下,这时,有一位家臣发现情况不妙。

“主公,大事不好!”“怎么了?”“就是赏给大师的那些米,我算了一下,这个米的数量可不得了,最后一天,也就是第 361 天,要赏给他的米居然有 2348542582773833227889480596789337027375682548908319870707290971532209025114608443463698998384768703031934976 粒。这么多米,别说我们这座城,就是全世界的米都加起来也不够啊!1”“天呐!”无奈,领主只能把大师叫来,请他换一个愿望。

1 实际上这个数字已经超过了宇宙中存在的所有粒子的数量。(原书注)

看了上面这个故事,我想大家应该明白几何级数增长会达到一个多么惊人的数字了。而在半导体业界,这样的增长已经持续了 40 多年。大量技术人员不懈努力才将这样的奇迹变成现实,这是一项多么了不起的成就啊。

摩尔定律的内涵

半导体的制造使用的是一种类似印刷的技术。简单来说,是在被称为“晶圆”(wafer)的圆形单晶硅薄片上涂一层感光树脂(光刻胶),然后将电路的影像照射到晶圆上。其中被光照射到并感光的部分树脂会保留下来,其余的部分会露出硅层2。接下来,对露出的硅的部分进行加工,就可以制作成晶体管等元件。摩尔定律的本质,即如何才能在晶圆上蚀刻出更细微的电路,是对技术人员的一项巨大的挑战。

2 光刻胶有两种:一种在感光之后可以被显影剂溶解,即正光刻胶;另一种在感光之后不会被显影剂溶解,即负光刻胶。这里提到的是负光刻胶。

技术人员可不是为了自我满足才不断开发这种细微加工工艺的。电路的制程缩小一半,就意味着同样的电路在硅晶圆上所占用的面积可以缩小到原来的 1/4。也就是说,在电路设计不变的情况下,用相同面积的硅晶圆就可以制造出 4 倍数量的集成电路,材料成本也可以缩减到原来的 1/4。

缩减制程的好处还不仅如此。构成 CPU 的 MOS(Metal-Oxide Semiconductor,金属氧化物半导体)晶体管,当制程缩减到原来的 1/2 时,就可以实现 2 倍的开关速度和 1/4 的耗电量。这一性质是由 IBM 的 Robert Dennard 3发现的,因此被命名为 Dennard Scaling。

3 Robert Dennard(1932— )是美国电子工程师,发明家,他于 1968 年发明了目前广为使用的 DRAM 内存。

综上所述,如果制程缩减一半,就意味着可以用同样的材料,制造出 4 倍数量、2 倍速度、1/4 耗电量的集成电路,这些好处相当诱人,40 多年来摩尔定律能够一直成立,其理由也正在于此。缩减制程所带来的好处如此之大,足以吸引企业投入巨额的研发经费,甚至出资建设新的半导体制造工厂也在所不惜。

摩尔定律的结果

可以说,最近的计算机进化和普及,基本上都是托了摩尔定律的福。半导体技术的发展将摩尔定律变为可能,也推动了计算机性能的提高、存储媒体等容量的增加,以及价格难以置信般的下降。

例如,现在一般的个人电脑价格都不超过 10 万日元(约合人民币 8000 元),但其处理性能已经超过了 30 年前的超级计算机。而且,当时的超级计算机光租金就要超过每月 1 亿日元(约合人民币 800 万元),从这一点上来说,变化可谓是天翻地覆的。

30 年前(1980 年左右)的个人电脑,我能想到的就是 NEC(日本电气)的 PC-8001(1979 年发售),和现在的电脑对比一下,我们可以看到一些非常有趣的变化(表 1)。

即使不考虑这 30 年间物价水平的变化,这一差距也可谓是压倒性的。而且,现在的笔记本电脑还配备了液晶显示屏、大容量硬盘和网络接口等设备,而 30 年前最低配置的 PC-8001 除了主机之外,甚至都没有配备显示屏和软驱,这一点也很值得关注。

表1 30年间个人计算机的变化

PC-8001(NEC)

ThinkPad X201(Lenovo)

比 值

价格

16 万 8000 日元(约合人民币 1 万3000 元)

13 万4820 日元(约合人民币 1 万元)

0.8 倍

CPU

Z80 兼容4MHz

Intel Core i5 2.66GHz

655 倍4

存储容量

RAM

32KB

4GB

125 万倍

ROM

24KB

---

---

外部存储器

软盘320KB

硬盘500GB

156 万倍

4 PC-8001 由于中断等待的原因,其有效时钟频率只有 2.3MHz 左右。而 X201 的 Core i5 由于具备睿频加速(Turbo Boost)功能,最高时钟频率可达到 3.2GHz。因此两者性能比值最高为 1391 倍。(原书注)

摩尔定律所带来的可能性

不过,摩尔定律所指的只是集成电路中晶体管数量呈几何级数增长这一趋势,而计算机性能的提高、价格的下降,以及其他各种变化,都是晶体管数量增长所带来的结果。

让我们来思考一下,通过工艺的精细化而不断增加的晶体管,是如何实现上述这些结果的呢?最容易理解的应该就是价格了。单位面积中晶体管数量的增加,同时也就意味着晶体管的单价呈几何级数下降。当然,工艺的精细化必然需要技术革新的成本,但这种成本完全可以被量产效应所抵消。

工艺的精细化,意味着制造相同设计的集成电路所需的成本越来越低。即便算上后面所提到的为提升性能而消费的晶体管,其数量的增长也是绰绰有余的。也就是说,只要工艺的精细化能够得以不断地推进,成本方面就不会存在什么问题。不仅是 CPU,电脑本身就是电子元件的集合。像这样由工艺改善带来的成本下降,就是上面所提到的 30 年来个人电脑在价格方面进化的原动力。

精细化所带来的好处并不仅仅是降低成本。由于前面提到的 Dennard Scaling 效应,晶体管的开关速度也得以实现飞跃性的提升。相应地,CPU 的工作时钟频率也不断提高。30 年前 CPU 的工作时钟频率还只有几 Mhz,而现在却已经有几 GHz 了,实际提高了差不多 1000 倍。

由于构成 CPU 的晶体管数量大幅增加,通过充分利用这些晶体管来提高性能,也为 CPU 的高速化做出了贡献。现代的 CPU 中搭载了很多高速化方面的技术,例如将命令处理分割成多段并行执行的流水线处理(pipeline);不直接执行机器语言,而是先转换为更加细化的内部指令的微指令编码(micro-operation decoding);先判断指令之间的依赖关系,对没有依赖关系的指令改变执行顺序进行乱序执行(out-of-order execution);条件分支时不等待条件判断结果,而是先继续尝试执行投机执行(speculative execution)等。

在现代 CPU 的内部,都配备了专用的高速缓存,通过高速缓存可以在访问内存时缩短等待时间。从 CPU 的运行速度来看,通过外部总线连接的主内存访问起来非常缓慢。仅仅是等待数据从内存传输过来的这段时间,CPU 就可以执行数百条指令。

还好,对内存的访问存在局部性特点,也就是相同的数据具有被反复访问的倾向,因此只要将读取过的数据存放在位于 CPU 内部的快速存储器中,就可以避免反复访问内存所带来的巨大开销。这种方法就是高速缓存。缓存英文写作 cache,原本是法语“隐藏”的意思,大概指的是将内存中的数据贮藏起来的意思吧。

不过,CPU 内部配备的高速缓存容量是有限的,因此也有不少 CPU 配备了作为第二梯队的二级缓存。相比能够从 CPU 直接访问的高速、高价、低容量的一级缓存来说,二级缓存虽然速度较慢(但仍然比内存的访问速度高很多),但容量很大。还有一些 CPU 甚至配备了作为第三梯队的三级缓存。如果没有高速缓存的话,每次访问内存的时候,CPU 都必须等待能够执行数百条指令的漫长时间。

最近的电脑中已经逐渐普及的多核和超线程(Hyper Threading)等技术,都是利用晶体管数量来提高运算性能的尝试。

为了提高性能

接下来,我们就来具体看一看,那些增加的晶体管到底是如何被用来提高 CPU 性能的。

CPU 在运行软件的时候,看起来似乎是逐一执行指令的,但其实构成 CPU 的硬件(电路)是能够同时执行多个操作的。将指令执行的操作进行分割,通过流水作业的方式缩短每一个单独步骤的处理时间,从而提升指令整体的执行速度,这种流水线处理就是一种提高性能的基本技术(图 1)。

图 1 CPU 的流水线处理

典型的处理步骤包括:①取出指令(fetch);②指令解码(decode);③取出运算数据(data fetch);④运算;⑤输出运算结果(write-back)等。

我们可以看出,将操作划分得越细,每一级的处理时间也会相应缩短,从而提升指令执行的吞吐量。出于这样的考虑,现代的 CPU 中流水线都被进一步细分,例如在 Pentium4 中被细分为 31 级(英特尔最新的 Core 架构是采用 14 级的设计)。

不过,流水线处理也并非十全十美。当流水作业顺利执行的时候是没什么问题的,一旦流水线上发生一个问题,就会接连引发一连串的问题。要想让流水线处理顺利进行,需要让各步骤都以相同的步伐并肩前进,而这一条件并非总能得到满足。

我们来看一个 CPU 加法指令的例子。x86 的加法指令是:

ADD a b
这条指令的意思是将 a 和 b 相加,并将结果保存在 a 中。a 和 b 可以是寄存器,也可以是内存地址,但对于 CPU 来说,访问寄存器和访问内存所需要的时间是天壤之别的。如果需要对内存进行访问,则在执行取出数据这一步的时间内,整个流水线就需要等待几百个时钟周期,这样一来流水线化对指令执行速度带来的那一点提升也就被抵消了。

像这样流水线发生停顿的问题被称为气泡(bubble / pipeline stall)。产生气泡的原因有很多种,需要针对不同的原因采取不同的对策。

上述这样由于内存访问速度缓慢导致的流水线停顿问题,被称为“数据冒险”(data hazard),针对这种问题的对策,就是我们刚刚提到过的“高速缓存”。高速缓存,实际上是消耗一定数量的晶体管用作 CPU 内部高速存储空间,从而提升速度的一种技术。

然而,高速缓存也不是万能的。即使晶体管数量大幅增长,其数量也不是无限的,因此高速缓存在容量上是有限制的。而且,缓存的基本工作方式是“将读取过一次的数据保存下来,使下次无需重新读取”,因此对于从未读取过的数据,依然还是要花费几百个时钟周期去访问位于 CPU 外部的内存才行。

还有其他一些原因会产生气泡,例如由于 CPU 内部电路等不足导致的资源冒险(resource hazard);由于条件分支导致的分支冒险(branch hazard)等。资源冒险可以通过增设内部电路来进行一定程度的缓解。

这里需要讲解一下分支冒险。在 CPU 内部遇到条件分支指令时,需要根据之前命令的执行结果,来判断接下来要执行的指令的位置。不过,指令的执行结果要等到该命令的 WB(回写)步骤完成之后才能知晓,因此流水线的流向就会变得不明确(图 2)。

图 2 分支冒险

在图 2 中,首先执行第 1 条指令,与之并行执行第 2 条指令的取出操作(到第 4 个周期)。然而,第 1 条指令执行完毕之前,无法执行第 2 条指令的分支(第 5 个周期),这算是一种资源冒险吧。第 1 条指令的执行完全结束之后,才可以轮到第 2 条指令,而第 2 条指令的回写操作完成之后,才能够确定第 3 条指令位于哪个位置,也就是说,这时能够执行第 3 条指令的取出操作。

分支冒险可没那么容易解决。分支预测是其中的一种方案。分支预测是利用分支指令跳转目标上的偏向性,事先对跳转的目标进行猜测,并执行相应的取出指令操作。

图 3 是分支预测的执行示意图。到第 2 个指令为止的部分,和图 2 是相同的,但为了避免产生气泡,这里对分支后的指令进行预测并开始取出指令的操作。当预测正确时,整个执行过程需要 9 个周期,和无分支的情况相比只增加了 2 个。当预测错误时,流水线会被清空并从头开始。只要猜中就赚到了,没猜中也只是和不进行预测的结果一样而已,因此整体的平均执行速度便得到了提升。

图 3 分支预测

最近的 CPU 已经超越了分支预测,发展出更进一步的投机执行技术。所谓投机执行,就是对条件分支后的跳转目标进行预测后,不仅仅是执行取出命令的操作,还会进一步执行实际的运算操作。当然,当条件分支的预测错误时,需要取消刚才的执行,但当预测正确时,对性能的提升就可以比仅进行分支预测来得更加高效。

流水线是一种在垂直方向上对指令处理进行重叠来提升性能的技术,相对地,在水平方向上将指令进行重叠的技术称为超标量(superscalar)。也就是说,在没有相互依赖关系的前提下,多条指令可以同时执行。

例如,同时执行两条指令的超标量执行情况如图 4 所示。从理论上说,最好的情况下,执行 6 条指令只需要 7 个周期,这真的是了不起的加速效果。在图 3 的例子中是同时执行两条指令,但只要增加执行单元,就可以将理论极限提高到 3 倍甚至 4 倍。实际上,在最新的 CPU 中,可同时执行的指令数量大约为 5 条左右。

图 4 超标量执行

不过,事情总是没有这么简单。采用超标量架构的 CPU,实际能够同时执行的指令数量要远远低于理想的值,这是因为数据间的依赖关系妨碍了指令的同时执行。例如:

a = b + c
d = e + f
g = h + i
像上述这样的运算,各行运算之间没有相互依赖关系,最极端的情况下,即便打乱这些运算的顺序,结果也不会发生任何变化。像这样的情况,就能够发挥出超标量的最大性能。然而,如果是下面这样的话:

a = b + c
d = a + e
g = d + h
第 2 行的运算依赖第 1 行的结果,第 3 行的运算依赖第 2 行的结果。这就意味着第 1 行的运算得出结果之前,无法执行第 2 行的运算;第 2 行的运算得出结果之前,也无法执行第 3 行的运算,也就是说,无法实现同时执行。

于是,为了增加能够同时执行的指令数量,可以使用“乱序执行”技术。这个问题的本质在于,一个指令和用于计算它所依赖的结果的指令距离太近。正是由于相互依赖的指令距离太近,才导致 CPU 没有时间完成相应的准备工作。

那么,我们可以在不改变计算结果的范围内,改变指令的执行顺序,这就是乱序执行。乱序执行的英文 out of order 原本多指“故障”的意思,但这里“order”指的是顺序,也就是命令执行顺序与排列顺序不同的意思。

例如:

a = b + c
d = a + e (依赖第1行)
g = d + h (依赖第2行)
j = k + l
m = n + o
这样的运算,如果将顺序改为:

a = b + c
j = k + l
d = a + e (依赖第1行)
m = n + o
g = d + h (依赖第3行)
就可以填满空闲的执行单元,顺利的话,就能够稀释指令之间的相互依赖关系,从而提高执行效率。

为了充分利用流水线带来的好处,出现了一种叫做 RISC 的 CPU 架构。RISC 是 Reduced Instruction Set Computer(精简指令集)的缩写,它具备以下特征:

· 精简且高度对称的指令集。

· 指令长度完全相同(也有例外)。

· 和传统 CPU 相比寄存器数量更多。

· 运算的操作数只能为寄存器,内存中的数据需要显式地加载到寄存器中。

这样的特征所要达到的目的如下:

· 通过减少指令种类使电路设计简单化(高速化)。

· 通过统一指令的粒度使流水线更加容易维持。

· 根据依赖关系对指令的重新排序可通过编译器的优化来实现。

大约 20 年之前,RISC 架构是非常流行的,其中比较有名的有 MIPS 和 SPARC 等。现在,RISC 虽然没有被非常广泛的应用,但像智能手机中使用的 ARM 处理器就属于 RISC 架构,此外, PlayStation 3 等设备中采用的 CELL 芯片也是 RISC 架构的。

不过,RISC 的指令集与传统 CPU(与 RISC 相对的叫做 CISC:Complex Instruction Set Computer,复杂指令集)的指令集是完全不同的,它们之间完全不具备兼容性,这也成为了一个问题。过去的软件资产都无法充分利用,这不得不说是一个很大的障碍。

于是,最近的 x86 系 CPU 中,使用微指令转换技术,在保持传统 CISC 指令的同时,试图获得一些 RISC 的优势。这种技术就是在外部依然使用传统 x86 指令集的同时,在内部将 x86 指令转换为粒度更小的 RISC 型指令集来执行。一条 x86 指令会被转换成多条微指令。通过这种方式,在保持兼容 x86 指令集的同时,根据软件的实际情况,可以获得除依赖关系控制之外的 RISC 优势。但即便如此,要填充所有超标量的执行单元,还是十分困难的。

那么,为什么执行单元无法被有效填充呢?原因在于数据之间存在相互依赖关系。既然如此,那可以将没有依赖关系的多个执行同时进行吧?这也就是所谓的超线程(Hyper Threading)技术。超线程是英特尔公司的一个专有名词,这一技术的一般名称应该叫做 SMT(Simultaneous Multi-Threading,同时多线程),不过为了简便起见,这里统一使用超线程一词。

所谓超线程,就是通过同时处理多个取出并执行指令的控制流程,从而将没有相互依赖关系的运算同时送入运算器中,通过这一手段,可以提高超标量的利用效率。实际上,为了同时处理多个控制流程(线程),还需要增加相应的寄存器等资源。

超线程是对空闲运算器的一种有效利用,但并不是说可以按线程数量成比例地提高性能。根据英特尔公司发布的数据,超线程最多可提升 30% 左右的性能。不过,为了实现这 30% 的性能提升,晶体管数量仅仅增加了 5%。用 5% 的晶体管增加换取 30% 的性能提升,应该说是一笔划算的交易。

除了上述这些以外,还有其他一些提高性能的方法。例如在一块芯片中封装多个核心的多核(multi-core)技术。最近的操作系统中,多进程早已司空见惯,对多核的运用空间也愈发广阔。多核分为两种形式,即包含多个相同种类核心的同构多核(homogeneous multi-core),以及包含多个不同种类核心的异构多核(heterogeneous multi-core)。在异构多核中,除了通常的 CPU 以外,还可以包含 GPU(Graphic Processing Unit,图像处理单元)和视频编码核心等。此外,包含数十个甚至数百个核心的芯片也正在研究,这被称为超多核(many-core)。

摩尔定律的极限

在过去 40 年里一直不断改变世界的摩尔定律,在今后是否能够继续有效下去,从目前的形势上看并不乐观。出于几个理由,芯片集成度的提高似乎已经接近了极限。

第一个极限就是导线宽度。随着半导体制造技术的进步,到 2010 年时,最小的制程已经达到 32nm(纳米,1 纳米为 1 米的 10 亿分之一)。刚才已经讲过,集成电路是采用一种类似印刷的技术来制造的,即用光照射模板,按照模板上的图案感光并在半导体上形成电路。问题是,电路已经变得过于精密,甚至比感光光源的波长还要小。目前采用的感光光源是紫外激光,而紫外激光的波长为 96.5nm。

在森林里,阳光透过茂密的树叶在地面上投下的影子会变得模糊,无法分辨出一枚枚单独的树叶。同样,当图案比光的波长还小时,也会发生模糊而无法清晰感光的情况。为了能够印制出比光的波长更细小的电路,人们采用了各种各样的方法,例如在透镜和晶圆之间填充纯水来缩短光的波长等,但这个极限迟早会到来。下一步恐怕会使用波长更短的远紫外线或 X 射线。但波长太短的话,透镜也就无法使用了5,处理起来十分困难。或许可以用反射镜来替代透镜,但曝光机构会变得非常庞大,成本也会上升。

5 X 射线很难使用透镜来聚焦。

其次,即便这样真的能够形成更加细微的电路,还会发生另外一些问题。当电路变得非常精细时,就会发生一些超出经典物理而进入量子物理范畴的现象,其中一个例子就是“隧穿效应”。关于隧穿效应的详细知识在这里就省略了(因为我自己也不太明白),简单来说,即便是电流本该无法通过的绝缘体,在微观尺度上也会有少量电子能够穿透并产生微弱的电流。这样的电流被称为渗漏电流,现代 CPU 中有一半以上的电力都消耗在了渗漏电流上。

精密电路中还会产生发热问题。电流在电路中流过就会产生热量,而随着电路的精密化,其热密度(单位面积所产生的热量)也随之上升。现代 CPU 的热密度已经和电烤炉差不多了,如果不用风扇等进行冷却,恐怕真的可以用来煎蛋了。上面提到的渗漏电流也会转化为热量,因此它也是提升热密度的因素之一。

假设电路的精密化还保持和现在一样的速度,恐怕不久的将来就会看到这样的情形——按下开关的一瞬间整个电路就蒸发掉了(如果没有适当的冷却措施的话)。

最后,也是最大的一个难题,就是需求的饱和。最近的电脑 CPU 性能已经显得有些驻足不前。CPU 指标中最为人知的应该就是主频了。尽管每个 CPU 单位频率的性能有所差异,但过去一直快速增长的 CPU 主频,从几年前开始就在 2GHz 水平上止步不前,即便是高端 CPU 也是如此。而过去在 Pentium 4 时代还能够见到的 4GHz 级别主频的产品,今天已经销声匿迹了。

这是因为,像收发邮件、浏览网页、撰写文稿这些一般大众级别的应用所需要的电脑性能,用低端 CPU 就完全可以满足,主频竞争的降温与这一现状不无关系。

进一步说,过去人们一直习惯于认为 CPU 的性能是由主频决定的。而现在,在多核等技术的影响下,主频已经不是决定性能的唯一因素了。这也成为主频竞争的必然性日趋下降的一个原因。实际上,以高主频著称的 Pentium 4,其单位频率性能却不怎么高,可以说是被主频竞争所扭曲的一代 CPU 吧。

上面介绍的这些对摩尔定律所构成的障碍,依靠各种技术革新来克服它们应该说也并非不可能,只是这样做伴随着一定的成本。从技术革新的角度来看,如果制造出昂贵的 CPU 也能卖得出去,这样的环境才是理想的。当然,总有一些领域,如 3D 图形、视频编码、物理计算等,即便再强大的 CPU 也不够用。但是这样的领域毕竟有限。每年不断高涨的技术革新成本到底该如何筹措,还是应该放弃技术革新从竞争中退出?近年来受到全球经济形势低迷的影响,半导体制造商们也面临着这一艰难的抉择。

超越极限

正如之前讲过的,摩尔定律已经接近极限,这是不争的事实。退一万步说,即使集成电路的精密化真的能够按现有的速度一直演进下去,总有一天一个晶体管会变得比一个原子还小。

不过,距离这一终极极限尚且还有一定的余地。现在我们所面临的课题,解决起来的确很有难度,但并没有到达无法克服的地步。

首先,关于导线宽度的问题,运用远紫外线和 X 射线的工艺已经处于研发阶段。由于这些波长极短的光源难以掌控,因此装置会变得更大,成本也会变得更高。但反过来说,我们已经知道这样的做法是行得通的,剩下的事情只要花钱就能够解决了。

比较难以解决的是渗漏电流及其所伴随的发热问题。随着半导体工艺技术的改善,对于如何降低渗漏电流,也提出了很多种方案。例如通过在硅晶体中形成二氧化硅绝缘膜来降低渗漏电流的 SOI(Silicon On Insulator)等技术。此外,采用硅以外的材料来制造集成电路的技术也正在研究之中,但距离实用化还比较遥远。

从现阶段来看,要从根本上解决渗漏电流的问题是很困难的,但是像通过切断空闲核心和电路的供电来抑制耗电量(也就抑制了发热),以及关闭空闲核心并提升剩余核心工作主频(Hyper Boost)等技术,目前都已经实用化了。

不再有免费的午餐

看了上面的介绍,想必大家已经对摩尔定律,以及随之不断增加的晶体管能够造就何等快速的 CPU 有了一个大致的了解。现代的 CPU 中,通过大量晶体管来实现高速化的技术随处可见。

然而与此同时,我们印象中的 CPU 执行模型,与实际 CPU 内部的处理也已经大相径庭。由条件分支导致的流水线气泡,以及为了克服内存延迟所使用的高速缓存等,从 8086 时代的印象来看都是难以想象的。

而且,什么也不用考虑,随着时间的推移 CPU 自然会变得越来越快,这样的趋势也快要接近极限了。长期以来,软件开发者一直受到硬件进步的恩惠,即便不进行任何优化,随着计算机的更新换代,同样的价格所能够买到的性能也越来越高。不过,现在即便换了新的计算机,有时也并不能带来直接的性能提升。要想提升性能,则必须要积极运用多核以及 CPU 的新特性。

最近,GPGPU(General Purpose GPU,即将 GPU 用于图形处理之外的通用编程)受到了越来越多的关注,由于 GPU 与传统 CPU 的计算模型有着本质的区别,因此需要采用专门的编程技术。

即便什么都不做,CPU 也会变得越来越快的时代结束了,今后为了活用新的硬件,软件开发者必须要付出更多的努力——这样的情况,我将其称为“免费午餐的终结”。

在未来的软件开发中,如果不能了解 CPU 的新趋势,就无法提高性能。新的计算设备必然需要新的计算模型,而这样的时代已经到来。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文