加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

CPU/GPU/FPGA都不给力,为啥说TPU才是未来?

2017/05/26
69
阅读需 57 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

本文来自计算机体系结构专家王逵。他认为,“摩尔定律结束之后,性能提升一万倍”不会是科幻,而是发生在我们眼前的事实。


2008 年,《三体 2:黑暗森林》里写到:
真的很难,你冬眠后不久,就有六个新一代超级计算机大型研究项目同时开始,其中三个是传统结构的,一个是非冯结构的,另外两个分别是量子和生物分子计算机研究项目。但两年后,这六个项目的首席科学家都对我说,我们要的计算能力根本不可能实现。量子计算机项目是最先中断的,现有的物理理论无法提供足够的支持,研究撞到了智子的墙壁上。紧接着生物分子计算机项目也下马了,他们说这只是一个幻想。最后停止的是非冯结构计算机,这种结构其实是对人类大脑的模拟,他们说我们这只蛋还没有形成,不可能有鸡的。最后只有三个传统结构计算机项目还在运作,但很长时间没有任何进展。


好在我们要的计算机还是出现了,它的性能是你冬眠时最强计算机的一万倍。传统结构?传统结构,能从摩尔定律这个柠檬里又榨出这么多汁来,计算机科学界都很吃惊。但这次,亲爱的,这次真的到头了


那是我读计算机体系结构专业博士的最后一年,当时我对此嗤之以鼻:摩尔定律怎么可能还有那么多油水可以榨。工艺极限近在眼前,不用智子出手,摩尔定律就会死翘翘了;传统结构更是没戏,CPU 的架构已经被研究到头了,从 2000 年后,几乎没有捣鼓出啥新东西。


所以,这个“一万倍”,真的是好科幻好科幻啊。


回顾三体 2 出版之后的这九年,工艺进展步履维艰,微架构亮点寥寥,CPU 的性能每一代都是挤牙膏。一切都好像在印证我悲观的预期——计算机硬件的性能,好像真的提升不上去了。


但是,从去年开始,“科幻”般的事件相继降临:


2016 年 3 月,AlphaGo 战胜李世石,它使用了 1202 个 CPU 和 176 个 GPU


2016 年 4 月,NVidia 发布 Pascal 架构,峰值性能达到 11TFLOPS/s,黄仁勋在接受新智元专访时表示,半导体技术迭代在放缓,但 GPU Pascal 架构比上一代性能在两年内提升了近十倍,因此可以说我们正处在一个“超级摩尔定律”时代。


今年 5 月 11 日,NVidia 发布 Volta 架构,峰值性能达到 120TFLOPS/s


今年 5 月 11 日,Google 公布 TPU 二代,峰值性能达到 180TFLOPS/s,且可以通过 Google Cloud 访问


今年 5 月 23 日 AlphaGo 重出江湖并且毫无悬念地战胜了柯洁;24 日,DeepMind CEO 哈萨比斯和 AlphaGo 项目总负责人 David Silver 在新闻发布会上接受媒体采访时表示,AlphaGo 实际上是在谷歌云端的单一一台机器上运行的,此机器建立于二代 TPU 之上(据说这台机器使用了 4 块 TPU)


在摩尔定律已经严重减速甚至失效的今天,我们实实在在地看到了算力的大幅度提升,而且这场算力的军备竞赛还在继续!


而我,也改变了自己悲观的预期,相信在不远的将来,“摩尔定律结束之后,性能提升一万倍”,将不会是科幻,而是发生在我们眼前的事实。


这是不是太疯狂了?设计计算机硬件的技术宅男们,凭什么做到这一点?凭 TPU 所代表的技术路线以及新的商业模式。且听我慢慢道来。


为什么 CPU 是低效的
在解释凭什么能做到“摩尔定律之后一万倍”之前,我们先聊聊为什么 CPU 和 GPU 无法担此重任。


如果你问我,CPU 最大的特点是什么?我会说:它给程序员一个假象,让你感觉访问大容量的内存任何一个位置的延迟都是相同的,而且和做一次加法的延迟差不多,近乎为 0。


