欢迎关注下方公众号阿宝1990,本公众号专注于自动驾驶和智能座舱,每天给你一篇汽车干货,我们始于车,但不止于车。
高通8gen3的die shot
图片来源:网络
上图是高通8gen3的die shot,其die size为10.71*12.81=137.19平方毫米,其中左边中间部分的低功率AI系统就是NPU,也就是高通的V73 AI系统,与高通的第三代车载芯片SA8650/8775/8770/8255的AI系统是完全一样的,算力为整数8位精度下45TOPS。SA8650可能是两个NPU。NPU的面积大致是整个芯片的1/13,大致为10平方毫米,而英伟达的Orin,整个芯片die size大约是455平方毫米,其中AI部分至少占一半面积,也就是220平方毫米,是高通NPU的22倍,但性能不过是高通的5.6倍,刨除英伟达Orin因为三星8纳米工艺带来的低密度,也按台积电4纳米的密度,应该是110平方毫米左右,性价比也严重落后高通。而每瓦TOPS,英伟达Orin也明显落后高通。
高通NPU架构
图片来源:高通
图片来源:高通在2023年Hot Chips上的Presentation
前段Front-End异常简洁。
典型x86或ARM CPU微架构
图片来源:网络
上图是一个典型的x86或ARM架构的CPU的微架构,前端复杂程度远超VLIW之上。
前端核心是VLIW Bundle,VLIW,即超长指令字架构,是一种将多条独立指令打包成一条超长指令的并行处理技术。这种技术由美国计算机科学家Josh Fisher于1983年提出,并得到了业界的广泛关注。VLIW架构的核心思想在于,通过软件(编译器)的静态调度,将多条无依赖关系的指令组合成一个指令包(Instruction Bundle),然后同时发送给多个独立的功能部件进行并行执行。
指令打包:编译器首先分析程序中的指令流,找出那些可以并行执行的独立指令,并将它们打包成一个超长的指令包。这个指令包包含了多个操作字段,每个字段对应于一个独立的功能部件。 指令分发:取指模块从指令存储器中取出这个指令包,并将其分发给各个独立的功能部件。每个功能部件根据指令包中的相应字段执行自己的操作。 并行执行:各个功能部件在接收到指令后,开始并行执行各自的操作。由于这些操作在指令包中已经被编译器确定为无依赖关系,因此它们可以互不干扰地同时执行。 结果汇总:当所有功能部件都完成自己的操作后,它们的执行结果被汇总起来,形成最终的输出。
VLIW是典型的指令并行架构,实际上目前CPU领域的超标量也可勉强算是指令并行架构,只不过VLIW要比超标量的并行效率高数倍乃至数十倍,不过本质上它还算CPU架构的一种。VLIW架构的性能很大程度上取决于编译器的优化能力。如果编译器无法准确地识别出程序中的并行执行机会,或者打包的指令包中存在依赖关系冲突,那么VLIW架构的性能将会受到严重影响。
超标量技术中哪些指令能够并行是由硬件,包括状态记录部件、指令调度部件来完成指令调度的,而VLIW则将这一权力赋予编译器,让编译器控制所有的功能单元。一个优秀的编译器会进行数据流分析,从而精准地确定可以在何处执行何种操作,控制寄存器、存储器的读取和写入。在流水线技术中会出现的冲突,VLIW都交给了编译器来解决,所以VLIW机器中的硬件结构通常比较简单,它只需要执行由编译器所编译的程序,而无需控制资源调度。但这样的结构导致的问题就是,一旦编译出错,CPU也没有能力发现其中的错误(例如执行顺序出错等)。另外虽然经过编译处理,但由于程序在动态执行时不可避免的转移等操作,超长指令字指令仍可能在并行执行时出现相关,导致指令复杂的情况下出现执行速度的损失。
VLIW优点有两个,一个是硬件非常简洁,没有复杂的高速缓存体系,没有复杂的指令暂存和分支预测系统,所占的die size非常小,性价比超高,效率超高。另一个是并行计算效率高,指令包一般是128位,是传统64位处理器的2倍并行效率。
V73架构
图片来源:高通
V73有四个标量执行单元,称其为四个核心也说得过去。矢量执行单元有6个,也可以说是6个核心。在最新的10月21日发布的8Elite芯片里,采用了更新的V79架构。标量单元增加到了8个。
高通8 Elite
图片来源:高通
高通NPU的数据流
注:高通最近增加了整数4位精度的支持
图片来源:高通
看起来似乎是串行架构,实际上所有的AI加速器都属于外设,它是没法独立工作的,必须依赖CPU调度配合,只不过英伟达的GPU太出名,以至于不明真相的人们都被误导了,以为GPU可以独立工作,不需要CPU了。
高通的这种VLIW是前端指令集架构,而整体上,高通还是DSP架构,也就是哈佛架构,不是传统冯诺依曼架构。DSP特殊的应用场景正好发挥了VLIW结构的优势,避开了它的短处。由于数字信号处理领域的算法比较单一稳定,同时是运算密集型程序,并不需要通用场景下的实时控制。并且其程序运行有严格的时间要求,cache这种不可控时间的结构就不适合了,通常采用固定周期的TCM(Tightly Coupled Memory,紧耦合内存)作为缓存,这样内存访问时间就固定了。有了上述的特征,VLIW静态编译在通用场合下面临的那些困难就不存在了,而其更高效的并行运算能力和简化的硬件结构被完全发挥出来。
图片来源:高通
高通的NPU里主体是VLIW,但是标量的ISA指令集依然存在,用它来控制数据流和串行计算任务调度,而这个标量计算采用SIMD(单指令多数据)的方式扩展,能够并行输入数据。标量、向量和张量都有线程定位的寄存器,寄存器的速度是最快的,比SRAM更快。
高通NPU的矢量处理单元
图片来源:高通
高通NPU的矢量处理单元,采用的是目前CPU领域常见的SIMD设计,1024位宽度,和GPU领域的SIMT设计差别很大。算力与SIMT比差距很大,但成本远低于SIMT,效率更高,大量的矢量计算还是得由GPU负责。
高通张量处理单元架构
图片来源:高通
张量处理单元采用空间三维布局,等效于16K的MAC阵列,如果频率是1Ghz,那么算力就是16000*1000*2=32TOPS。调整频率,就可以得到不同的算力,当然功耗也不同。V73最高可以是1.5GHz,也就是48TOPS,最低可以是0.3125GHz,也就是10TOPS。
高通NPU的存储模式
图片来源:高通
高通NPU的存储模式,张量单元完全使用TCM(Tightly Coupled Memory,紧耦合内存),因为它不需要存储中间值。标量单元还是使用传统的L2指令缓存和L1数据缓存。
高通的NPU取得了极致性价比和每瓦TOPS,主要是VLIW和DSP架构配合得好,缺点是缺乏灵活性,VLIW的指令集是静态编译,写进硬件里,每出现一种新算法,就须要添加对应的编译,硬件部分须要频繁修改,这意味着其生命周期不长,须要频繁升级,因此其版本特别多,目前有V4, V5, V55, V60, V61, V62, V65, V66, V67, V67t, V68, V69, V71, V73, V75, V77, V79,其中V66是高通SA8155的AI架构,V68是高通SA8295的AI架构,V73是SA8255的AI架构,V79是Elite Cockpit的AI架构,基本上每半年就须要升级一次。
免责说明:本文观点和数据仅供参考,和实际情况可能存在偏差。本文不构成投资建议,文中所有观点、数据仅代表笔者立场,不具有任何指导、投资和决策意见。
加入《阿宝说车》知识星球,可获得这些模块的相关学习资料(目前有研究报告,线上大咖分享、线下闭门会),包括16大板块,详细清单如下: