- Ascend C异构并行程序设计:昇腾算子编程指南
- 苏统华 杜鹏 闫长江编著
- 1400字
- 2025-04-17 18:50:02
1.3.4 指令集设计
任何程序在处理器芯片中执行计算任务时,都需要通过特定的规范转换成硬件能够理解并执行的语言,这种语言被称为指令集架构(Instruction Set Architecture,ISA),简称指令集。指令集包含数据类型、基本操作、寄存器、寻址模式、数据读写方式、中断、异常处理及外部I/O等,每条指令都描述处理器的一种特定功能。指令集是计算机程序能够调用的处理器全部功能的集合,是处理器功能的抽象模型,也是计算机软件与硬件的接口。
指令集可以分为精简指令集(Reduced Instruction Set Computer,RISC)和复杂指令集(Complex Instruction Set Computer,CISC)。精简指令集的特点是单指令功能简单、执行速度快、编译效率高,不能直接操作内存,仅能通过指令(LOAD/STORE指令)来访问内存。常见的精简指令集有ARM、MIPS、OpenRISC及RSIC-V等。复杂指令集的特点是单指令功能强大且复杂,指令执行周期长,并可以直接操作内存。常见的复杂指令集如x86。
昇腾AI处理器芯片有一套专属的指令集,其设计介乎于精简指令集和复杂指令集之间,包括标量指令、向量指令、矩阵指令和存储转换指令等。标量指令类似于精简指令集,而矩阵指令、向量指令和存储转换指令类似于复杂指令集。昇腾AI处理器芯片指令集结合精简指令集和复杂指令集两者的优势,在实现单指令功能简单和速度快的同时,对于内存的操作也比较灵活,搬运较大数据块时的操作简单、效率较高。
1.标量指令
标量指令主要由标量计算单元执行,主要目的是为向量指令和矩阵指令配置地址及控制寄存器,并对程序执行流程进行控制。标量指令还负责对L1缓冲区和UB中的数据进行存储和加载、简单的数据运算等操作。标量指令完成的功能与CPU的功能类似,包括算术运算(Add、Sub、Max、Min)、比较与选择(CMP、SEL)、逻辑运算(AND、OR、XOR)、数据搬运(MOV、LOAD、STORE)和流程控制(JUMP、LOOP)5类指令。
2.向量指令
向量指令由向量计算单元执行。每个向量指令可以完成多个操作数的同一类型运算,但参与运算的输入数据必须已经在 UB 中,否则需要通过向量 DMA 从板外搬运至板上的 UB,如果要将运算后的结果搬出板外,也需要由向量 DMA 完成。向量指令类似于传统的单指令多数据(Single Instruction Multiple Data,SIMD)指令,在CPU指令中也相继引入了流SIMD扩展(Streaming SIMD Extensions,SSE)系列、高级向量扩展(Advanced Vector Extensions,AVX)系列指令。2013年发布的AVX-512指令集,其指令宽度扩展到512位。昇腾AI处理器的向量指令支持的数据类型为FP16、FP32和int32,一次可以执行2048位向量计算(等价于128个FP16类型的计算)。
昇腾AI处理器的向量指令包括5种类型:算术运算指令、比较与选择指令、逻辑运算指令、数据搬运指令及其他专用指令。其中常见的算术运算指令有加法(Vadd)、减法(Vsub)、求最大(Vmax)和求最小(Vmin);比较与选择指令有向量比较大小(Vcmp)和选择(Vsel);逻辑运算指令有向量与(Vand)和向量或(Vor)。昇腾 AI 处理器的向量指令支持多次迭代执行,也支持直接运算带有间隔(Stride)的向量。
3.矩阵指令
矩阵指令由矩阵计算单元执行,实现高效的矩阵乘法计算和累加操作C=A×B+C。在神经网络计算过程中,矩阵A通常代表输入特征矩阵,矩阵B通常代表权重矩阵,矩阵C通常代表输出特征矩阵。矩阵指令支持int8和FP16类型的输入数据,也支持int32、FP16和FP32类型的输出数据。在矩阵指令执行前,数据同样被搬运至板上,随后根据左、右矩阵的差异被搬运至L0A缓冲区和L0B缓冲区中,并在执行计算时被搬入矩阵计算单元中参与矩阵计算,并将结果返回至L0C缓冲区,最后被搬运回板外。正如前文所介绍,矩阵计算单元支持一次计算两个大小不超过16×16、数据类型为FP16的矩阵乘法。