制造这个假象非常困难。要知道 CPU 所采用的 Logic 生产线,同内存用的 Memory 生产线,有天壤之别。简单地说,由于某种底层的物理定律,Memory 产线无法实现 CPU 所需要的高速度,Logic 产线无法实现内存所需要的大容量。更糟糕的是,Memory 制程相对于 Logic 制程还越来越慢,从 1986 年到 2000 年,Logic 每年提速 55%,而 Memory 只有 10%。


何为“快”“慢”?口语中的“快”,可以指延迟小(从开始到结束间隔的时间短),也可以指带宽大(单位时间内通过的量大),说“高铁快”,指前者,说“网速快”,指后者。内存的带宽其实增长得还凑合,486 时代 CPU 跑 100MHz,SDRAM 内存带宽为 100MT/s;如今 CPU 达到 2GHz~3GHz,DDR4 内存带宽 3200MT/s。虽然内存带宽有了几十倍的提升,但从发出读请求到内存条返回数据的延迟,这二十年来只减小了两倍多。


且不说外行人,很多初级程序员都不知道内存的延迟如此糟糕,即使是资深程序员,在大多数时候,也可以在编码中忽略它,为什么?这都是 CPU 的功劳。CPU 使用了很多复杂的技术来隐藏内存的延迟,例如:
CPU 使用非常大量的片上存储来做 cache(缓存),把程序经常访问的数据放在片上,这样就不必访问内存了。


CPU 用复杂的技术猜测程序即将访问哪些数据,用预取的方式,提前把这些数据从内存中搬运到片上,当某一段程序由于等待内存数据而卡住无法执行时,CPU 用乱序的方式,执行接下来的片段,使用超线程技术,当一个程序因为等待内存数据而卡住时,选择另外一个程序来执行,CPU 的硅片上,绝大多数面积都是用来制造“内存访问近乎零延迟”这一假象的,真正用来做运算的逻辑,所占面积甚至不到 1%——这就是它低效的根源。


CPU 诞生于 Logic 和 Memory 的速度差不多的年代,那个时候,程序员就已经习惯于假设“内存访问近乎零延迟”,为了保证对软件的兼容,CPU 多年来不惜一切代价维持这一假象。积重难返,时至今日,软件已经无法通过 CPU 来充分利用集成电路制造工艺所提供的澎湃动力。

 


为什么 GPU 是低效的
再用一句话来总结 GPU 最大的特点:它给程序员一个假象,让你感觉 GPU 上面有数十万个小程序在运行,彼此相安无事。


GPU 的架构,简单地说,就是把类似 CPU 超线程的技术用到极致来隐藏内存访问的超长延迟。GPU 里面有数千个小核心,每个都可以看成是个小 CPU,与此同时,它同时运行最多数十万个小程序,大多数程序会因为等待访存而卡住,真正在小 CPU 上执行的程序只有数千个。


因为同时在工作的小核心有数千个,GPU 比起 CPU,单位时间内完成的运算量大多了。但它也有软肋,那就是:这数十万个小程序,彼此之间根本不可能相安无事,它们会抢存储带宽,抢得很凶。GPU 要付出的管理代价相当高:


要做复杂的缓存,以备一块从显存取来的数据被很多小核心使用


访存接口只有 8 个,能发出访存请求的小核心确有数千个,必须分析它们发出的请求,把访问相邻地址的请求捏在一起作为一个请求送给显存


访存带宽必须做得远高于 CPU,才能喂饱数千个小核心


数千个小核心上,每个时钟周期所运行的小程序都可能不一样,每个小程序的上下文都要保留,以备将来唤醒。为了存储上下文所付出的片上 Memory 的面积,堪比 CPU 上的庞大缓存


相对于 CPU,GPU 制造假象的能力稍逊一筹,稍有经验的 GPU 程序员,都明白要尽可能让 GPU 上并行跑的数十万小程序在访存时呈现一定的规律,否则 GPU 的效率会大打折扣。


