硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上( 三 )


硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
我对专用处理器的兴趣非常浓厚 , 我认为它正在引领着一场革命 。 那么 , 我们应该从什么角度观察它带来的机会呢?如上图所示 , 其展示的是 , 当我加载一段简单的指令 , 能量的消耗在各部分所占比例 。 显然 , 控制占大头 , 缓存所占比例也不少 , 这两部分大概能消耗60%~80%的能量 。
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
如果能改善这种情况 , 我们处理器的性能将会上一个台阶 。 面对这种情况 , 针对特定领域的专用处理器比通用处理器更能“打” , 它带来的好处是:1.它能够在特定领域使用更简单的并行性(较少控制硬件);2.也能够更有效地使用内存带宽;3.还能够消除不需要的精度 。
第一种好处是从多指令、多数据类型的体系结构出发 。 其实 , 这暗符多核的意义 。
第二种好处指的是其能够进行用户控制的存储 , 而不是缓存 。 虽然缓存能够满足灵活性的要求 , 但是其付出的代价也是巨大的 。
第三种好处是 , 适用于通用任务的 CPU 通常支持 32 和 64 位整型数和浮点数数据 。 对于很多机器学习和图像应用来说 , 这种准确率有点浪费了 。 例如在深度神经网络中 , 推理通常使用 4、8 或 16 位整型数 , 从而提高数据和计算吞吐量 。 同样 , 对于 DNN 训练程序 , 浮点数很有意义 , 但 32 位就够了 , 16 为经常也能用 。
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
来看一个比较简单的例子 , 上图展示了谷歌TPU-1的布局:TPU 的结构与通用处理器完全不同 。 它的主计算单元是矩阵乘法 , 即每个时钟周期提供提供 256×256 乘加运算的脉动阵列(systolic array) 。
TPU 还结合了 8-bit 精度、高效脉动架构(systolic structure)和 SIMD 控制特性 , 这意味着每个时钟周期所能执行的乘加(multiply-accumulates)数是一般通用单核 CPU 的 100 倍 。
TPU 使用 24MB 的本地内存以代替高速缓存 , 大约是 2015 年相同功耗 CPU 的两倍 。 最后 , 激活值内存和权重内存(包括储存权重的 FIFO 结构)可以通过用户控制的高带宽内存通道连接 。
使用谷歌数据中心常见的 6 个推断问题的加权算术均值作为度量 , TPU 比一般 CPU 要快 29 倍 。 因为 TPU 要求的能源少了一半 , 它的能源效率在这样的工作负载中是一般 CPU 的 80 倍 。
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
它们之间的性能是如何转化的呢?如上图所示 , 通过对CPU、GPU和TPU的Log Rooflines进行对比 , 其能够给我们一个直观的感受:如果让应用程序在上图的区间中运行 , 那么就可以获得比GPU或CPU更高的性能 。
另外 , 用GPU的场景 , 往往是计算强度较低的需求 , 这些需求与内存相关 。 使用TPU的场景是计算大量矩阵 , 而不用移动那么多的数据 。 CPU的那条线更加平缓 , 因为它在内存、宽带、通用之间做出了权衡 。
4 未来路在何方?
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
观察上述现象 , 这对我们的未来有何启示?启示是:我们正在步入一个新的时代 , 这个时代对于那些思考用新方法来构建硬件和软件的公司来说充满机遇 。
值得一提的是 , 特定于领域的体系结构和特定领域的编程语言设计还处于初级阶段 , 它只有不到五年的“历史” , 我们有很多机会重新思考未来的设计和前进方向 。
DSAs和DSLs刚看到苗头 , 还有很多的悬而未决的问题 。 我们如何处理稀疏数据?比如机器学习、深度学习等大量稀疏数据、稀疏状态在传统上很难有效处理 。
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
难题往往意味着机会 , 因此我我们要思考如何获得特定于领域的体系结构 , 如何才能使硬件开发变得更简单、更容易 。
当前的一个方向是:让硬件开发更像软件 , 即开发原型、重用、抽象的架构;开放式硬件堆栈(ISA到IP库)等等 。
在硅片方向 , 仍然可以考虑如何扩展登纳德缩放定律和摩尔定律 。 另外 , 在硅之外 , 碳纳米管、量子计算等也是研究方向 , 但这些仍然处在基础研究阶段 。
硅谷教父John Hennessy:我们正站在计算机架构第五时代的门槛上文章插图
总结一下:旧的东西总能变成新的 。 软件架构师Dave Kuck曾经说过:“真正让我沮丧的是使用 ILLIAC IV , 给机器编程非常困难 , 架构可能不太适合我们试图运行的一些应用程序 。 关键的想法是 , 我认为在ILLIAC IV中 , 应用程序和体系结构之间没有很好的匹配 。