简而言之,TPU设计封装了神经网络计算的本质,可以针对各种神经网络模型进行编程。为了编程,Google还创建了一个编译器和软件栈,将来自TensorFlow图的API调用,转化成TPU指令。 △从TensorFlow到TPU:软件堆栈 矩阵乘法单元的并行计算 典型的RISC处理器提供简单计算的指令,例如乘法或加法。这些事所谓的标量(Scalar)处理器,因为它们每个指令处理单一运算,即标量运算。 即使主频千兆赫兹的CPU,仍然需要很长时间才能通过一系列标量运算来完成大型矩阵的计算。改进的方法就是矢量(Vector)运算,同时针对多个数据元素执行相同的操作。 GPU的流处理器(SM)就是一种高效的向量处理器,赞单个时钟周期内,可以处理数百到数千次运算。 至于TPU,Google为其设计了MXU作为矩阵处理器,可以在单个时钟周期内处理数十万次运算,也就是矩阵(Matrix)运算。 TPU的核心:脉动阵列 MXU有着与传统CPU、GPU截然不同的架构,称为脉动阵列(systolic array)。之所以叫“脉动”,是因为在这种结构中,数据一波一波地流过芯片,与心脏跳动供血的方式类似。 如图所示,CPU和GPU在每次运算中都需要从多个寄存器(register)中进行存取;而TPU的脉动阵列将多个运算逻辑单元(ALU)串联在一起,复用从一个寄存器中读取的结果。 MXU中的权值阵列专门为矩阵乘法运算进行了优化,并不适用于通用计算。 △脉动阵列中,输入向量与权值矩阵相乘 △脉动阵列中,输入矩阵与权值矩阵相乘 MXU的脉动阵列包含256 × 256 = 65,536个ALU,也就是说TPU每个周期可以处理65,536次8位整数的乘法和加法。 TPU以700兆赫兹的功率运行,也就是说,它每秒可以运行65,536 × 700,000,000 = 46 × 1012次乘法和加法运算,或每秒92万亿(92 × 1012)次矩阵单元中的运算。 △TPU中的MXU 我们对CPU、GPU和TPU的每周期算术运算量进行一下对比: 每周期运算量CPU 数个 CPU (向量扩展) 数十 GPU 数万 TPU 数十万 这种基于复杂指令集计算(CISC)的矩阵运算设计,实现了出色的性能功耗比:TPU的性能功耗比,比同时期的CPU强83倍,比同时期的GPU强29倍。 极简&确定性的设计 极简这一点,在Google之前发布的TPU论文第8页提到过。与CPU和GPU相比,单用途的TPU就是一个单线程芯片,不需要考虑缓存、分支预测、多道处理等问题。 TPU的设计之简洁,从冲模平面图上就能看出来: △黄色代表运算单元;蓝色是数据单元;绿色是I/O,红色是控制逻辑单元。 (责任编辑:本港台直播) |