发明内容
本公开的实施例提供了一种数据乘加运算电路,该电路包括:数据格式转换模块,用于将输入的第一原始数组和第二原始数组分别包括的数据转换为第一预设表示方式的数据,得到第一待计算数组和第二待计算数组,其中,第一预设表示方式是与数据存储格式无关的表示方式;数据乘加运算模块,用于基于第一待计算数组和第二待计算数组包括的数据,进行针对第一原始数组和第二原始数组的乘加运算,得到乘加结果数据;数据格式化模块,用于将乘加结果数据转换为第二预设表示方式的数据。
在一些实施例中,数据格式转换模块包括:运算数值提取单元,用于从第一原始数组和第二原始数组分别包括的数据中提取运算数值,得到第一待计算数组和第二待计算数组;属性数值提取单元,用于从第一原始数组和第二原始数组分别包括的相对应的数据中提取属性数值,得到第一属性数组和第二属性数组,并对第一属性数组和第二属性数组进行格式相关运算,得到乘加结果属性数值。
在一些实施例中,数据乘加运算模块进一步用于:基于第一属性数组和第二属性数组,对第一待计算数组和第二待计算数组分别包括的数据进行乘加运算,得到与乘加结果属性数值表示的数据类型相应的乘加结果数据。
在一些实施例中,第一原始数组和第二原始数组分别包括的数据为浮点型数据;属性数值提取单元包括:第一符号提取子单元,用于从浮点型数据中提取符号位,并将第一原始数组和第二原始数组中相对应的数据的符号进行异或运算,得到乘积的符号;指数提取子单元,用于从浮点型数据中提取指数,并将第一原始数组和第二原始数组中相对应的数据的指数相加,得到乘积的指数;数据乘加运算模块进一步用于:基于所得到的各个乘积符号和的指数,对第一待计算数组和第二待计算数组分别包括的数据进行乘加运算,得到浮点型数据的乘加结果数据。
在一些实施例中,第一原始数组和第二原始数组分别包括的数据为定点型数据;属性数值提取单元包括:第二符号提取子单元,用于从定点型数据中提取符号位,并将第一原始数组和第二原始数组中相对应的数据的符号位进行异或运算,得到乘积的符号;数据乘加运算模块进一步用于:基于所得到的各个乘积的符号,对第一待计算数组和第二待计算数组分别包括的相对应的数据进行乘加运算,得到定点型数据的乘加结果数据。
在一些实施例中,数据乘加运算模块包括:运算控制单元,用于根据预设算法,生成运算控制信号;乘加运算单元,用于基于运算控制信号,利用第一待计算数组和第二待计算数组进行乘加运算,得到乘加结果数据。
在一些实施例中,乘加运算单元包括:数据前处理子单元,用于基于运算控制信号对第一待计算数组和第二待计算数组进行前处理,得到处理后数据;并行累加子单元,用于对处理后数据进行累加计算,得到乘加结果数据。
在一些实施例中,预设算法包括以下任一种:Booth算法、比特蒸馏算法;并行累加子单元包括累加器和以下任一项:与Booth算法对应的Wallace压缩树、与比特蒸馏算法相对应的加法树。
在一些实施例中,数据乘加运算电路还包括缓存模块,用于缓存数据格式转换模块输出的数据。
在一些实施例中,数据乘加运算电路还包括缓存模块,缓存模块包括:运算数值缓存单元,用于缓存运算数值提取单元提取的运算数值;属性数值缓存单元,用于缓存属性数值提取单元提取的属性数值。
根据本公开实施例的另一个方面,提供了一种芯片,该芯片包括上述数据乘加运算电路。
根据本公开实施例的另一个方面,提供了一种计算装置,该计算装置包括上述芯片。
本公开上述实施例提供的数据乘加运算电路,通过数据格式转换模块对输入的数据进行解释重构,将原始数据转换为与数据存储格式无关的数据,然后利用数据乘加运算模块对解释重构后的数据进行并行移位累加,得到乘加结果,实现了快速高效的数值乘加操作,最后按照指定的第二预设表示方式对乘加结果进行格式化,从而生成可以与电路外界进行数据交换的数据,实现了对任意数据存储格式的数据进行大规模乘加运算,采用批处理的数据解释重构,减少了冗余的数据存储格式处理,提高了数据乘加操作的效率。本申请实施例采用的数据乘加运算模块由于进行的是与格式无关的乘加运算,因此,可以兼容多种乘加算法,具有较强的可扩展性。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
具体实施方式
下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
申请概述
对于乘加运算单元的设计,目前主要有两种技术方案。一是使用多个简单整数乘加器构建大规模阵列,这种方案对数据位宽灵活性和数据量灵活性的支持较差,也不支持浮点数运算,在使用前需要在计算机上对数据提前进行量化等处理。二是使用通用浮点计算单元循环进行乘加运算,这种方案冗余处理较多,在数据量较大时效率低下。
示例性结构
图1是本公开一示例性实施例提供的数据乘加运算电路的结构示意图。该电路包含的各个组成部分可以集成到一个芯片中,也可以设置到不同的芯片或电路板中,这些芯片或电路板之间建立数据通信的链路。
如图1所示,该电路包括:数据格式转换模块101、数据乘加运算模块102、数据格式化模块103。数据格式转换模块101用于将输入的第一原始数组和第二原始数组分别包括的数据转换为第一预设表示方式的数据,得到第一待计算数组和第二待计算数组。其中,第一预设表示方式是与数据存储格式无关的表示方式。通常,数据类型多种多样,每种类型的数据具有相应的存储格式,例如,对于浮点型数据,其可以包括符号、指数、尾数部分等,第一待计算数组和第二待计算数组可以分别包括浮点型数据的尾数部分,从而使第一待计算数组和第二待计算数组的存储格式与浮点型数据无关。此时,第一预设表示方式可以是将符号、指数和尾数部分单独存储的表示方式,从而在乘加运算时不必对完整的浮点型数据进行浮点型运算。
在本实施例中,数据乘加运算模块102用于基于第一待计算数组和第二待计算数组包括的数据,进行针对第一原始数组和第二原始数组的乘加运算,得到乘加结果数据。数据乘加运算模块102可以包括现有的用于进行乘加运算的电路结构。
例如,第一原始数组和第二原始数组为浮点型数组时,数据乘加运算模块102可以对与存储格式无关的第一待计算数组和第二待计算数组进行乘加运算,并结合符号和指数,利用对浮点型数据进行乘加的规则,得到乘加结果数据。
在本实施例中,数据格式化模块103用于将乘加结果数据转换为第二预设表示方式的数据。其中,第二预设表示方式可以是与数据的格式相关的表示方式。当第一原始数组和第二原始数组为浮点型数组时,第二预设表示方式可以为浮点型数据的存储格式,即将与存储格式无关的乘加结果的存储格式还原为浮点型数据的存储格式。
本公开的上述实施例提供的电路,通过数据格式转换模块对输入的数据进行解释重构,将原始数据转换为与数据存储格式无关的数据,然后利用数据乘加运算模块对解释重构后的数据进行并行移位累加,得到乘加结果,实现了快速高效的数值乘加操作,最后按照指定的第二预设表示方式对乘加结果进行格式化,从而生成可以与电路外界进行数据交换的数据,实现了对任意数据存储格式的数据进行大规模乘加运算,采用批处理的数据解释重构,减少了冗余的数据存储格式处理,提高了数据乘加操作的效率。本申请实施例采用的数据乘加运算模块由于进行的是与格式无关的乘加运算,因此,可以兼容多种乘加算法,具有较强的可扩展性。
在一些可选的实现方式中,如图2所示,数据格式转换模块101包括运算数值提取单元1011和属性数值提取单元1012。
运算数值提取单元1011用于从第一原始数组和第二原始数组分别包括的数据中提取运算数值,得到第一待计算数组和第二待计算数组。其中,运算数值是从原始数据中提取的用于直接进行乘加运算的数值。例如,当第一原始数组和第二原始数组为浮点型数组时,运算数值可以是从数组中的原始数据中提取的补全的尾数。当数组中的原始数据是原码格式时,运算数值可以是数据的绝对值。当数组中的原始数据是补码格式时,运算数值可以是整个补码。提取出的运算数值组成的数组即为第一待计算数组和第二待计算数组。
属性数值提取单元1012用于从第一原始数组和第二原始数组分别包括的相对应的数据中提取属性数值,得到第一属性数组和第二属性数组,并对第一属性数组和第二属性数组进行格式相关运算,得到乘加结果属性数值。其中,属性数值可以是表示原始数据的属性的数值。例如,当原始数据为浮点型数据时,属性数值可以为符号和指数(或称阶码),当原始数据为原码格式时,属性数值为符号。乘加结果属性数值可以是进行乘加运算时表示中间运算结果及最终运算结果的属性的数值。例如相对应的两个数据的乘积的符号和/或指数。
需要说明的是,运算数值提取单元1011和属性数值提取单元1012的数量可以为至少一个,例如,运算数值提取单元1011的数量可以为两个,分别用于对第一原始数组和第二原始数组进行计算。
本实现方式通过设置运算数值提取单元和属性数值提取单元,可以实现将原始数据解析为运算数值和属性数值,从而在进行乘加运算时可以对运算数值进行通用方式的计算,利用属性数值对运算后的乘积进行格式的还原,从而有助于实现与存储格式无关的乘加运算,提高了乘加运算的准确性和效率。
在一些可选的实现方式中,数据乘加运算模块102进一步用于:
基于第一属性数组和所述第二属性数组,对第一待计算数组和第二待计算数组分别包括的数据进行乘加运算,得到与乘加结果属性数值表示的数据类型相应的乘加结果数据。具体地,在进行乘加运算时,可以根据不同类型的属性数值对第一待计算数组和第二待计算数组进行相应方式的运算,从而实现将通用方式计算的乘积准确地还原为原始数组的实际乘积,提高了乘积运算的灵活性,扩展了乘积运算的应用场景。
在一些可选的实现方式中,第一原始数组和第二原始数组分别包括的数据为浮点型数据。
如图2所示,属性数值提取单元1012包括:
指数提取子单元10121,用于从浮点型数据中提取指数,并将第一原始数组和第二原始数组中相对应的数据的指数相加,得到乘积的指数。例如,第一原始数组A和第二原始数组B中相对应的数据为A1和B1,可以将A1的指数与B1的指数相加,得到的和e1即为A1与B1的乘积的指数。
第一符号提取子单元10122,用于从所述浮点型数据中提取符号位,并将所述第一原始数组和所述第二原始数组中相对应的数据的符号位进行异或运算,得到乘积的符号。继续上述示例,A1和B1的积的符号位s1的值即为A1的符号位和B1的符号位的异或运算结果。
基于上述指数提取子单元10121和第一符号提取子单元10122,数据乘加运算模块102进一步用于:
基于所得到的各个乘积的符号和指数,对第一待计算数组和第二待计算数组分别包括的数据进行乘加运算,得到浮点型数据的乘加结果数据。例如,第一原始数组和第二原始数组中相对应的数据为A1和B1,在第一待计算数组和第二待计算数组中与该两个数据分别对应的数据为a1和b1,则可以利用通用的乘法器计算a1与b1的积c1,基于c1和上述e1、s1,可以得到A1和B1的乘积和符号,再利用累加器对得到的各个带符号的乘积进行累加计算,得到浮点型的乘加结果数据。
本实现方式实现了在第一原始数组和第二原始数组为浮点型数组时,对提取的指数、符号和运算数值分别进行相应的运算,再利用运算的结果得到针对浮点型数据的乘加结果数据,从而无需利用现有的通用浮点计算单元循环进行乘加运算,只需利用运算数值进行通用方式的乘法运算和累加运算,减少了冗余数据的处理,提高了对浮点型数据进行乘加运算的效率。
在一些可选的实现方式中,第一原始数组和第二原始数组分别包括的数据为定点型数据。
如图2所示,属性数值提取单元1012包括:
第二符号提取子单元10123,用于从定点型数据中提取符号位,并将第一原始数组和第二原始数组中相对应的数据的符号位进行异或运算,得到乘积的符号。作为示例,第一原始数组A和第二原始数组B中相对应的数据为A1和B1,A1和B1的积的符号位s1的值即为A1的符号位和B1的符号位的异或运算结果。
数据乘加运算模块102进一步用于:
基于所得到的各个乘积的符号,对第一待计算数组和第二待计算数组分别包括的相对应的数据进行乘加运算,得到定点型数据的乘加结果数据。
例如,第一原始数组A和第二原始数组B中相对应的数据为定点型数据A1和B1,在第一待计算数组和第二待计算数组中与该两个数据分别对应的数据为a1和b1,则可以利用通用的乘法器计算a1与b1的积c1,基于c1和上述s1,可以得到A1和B1的乘积和符号,再利用累加器对得到的各个带符号的乘积进行累加计算,得到定点型数据的乘加结果数据。
需要说明的是,第一符号提取子单元10122和第二符号提取子单元10123可以是两个单独的单元,在可以被应用于不同类型的数据时,第一符号提取子单元10122和第二符号提取子单元10123也可以是同一个单元。
本实现方式实现了在第一原始数组和第二原始数组为定点型数组时,对提取的符号和运算数值分别进行相应的运算,再利用运算的结果得到针对定点型数据的乘加结果数据,从而只需利用运算数值进行通用方式的乘法运算和累加运算,无需针对不同的数据类型设置不同的硬件架构,提高了数据乘加运算电路的通用性。
在一些可选的实现方式中,如图2所示,数据乘加运算模块102包括:
运算控制单元1021,用于根据预设算法,生成运算控制信号。可选的,预设算法可以包括但不限于以下任一种:Booth算法、比特蒸馏算法。运算控制信号可以是基于预设算法进行乘加运算时所需的控制信号。需要说明的是,图2中的带箭头实线为数据的流向,带箭头虚线为控制信号流向。可选的,如图2所示,运算控制单元1021还可以生成用于控制数据格式化模块103的控制信号。
乘加运算单元1022,用于基于运算控制信号,利用第一待计算数组和第二待计算数组进行乘加运算,得到乘加结果数据。乘加运算单元1022可以根据不同的预设算法设置相应的硬件架构。例如乘加运算单元可以包括乘法器和累加器,乘法器可以支持不同的算法。
本实现方式通过设置运算控制单元和乘加运算单元,实现了针对不同的预设算法控制乘加运算单元进行不同方式的乘加运算,因此,可以兼容多种乘加算法,具有较强的可扩展性,有助于提高乘加运算的通用性和运算效率。
在一些可选的实现方式中,如图2所示,乘加运算单元1022包括:
数据前处理子单元10221,用于基于运算控制信号对第一待计算数组和第二待计算数组进行前处理,得到处理后数据。可选的,预设算法可以包括但不限于以下任一种:Booth算法、比特蒸馏算法。
作为示例,当预设算法为Booth算法时,运算控制单元1021可以针对第一待计算数组和第二待计算数组包括的数据生成Booth编码,数据前处理子单元10221根据运算控制单元1021生成的Booth编码对运算时的操作数进行相应的移位、取反、置零等操作。当预设算法为比特蒸馏算法时,运算控制单元1021可以根据比特蒸馏算法生成地址,数据前处理子单元10221根据运算控制单元1021生成的地址选取操作数。
并行累加子单元10222,用于对处理后数据进行累加计算,得到乘加结果数据。
可选的,并行累加子单元10222包括但不限于累加器和以下任一项:与Booth算法对应的Wallace压缩树、与比特蒸馏算法相对应的加法树。即,当预设算法为Booth算法时,并行累加子单元10222包括Wallace压缩树,Booth算法与Wallace压缩树和累加器相结合,实现了高效地进行乘加运算。当预设算法为比特蒸馏算法时,并行累加子单元10222包括加法树,比特蒸馏算法与累加器和加法树相结合,同样实现了高效地进行乘加运算。
上述实现方式通过设置数据前处理子单元10221和并行累加子单元10222,实现了在硬件上使乘加运算单元1022支持现有的各种乘加运算方式,提高了乘加运算的通用性和灵活性。
在一些可选的实现方式中,如图2所示,数据乘加运算电路还包括缓存模块104,用于缓存数据格式转换模块输出的数据。通过设置缓存模块,可以实现在大数据量运算的情况下,通过缓存暂时存储数据格式转换模块输出的数据,有助于实现乘加运算的有序执行,提高乘加运算的效率,降低乘加运算发生错误的概率。
在一些可选的实现方式中,如图2所示,为了支持上述可选实现方式中的运算数值提取单元1011和属性数值提取单元1012,缓存模块104可以包括:
运算数值缓存单元1041,用于缓存运算数值提取单元提取的运算数值。
属性数值缓存单元1042,用于缓存属性数值提取单元提取的属性数值。
可选的,与上述指数提取子单元和第一符号提取子单元、第二符号提取子单元相对应,属性数值缓存单元1042可以进一步划分为指数缓存子单元和符号缓存子单元。
通过设置运算数值缓存单元1041和属性数值缓存单元1042,可以实现有针对性地对从原始数据中提取的各种数据进行分类别地缓存,从而在进行乘加运算时,只需从特定的缓存单元中提取相应类型的数据,进一步提高了在大数据量运算时的运算效率。
本公开的实施例还提供了一种芯片,芯片上集成了数据乘加运算电路,数据乘加运算电路的技术细节如图1、图2和相关描述所示,此处不再展开描述。
本公开的实施例还提供了一种计算装置,该计算装置包括上述实施例描述的芯片。此外,该计算装置还可以包括输入装置、输出装置以及必要的存储器等。其中,输入装置可以包括诸如鼠标、键盘、触控屏、通信网络连接器等,用于输入原始数组。输出装置可以包括诸如显示器、打印机、以及通信网络及其所连接的远程输出设备等等,用于输出上述实施例描述的第二预设表示方式的数据。存储器用于存储上述输入装置输入的数据,以及数据乘加运算电路运行过程中产生的数据。存储器可以包括易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。
本公开中涉及的器件、装置、设备、***的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、***。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的电路。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的电路。用于电路中的方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的电路的功能的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的电路的功能的程序的记录介质。
还需要指出的是,在本公开的电路中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。