一文看懂芯片算力TOPS

一文看懂芯片算力TOPS


AI算力的发展与TOPS(Tera Operations Per Second)紧密相关 。 TOPS是衡量芯片每秒能执行的基本操作次数的单位 , 通常用于评估AI芯片性能 , 特别是在处理大量整数或定点运算任务时
。 随着AI技术进步 , 对算力的需求不断增加 , TOPS作为衡量AI芯片算力的关键指标 , 其数值的增长反映了AI算力的发展水平 。 TOPS的提高意味着AI芯片能更快地处理数据 , 对于需要实时响应的应用场景 , 如自动驾驶 , 具有重要意义
TOPS的定义是非常明确的 , 代表每秒运行多少条指令(instruction , 汇编或机器码的一行 一般是32位2进制数) 。
以CPU为例 , 一般CPU的频率 , 比如3GHz , 代表一秒钟能输入一组流水线3 billion条指令 。 比如现在的ARM大核 , 都是4发射(可以理解为有并行的四组执行流水线 , 其实不止 , 但每周期只会最多选择4个开始执行) , 最高理论TOPS , 即为3*4=12GOPS 。
还没有完 , 因为arm的数据寄存器是32位的 , 所以一条arm指令可以做1次int32的加法 , 如果是int8 , 理论上一条指令可以做四次加法 。 所以 , 对于int8 , 最高理论算力为12*4=48GOPS 。
乘法和加法又不一样 , 因为一个int32的乘法 , 理论上(虽然很多情况下实际没有)最多可以拆成4*4=16个int8的乘法(不增加运算器的前提下) , 这时最高算力为12*16=192GOPS≈0.2TOPS , (int8) 。
至于其他指令 , 则没有int8还是int32的区别 , 都是12GOPS.
结论1 , 多少算力 , 是和具体运行什么指令相关的 。
一般的程序 , 不全是乘法运算(NPU对应乘加运算) , 这部分会严重偏离理论算力 。 除此之外 , 还有一个重大的问题 , 就是运算器是不是满负荷运转 。 一般而言 , 远远不是 , 原因包括:cache miss , 流水线冒险 , 无法并行 等等 。
结论2 , 乘加的指令和数据如果没有准备好 , 运算单元就会空闲回到NPU 。
NPU的算力大部分来自于tensor core , 也就是只有矩阵乘法计算才能享受到理论算力 , 对应的是卷积和MLP和矩阵乘法算子 。 其他算子都和理论峰值算力没有关系 。 nVidia的理论峰值算力 , 在tensor-core执行Fused Multiply–accumulate指令时达到 , 它把这一条指令算成两条指令(所以叫fused) , 对应了一次乘法和加法 。
但大家都知道 , 一个乘法器需要的资源远超过加法器 , 这么算还算有良心 。
另外 , nvidia的理论峰值算力 , 没有把cuda-core的算力叠加上来 , 这也很有良心 , 不然可以增长40% 。 因为tensor-core全力运行的时候 , cuda-core是不能工作的 。 NPU对于卷积更容易达到理论算力 , 因为卷积的数据复用好于MLP 。
大核 , 一条指令的计算量大 , 对指令吞吐能力要求变低 。 小核 , 指令来不及准备好 , 会成为导致运算单元空闲的瓶颈 。
数据分为权重和输入流 。 最理想的情况是一个网络的权重一次能加载完毕 , 但一般片上的ram没有那么大 。 如果一次可以容得下两层权重 , 通过流水 , 可以至少保证有下一层的权重处于ready状态 , 不会让乘加单元等待 。
问题出在全连接层 , 它的权重非常多 , 一般而言会遇到存储墙 , 所以全连接层的计算效率会比卷积下降几倍 。
输入流 , 对于CV来讲 , 就是图片 , 比如一次推理需要加载7张图片 。 需要做到从输入到网络输出写回 , 没有瓶颈 , 管路各处粗细相等 。 各种缓存和流水机制都需要仔细设计 。 上一层网络输出的中间结果 , 一般不用写回主存 , 而是直接去和已经加载好的新权重去做加乘 。 这时 , 我们会发现 , 一个网络:如果 , 刚开始加载一帧输入流 然后加载各层权重 然后写回最终结果 。 它和主存的通信带宽 , 可以通过 (一帧输入+各层权重+一帧输出) * 帧率 算出来 。
如果用one-model(多输入共享backbone) , 加载权重的时间比重会变小 , 降低存储带宽需求 。 (7V能降低50%以上 , 所以基本上现在所有方案都是one-model)
如果中间结果要写回 , 比如某些运算要交给CPU(如reshape等) , 会增加存储带宽需求 。
(增加一次写回增加30%)一般一个CNN网络 , 运算卷积占用的时间为1/3 , MLP运算占用1/3 , 其他1/3 。 综合考虑各种损失 , 平均算力能达到峰值的25%是正常的 。
对一些设计不佳的NPU来讲 , 乘加之外的运算效率极低 , 或者只能交给CPU去做 , 那平均算力达到峰值的5%也是正常的 。
这些运算时间上的巨大差异 , 都和算力多少没关系 。 而如果其他设计不变 , 只是增加乘加单元 , 即使算力增长100倍 , 时间也只能节省1/3 。 所以算力的增长 , 要和cache的增长 , 带宽的增长 , 标量与向量计算能力的增长相匹配 。
-对此 , 您有什么看法见解?-
【一文看懂芯片算力TOPS】-欢迎在评论区留言探讨和分享 。 -

    推荐阅读