GPU 的定位,不单单是图形加速,而是所有的有海量数据并行运算的应用,因此它必须非常通用,不能对其上运行的数十万个小程序做限制。事实上,这数十万的小程序每个都可以任意访问到显存的所有位置,而且访问的位置各不相同,在这种情况下,GPU 也要保证功能的正确性,哪怕跑得慢些。管理和组织这数十万个不受限制的小程序所付出的硅片面积代价和内存带宽的代价,是 GPU 低效的根源。


为什么 FPGA 只是过渡方案
CPU 和 GPU 的架构都有非常沉重的历史包袱,体现在:


它们都有很强的通用性,不能仅仅只针对某个领域做优化


它们都有很强的兼容性,过去编写的程序必须能够运行


它们都有稳定而庞大的程序员队伍,这些程序员的思维方式不加改变的话,它们就不能放弃提供那些“假象”


这些也是非常伟大而甜蜜的包袱,正因为背负着它们,CPU 和 GPU 厂商才能在它们既有的市场里呼风唤雨,并且把竞争者挡在门外。


如果扔掉这些包袱,设计全新的架构,就可以做到:


仅仅针对某个领域做优化


不考虑对过去软件的兼容


用全新的方式对其编程,不拘泥于之前的思维定势


这样设计出的架构,对其目标领域,性能指标会大幅度超越 CPU 和 GPU 这类通用架构。原因非常浅显易懂,通用性和最优化无法两全。历史上已有先例,当计算化学领域和天体物理领域对计算性能的需求无法被满足时,分别有科学家们为它们开发出了专用的 Anton 和 Grape-DR 计算机。只不过它们的专业性太强,不为大众所知。


如今,当 CPU 和 GPU 的架构已经无法满足人工智能应用对速度、功耗和成本的需求时,寻找新的架构成为了大家共同的选择。在寻找新架构的过程中,FPGA 起到了开路先锋的作用。


FPGA 是什么?如果说 CPU 和 GPU 是在架构级别做到“通用”的话,FPGA 就是在更低一级的电路级做到了“通用”。通过硬件描述语言对 FPGA 编程后,它可以模拟任何一种芯片的架构,包括 CPU 和 GPU 的架构,通俗地说,FPGA 是一种可编程的“万能芯片”。它非常适合探索性的、小批量的产品。


我们已经看到了很多的 FPGA 方案,实现了比 GPU 更好的速度、功耗或成本的指标。但是,FPGA 依然无法摆脱“通用就无法最优”这一规律的制约。它之所以还能体现出相当的优势,是因为在一个软硬件系统中,算法的影响远大于硬件架构,而硬件架构的影响又远大于电路——在电路级别做“通用”付出的代价,比起在架构级别做“通用”的代价,还是小得多了。


一旦 FPGA 给某个专用架构趟出路来之后,它就会退居幕后,让位给更专用的 ASIC。

 

 


TPU 代表了未来的方向
这次同柯洁对阵的 AlphaGo,采用了 Google 自研的第二代 TPU。TPU 的特点是:


仅仅针对线性代数做优化


不兼容 CPU 或 GPU 的程序


用全新的方式对其编程


用 ASIC 而非 FPGA 的方式来实现


深度学习所使用算法,绝大多数可以被映射为底层的线性代数运算。TPU(Tensor Processing Unit)中的 Tensor,就是线性代数中的基本数据类型。线性代数运算有两大特点:Tensor 的流动非常规整且可预期;计算密度很高,即每个数据都会历经非常多次的计算。这两大特点使得线性代数运算特别适合做硬件加速——所有用来制造“假象”的逻辑都不再必要,每个晶体管都可以用做有意义的运算或存储。


TPU 上无法运行 CPU 上跑的 Java 或 C++程序,也无法运行 GPU 上的 CUDA 程序。虽然尚未有公开信息,但它的编程方式非常可能是这样:TensorFlow 把神经网络用一种中间格式表示出来,然后这种中间格式被编译器转换为 TPU 上独特的程序。这种中间格式被称为 TensorFlow XLA,它也将是 TensorFlow 支持其它线性代数加速器的工具。


Google 之所以选择 ASIC 而非 FPGA,与其说是它的眼光好,不如说是它的魄力强。内行人都知道 ASIC 效能远超 FPGA,但仍然有很多人不敢选择 ASIC,为什么?自己做 ASIC 的风险太大:周期长,投入多,门槛高。一旦芯片做错,就和石头无异,落个血本无归。当年 Apple 决定自己做芯片时,并没有直接组建队伍,而是收购了 P.A. Semi;这么多年后,成果赫赫,但依然不敢在 Mac 电脑中使用自研的 CPU 来淘汰 Intel 的芯片。而 Google 在短短几年内,组建了队伍,设计了合理的架构,做出了能 work 的芯片,并且敢于在自己的云上部署自己的产品,只能说一声“服!”


Google 是一家伟大的公司,在它发布 MapReduce、GFS 和 BigTable 的论文之前,这些东西被普遍认为是不可能完成的。相信很多人在看到装备 TPU 的 AlphaGo 战胜柯洁之前,也会认为 TPU 是不可能完成的。历史证明,Google 能做的事情,别人起码可以模仿个七八分。现在大家应该相信,在一个足够重要应用领域中,完全可以把优化和定制做到晶体管级别,而不是只做到某种现成的芯片架构的级别。这不但可行,而且必要,因为你不这么做,竞争对手也会这么做。


硬件的开源时代
摩尔定律的通俗表示是:每一美元所能买到的电脑性能,将每隔 18-24 个月翻一倍以上。过去三十年,拜摩尔定律所赐,我们见证了超过百万倍的性价比提升。未来我们所能看到的这一万倍,也应该按照“单位成本所能买到的电脑性能”来计算。


CPU 和 GPU 这种通用架构,它们的历史包袱不仅仅导致了优化难以开展,还导致了:一、垄断导致的超额利润;二、过度复杂所带来的研发成本上升。于是,芯片的价格居高不下。


未来,当特定领域的定制芯片大行其道时,这些芯片的价格也将显著降低。原因在于:一、不再有垄断;二、没有历史包袱所带来的研发成本;三、开源所带来的研发成本降低。


硬件开源过去有过尝试,但无大成,原因是多种多样的。但从长远角度看,所有的基础设施,被广大厂商共享的,最终都会走向开源的路子。如果说 Intel 的 CPU 是大地(所有的优化不能做到比它更加底层),那么 LinuxPython 和 PHP 就是大地之上最底层的基础设施,它们是开源的;如果说 GPU+CUDA 是大地,那么各种深度学习的框架就是最底层的基础设施,它们也都是开源的。如果未来晶体管是大地,那么毫无疑问芯片的架构也会出现各种开源方案。


这一切才刚刚开始。这个月 NVidia 做了两件有趣的事:赞助了开源 CPU 架构 RISCV 在上海举办的 workshop;宣布 Xavier 自动驾驶芯片中的针对线性代数的硬件加速模块 DLA 将开源。大厂支持开源,绝不是搞慈善,而是为了扼杀竞争对手,赢得业界事实标准的控制权。但开源的后果,必然是降低设计门槛,降低整个行业的研发成本。


我们的星辰大海:从应用到晶体管的全栈优化
对于从事计算机体系结构专业的同仁而言,这是最好的时代,半导体制造的先进工艺进展缓慢,但软件的各种应用需求还在不断涌现,软硬件接口逐渐模糊,成熟工艺的成本不断下降。为了优化特定应用,做深入到晶体管级的全栈优化成为一个现实的选项。只要正确地设计专用架构,使用成熟工艺也可以轻松超越 GPU 和 CPU 这种通用架构,哪怕它们采用最先进的制造工艺。


这是一个全新的世界,以往的利益格局和设计思想都将被打破,谁也无法预知将会发生怎样的兴衰变迁。但这就是我们的星辰大海,一起来探索和历险吧!


王逵,北京大学本硕博,自从大三读了 Hennessy 和 Patterson 的书之后,就掉进了计算机体系结构的坑,至今也没有爬出来。前后总共做了 14 年的 CPU,从基础软件、芯片架构,到物理实现都攒了点经验。2016 年加入比特大陆,从事人工智能加速芯片的设计和实现工作。

 

更多最新行业资讯,欢迎点击与非网《今日大事要闻》

相关推荐

电子产业图谱