微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 行业新闻动态 > CPU/GPU/FPGA都不给力,为啥说TPU才是未来?

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

时间:04-26 来源:新智元 点击:


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的流动非常规整且可预期;计算密度很高,即每个数据都会历经非常多次的计算。这两大特点使得线性代数运算特别适合做硬件加速--所有用来制造"假象"的逻辑都不再必要,每个晶体管都可以用做有意义的运算或存储。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top