基础知识
本节内容为使用Reg矢量计算API和SIMT API进行SIMD与SIMT混合编程的指导。
在Vector Core中,SIMT单元和SIMD单元共享片上存储,因此可以利用片上存储Unified Buffer完成SIMD与SIMT混合编程,具体硬件架构的介绍请参考NPU架构版本351x。在进行后续内容的学习前,请先了解SIMD与SIMT混合编程的编程模型:SIMD与SIMT混合编程。
SIMD编程提供了基于寄存器(Regbase)开发的Reg矢量计算API,Reg矢量计算API可以直接操作Vector Core中的SIMD寄存器,API单次处理的数据量上限等于寄存器的大小,通过GetVecLen接口获取该值。在算子实现中,需要多次调用Reg矢量计算API完成对单核数据的处理。
与SIMD编程不同的是,在SIMT编程中Global Memory上的数据可以被直接读取和使用。SIMT编程常通过组织线程的层次结构来实现数据的切分,使用threadIdx等SIMT BuiltIn关键字计算线程应处理的数据索引,完成索引对应数据的计算,从而将函数实现简化为标量计算。
父主题: SIMD与SIMT混合算子实现