从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践( 四 )


文章图片
再上一层就是Corelevel 。 Core是由若干个Tile组成 , 上图中有4个Tile的示例了 , 那Tile之间以什么样的形式去做拓扑 , 这也是在做Corelevel设计时需要第一个考虑的问题 。 上图是一个环形的拓扑 , 4个Tile组成了1个环 。 如果是Tile很多时 , 也可以是2DMesh这样的一个拓扑形式 。
上图的Corelevel除了4个Tile以外 , 包括一些AI计算里的前处理、后处理的处理单元 , Load/Store等处理单元 。 Core里边会有另外的BusNode处理单元 , BusNode用来将不同的Core之间连接在一起 , 让不同的Core之间可以直接传输数据 。 类似于英伟达最新H100的架构 , H100架构里面也有类似的设计 , 它叫DSMEM , 是Tensor之间直接传输数据 , 而不用通过globalmemory , 也是一个节省数据带宽 , 节省DDR带宽很有效的方式 。
右边的图是第一个Core的版图 , 可以看到这里边包括了MacroGroup、sharedmemory、CPU , 还有SpecialFunctionUnit等等 , 灰色部分就是Corelevel里面的前后处理、Load/Stop等处理单元 , 还有重要的数据传输和互联 , 这是第一代Core设计的版图 , 里面包括了4个Tile 。
除了架构的设计以外 , 基于存算一体的AI处理器设计 , 还有很多工程化的问题需要考虑 , 因为它跟传统的数字电路已经有比较大的差别 , 这些问题都是我们在实际工程当中遇到的问题 。
从硬件架构到软件工具链,存算一体大算力AI芯片的创新与实践
文章图片
第一个需要考虑的问题是SI和PI 。 SI是信号完整性 , PI是电源完整性 , 因为每个Macro提供的算力很大 , 有4TOPS 。 如果有几百TOPS算力 , 这几百TOPS算力在同一时间运转 , 那对电源和信号完整性是非常大的挑战 。
除此之外 , MacroDFT该怎么做?如果不做DFT , 实际上是无法实现大规模量产的 , 我们对Macro做了非常多DFT相关的设计 , 主要包括MBIST和Repair , Repair是修复因为面积大了以后可能会有default , 我们就需要把它修复 。 我们做的修复电路里可以测试和修复SRAMbitcell电路 , 因为存算本身是由SRAMbitcell加上一些逻辑电路组成的 。 同时 , 还有诊断功能 , 与传统的SRAM相比 , 需要开发自己的lvlib , 因为它已经跟传统的SRAM行为已经有不一样的地方 , 没有标准的工具可以支持 。
另外在CIM计算模式下 , 我们设计了定制化的MacroBIST 。 定制化BIST需要自己设计BISTRTL , 同时可以测试Macro内部的计算表 , 所以我们是把Macro分为SRAMmode和CIM两种模式下进行BIST和Repair设计 。
三、软件工具链
上面主要讲到硬件设计方面的的考虑 , 如果把硬件设计类比成人的身体 , 那有了身体还需要有灵魂 , 而软件工具链就是我们的灵魂 。 很多人会问基于存算电路的软件工具链、软件生态是否会与传统电路的AI处理器有不一样或者有不兼容的地方?
从软件的角度来看 , 几乎已经看不到底层的存算电路的存在 , 它已经在AI处理器里边 , 通过AI处理器的架构设计把它屏蔽掉 。 而从软件工具链的角度来看 , 并不需要过多的考虑底层的存算电路 , 所以软件工具链需要考虑的事情与用传统的数字电路去做NPU没有本质上的区别 。
我们的软件工具链主要提供了两个开发工具:一个是算子的开发工具 , 一个是模型的开发工具 。 对于大多数用户而言 , 如果没有特殊的自定义算子开发需求 , 可以用模型开发工具 , 这里包括了一个加速的算子库 , 算子库有很丰富的算子 , 可以cover80%-90%的算子需求 , 除了极个别的自定义算子不包括在算子库里边 。 模型开发SDK里面还包括了推理引擎、GraphIR、设备内存的分配 , 设备内存有片内memory和片外memory的分配器 , 还有一个图优化器 , 以及运行时的一些东西 。