Page 476 - 《软件学报》2025年第8期
P. 476

王昊天 等: MTTorch: 面向  MT-3000  芯片和  Transformer 模型的  PyTorch  算子库实现与优化            3899



                         DSP 簇 0      IO       DSP 簇 2
                        1  2 ···  24          1  2 ···  24
                  D                                        D                                    DSP 核
                  D                                        D
                          GSM                   GSM
                  R                                        R             SPE  流控
                       高带宽共享内存               高带宽共享内存                         制器         VPE0  VPE1  VPE2  ···  VPE15
                                     16 核                                标量存储器
                                      CPU                                  SM
                       高带宽共享内存               高带宽共享内存                                   向量存储器
                                                                       直接存储器存取            AM
                  D      DSP 簇 1               DSP 簇 3     D
                  D     1  2 ···  24          1  2 ···  24  D
                  R                                        R
                          GSM         IO        GSM                        DDR

                                                   图 1 MT-3000  体系架构

                    每个  DSP  核基于  VLIW  架构实现, 可以同时执行      5 条标量指令和     6 条向量指令, 包含了标量处理单元          (SPU)、
                 向量处理单元     (VPU) 和  DMA  引擎等主要结构. 标量处理单元主要由标量处理部件                 (scalar processing elements,
                 SPE), 用于控制向量运算的流控制器以及一个大小为                64 KB  的标量存储器     (scalar memory, SM) 组成. VPU  是

                 DSP  的主要算力来源, 包含了一个        768 KB  的向量存储器   (array memory, AM) 和  16  个单指令多数据  (SIMD) 模式
                 执行的向量处理部件       (vector processing elements, VPE). VPE  的最小访存位宽为  64, 其上包含了  3  个高性能的浮点
                 乘加单元.
                    在  MT-3000  上, 每个加速集群都是彼此独立地执行, 通用区域的              CPU  可以访问不同加速集群的所有          HBSM
                 和  DDR  空间, 而每个  DSP  只能访问它们自己的加速集群内的           GSM、HBSM    和  DDR, 用以完成计算密集型任务.
                 进一步, 在一个    DSP  中, 不同  DSP  核之间的  SM  和  AM  均无法共享, 核间数据交互一般通过共享内存            GSM  进行.
                 DMA  引擎存在于每个     DSP  核中, 不同核之间互不干扰.
                    MT-3000 DDR  之间  DMA  的实测访存带宽为      16.22 GB/s, 在每个  DSP  簇上  DMA  在  DDR  和  AM  间的实测带
                                                         [3]
                 宽为  42.62 GB/s, 而  AM  间访存带宽高达  921.6 GB/s , 因此在执行过程中, 尽可能要将运算数据先加载到              AM  或
                 者  SM  中再进行计算. 表   1  展示了  MT-3000  中不同级别的内存及其特点, 在设计程序时应该尽可能为不同的功能
                 使用最合适的内存区域.


                                               表 1 MT-3000 DSP  核中不同内存

                       名称              大小                                 主要作用
                       DDR             32 GB           CPU和DSP同时可读可写内存, 带宽比较宝贵, 应避免频繁读写
                       GSM             6 MB                  所有DSP核可见的2级缓存, 用于核间数据交互
                       SM              64 KB                每个核私有的标量存储器, 只能使用控制核心访问
                       AM             768 KB                     向量存储器, 最小访存位宽为64位

                 2.2   MT-3000  编程模型介绍
                    MT-3000 为用户提供了不同层级的编程模型, 既有操作系统级别的汇编指令集, 低层级的加速数组管理接口
                 和专业数学运算库. 也有高层级的异构多线程库 Hthreads             [20] 和 OpenCL 标准的实现 MOCL3 [21] .
                    MOCL3 作为 MT-3000 的 OpenCL 1.2 标准实现, 通过将局部存储映射到片上存储器和利用异步工作组复制
                 内置函数, 显著提升了内存带宽和数据传输效率. 实验证明, 使用局部存储优化后, 性能提升约 2.8 倍                         [20] .
                    Hthreads 是一个低开销和高可用性的异构编程接口, 既具有足够的灵活性, 可以在 C++ 这个层级进行开发,
                 又可以满足性能需求. 该接口由主机端 API 和设备端 API 组成, 通过中断和共享内存进行通信. 主机端 API 主要
                 由线程组管理模块和调试性能分析模块组成, 使用类似 POSIX 的线程接口来管理加速区并降低内核启动开销, 性
                 能上优于切换时钟模式. 设备端 API 主要由系统调用模块和资源管理模块组成, 提供丰富的硬件功能接口, 以满足
   471   472   473   474   475   476   477   478   479   480   481