【新智元】丛京生院士深度解读可定制计算的设计自动化:自动将代码转换成电路描述,解决开发人员最大难题( 二 )


【新智元】丛京生院士深度解读可定制计算的设计自动化:自动将代码转换成电路描述,解决开发人员最大难题
本文插图
有些同学可能会比较好奇说:等一会 , 我在计算机原理课上学过CPU的架构 。 为什么CPU的性能这么差 , 差到甚至成百上千倍?实际上原因通过下图看来非常简单明了 。 你们可以想一想CPU是怎么进行加法操作的 。 第一件事是从缓存或者内存里拿到这个指令放进处理器流水线 。 这个过程就已经有9%的能量消耗了 。 接着指令需要被解码从而CPU才知道这条指令到底要做什么事情 , 这里又有6%的能耗 。 因为现代处理器可以支持乱序执行 , 这样指令很有可能要被重命名来解决一些冲突的问题 , 这又导致12%的能耗 。 接下来从寄存器堆拿数据又产生3% 。 现在万事俱备就等着做加法了 , 等待数据会有11%的能耗 。 最终实际的计算部分只占了14%能耗 , 而剩下的杂事又产生23%能耗 。 在以上CPU的一系列操作中实际上只有做加法这一步是你关心的 。 然而 , 为了得到正确的加法结果一条加法指令需要走一个非常复杂的计算流水线 。 这就是为什么CPU不高效的原因 。
【新智元】丛京生院士深度解读可定制计算的设计自动化:自动将代码转换成电路描述,解决开发人员最大难题
本文插图
将关键计算任务交给可定制计算加速器 , 解决CPU性能差的难题我们的解决方法很简单:知道了CPU在这方面的不足 , 那我们就把关键的计算任务交给可定制计算加速器[8] 。 这样的架构就和以前的单一机器或者单一芯片的计算架构不一样 。 为什么这是合理的呢?如果你仅有有限的计算资源 , 通用计算架构是一种非常好的做法 。 我可以问问大家第一台计算机里有多少真空管 , 或者第一块集成电路上有多少晶体管 。 其实这个数字不是很多 。 ENIAC大约有6万个真空管 , 第一块微处理器更少 , 只有2200来个晶体管 。 就这么点资源你没有办法同时执行所有指令 。 唯一的办法就是走一条流水线然后复用资源——这是那个年代的限制 。 当今我们的限制不一样了 , 你口袋里的手机里就有十亿量级以上的晶体管 。 但你不能让所有的晶体管都运转起来 , 不然手机的电池很快就撑不住了 。 所以当代的限制从资源的限制变成了功耗的限制 。打个比方 , 一个三人的公司可能不太需要定制化 , 因为每个员工都非常了解另外两个员工做的事情并会帮忙解决 。 但是像微软这样有几万员工的大公司就需要定制化精细化分工 。 我们的社会就是一个定制化的社会 , 不同的人做着不同的职业 。 你生病了不会去找律师 , 一定是去找医生 。 找医生时一定是去找了解你疾病的专门科室的医生 。 我们的大脑有1千亿个类似晶体管的结构 , 这些神经元也是有具体分工的 。 我问了很多神经学专家他们之中没有人告诉我大脑里有流水线 。 大脑不同部分的神经元有着不同的功能 , 有的管说话 , 有的管认字 。 我把大脑里这些不同的模块也叫做加速器 。可定制计算的做法有两种 。 富人有富人的做法 , 穷人有穷人的做法 。 像Google这样的巨头可以为机器学习设计专门的TPU 。 TPU可能是AI应用中第一块专门的ASIC , 这是一个非常了不起的成就 。 和通用CPU相比 , TPU可以达到100倍以上的性能提升 。 但试问有多少公司能像Google一样做出巨额投资并且等上18个月来换取一块TPU 。 我个人认为Google的做法并不是一个普适方案 。
【新智元】丛京生院士深度解读可定制计算的设计自动化:自动将代码转换成电路描述,解决开发人员最大难题
本文插图
我对于第二种低成本的做法抱有更大的兴趣 。 这种做法就是利用FPGA来替代专用芯片 。 我在提交给NSF的提案中就使用这种做法 。 我相信很多人在学校里都学过或者用过FPGA 。 现在的FPGA已经方便到你可以把FPGA的开发板插进你的电脑主板上直接使用 。 FPGA的关键所在就是它的逻辑单元(Logic Block)可以实现任何k-输入布尔表达式 。 实现这个功能听起来很玄但其实很简单 。 k-输入布尔表达式有2^k大小的真值表 。 放2^k个SRAM来存真值表的每个值就可以了 。 当然别忘了放一些可编程的逻辑互联模块把所有的逻辑单元连起来 。