CN116643796A - 混合精度运算的处理方法以及指令处理装置 - Google Patents
混合精度运算的处理方法以及指令处理装置 Download PDFInfo
- Publication number
- CN116643796A CN116643796A CN202310571408.3A CN202310571408A CN116643796A CN 116643796 A CN116643796 A CN 116643796A CN 202310571408 A CN202310571408 A CN 202310571408A CN 116643796 A CN116643796 A CN 116643796A
- Authority
- CN
- China
- Prior art keywords
- register
- instruction
- precision
- operand
- mixed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30163—Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了一种混合精度运算的处理方法以及指令处理装置。指令处理装置包括:寄存器堆,包括多个寄存器;译码单元,用于对混合精度运算指令进行译码,并得到译码信息,所述译码信息指示执行单元执行下述操作;对多个寄存器中的第一寄存器和第二寄存器执行指定算术操作,并将结果写回到多个寄存器中的第三寄存器,第一寄存器和第二寄存器内的操作数的精度不同;执行单元,耦接到寄存器堆和译码单元,用于基于译码信息执行相应操作。和现有的处理器相比,该指令处理装置无需将混合精度统一为同一精度再进行算术操作,因而提高了混合精度运算的处理效率,并节省了将混合精度统一为同一精度时所占用的存储空间。
Description
技术领域
本公开涉及处理器技术领域,更具体地,涉及混合精度运算的处理方法以及指令处理装置。
背景技术
随着精简指令集的发展,业界已经研发出基于精简指令集的新型处理器架构。RISC-V是基于精简指令集原则的开源指令集架构,不仅具有完全开源、架构简单、模块化设计的优点,而且该架构的定义使得硬件实现简单,从而可以减少处理器芯片的开发周期和成本。
在神经网络领域,模型量化是指将神经网络模型中的操作数据(权重和输入数据)从高精度类型转换为低精度类型,例如从32位单精度浮点数转化为8位整型数据,然后再进行计算。模型量化有助于提高模型训练和推理的工作效率,但是对模型精度有负面影响。因此,部分模型采取折衷的量化方式:将一部分操作数据从高精度类型转换为低精度类型,另一部分则保持精度不变,下文将经过该量化方式的模型称为混合精度模型。因而,处理器在执行混合精度模型时,需要处理大量的混合精度运算,例如,处理16位半精度浮点数和8位整型数据的乘法,但是由于一些处理器所使用的指令集架构(例如RISC-V)未提供适用于混合精度运算的标准指令,因此需要利用同一精度运算的标准指令进行处理,即需要先将各个操作数统一为同一精度,再采用同一精度运算的标准指令进行处理,这种处理方式降低了混合精度模型的执行效率。
发明内容
有鉴于此,本公开提供一种混合精度运算的处理方法以及指令处理装置。
根据本公开的第一方面,提供一种指令处理装置,包括:
寄存器堆,包括多个寄存器;
译码单元,用于对混合精度运算指令进行译码,并得到译码信息,所述译码信息指示执行单元执行下述操作;对所述多个寄存器中的第一寄存器和第二寄存器执行指定算术操作,并将结果写回到所述多个寄存器中的第三寄存器,所述第一寄存器和所述第二寄存器内的操作数的精度不同;
执行单元,耦接到所述寄存器堆和所述译码单元,用于基于所述译码信息执行相应操作。
在一些实施例中,所述混合精度运算指令包括操作码和至少一个操作数,所述至少一个操作数用于指示所述第一寄存器至所述第三寄存器中的至少一个。
在一些实施例中,当所述至少一个操作数未全部指示所述第一寄存器至所述第三寄存器时,所述译码单元确定所述至少一个操作数中未指示的寄存器,并将对应的寄存器标识添加到所述译码信息中。
在一些实施例中,所述指定算术操作为乘法、加法、减法或者除法。
在一些实施例中,当所述指定算术操作为乘累加时,则所述译码单元指示所述执行单元执行下述操作:将所述第一寄存器和所述第二寄存器相乘,相乘的结果与所述第三寄存器相加,并将相加的结果写回到所述第三寄存器。
在一些实施例中,所述第三寄存器所指示的精度与所述第一寄存器和所述第二寄存器中的操作数中的较高精度相同,或者高于所述第一寄存器和所述第二寄存器中的操作数中的较高精度。
在一些实施例中,所述第一寄存器为8位的整型寄存器,所述第二寄存器为8、16、19、32或64位的浮点型寄存器。
在一些实施例中,所述指令处理装置的指令集架构为基于RISC-V的指令集架构。
在一些实施例中,其中,所述混合精度运算指令是所述指令处理装置的指令集中的扩展指令。
根据本公开的第二方面,提供一种用于混合精度运算的处理方法,包括:
从第一内存地址读取第一操作数到第一寄存器;
从第二内存地址读取第二操作数到第二寄存器;
对所述第一寄存器和所述第二寄存器执行指定算术操作,并将结果存储到第三寄存器;以及
将所述第三寄存器中的结果存储到第三内存地址,其中,所述第一操作数和所述第二操作数为不同精度数值。
在一些实施例中,所述第三寄存器所指示的精度与所述第一寄存器和所述第二寄存器中的操作数中的较高精度相同,或者高于所述第一寄存器和所述第二寄存器中的操作数中的较高精度。
在一些实施例中,所述处理方法的每个步骤对应于一个汇编指令。
根据本公开的第三方面,提供一种用于混合精度运算的处理方法,所述混合精度运算为乘累加,包括多次执行的下述步骤:
从第一内存地址读取第一操作数到第一寄存器;
从第二内存地址读取第二操作数到第二寄存器;以及
采用乘累加电路,将所述第一寄存器和所述第二寄存器相乘,将相乘的结果与第三寄存器相加,以及将相加的结果写回所述第三寄存器,其中,所述第一操作数和所述第二操作数为不同精度数值;
所述处理方法还包括:将所述第三寄存器中的结果存储到第三内存地址。
根据本公开的第四方面,提供一种计算机系统,包括:
存储器;
与所述存储器耦合的处理器,所述存储器存储有可由所述处理器执行的计算机指令,所述处理器在执行所述计算机指令时,实现上述任一项所述的处理方法。
根据本公开的第五方面,提供一种计算机可读介质,所述计算机可读介质存储有可由处理器执行的计算机指令,所述计算机指令被执行时,实现上述任一项所述的处理方法。
本公开实施例提供的混合精度运算的指令处理装置,将不同精度的操作数输入给执行单元进行算术操作,由于无需像现有技术那样,先将混合精度统一为同一精度再进行算术操作,因而提高了混合精度运算的处理效率,并节省了将混合精度统一为同一精度时所占用的存储空间。该指令处理装置可用于执行混合精度模型,以提高模型训练和推理的工作效率。
附图说明
通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是示例性的卷积神经网络模型的示意图;
图2是根据本公开一个实施例的处理器的示意性框图;
图3是根据本公开一个实施例的指令处理装置的示意性框图;
图4a是根据本公开一个实施例的用于混合精度运算的处理方法的流程图;
图4b是根据本公开另一个实施例的用于混合精度运算的处理方法的流程图;
图5是用于实施本公开实施例的处理系统的结构示意图;
图6是用于实施本公开实施例的处理系统的结构示意图。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在介绍本公开实施例各个实施例之前先以一个示例介绍模型量化对模型执行带来的负面影响。典型的模型结构包含输入层、中间层和输出层。图1是示例性的卷积神经网络模型的示意图。
如图上所示,卷积神经网络模型10包括输入层101、多个卷积层102、多个池化层103、多个全连接层104、分类层105和输出层106。其中,三个卷积层102和一个池化层103组成模块,在卷积神经网络模型中重复出现n次,n为正整数。卷积层102提供卷积计算,卷积计算和矩阵计算类似,例如,将输入的矩阵和卷积核进行矩阵相乘再求和计算得到输出给下一个层。池化层103是将输入的矩阵相加求平均(平均池化)或者特征图的数值求最大值(最大池化)。全连接层104将输入的各种表征局部特征的矩阵数据再重新通过权值矩阵组装成完整的表征全部特征的矩阵。因为全连接层104用到了所有的局部特征,所以叫全连接。分类层105用于分类过程,将多个神经元的输出通过激活函数(例如softmax)映射到[0,1]区间内,将得到的数值看作概率以进行分类识别。在这些层中,除了池化层不带权重参数之外,其它层都有自己的权重参数。而模型量化是将模型中的权重参数和/或输入数据从高精度数据转换为低精度数据。下面以一个卷积计算为例介绍对权重参数的量化操作。
假设一个卷积层的输入为矩阵X,包括元素x1至x9,卷积核为Y,包括元素w1至w4,如公式(1)所示:
该卷积层的输出定义为矩阵Z,该输出矩阵Z的元素z1至z4分别表示为:
其中z1=x1w1+x2w3,z2=z1w2+z2w4,z3=z3w1+z4w3,z4=z3w2+z4w4(3)。卷积层负责矩阵求和计算。通过卷积层,可提取输入数据的特征并同时压缩了数据规模。卷积核Y内的各个元素即模型的权重参数。通常卷积神经网络模型具有多个卷积层、多个全连接层、分类层等,这些层都具有各自的权重参数。可以想见,权重参数的数据规模是很庞大的,同时诸如图像等输入数据的数据规模也很庞大,因此,虽然较高精度的权重参数和输入数据有助于提高模型精度,但是也导致了模型在训练和推理时需要足够的存储空间和较高的数据吞吐能力。
基于此,通过模型量化将权重参数和/或输入数据从较高精度数据转换到较低精度数据进行存储和计算,例如32位浮点数据转换为8位整型(有符号整型或者无符号整型)或16位浮点数据进行存储和计算,以此节省存储空间,并提高计算效率。相应地,混合精度模型就是模型中的一部分权重参数和/或输入数据从高精度类型转换到了较低精度类型,另一部分则保持精度不变,例如某些卷积层的权重参数从高精度转换到较低精度,其他数据保持精度不变。从高精度数据转换到更低精度数据的方法有多种,这里就不详细介绍。
图2示出根据本公开一个实施例的处理器的示意性框图。处理器100包括用于处理指令的一个或多个处理器核110。应用程序和/或系统平台可以控制多个处理器核110处理和执行指令。
每个处理器核110可以为特定的指令集架构。在一些实施例中,特定的指令集架构为以下任意一种:复杂指令集(Complex Instruction Set Computing,CISC)架构、精简指令集(Reduced Instruction Set Computing,RISC)架构、超长指令字(Very LongInstruction Word,VLIW)架构、或者是上述指令集的组合架构、或者是任何专用指令集架构。不同的处理器核110可以各自具备相同或不同的指令集架构。示例性的,处理器核110具有RISC-V架构。在一些实施例中,处理器核110还可以包括其他处理模块,例如数字信号处理器(Digital Signal Processor,DSP)、神经网络处理器等。
处理器100还可以包括多级存储结构,例如,寄存器堆116、多级高速缓存L1至L3、以及经由存储总线访问的存储器120。
寄存器堆116可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆116可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆116中的寄存器可以选用通用寄存器来实现,也可以根据处理器100的实际需求采用特定的设计。
高速缓存L1至L3可以全部或部分集成于各个处理器核110中。例如,第一级高速缓存L1位于各个处理器核110的内部,包括用于存放指令的指令缓存118和用于存放数据的数据缓存119。根据不同处理器架构,至少一级缓存(例如,图2所示的第三级高速缓存L3)可以位于多个处理器核110的外部并且由多个处理器核共享。处理器100还可以包括外部缓存。
处理器100可以包括内存管理单元(Memory Management Unit,MMU)112,用于实现虚拟地址到物理地址的转译。内存管理单元112中高速缓存有了一部分虚拟地址到物理地址的映射关系,内存管理单元112也可以从内存中获取未被高速缓存的映射关系。每个处理器核110中可以设置一个或多个内存管理单元112,不同处理器核110中的内存管理单元110也可以与位于其他处理器或处理器核中的内存管理单元110实现同步,使得每个处理器或处理器核可以共享统一的虚拟存储系统。
处理器100用于执行指令序列(即应用程序)。处理器100根据指令集架构按照指令流水线执行每条指令,通常,执行每个指令的过程均包括:从存放指令的存储器中取出指令、对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此重复,直到执行完指令序列中的全部指令或遇到停机指令。
为了实现指令处理,处理器100包含取指令单元114、译码单元115和执行单元111。
取指令单元114作为处理器100的启动引擎,用于将指令从指令缓存118或存储器110中迁移至指令寄存器(例如,寄存器堆116中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
取出指令后,处理器100进入指令译码阶段,译码单元115按照预定的指令格式,对取回的指令进行解释和译码,区分出不同的指令类别以及操作数获取信息(操作数获取信息可以指向立即数或用于存储操作数的寄存器),为执行单元111的操作作准备。
对于不同类别的指令,可以在处理器100中相应地设置多个不同的执行单元111。执行单元111可以是算术操作单元(例如乘法电路、除法电路、加法电路、减法电路、各种逻辑电路或者以上几种的组合电路)、内存执行单元(例如用于根据指令访问内存以读取内存中的数据或向内存写入指定的数据等)以及各种协处理器等。在处理器100中,多个执行单元可以并行运行并输出相应的执行结果。
在本实施例中,处理器100是多核处理器,包括共用第三级缓存L3的多个处理器核110,而且处理器2至m可具备与处理器核1相同或不同的结构。在替代的实施例中,处理器100可以是单核处理器,或者电子系统中用于处理指令的逻辑元件。本公开不限于任何特定类型的处理器。
图3示出根据本公开一个实施例的指令处理装置的示意性框图。为了清楚起见,在图3中仅示出了指令处理相关的单元。
指令处理装置210包括但不限于处理器、多核处理器的处理器核、或者电子系统中的处理元件。在该实施例中,指令处理装置210例如是图2所示的处理器100的处理器核,并且与图2相同的单元或模块采用与图2相同的附图标记。
在指令处理装置210上运行应用程序时,应用程序已经编译成包括多条指令的指令序列。程序计数器PC用于指示将要执行的指令的指令地址。取指令单元114根据程序计数器PC的数值,从第一级高速缓存L1中的指令缓存118或指令处理装置210外部的存储器210中获取指令。
指令处理装置210具有复杂指令集(CISC)架构、精简指令集(RISC)架构、超长指令字(VLIW)架构、或者是上述指令集的组合架构、或者是任何专用指令集架构,示例性地,指令处理装置210具有RISC-V指令集架构。参照现有技术,指令处理装置210仅包含特定指令集架构的标准指令,因此对于混合精度运算,需要先将操作数统一为同一精度,再采用同一精度运算的标准指令进行处理。以混合精度乘法为例,指令处理装置210所处理的指令序列对应的操作如表格1所示。
表格1
但根据本公开实施例,指令处理装置210不仅包含特定指令集架构的标准指令,而且包括用于混合精度运算的扩展指令,下文将其称为混合精度运算指令。依旧以混合精度乘法为例,其指令序列所对应的操作如表格2所示。
表格2
| 1 | 读取地址A中的int8数据到寄存器 |
| 2 | 读取地址C中的float16数据到寄存器 |
| 3 | 使用int8乘float16的指令,计算得到float16结果放在寄存器 |
| 4 | 将float16结果存储到D区间 |
根据表格1-2所示,包含了混合精度运算指令的处理器可以通过较少的指令完成混合精度运算,因此提高了混合精度运算的性能,并且,和现有技术相比,由于无需申请临时空间,从而减少了对存储空间的占用。
下面依据图3详细介绍指令处理装置210对混合精度乘法的执行过程。指令处理装置210根据程序计数器PC的数值依次获取和执行每条指令。程序计数器PC,是存放下一条指令的指令地址的寄存器。处理器根据程序计数器PC指示的地址从内存或高速缓存中获取和执行指令。
首先,取指令单元114从指令缓存118的地址A获取指令1,译码单元115对指令1进行识别,识别出指令1是从加载数据指令,将其提供给执行单元111中的内存执行单元132,内存执行单元132将地址A中的int8数据加载到寄存器rs1。然后,取指令单元114从指令缓存118中获取指令2,译码单元115对指令2进行识别,识别出指令2是加载数据指令,将其提供给执行单元111中的内存执行单元132,内存执行单元132将地址B中的float16数据加载到寄存器rs2。寄存器rs1可以是整数寄存器或浮点数寄存器,寄存器rs2可以是浮点寄存器。接着,取指令单元114从指令缓存118中获取指令3,译码单元115对指令3进行译码,识别出指令3是乘法,并确定用于存储两个操作数的寄存器rs1和rs2以及存储结果的寄存器rs,将译码信息提供给执行单元111中的算术逻辑单元131,算术逻辑单元131将寄存器rs1和寄存器rs2相乘并将结果存储到寄存器rs中。最后,取指令单元114从指令缓存118中获取指令4,译码单元115对指令4进行识别,识别出指令4是数据存入指令,将其提供给执行单元111中的内存执行单元132,将寄存器rs中的数据存储到地址D上。
在一些实施例中,混合精度运算的指令形式例如为以下形式:
op rs,rs1,rs2;
op表示混合精度运算的指令,可以为乘法、除法、加法、减法或乘累加等。rs1和rs2分别指示第一寄存器和第二寄存器,并分别存储有不同精度的操作数。rs是第三寄存器,表示将结果存储到寄存器rs中。通常,操作数的精度和寄存器的位宽和类型适配,例如,int8和float16数据分别采用8位的整型寄存器和16位的浮点型寄存器,然而,本公开对此不作限制,可使用任意一种能在其中存储所提供的操作数的相应寄存器,例如fp8的操作数虽然通常使用8位的浮点型寄存器,但是也可以使用8位、16位、19位(通常存储TF32格式的浮点数)、32位、64位、128位或512位的浮点寄存器,再例如,int8的操作数虽然通常使用8位的浮点型寄存器,但是也可以使用例如16位或32位的浮点型寄存器。rs存储的是算术操作结果,在一些实施例中,rs所指示的数据精度与rs1和rs2的操作数中的较高精度相同,例如int8和float16相加的结果采用16位的浮点型寄存器来存储,在另一些实施例中,rs所指示的精度高于rs1和rs2的操作数中的较高精度,例如int8和float16相乘的结果采用32位的浮点型寄存器来存储。
对本指令形式,译码单元115进行译码,识别出指令的操作码op、以及寄存器堆116中与第一操作数、第二操作数和结果操作数对应的第一寄存器rs1、第二寄存器rs2和第三寄存器rs,并将译码结果传递给算术逻辑单元131。算术逻辑单元131执行相应的操作。
在另一些实施例中,混合精度运算指令包括操作码,并且仅包含指示第一寄存器至第三寄存器中的字段,也就是说,指令中字面上仅指示了两个操作数的寄存器,未指示存放结果的寄存器,或者指令中字面上仅指示一个操作数的寄存器和存放结果的寄存器,未指示另一操作数的寄存器,在此情况下,译码单元使用确定未指示的寄存器,并将对应的寄存器标识添加到译码信息中。示例性地,译码单元将默认寄存器或上一个指令的结果寄存器识别为未指示的寄存器。
举例说明。混合精度运算的指令形式为:
op rs1,rs2;
该指令形式中未包含存放结果的寄存器。因此译码单元提供的译码信息中指示使用AV寄存器存放结果,AV寄存器例如是乘法运算中的默认寄存器。
另外,考虑到混合精度运算指令属于指令集的扩展指令,可采用指令处理装置中的某个寄存器来存储是否允许该指令或扩展指令执行的使能标识。执行单元111根据该使能标识的值来确定是否执行该指令或扩展指令。当指示使能标识指示不允许该指令或扩展指令,则执行单元140不执行相应指令,并且可选地产生异常信息。
图4a和图4b是根据本公开实施例的用于混合精度运算的处理方法的流程图。图4a所指的混合精度运算为加法、减法、乘法和除法中的一种,图4b所指的混合精度运算为乘累加。图4a和图4b的处理方法均由一计算机系统执行,该计算机系统包含处理器和存储器,存储器中存储由可有处理器执行的计算机指令,计算机指令由处理器执行时,实现图4a或图4b中的步骤。在图4a中,包括以下步骤。
在步骤S401中,从第一内存地址读取第一操作数到第一寄存器。
在步骤S402中,从第二内存地址读取第二操作数到第二寄存器。
在步骤S403中,对第一寄存器和第二寄存器执行指定算术操作,并将结果存储到第三寄存器。
在步骤S404中,将第三寄存器中的结果存储到第三内存地址,其中,第一操作数和所述第二操作数为不同精度数值。
根据本实施例,计算机系统中的处理器对于混合精度运算的处理过程是先将混合精度运算的第一操作数从指定数据缓存读取到第一寄存器,然后将第二操作数从指定数据缓存中读取到第二寄存器,然后将两个寄存器进行指定算术操作,并将结果存储到第三寄存器中,最后将第三寄存器中的结果存储到指定数据缓存中,其中,第一操作数和第二操作数为不同精度的数值。
在图4b中,包括重复执行的步骤S411至S413以及步骤S414。
在步骤S411中,从第一内存地址读取第一操作数到第一寄存器。
在步骤S412中,从第二内存地址读取第二操作数到第二寄存器。
在步骤S413中,对第一寄存器和第二寄存器相乘,将相乘结果与第三寄存器相加,将相加结果写回到第三寄存器。
在步骤S414中,将第三寄存器中的结果存储到第三内存地址,其中,第一操作数和所述第二操作数为不同精度数值。
根据本实施例,计算机系统中的处理器对于乘累加的处理过程是先将混合精度运算的第一操作数从指定数据缓存读取到第一寄存器,然后将第二操作数从指定数据缓存中读取到第二寄存器,然后将对第一寄存器和第二寄存器相乘,将相乘结果与第三寄存器相加,将相加结果写回到第三寄存器,最后将第三寄存器中的结果存储到指定数据缓存中,其中,第一操作数和第二操作数为不同精度的数值。其中,步骤S411至S413组成的循环重复执行多次。举例说明,针对前文中的z1=x1w1+x2w3,步骤S411至S413组成的循环执行两次,第一次循环结束,计算出x1w1+z1=z1(初始z1=0);第二次计算z1+x2w3=z1,以此类推。
应该理解,计算机系统中的处理器要达到通过上面的四个步骤即完成一次混合精度运算,需要其内部所嵌入的指令集架构能够支持不同精度操作数的算术运算,为了达到这一目的,对于一些不支持该算术运算的处理器架构,需要在其指令集中增加一条扩展指令:混合精度运算指令。特别地,对于不支持该算术运算的RISC-V处理器架构,增加混合精度运算指令作为扩展指令。
更进一步地,由于现有处理器架构中用于算术运算的电路能够执行或者只需要微调就能够执行不同精度的算术运算,因此本公开实施例实施难度不大。且随着应用混合精度模型的落地应用越来越多,也体现出更多的实用价值和经济价值。例如,自动语音识别模型的权重范围比较集中,但输入数据的分布范围却较大,因此自动语音识别模型可采用了权重参数为int8而输入数据为float16的混合精度模型,而本公开实施例提供的指令处理装置能够提高采用了自动语音识别模型的语音相关的项目的执行效率。
图5是用于实施本公开实施例的处理系统的结构示意图,所述处理系统例如为一个计算机系统。参考图5,系统500是“中心”系统架构的示例。系统500可基于目前市场上各种型号的处理器构建,并由WINDOWSTM操作系统版本、UNIX操作系统、Linux操作系统等操作系统驱动。此外,系统500一般在PC机、台式机、笔记本、服务器中实施。
如图5所示,系统500包括处理器502。处理器502具有本领域所公知的数据处理能力。它可以是复杂指令集(CISC)架构、精简指令集(RISC)架构、超长指令宇(VLIW)架构的处理器、或者是实现上述指令集组合的处理器、或者是任何为了专用目标构建的处理器设备。
处理器502连接到系统总线501,系统总线501可以在处理器502和其它部件之间传输数据信号。处理器502可以是图2所示的处理器100或图3所示的指令处理装置210,或者是上述处理单元的变形。
系统500还包括存储器504和显卡505。存储器504可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或其它存储器设备。存储器504可以存储由数据信号表示的指令信息和/或数据信息。显卡505包括显示驱动器,用于控制显示信号在显示屏上的正确显示。
经由存储器控制器中心503,显卡505和存储器504被连接到系统总线501上。处理器502可以经由系统总线501与存储器控制器中心503通信。存储器控制器中心503向存储器504提供高带宽存储器访问路径521,用于指令信息和数据信息的存储和读取。同时,存储器控制器中心503和显卡505基于显卡信号输入输出接口520进行显示信号的传输。显卡信号输入输出接口520例如为DVI、HDMI等接口类型。
存储器控制器中心503不仅在处理器502、存储器503和显卡505之间传输数字信号,而且,实现了在系统总线501和存储器504以及输入/输出控制中心506桥接数字信号。
系统500还包括输入/输出控制中心506,通过专用集线器接口总线522连接到存储器控制器中心503,并经由局部I/0总线将一些I/0设备到输入/输出控制中心506上。局部I/0总线用于将外围设备连接到输入/输出控制中心506,进而连接到存储器控制器中心503和系统总线501上。外围设备包括但不限于以下设备:硬盘507、光盘驱动器508、声卡509、串行扩展端口510、音频控制器511、键盘512、鼠标513、GPIO接口514、闪存515和网卡516。
当然,不同的计算机系统根据主板,操作系统和指令集架构的不同,其结构图也有所变化。例如目前很多计算机系统将存储器控制器中心503集成到处理器502的内部,这样输入/输出控制中心506会成为和处理器503连接的控制中心。
图6是用于实施本公开实施例的处理系统的结构示意图,处理系统600例如为一个片上系统。
参考图6,系统600可以使用目前市场上多种型号的处理器形成。并可由WINDOWSTM操作系统版本、UNIX操作系统、Linux操作系统和Android操作系统等操作系统进行驱动。此外,处理系统600可以在手持设备和嵌入式产品中实现。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字摄像机、个人数字助理(PDA)和手持PC。嵌入式产品可以包括网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可以执行一个或多个指令的任何其它系统。
如图6所示,系统600包括经由AHB(Advanced High performance Bus,系统总线)总线601连接的处理器602、数字信号处理器(DSP)603、仲裁器604、存储器605和AHB/APB桥606。其中处理器602和DSP 603可以是图2所示的处理器100或图3所示的指令处理装置210,或者是上述处理单元的变形。
处理器602可以为复杂指令集(CISC)微处理器、精简指令集(RISC)微处理器、超长指令宇(VLIW)微处理器、实现上述指令集组合的微处理器、或任何其它处理器设备中的一种。
AHB总线601用于在系统600的高性能模块之间传输数字信号,例如在处理器602、DSP603、仲裁器604、存储器605和AHB/APB桥606之间传输数字信号。
存储器605用于存储由数字信号表示的指令信息和/或数据信息。存储器605可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或其它存储器设备。DSP可以通过或者不通过AHB总线601访问存储器605。
仲裁器604用于负责处理器602和DSP603对AHB总线601的访问控制。由于处理器602和DSP603均可以经由AHB总线控制其他部件,此时需要仲裁器604进行确认。
AHB/APB桥606用于在AHB总线和APB总线之间进行数据传输的桥接,具体地,通过锁存来自AHB总线的地址、数据和控制信号,并提供二级译码以产生APB外围设备的选择信号,从而实现AHB协议到APB协议的转换。
处理系统600还可以包括与APB总线连接的各种接口。各种接口包括但不限于通过以下接口类型:高容量SD存储卡(SDHC,Secure Digital High Capacity)、I2C总线、串行外设接口(SPI,Serial Peripheral Interface)、通用异步收发传输器(UART,UniversalAsynchronous Receiver/Transmitter)、通用串行总线(USB,Universal Serial Bus)、通用型之输入输出(GPIO,General-purpose input/output)和蓝牙UART。与接口连接的外围设备415例如为USB设备、存储卡、报文收发传输器、蓝牙设备等。
此外,上述实施例提供的处理方法还可以实现为一个或多个计算机可读介质的形式,该计算机可读介质中包含可由上述处理系统或指令处理装置执行的计算机指令。在一些实施例中,计算机指令是指某种计算机编程语言例如汇编语言的指令。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码,这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接的便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器、磁存储器或者上述任意合适的组合。
应该理解,本说明书中的各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
Claims (15)
1.一种指令处理装置,其特征在于,包括:
寄存器堆,包括多个寄存器;
译码单元,用于对混合精度运算指令进行译码,并得到译码信息,所述译码信息指示执行单元执行下述操作;对所述多个寄存器中的第一寄存器和第二寄存器执行指定算术操作,并将结果写回到所述多个寄存器中的第三寄存器,所述第一寄存器和所述第二寄存器内的操作数的精度不同;
执行单元,耦接到所述寄存器堆和所述译码单元,用于基于所述译码信息执行相应操作。
2.根据权利要求1所述的指令处理装置,其特征在于,所述混合精度运算指令包括操作码和至少一个操作数,所述至少一个操作数用于指示所述第一寄存器至所述第三寄存器中的至少一个。
3.根据权利要求2所述的指令处理装置,其特征在于,当所述至少一个操作数未全部指示所述第一寄存器至所述第三寄存器时,所述译码单元确定所述至少一个操作数中未指示的寄存器,并将对应的寄存器标识添加到所述译码信息中。
4.根据权利要求1所述的指令处理装置,其特征在于,所述指定算术操作为乘法、加法、减法或者除法。
5.根据权利要求1所述的指令处理装置,其特征在于,当所述指定算术操作为乘累加时,则所述译码单元指示所述执行单元执行下述操作:将所述第一寄存器和所述第二寄存器相乘,相乘的结果与所述第三寄存器相加,并将相加的结果写回到所述第三寄存器。
6.根据权利要求1所述的指令处理装置,其特征在于,所述第三寄存器所指示的精度与所述第一寄存器和所述第二寄存器中的操作数中的较高精度相同,或者高于所述第一寄存器和所述第二寄存器中的操作数中的较高精度。
7.根据权利要求1至6任一项所述的指令处理装置,其特征在于,所述第一寄存器为8位的整型寄存器,所述第二寄存器为8、16、19、32或64位的浮点型寄存器。
8.根据权利要求1至6任一项所述的指令处理装置,其特征在于,所述指令处理装置的指令集架构为RISC-V指令集架构。
9.根据权利要求8所述的指令处理装置,其特征在于,所述混合精度运算指令是所述RISC-V指令集架构的扩展指令。
10.一种用于混合精度运算的处理方法,其特征在于,包括:A43348CN-IA23000076
从第一内存地址读取第一操作数到第一寄存器;
从第二内存地址读取第二操作数到第二寄存器;
对所述第一寄存器和所述第二寄存器执行指定算术操作,并将结果存储到第三寄存器;以及
将所述第三寄存器中的结果存储到第三内存地址,其中,所述第一操作数和所述第二操作数为不同精度数值。
11.根据权利要求10所述的处理方法,其特征在于,所述第三寄存器所指示的精度与所述第一寄存器和所述第二寄存器中的操作数中的较高精度相同,或者高于所述第一寄存器和所述第二寄存器中的操作数中的较高精度。
12.根据权利要求10所述的处理方法,其特征在于,所述处理方法的每个步骤对应于一个汇编指令。
13.一种用于混合精度运算的处理方法,所述混合精度运算为乘累加,其特征在于,包括多次执行的下述步骤:
从第一内存地址读取第一操作数到第一寄存器;
从第二内存地址读取第二操作数到第二寄存器;以及
采用乘累加电路,将所述第一寄存器和所述第二寄存器相乘,将相乘的结果与第三寄存器相加,以及将相加的结果写回所述第三寄存器,其中,所述第一操作数和所述第二操作数为不同精度数值;
所述处理方法还包括:将所述第三寄存器中的结果存储到第三内存地址。
14.一种计算机系统,其特征在于,包括:
存储器;
与所述存储器耦合的处理器,所述存储器存储有可由所述处理器执行的计算机指令,所述处理器在执行所述计算机指令时,实现如权利要求10至13任一项所述的处理方法。
15.一种计算机可读介质,其特征在于,所述计算机可读介质存储有可由处理器执行的计算机指令,所述计算机指令被执行时,实现如权利要求10至13任一项所述的处理方法。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310571408.3A CN116643796A (zh) | 2023-05-17 | 2023-05-17 | 混合精度运算的处理方法以及指令处理装置 |
| US18/665,108 US20240385839A1 (en) | 2023-05-17 | 2024-05-15 | Processing method of mixed precision operation and instruction processing apparatus |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310571408.3A CN116643796A (zh) | 2023-05-17 | 2023-05-17 | 混合精度运算的处理方法以及指令处理装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN116643796A true CN116643796A (zh) | 2023-08-25 |
Family
ID=87618099
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202310571408.3A Pending CN116643796A (zh) | 2023-05-17 | 2023-05-17 | 混合精度运算的处理方法以及指令处理装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20240385839A1 (zh) |
| CN (1) | CN116643796A (zh) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN119322600A (zh) * | 2024-10-12 | 2025-01-17 | 海光信息技术股份有限公司 | 浮点数处理方法及装置、电子设备和存储介质 |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4823260A (en) * | 1987-11-12 | 1989-04-18 | Intel Corporation | Mixed-precision floating point operations from a single instruction opcode |
| CA2074388C (en) * | 1992-01-30 | 2003-01-14 | Jeremy E. San | Programmable graphics processor having pixel to character conversion hardware for use in a video game system or the like |
| US5673407A (en) * | 1994-03-08 | 1997-09-30 | Texas Instruments Incorporated | Data processor having capability to perform both floating point operations and memory access in response to a single instruction |
| US6675286B1 (en) * | 2000-04-27 | 2004-01-06 | University Of Washington | Multimedia instruction set for wide data paths |
| US10726514B2 (en) * | 2017-04-28 | 2020-07-28 | Intel Corporation | Compute optimizations for low precision machine learning operations |
-
2023
- 2023-05-17 CN CN202310571408.3A patent/CN116643796A/zh active Pending
-
2024
- 2024-05-15 US US18/665,108 patent/US20240385839A1/en active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN119322600A (zh) * | 2024-10-12 | 2025-01-17 | 海光信息技术股份有限公司 | 浮点数处理方法及装置、电子设备和存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| US20240385839A1 (en) | 2024-11-21 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN114356417B (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
| EP3719639B1 (en) | Systems and methods to perform floating-point addition with selected rounding | |
| US20190102671A1 (en) | Inner product convolutional neural network accelerator | |
| US7353368B2 (en) | Method and apparatus for achieving architectural correctness in a multi-mode processor providing floating-point support | |
| US11640300B2 (en) | Byte comparison method for string processing and instruction processing apparatus | |
| EP3757769B1 (en) | Systems and methods to skip inconsequential matrix operations | |
| KR20150138343A (ko) | 다중 레지스터 메모리 액세스 명령어들, 프로세서들, 방법들 및 시스템들 | |
| JP6415698B2 (ja) | 計算処理用のベクトルフォーマットのための命令およびロジック | |
| WO2017112246A1 (en) | Instructions and logic for load-indices-and-gather operations | |
| US9766886B2 (en) | Instruction and logic to provide vector linear interpolation functionality | |
| CN108292293A (zh) | 用于得到多个向量元素操作的指令和逻辑 | |
| CN118779011B (zh) | 数据归一化risc-v指令集扩展方法及硬件加速装置 | |
| EP4020169A1 (en) | Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions | |
| US11704131B2 (en) | Moving entries between multiple levels of a branch predictor based on a performance loss resulting from fewer than a pre-set number of instructions being stored in an instruction cache register | |
| US20210089305A1 (en) | Instruction executing method and apparatus | |
| EP3391235A1 (en) | Instructions and logic for even and odd vector get operations | |
| EP3716050B1 (en) | Using fuzzy-jbit location of floating-point multiply-accumulate results | |
| CN116643796A (zh) | 混合精度运算的处理方法以及指令处理装置 | |
| CN108292214A (zh) | 用于获得数据列的指令和逻辑 | |
| US12321714B2 (en) | Compressed wallace trees in FMA circuits | |
| US20190163476A1 (en) | Systems, methods, and apparatuses handling half-precision operands | |
| WO2023093128A1 (zh) | 运算指令处理方法及系统、主处理器和协处理器 | |
| CN120743351A (zh) | 指令处理方法、装置、电子设备和存储介质 | |
| CN118057308A (zh) | 指令处理优化方法及相关装置 | |
| WO2022220835A1 (en) | Shared register for vector register file and scalar register file |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination |