CN112711738A - 用于向量内积的计算装置、方法和集成电路芯片 - Google Patents

用于向量内积的计算装置、方法和集成电路芯片 Download PDF

Info

Publication number
CN112711738A
CN112711738A CN201911022958.XA CN201911022958A CN112711738A CN 112711738 A CN112711738 A CN 112711738A CN 201911022958 A CN201911022958 A CN 201911022958A CN 112711738 A CN112711738 A CN 112711738A
Authority
CN
China
Prior art keywords
result
computing device
mantissa
floating
vector
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
Application number
CN201911022958.XA
Other languages
English (en)
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anhui Cambricon Information Technology Co Ltd
Original Assignee
Anhui Cambricon Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Anhui Cambricon Information Technology Co Ltd filed Critical Anhui Cambricon Information Technology Co Ltd
Priority to CN201911022958.XA priority Critical patent/CN112711738A/zh
Priority to PCT/CN2020/122951 priority patent/WO2021078212A1/zh
Priority to US17/619,795 priority patent/US20220366006A1/en
Publication of CN112711738A publication Critical patent/CN112711738A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5318Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with column wise addition of partial products, e.g. using Wallace tree, Dadda counters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)

Abstract

本发明涉及一种用于向量内积的计算装置、方法和集成电路芯片,其中该计算装置可以包括在组合处理装置中,该组合处理装置还可以包括通用互联接口和其他处理装置。所述计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于该计算装置和其他处理装置的数据存储。

Description

用于向量内积的计算装置、方法和集成电路芯片
技术领域
本披露一般地涉及浮点数向量内积运算领域。更具体地,本披露涉及用于浮点数向量内积运算的计算装置、方法、集成电路芯片和集成电路装置。
背景技术
向量内积运算在计算机领域的应用十分普遍。以目前的热门应用领域人工智能中的主流算法机器学习算法为例,常见算法都使用了大量的向量内积运算。这类运算涉及到大量的乘加操作,而这些乘加装置或方法的安排直接影响了演算的速度。尽管现有的技术在执行效率方面获得了显著的提高,但在处理浮点数的内积上,还存在提升的空间。因此,如何获得一种高效率和低成本的模块来执行浮点数向量内积成为现有技术中需要解决的问题。
发明内容
为了至少部分地解决背景技术中提到的技术问题,本披露的方案提供了一种用于进行浮点数向量内积的方法、集成电路芯片和装置。
在一个方面中,本披露提供一种用于执行向量内积运算的计算装置,包括乘法单元及加法模块。乘法单元包括一个或多个浮点乘法器,该浮点乘法器配置用于对接收到的第一向量和第二向量执行对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果,其中所述第一向量和第二向量各自包括一个或多个所述向量元素。加法模块配置用于对所述第一向量和第二向量的对应向量元素的乘积结果执行加法操作,以获得求和结果。
前述的计算装置进一步包括更新模块,其配置用于响应于所述求和结果是所述内积运算的中间结果,执行针对产生的多个所述中间结果的多次加法操作,以输出所述内积运算的最终结果。
前述更新模块包括第二加法器和寄存器,所述第二加法器配置用于重复地执行以下操作,直至完成对全部所述多个中间结果的加法操作:接收来自于所述加法模块的中间结果和来自于所述寄存器的、前次加法操作的前次求和结果;将所述中间结果和所述前次求和结果进行相加,以获得本次加法操作的求和结果;以及利用本次加法操作的结果来更新所述寄存器中存储的前次求和结果。
在另一方面中,本披露提供一种使用前述计算装置来执行向量内积运算的方法,步骤包括:利用所述浮点乘法器来执行针对所述第一向量和第二向量对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果;以及对所述第一向量和第二向量的所述对应向量元素的乘积结果执行加法操作,以获得求和结果。
在又一方面中,本披露提供一种集成电路芯片或集成电路装置,包括前述的计算装置。在一个或多个实施例中,本披露的计算装置可以构成一个独立的集成电路芯片或布置在一块集成电路芯片、装置或板卡上,实现对多种不同数据格式的浮点数向量内积运算。
利用本披露的计算装置、相应的运算方法、集成电路芯片和集成电路装置,可以更有效率地执行浮点数向量内积运算而无需扩充过多的硬件,由此也减小了集成电路的布置面积。
附图说明
通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1是示出根据本披露实施例的浮点数据格式的示意图;
图2是示出根据本披露实施例的计算装置的示意性结构框图;
图3是示出根据本披露实施例的浮点乘法器的示意性结构框图;
图4是示出根据本披露实施例的浮点乘法器更多细节的示意性结构框图;
图5是示出根据本披露实施例的部分积运算单元和部分积求和单元的示意性框图;
图6是示出根据本披露实施例的部分积操作的示意图;
图7是示出根据本披露实施例的华莱士树压缩器的操作流程和示意框图;
图8是示出根据本披露实施例的浮点乘法器的整体示意框图;
图9是示出根据本披露实施例的使用浮点乘法器执行浮点数乘法运算的方法的流程图;
图10是示出根据本披露另一实施例的计算装置的示意性结构框图;
图11是示出根据本披露实施例的加法模块的示意性结构框图;
图12是示出根据本披露另一实施例的加法模块的示意性结构框图;
图13是示出根据本披露实施例的更新模块的运行流程图;
图14是示出根据本披露实施例的计算装置进行向量内积运算时的流程图;
图15是示出根据本披露实施例的组合处理装置的示意性结构框图;以及
图16是示出根据本披露实施例的板卡的示意性结构框图。
具体实施方式
本披露的技术方案在整体上提供一种用于浮点数向量内积运算的方法、集成电路芯片和装置。不同于现有技术的向量内积方式,本披露提供了一种高效的计算方案,能有效缩小硬件面积,并且有效地支持不同宽度的数据,适用更多向量内积计算的使用场景。
本披露所指的向量,可以是一维的向量数据,也可以是高维数据存储格式中的其中一维数据,例如是矩阵的其中一行或一列、多维张量的其中一维数据,也可以是呈向量形式的标量数据。
下面将结合附图对本披露的技术方案及其多个实施例进行详细的描述。应当理解的是,将关于向量内积阐述许多具体细节以便提供对本披露所述多个实施例的透彻理解。然而,本领域普通技术人员在本披露公开内容的教导下,可以在没有这些具体细节的情况下实践本披露描述的多个实施例。在其他情况下,本披露公开的内容并没有详细描述公知的方法、过程和组件,以避免不必要地模糊本披露描述的实施例。另外,该描述也不应被视为限制本披露的多个实施例的范围。
图1是示出根据本披露实施例的浮点数据格式100的示意图。如图1中所示,可以应用本披露技术方案的浮点数可以包括三个部分,例如符号(或符号位)102、指数(或指数位)104和尾数(或尾数位)106,其中对于无符号的浮点数则可以不存在符号或符号位102。在一些实施例中,适用于本披露计算装置的浮点数可以包括半精度浮点数、单精度浮点数、脑浮点数、双精度浮点数、自定义浮点数中的至少一种。具体来说,在一些实施例中,可以应用本披露技术方案的浮点数格式可以是符合IEEE754标准的浮点格式,例如双精度浮点数(float64,简写为“FP64”)、单精度浮点数(float32,简写“FP32”)或半精度浮点数(float16,简写“FP16”)。在另外一些实施例中,浮点数格式也可以是现有的16位脑浮点数(bfloat16,简写“BF16”),也可以是自定义的浮点数格式,例如8位脑浮点数(bfloat8,简写“BF8”)、无符号半精度浮点数(unsigned float16,简写“UFP16”)、无符号16位脑浮点数(unsigned bfloat16,简写“UBF16”)。为了便于理解,下面的表1示出上述的部分数据格式,其中的符号位宽、指数位宽和尾数位宽仅用于示例性的说明目的。
表1
数据类型 符号位宽 指数位宽 尾数位宽
FP16 1 5 10
BF16 1 8 7
FP32 1 8 23
BF8 1 5 3
UFP16 0 5(或6) 11(或10)
UBF16 0 8 8
对于上面所提到的各种浮点数格式,本披露的计算装置在操作中至少可以支持具有任意上述格式的两个浮点数之间的相乘操作,其中两个浮点数可以具有相同或不同的浮点数据格式。例如,两个浮点数之间的相乘操作可以是FP16*FP16、BF16*BF16、FP32*FP32、FP32*BF16、FP16*BF16、FP32*FP16、BF8*BF16、UBF16*UFP16或UBF16*FP16等两个浮点数之间的相乘操作。
图2示出根据本披露实施例的计算装置200的示意结构框图。如图2中所示,计算装置200包括乘法单元202和加法模块204。在一个实施例中,乘法单元202可以包括多个浮点乘法器206,用于对接收到的浮点数第一向量208和第二向量210执行对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果212。在本实施例中,浮点乘法器206的数量可以依实际情况安排,而图2所示出的3个浮点乘法器206仅用于示例性的而非限制性的目的。在本实施例中,第一向量208和第二向量210可以是两个k*n形式的向量,其中k是最小位宽的数据类型的整数倍,例如可以为16或32,n则是输入数据的个数,为正整数。以k为32及n为16为例,输入数据位宽为512位宽。基于此,第一向量208和第二向量210可以是一组含有16个FP32数据元素的数据向量、一组含有32个FP16数据元素的数据向量、或是一组32个BF16数据元素的数据向量。在其他的实施例中,第一向量208和第二向量210的输入位宽可以不相同,例如第一向量208的输入位宽为1024位宽,如32个FP32,而第二向量210可以是512位宽,如32个FP16。第一向量208的个数和位宽与第二向量210的个数和位宽并没有直接必然的对应,相互不影响。
加法模块204可以接收由乘法单元202输出的乘积结果212,执行加法操作,以获得内积结果216,完成内积操作。加法模块204可以是多个加法器形成的加法器组,该加法器组可以形成树状的结构。例如,加法器包括以多级树状结构方式排列的多级加法器组,每级加法器组包括一个或多个第一加法器218。第一加法器218例如可以是浮点加法器。根据不同的应用场景和实施方式,第一加法器218可以通过全加器、半加器、波纹进位加法器或超前进位加法器来实现。另外,由于本披露的浮点乘法器206是支持多模式运算的乘法器,因此本披露的第一加法器218中的加法器也可以是支持多种加法运算模式的加法器。例如,当浮点乘法器206的输出是半精度浮点数、单精度浮点数、脑浮点数、双精度浮点数、自定义浮点数中的一种数据格式时,第一加法器218也可以是支持上述任意一种数据格式的浮点数的浮点加法器。
在本实施例中,乘法单元202的浮点乘法器206可以有多种运算模式,以便对第一向量208中包括的多个向量元素和第二向量210中包括的对应多个向量元素执行多模式的乘法运算。图3是示出根据本披露实施例的浮点乘法器206的示意性结构框图。如前所述,本披露的浮点乘法器206支持各种数据格式的浮点数向量的相乘操作,而这些数据格式可以通过本披露的运算模式来指示,以使得浮点乘法器206工作在多种运算模式之一。
如图3中所示,本披露的浮点乘法器206总体上可以包括指数处理单元302和尾数处理单元304,其中指数处理单元302用于处理浮点数的指数位,而尾数处理单元304用于处理浮点数的尾数位。可选地或附加地,在一些实施例中,当浮点乘法器206处理的浮点数具有符号位时,还可以包括符号处理单元306,该符号处理单元306可以用于处理包括符号位的浮点数。
在操作中,浮点乘法器206可以根据运算模式之一对接收、输入或缓存的第一向量208和第二向量210执行向量内积,该第一向量208和第二向量210的对应向量元素具有如前所讨论的浮点数据格式之一。例如,当浮点乘法器206处于第一运算模式中,其可以支持两个浮点数FP16*FP16的乘法运算,而当浮点乘法器206处于第二运算模式中,其可以支持两个浮点数BF16*BF16的乘法运算。类似地,当浮点乘法器206处于第三运算模式中,其可以支持两个浮点数FP32*FP32的乘法运算,而当浮点乘法器206处于第四运算模式中,其可以支持两个浮点数FP32*BF16的乘法运算。这里,示例的运算模式和浮点数对应关系如下表2所示。
表2
Figure BDA0002247807720000061
在一个实施例中,上述的表2可以存储于浮点乘法器206的一个存储器中,并且浮点乘法器206根据从外部设备接收到的指令来选择表中的运算模式之一,而该外部设备例如可以是图16中示出的外部设备1612。在另一个实施例中,该运算模式的输入也可以经由如图4中所示的模式选择单元418来自动地实现。例如,当两个FP16型的浮点数向量输入到本披露的浮点乘法器206时,模式选择单元418可以根据该两个浮点数的数据格式而选择浮点乘法器206工作于第一运算模式中。又例如,当一个FP32型浮点数和一个BF16型浮点数输入到本披露的浮点乘法器206时,模式选择单元418可以根据该两个浮点数的数据格式而选择浮点乘法器206工作于第四运算模式中。
可以看出,本披露的不同运算模式与对应的浮点型数据相关联。也就是说,本披露的运算模式可以用于指示第一向量208的向量元素的数据格式和第二向量210的对应向量元素的数据格式。在另一个实施例中,本披露的运算模式不仅可以指示第一向量208和第二向量210的对应向量元素的数据格式,还可以用于指示乘法运算后的数据格式。结合表2扩展的运算模式在下表3中示出。
表3
Figure BDA0002247807720000071
与表2中所示的运算模式编号不同,表3中的运算模式扩展一位以用于指示浮点数向量乘法运算后的数据格式。例如,当浮点乘法器206工作于运算模式21中,其对输入的BF16*BF16两个浮点数执行向量内积,并且将浮点乘法运算后以FP16的数据格式输出。
上面以编号形式的运算模式来指示浮点数据格式仅仅是示例性的而非限制性的,根据本披露的教导,也可以想到根据运算模式建立索引以确定乘数和被乘数的格式。例如,运算模式包括两个索引,第一个索引用于指示第一向量208的向量元素的类型,第二个索引用于指示第二向量210的向量元素的类型,例如运算模式13中的第一索引“1”指示第一向量208的向量元素(或称被乘数)为第一浮点格式,即FP16,而第二索引“3”指示第二向量210的向量元素(或称乘数)为第二浮点格式,即FP32。进一步,也可以对运算模式增加第三索引,该第三索引指示输出结果的数据格式,例如对于运算模式131中的第三索引“1”,其可以指示输出结果的数据格式是第一浮点格式,即FP16。当运算模式数目增加时,可以根据需要增加相应的索引或索引的层级,以便于对运算模式和数据格式之间关系的确立。
另外,尽管这里示例性地以数字编号来指代运算模式,在其他的例子中,也可以根据应用需要以其他的符号或编码来对运算模式进行指代,例如通过字母、符号或数字及其结合等等,并且通过这样的字母、数字、符号或其组合的表达来指代运算模式并标识出第一向量208的向量元素、第二向量210的向量元素和输出结果的数据格式。另外,当这些表达以指令形式形成时,该指令可以包括三个域或字段,第一域用于指示第一向量208的向量元素的数据格式,第二域用于指示第二向量210的向量元素的数据格式,而第三域用于指示输出结果的数据格式。当然,这些域也可以被合并于一个域,或增加新的域以用于指示更多的与浮点数据格式相关的内容。可以看出,本披露的运算模式不仅可以与输入的浮点数数据格式相关联,也可以用于规格化输出结果,以获得期望数据格式的乘积结果。
图4是示出根据本披露实施例的浮点乘法器206的更多细节结构框图。从图4所示内容可以看出,其不仅包括图3中所示出的指数处理单元302、尾数处理单元304和可选的符号处理单元306,还示出这些单元可以包括的内部组件以及与这些单元操作相关的单元,下面结合图4来具体描述这些单元的示例性操作。
为了执行浮点数向量的乘法运算,指数处理单元302可以用于根据前述的运算模式、第一向量208的向量元素的指数和第二向量210的对应向量元素的指数获得乘法运算后的指数。在一个实施例中,该指数处理单元302可以通过加减法电路来实现。例如,此处的指数处理单元302可以用于将第一向量208的向量元素的指数、第二向量210的对应向量元素的指数和各自对应的输入浮点数据格式的偏移值相加,并且接着减去输出浮点数据格式的偏移值,以获得第一向量208的向量元素和第二向量210的向量元素的乘法运算后的指数。
进一步,浮点乘法器206的尾数处理单元304可以用于根据前述的运算模式、第一向量208的向量元素和所述第二向量210的对应向量元素来获得乘法运算后的尾数。在一个实施例中,尾数处理单元304可以包括部分积运算单元402和部分积求和单元404,其中所述部分积运算单元402用于根据第一向量208的向量元素的尾数和第二向量210的对应向量元素的尾数获得中间结果。在一些实施例中,该中间结果可以是第一向量208的向量元素和第二向量210的对应向量元素在相乘操作过程中所获得的多个部分积(如图6和图7中所示意性示出的)。所述部分积求和单元404用于将所述中间结果进行加和运算以获得加和结果,并将所述加和结果作为所述乘法运算后的尾数。
为了获得中间结果,在一个实施例中,本披露利用布斯(“Booth”)编码电路对第二向量210的对应向量元素(如充当浮点运算中的乘数)的尾数的高低位补0(其中对高位补0是将尾数作为无符号数转为有符号数),以便获得所述中间结果。需要理解的是,根据编码方法的不同,也可以对第一向量208的向量元素(如充当浮点运算中的被乘数)的尾数进行编码(如高低位补0),或者对二者都进行编码,以获得多个部分积。关于部分积的更多描述,稍后将结合附图来说明。
在另一个实施例中,部分积求和单元404可以包括加法器,其用于对所述中间结果进行加和,以获得所述加和结果。在又一个实施例中,部分积求和单元404包括华莱士树和加法器,其中所述华莱士树用于对所述中间结果进行加和,以获得第二中间结果,所述加法器用于对所述第二中间结果进行加和,以获得所述加和结果。在这些实施例中,加法器可以包括全加器、串行加法器和超前进位加法器中的至少一种。
在一个实施例中,所述尾数处理单元还可以包括控制电路406,用于在运算模块指示所述第一向量208的向量元素或第二向量210的对应向量元素中的至少一个的尾数位宽大于尾数处理单元304一次可处理的数据位宽时,根据所述运算模式多次调用所述尾数处理单元304。该控制电路406在一个实施例中可以实现为控制信号,例如可以是一个计数器或者控制的标志位等。为了实现这里的多次调用,所述的部分积求和单元404还可以包括移位器,当所述控制电路406根据所述运算模式多次调用所述尾数处理单元304时,移位器在每次调用中用于对已有加和结果进行移位,并与当次调用获得的求和结果进行相加,以获得新的加和结果,并且将在最后一次调用中获得的新的加和结果作为所述乘法运算后的尾数。
在一个实施例中,本披露的浮点乘法器206还包括规则化单元408和舍入单元410。该规则化单元408可以用于对乘法运算后的尾数和指数进行浮点数规则化处理,以获得规则化指数结果和规则化尾数结果,并且将所述规则化指数结果和所述规则化尾数结果作为所述乘法运算后的指数和乘法运算后的尾数。例如,根据运算模块所指示的数据格式,规则化单元408可以调整指数和尾数的位宽,以使其符合前述指示的数据格式的要求。另外,规则化单元408还可以对指数或尾数做其他方面的调整。例如,在一些应用场景中,当尾数的值不为0时,尾数位的最高有效位应为1;否则,可以修改指数位并同时对尾数位进行移位,使其变为规格化数的形式。在另一个实施例中,该规则化单元408还可以根据乘法运算后的尾数对所述乘法运算后的指数进行调整。例如,当乘法运算后的尾数的最高位为1时,可以将乘法运算后所获得的指数加1。与之相应,舍入单元410可以用于根据舍入模式对所述规则化尾数结果执行舍入操作,并将执行了舍入操作后的尾数作为所述乘法运算后的尾数。根据不同的应用场景,该舍入单元410可以执行例如包括向下舍入、向上舍入、向最近的有效数舍入等的舍入操作。在一些应用场景中,舍入单元410也可以对尾数右移过程中移出的1进行舍入。
除了指数处理单元302和尾数处理单元304,本披露的浮点乘法器206还可选地包括符号处理单元306,当输入的向量是带有符号位的浮点数时,该符号处理单元306可以用于根据第一向量208的向量元素的符号和第二向量210的对应向量元素的符号获得乘法运算后的符号。例如,在一个实施例中,该符号处理单元306可以包括异或逻辑电路412,所述异或逻辑电路412用于根据所述第一向量208的向量元素的符号和所述第二向量210的对应向量元素的符号进行异或运算,获得所述乘法运算后的符号。在另一个实施例中,该符号处理单元306也可以通过真值表或逻辑判断来实现。
另外,为了使输入或接收到的第一和第二向量的向量元素符合规定的格式,在一个实施例中,本披露的浮点乘法器206还可以包括规格化处理单元414,用于当例如所述第一向量208的向量元素或第二向量210的向量元素为非规格化的非零浮点数时,根据所述运算模式,对所述第一向量208的向量元素或第二向量210的向量元素进行规格化处理,以获得对应的指数和尾数。例如,当选择的运算模式是表2中所示出的第2种运算模式,而输入的第一和第二向量208、210的向量元素是FP16型数据,则可以利用规格化处理单元414将FP16型数据规格化为BF16型数据,以便浮点乘法器206以第2种运算模式进行操作。在一个或多个实施例中,规格化处理单元414还可以用于对存在隐式的1的规格化浮点数和不存在隐式的1的非规格化浮点数的尾数进行预处理(例如尾数的扩充),以便于后续的尾数处理单元304的操作。基于上文的描述,可以理解的是这里的规格化处理单元414和前述的规则化单元408在一些实施例中也可以执行相同或相类似的操作,不同的是规格化处理单元414针对于输入的浮点数据进行规格化处理,而规则化单元408针对于将要输出的尾数和指数进行规格化处理。
以上结合图4对本披露的浮点乘法器206及其多个实施例进行了描述。基于上面的描述,本领域技术人员可以理解本披露的方案通过浮点乘法器206的执行来获得乘法运算后的结果(包括指数、尾数和可选的符号)。根据应用场景的不同,例如在不需要前述的规则化处理和舍入处理时,通过尾数处理单元304和指数处理单元302所获得的结果即可以视为最终的运算结果212。进一步,对于需要前述的规则化处理和舍入处理时,则经过该规则化处理和舍入处理后所获得的指数和尾数可以视为最终的运算结果212,或最终的运算结果的一部分(当考虑最终的符号时)。进一步,本披露的方案通过多种运算模式来使得浮点乘法器206支持不同类型或数据格式的浮点数的运算,从而可以实现浮点乘法器206的复用,由此节省了芯片设计的开销并节约了计算成本。另外,通过多次调用机制,本披露的计算装置也支持高位宽的浮点数的计算。鉴于在浮点数乘法操作中,尾数(或称尾数位或尾数部分)的相乘操作对于整个向量内积的性能至关重要,下面将结合图5来描述本披露的尾数操作。
图5是示出根据本披露实施例的尾数处理单元操作500的示意性框图。如图5中所示,本披露的尾数处理操作500可以主要涉及两个单元,即前述结合如图4所讨论的部分积运算单元402和部分积求和单元404。从操作时序上来看,该尾数处理操作500大体可以分为第一阶段和第二阶段,在第一阶段中该尾数处理操作500将获得中间结果,而在第二阶段中该尾数处理操作500将获得从加法器508输出的尾数结果。
在示例性的具体操作中,由浮点乘法器206接收到的第一向量208的向量元素和第二向量210的对应向量元素可以被划分成多个部分,即前述的符号(可选的)、指数和尾数。可选地,在经过规格化处理后,两个浮点数的尾数部分将作为输入进入到尾数处理单元(如图3或图4中的尾数处理单元304),并且具体地进入到部分积运算单元402。如图5中所示,本披露利用布斯编码电路502对第二向量210的对应向量元素(即浮点运算中的乘数)的尾数的高低位补0,并进行布斯编码处理,从而在部分积产生电路504中获得所述中间结果。当然,在一些应用场景中,第一向量208的向量元素可以是乘数而第二向量210的对应向量元素可以是被乘数。相应地,在一些编码处理中,也可以对充当被乘数的浮点数执行编码操作。
为了更好的理解本披露的技术方案,下面对布斯编码进行简要地介绍。一般地,当两个二进制数进行相乘操作时,通过乘法操作会产生大量的称之为部分积的中间结果,然后在对这些部分积进行累加操作进而得到两个二进制数相乘的最终结果。其中部分积数量越多,阵列浮点乘法器206的面积和功耗就会越大,执行速度就会越慢,其实现电路也就越困难。而布斯编码的目的就是为了有效地减少部分积的求和项的数量,从而减小电路面积。其算法在于首先对输入的乘数进行相应规则的编码,在一个实施例中,编码规则例如可以是下表4所示的规则:
表4
Figure BDA0002247807720000121
Figure BDA0002247807720000131
其中表4中的y2i+1,y2i和y2i-1可以表示每一组待编码子数据(即乘数)对应的数值,X可以表示第一向量208的向量元素(即被乘数)中的尾数。对每一组对应的待编码数据进行布斯编码处理后,得到对应的编码信号PPi(i=0,1,2,...,n)。如表4中所示意性示出的,布斯编码后得到的编码信号可以包括五类,分别为-2X、2X、-X、X和0。示例性地,基于上述的编码规则,若接收到的被乘数为8位数据“X7X6X5X4X3X2X1X0”,则可以获得下述的部分积:
1)当乘数位中包括上表中的连续三位数据“001”时,部分积为X,可以表示为“X7X6X5X4X3X2X1X0”,第9位是符号位,即PPi={X[7],X};
2)当乘数位中包括上表中的连续三位数据“011”时,部分积为2X,可以表示为X左移一位,得到“X7X6X5X4X3X2X1X00”,即PPi={X,0};
3)当乘数位中包括上表中的连续三位数据“101”时,部分积为-X,可以表示为
Figure BDA0002247807720000132
表示对“X7X6X5X4X3X2X1X0”按位取反再加1,即PPi=~{X[7],X}+1;
4)当乘数位中包括上表中的连续三位数据“100”时,部分积为-2X,可以表示为
Figure BDA0002247807720000133
表示对“X7X6X5X4X3X2X1X0”左移一位后取反再加1,即PPi=~{X,0}+1;
5)当乘数位中包括上表中的连续三位数据“111”或“000”时,部分积为0,即PPi={9′b0}。
应当理解的是上面结合表4对获得部分积的过程的描述仅仅是示例性的而非限制性的,本领域技术人员在本披露的教导下,可以对表4中的规则进行改变,以获得不同于表4所示出的部分积。例如,在乘数位中存在连续多位(例如3位或3位以上)的特定数时,得到的部分积可以是被乘数的补码,或者例如在对部分积进行加和之后再执行上述3)和4)项中的“加1”操作。
根据上述介绍性描述可以理解,通过对第二向量210的对应向量元素的尾数利用布斯编码电路502进行编码,并且利用第一向量208的向量元素的尾数,可以从部分积产生电路504产生多个部分积作为中间结果,并且将中间结果输送入到部分积求和单元404中的华莱士树(“Wallace Tree”)压缩器506。应当理解的是,此处利用布斯编码获得部分积仅是本披露得到部分积的一种优选方式,而本领域技术人员也可以通过其他的方式来获得该部分积。例如,还可以通过移位操作来获得,即根据乘数的位值为1还是0来选择移位加被乘数还是加0而获得相应的部分积。类似地,利用华莱士树压缩器506以实现部分积的加法操作也仅仅是示例性的而非限制性的,本领域技术人员也可以想到利用其他类型的加法器来实现这样的部分积相加操作,该加法器例如可以是一个或多个全加器、半加器或二者的各种组合形式。
关于华莱士树压缩器506(或简称为华莱士树),其主要用于对上述的中间结果(即多个部分积)进行求和,以减少部分积的累加次数(即,压缩)。通常,华莱士树压缩器506可以采用进位保存CAS(carry-save)架构和Wallace树算法,其利用华莱士树阵列的计算速度比传统进位传递的加法快得多。
具体地,华莱士树压缩器506能并行计算各行部分积之和,例如可以将N个部分积的累加次数从N-1次减少到Log2N次,从而提高了浮点乘法器206的速度,对资源的有效利用具有重要意义。根据不同的应用需要,可以将华莱士树压缩器506设计成多种类型,例如7-2华莱士树、4-2华莱士树以及3-2华莱士树等。在一个或多个实施例中,本披露使用7-2华莱士树作为实现本披露的各种向量内积的示例,稍后将结合图6和图7对其进行详细的描述。
在一些实施例中,本披露所公开的华莱士树压缩操作可以布置为具有M个输入,N个输出,其数目可以不小于K,其中N为预设的小于M的正整数,K为不小于中间结果的最大位宽的正整数。例如,M可以是7,N可以是2,即下文将详细描述的7-2华莱士树。当中间结果的最大位宽是48时,K可以取正整数48,也就是说华莱士树的数目可以是48个。
在一些实施例中,根据运算模式,可以选用一组或多组所述华莱士树对所述中间结果进行加和,其中每组有X个华莱士树,X为所述中间结果的位数。进一步,各组内的华莱士树之间可以存在依次进位的关系,而各组间并不存在进位的关系。在示例性的连接中,华莱士树压缩器506可以通过进位进行连接,例如来自于低位华莱士树压缩器506的进位输出(如图7中Cin)至高位华莱士树,而高位华莱士树压缩器506的进位输出(Cout)又可以成为更高位华莱士树压缩器506接收来自低位华莱士树压缩器506的进位输入。另外,当从多个华莱士树压缩器506中选择一个或多个华莱士时,可以进行任意的选择,例如既可以按0、1、2和3编号的顺序来选择,也可以按0、2、4和6编号的顺序来连接,只要选择的华莱士树压缩器506是按上述的进位关系来选择即可。
下面结合一个说明性的示例来介绍上文的华莱士树及其操作。假设第一向量208的向量元素和第二向量210的对应向量元素是16位数据,计算装置支持32位的输入位宽(由此支持两组16位数的并行相乘操作),华莱士树是7个(即上述M的一个示例值)输入和2个(即上述N的一个示例值)输出的7-2华莱士树压缩器506。在该示例场景下,可以采用48个(即上述K的一个示例值)华莱士树来并行完成两组数据的乘法运算。
在上述的48个华莱士树中,第0~23个华莱士树(即第一组华莱士树中的24个华莱士树)可以完成第一组乘法的部分积加和运算,并且该组内的各华莱士树可以依次通过进位连接。进一步,第24~47个华莱士树(即第二组华莱士树中的24个华莱士树)可以完成第二组乘法的部分积加和运算,其中该组内的各华莱士树依次通过进位连接。另外,第一组中的第23个华莱士树和第二组中的第24个华莱士树之间不存在进位关系,即不同组的华莱士树之间不存在进位关系。
返回到图5,在通过华莱士树压缩器506对部分积进行加和压缩后,将经过压缩后的部分积通过加法器508进行求和,以获得尾数乘法操作的结果。关于加法器508,在本披露的一个或多个实施例中,其可以包括全加器、串行加法器和超前进位加法器中的一种,用于对华莱士树压缩器506进行加和所得到的最后两行部分积进行求和操作,以获得尾数乘法操作的结果。
可以理解,通过图5所示出的尾数乘法操作,特别是示例性地使用布斯编码和华莱士树,可以有效地获得尾数乘法操作的结果。具体地,布斯编码处理能有效减少部分积求和项的数目,从而减小电路面积,而华莱士压缩树能并行计算各行部分积之和,从而提高了计算装置的速度。
下面将结合图6和图7对部分积和7-2华莱士树的示例操作过程作详细的描述。可以理解的是这里的描述仅仅是示例性的而非限制性的,目的仅在于对本披露方案的更好理解。
图6示出在经过前述结合图3至图5所描述的尾数处理单元304中的部分积产生电路504后所获得的部分积600,如图中的两个虚线之间四行白色圆点,其中每行白色圆点标识出一个部分积。为了便于后续的华莱士树压缩器506的执行,可以预先对位数进行扩展。例如,图6中的黑点为复制的每个9位部分积的最高位数值,可以看出部分积被扩展对齐至16(8+8)bit(即,被乘数尾数的位宽8bit+乘数尾数的位宽8bit)。在另一个实施例中,例如对于25*13二进制乘法的部分积,其部分积被扩展至38(25+13)bit(即,被乘数尾数的位宽25bit+乘数尾数的位宽13bit)。
图7是示出根据本披露实施例的华莱士树压缩器506的操作流程和示意框图700。
如图7中所示,在对两个浮点数的尾数执行相乘操作后,如前所述,通过将乘数进行布斯编码并且通过被乘数可以获得图7中所示出的7个部分积。由于布斯编码算法的使用,减小了产生的部分积的数目。为了便于理解,图中在部分积部分用虚线框标识出一个包括7个元素的华莱士树,并且进一步以箭头示出其从7个元素压缩至2个元素的过程。在一个实施例中,该压缩过程(或称加和过程)可以借助于全加器来实现,即输入三个元素输出两个元素(即一个和“sum”以及向高位的进位“carry”)。7-2华莱士树压缩器506的示意框图在图7的右侧示出,可以理解该华莱士树压缩器506包括7个来自一列部分积的输入(如图7左侧虚线框中标识的七个元素)。在操作中,第0列华莱士树的进位输入为0,每列华莱士树的进位输出Cout作为下一列华莱士树的进位输入Cin。
从图7左侧部分中可以看到,经过四次压缩后可以将包括7个元素的华莱士树压缩为包括2个元素。如前所提到,本披露利用7-2华莱士树压缩器506将7行的部分积最终压缩成具有两行的部分积(即本披露的第二中间结果),并且利用加法器(例如超前进位加法器)来获得尾数结果。
为了进一步阐述本披露方案的原理,下面将示例性地描述本披露的浮点乘法器206如何完成FP16*FP16、FP16*FP16、FP32*FP32和FP32*BF16四种运算模式下在第一阶段的操作,即直到华莱士树压缩器506完成中间结果的求和以获得第二中间结果:
(1)FP16*FP16
在浮点乘法器206的运算模式下,浮点数的尾数位为10bit,考虑IEEE754标准下非规格化非零数,可以扩展1bit位,从而尾数位为11bit。另外,由于尾数位为无符号数,采用布斯编码算法时可以在高位扩展1bit的0,因此总的尾数位数为12bit。当对作为第二向量210的对应向量元素即乘数进行布斯编码,并且参照第一向量208的向量元素时,则通过部分积产生电路可以在高低部分分别获得7个部分积,其中第七个部分积为0,每个部分积的位宽为24bit,此时可以通过48个7-2华莱士树进行压缩处理,并且第23个到第24个华莱士树的进位为0。
(2)BF16*BF16
在浮点乘法器206的该运算模式下,浮点数的尾数位为7bit,考虑IEEE754标准下非规格化非零数及扩展为有符号数,则尾数可以扩展为9bit。当对作为第二向量210的对应向量元素即乘数进行布斯编码,并且参照第一向量208的向量元素时,则通过部分积产生电路504可以在高低部分分别获得7个有效部分积,其中第6、7个部分积为0,每个部分积位宽为18bit,通过使用第0~17个和第24~41个两组的7-2华莱士树进行压缩处理,其中第23到第24个华莱士树的进位为0。
(3)FP32*FP32
在浮点乘法器206的该运算模式下,浮点数的尾数位可以为23bit,考虑IEEE754标准下非规格化非零数,则尾数可以扩展为24bit。为节省乘法单元的面积,本披露的浮点乘法器206在该运算模式下可以被调用两次以完成一次运算。为此,每次尾数位进行的乘法为25bit*13bit,即将第一向量208的向量元素ina扩展1比特0成为25bit的有符号数,将第二向量210的对应向量元素inb的24bit尾数位分高低两部分12bit分别扩展1比特0得到两个13bit的乘数,表示为inb_high13和inb_low13高低两部分。具体操作中,第一次调用本披露的浮点乘法器206计算ina*inb_low13,第二次调用浮点乘法器206计算ina*inb_high13。在每一次的计算中,通过布斯编码生成7个有效部分积,每个部分积的位宽为38bit,通过第0~37个的7-2华莱士树进行压缩。
(4)FP32*BF16
该浮点乘法器206的该运算模式下,第一向量208的向量元素ina的尾数位为23bit,第二向量210的对应向量元素的inb的尾数位为7bit,考虑IEEE754标准下非规格化非零数和扩展为有符号数,则尾数可以分别扩展为25bit和9bit,进行25bit×9bit的乘法,获得7个有效部分积,其中第6、7个部分积为0,每个部分积的位宽为34bit,通过第0~33个华莱士树进行压缩。
以上通过具体示例描述了本披露的浮点乘法器206如何在四种运算模式下完成第一阶段的操作,其中优选的使用了布斯编码算法和7-2华莱士树。基于上述的描述,本领域技术人员可以理解本披露使用7个部分积,使得可以在不同的运算模式中复用7-2华莱士树。
在一些运算模式中,前述的尾数处理单元304还可以包括控制电路406,其可以用于当运算模式指示的所述第一向量208的向量元素的尾数位宽和/或所述第二向量210的对应向量元素的尾数位宽大于所述尾数处理单元304一次可处理的数据位宽时,根据所述运算模式多次调用所述尾数处理单元304。进一步,对于多次调用的情形,所述部分积求和电路还可以包括移位器,其用于当根据所述运算模式多次调用所述尾数处理单元304时,在已有所述加和结果的情况下,对所述已有的加和结果进行移位,并与当次调用获得的所述求和结果进行相加,得到新的加和结果,将所述新的加和结果作为所述乘法运算后的尾数。
例如,如前所述,可以在FP32*FP32运算模式中两次调用尾数处理单元304。具体地,在第一次调用尾数处理单元304中,尾数位(即ina*inb_low13)在第二阶段通过超前进位加法器相加获得第二低位中间结果,在第二次调用尾数处理单元304中,尾数位(即,ina*inb_high13)在第二阶段通过超前进位加法器相加获得第二高位中间结果。此后,在一个实施例中,可以通过移位器的移位操作来累加第二低位中间结果和第二高位中间结果,以获得该乘法运算后的尾数,该移位操作可以下式来表达:
rfp32xfp32=sumh[37:0]<<12+suml[37:0]
即将第二高位中间结果sumh[37:0]向左移12位并且与第二低位中间结果suml[37:0]累加。
上文结合图5至图7详细描述了本披露的浮点乘法器206在执行向量内积时,对第一向量208的向量元素和第二向量210的对应向量元素的尾数相乘所执行的操作。当然,图5为了注重描述本披露浮点乘法器206的尾数处理单元304的操作,并没有绘出其他的单元,例如指数处理单元302和符号处理单元306,并对其进行描述。下面将结合图8对本披露的浮点乘法器206进行整体上的描述,对于前文针对尾数处理单元304所做的描述,同样也适用于图8所绘的情形。
图8是示出根据本披露实施例的浮点乘法器206的整体示意框图。需要理解的是图中绘出的各类单元的位置、存在和连接关系仅仅是示例性的而非限制性的,例如其中的一些单元可以集成,而另一些单元也可以分离或依应用场景的不同而被省略或替换。
本披露的浮点乘法器206在每种运算模式的操作中按操作流程可以示例性地分为第一阶段和第二阶段,如图中的虚线所绘出的。概括来说,在第一阶段中:输出符号位的计算结果,输出指数位的中间结果计算,输出尾数位的中间结果计算(例如包括前述的输入尾数位定点乘法布斯算法的编码过程和华莱士树压缩过程)。在第二阶段中:对指数和尾数进行规则化和舍入操作,以输出指数的计算结果和输出尾数的计算结果。
如图8中所示,本披露的浮点乘法器206可以包括模式选择单元802和规格化处理单元804,其中模式选择单元802可以根据输入模式信号(in_mode)来选择运算模式。在一个实施例中,该输入模式信号可以与表2中的运算模式编号相对应。例如,当输入模式信号指示表2中的运算模式编号“1”时,则可以令浮点乘法器206工作于FP16*FP16的运算模式中,而当输入模式信号指示表2中的运算模式编号“3”时,则可以令浮点乘法器206工作于FP32*FP32的运算模式中。为了图示的目的,图8仅示出FP16*FP16、BF16*BF16、FP32*FP32和FP32*BP16四种示例性运算模式。然而,正如前所述,本披露的浮点乘法器206同样也支持其他多种不同的运算模式。
规格化处理单元804可以配置成用于当第一向量208的向量元素或第二向量210的对应向量元素为非规格化的非零浮点数时,根据运算模式,对第一向量208的向量元素或第二向量210的对应向量元素进行规格化处理,以获得对应的指数和尾数,例如按照IEEE754标准、对运算模式所指示的数据格式的浮点数进行规则化处理。
进一步,浮点乘法器206包括尾数处理单元,以执行第一向量208的向量元素尾数和第二向量210的对应向量元素尾数的相乘操作。为此,在一个或多个实施例中,该尾数处理单元可以包括位数扩展电路806、布斯编码器808、部分积产生电路810、华莱士树压缩器812以及加法器814,其中位数扩展电路806可以用于考虑IEEE754标准下非规格化非零数而对尾数进行扩展,以适合于布斯编码器的操作。由于关于布斯编码器808、部分积产生电路810、华莱士树压缩器812和加法器814,已经结合图5至图7进行了详细了描述,不再赘述。
在一些实施例中,本披露的浮点乘法器206还包括规则化单元816和舍入单元818,该规则化单元816和舍入单元818具有与图4中所示出的单元相同的功能。具体地,对于规则化单元816,其可以根据如图8中所示的输出模式信号“out_mode”所指示的数据格式来对所述加和结果和来自于指数处理单元820的指数数据进行浮点数规则化处理,以获得规则化指数结果和规则化尾数结果。例如,根据输出模式信号所指示的数据格式,规则化单元816可以调整指数和尾数的位宽,以使其符合前述指示的数据格式的要求。再例如,当尾数的最高位为0,且该尾数不为0,则规则化单元816可以重复将尾数左移1位,并且指数减1,直到最高位数值为1。对于舍入单元818,在一个实施例中,其可以用于根据舍入模式对所述规则化尾数结果执行舍入操作以获得舍入后的尾数,并将舍入后的尾数作为所述乘法运算后的尾数。
在一个或多个实施例中,前述的输出模式信号“out_mode”可以是运算模式的一部分,用于指示乘法运算后的数据格式。例如,如前表3中所描述的,当运算模式编号为“12”时,则其中的数字“1”可以相当于前述的“in_mode”信号,用于指示执行FP16*FP16的乘法操作,而其中的数字“2”可以相当于“out_mode”信号,用于指示输出结果的数据类型是BF16。因此可以理解的是,在一些应用场景中,输出模式信号可以与前述的输入模式信号合并,以提供给模式选择单元802。基于此合并后的模式信号,模式选择单元802可以在浮点乘法器206操作的初始阶段明确输入数据和输出结果的数据格式,而无需向规则化单独的提供输出模式信号,由此也可以进一步简化操作。
在一个或多个实施例中,对于前述的舍入操作,可以示例性包括如下5种舍入模式。
(1)舍入到最接近的值:在此模式下,当两个值同样接近的情况下,偶数优先。此时会将结果舍入为最接近且可以表示的值,但是当存在两个数同样接近的时候,则取其中的偶数作为舍入结果(在二进制中是以0结尾的数);
(2)四舍五入:示例性操作参见下面的例子;
(3)朝+∞方向舍入:在此规则下,会将结果朝正无限大的方向舍入;
(4)朝-∞方向舍入:在此规则下,会将结果朝负无限大的方向舍入;以及
(5)朝0方向舍入:在此规则下,会将结果朝0的方向舍入。
对于“四舍五入”模式下的尾数舍入的例子:例如两个24位的尾数相乘得到一个48位(47~0)的尾数,经过规格化处理,输出时只取第46至第24位。当尾数的第23位为0时,则舍去第(23-0)位;当尾数的第23位为1时,则向第24位进1并舍去第(23-0)位。
返回到图8,本披露的浮点乘法器206还包括指数处理单元820和符号处理单元822。图9是示出根据本披露实施例的使用浮点乘法器206执行浮点数乘法运算的方法900的流程图。
如图9中所示,所述方法900可以包括在步骤S902处利用指数处理单元820来根据运算模式、第一向量208的向量元素的指数和第二向量208的对应向量元素的指数获得所述乘法运算后的指数。正如前所述,该运算模式可以是多种运算模式中的一种,并且可以用于指示浮点数的数据格式。在一个或多个实施例中,该运算模式还可以用于确定输出结果的浮点数的数据格式。例如,指数处理单元820可以将第一向量208的向量元素的指数位数据、第二向量210的对应向量元素的指数位数据和各自对应的输入浮点数据类型的偏移值相加,并且减去输出浮点数据类型的偏移值,以获得所述第一向量208的向量元素和第二向量210的对应向量元素的乘积的指数位数据。在一个或多个实施例中,指数处理单元820可以实现为或包括加减法电路,其用于根据所述运算模式、所述第一向量208的向量元素的指数、所述第二向量210的对应向量元素的指数和所述运算模式获得所述乘法运算后的指数。
接着,在步骤S904处,该方法900可以利用尾数处理单元来根据所述运算模式、第一向量208的向量元素和第二向量208的对应向量元素获得所述乘法运算后的尾数。关于尾数的示例性操作,本披露在一些优选的实施例中使用了布斯编码算法和华莱士树压缩器,从而提高尾数处理的效率。
另外,当第一向量208的向量元素和第二向量208的对应向量元素是有符号数时,方法900还可以在步骤S906中通过符号处理单元822根据第一向量208的向量元素的符号和第二向量208的对应向量元素的符号获得乘法运算后的符号。符号处理单元822在一个实施例中可以实现为异或电路,其用于对所述第一向量208的向量元素和第二向量210的对应向量元素的符号位数据执行异或操作,以获得所述第一向量208的向量元素和第二向量210的对应向量元素的乘积的符号位数据。
上文结合图2至图9对本披露的计算装置整体进行了详细的描述。通过该描述,本领域技术人员可以理解本披露的计算装置支持多种运算模式下的操作,从而克服了现有技术中仅支持单一浮点型运算的乘法器的缺陷。进一步,由于本披露的计算装置可以复用,因此也支持高位宽的浮点型数据,降低了运算成本和开销。在一个或多个实施例中,本披露的计算装置还可以布置成或包括于集成电路芯片或计算装置中,以实现在多种运算模式下对浮点数执行乘法运算。
本披露的向量内积计算装置的另一个实施例如图10所示,该计算装置1000包含乘法单元1002、第一类型转换单元1004、加法模块1006及更新模组1008。乘法单元1002包括至少一个浮点乘法器1010,用于对接收到的第一向量1012和第二向量1014执行对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果1016。在此实施例中,乘法单元1002的操作模式可以和图2的乘法单元202相同,不再赘述。
第一类型转换单元1004用于对乘积结果1016进行数据类型的转换,以便将转换后的乘积结果1018输出至加法模块1006执行加法操作。在某些实施例中,乘法单元1002的输出(乘积结果1016)的类型与加法模块1006能接受的输入类型不符,因此需要第一类型转换单元1004做类型的转换。例如,当乘积结果1016是FP16型的浮点数,而加法模块1006支持FP32型的浮点数时,则第一类型转换单元1004可以配置成对FP16型数据示例性地执行以下操作以转换成FP32型数据:
S1:符号位左移16位;
S2:指数加112(指数的基数127与15之间的差距),左移13位(右对齐);以及
S3:尾数左移13位(左对齐)。
在上述的例子中,也可以通过执行相反的操作将FP32型数据转换成FP16型数据,以符合支持FP16型数据的加法器的要求。可以理解的是这里的数据类型转换的方法仅仅的示例性的,本领域技术人员可以根据本披露的教导来选择合适的方式或机制来将乘法结果的数据类型转换成与加法器相适应的数据类型。
在一个实施例中,加法模块1006可以是以多层级树状结构方式排列的多级加法器组的第一加法器1028。图11示出以FP32为例的第一加法器1028的其中一种实施方式1100。从该图示意性所示内容可以看出,其是一个三级树状结构的加法器组,其中第一级包括4个加法器1102,其示例性地接收8个FP32型浮点数的输入,如in0、in1、…、in7。第二级包括2个加法器1104,其示例性地接收4个FP16型浮点数的输入。第三级仅包括1个加法器1106,其可以接收2个FP16型浮点数的输入并输出前述的8个FP32型浮点数的求和结果。
在本实施例中,假定第二级的2个加法器1104并不支持FP32型浮点数的加法操作,因此本披露提出在第一级和第二级的加法器之间设置有一个或多个第二类型转换单元1108。在一个实施例中,该第二类型转换单元1108可以具有与结合图10所述的第一类型转换单元1004相同或相似的功能,即将输入的浮点型数据转换成与后续加法操作相一致的数据类型。具体地,第二类型转换单元1108可以根据不同的应用需求而支持一种或多种的数据类型转换。例如,在图11所示出的例子中,其可以支持FP32型数据到FP16型数据的单向数据类型转换。而在其他的示例中,第二类型转换单元1108可以设计成支持FP32型数据和FP16型数据之间的双向数据类型转换。换句话说,其既可以支持FP32型数据到FP16型数据的数据类型转换,也可以支持FP16型数据到FP32型数据的数据类型转换。附加地或可选地,第一类型转换单元1004或第二类型转换单元1108也可以配置成支持多种浮点型数据之间的双向转换,例如其可以支持前述结合运算模式所描述的各种浮点型数据之间的双向转换,从而有助于本披露在数据处理过程中保持数据的前向或后向兼容性,进一步扩展本披露方案的应用场景和适用范围。需要强调的是上述的类型转换单元仅仅是本披露的一个可选方案,当第一或第二加法器本身支持多种数据格式的加法运算,或处理多种数据格式运算可被复用时,并不需要这样的类型转换单元。另外,当第二加法器支持的数据格式即是第一加法器输出数据的数据格式时,也不需要在二者之间设置这样的类型转换单元。
图12是示出根据本披露第一加法器1006另一实施例的加法器组1200的示意框图。从图中所示内容可以看出,其示意性示出五级树状结构的加法器组,具体包括第一级的16个加法器、第二级的8个加法器、第三级的4个加法器、第四级的2个加法器和第5级的1个加法器。从该多级树状结构可以看出,图12所示的加法器组1200可以视为是对图11所示树状结构的扩展。或反言之,图11所示加法器组1100可以视为图12所示加法器组1200的一部分或组成单元,如图12中虚线1202所框出的部分。
在操作中,第一组的16个加法器可以接收来自于第一类型转换单元1004的乘积结果1018。可选地,当前述的乘积结果1016与加法模块1006的加法器组1200的第一级加法器所支持的数据类型相同时,则可以不经第一类型转换单元1004而直接输入到加法器组1200中,例如图12中所示出的32个FP32型浮点数(如in0~in31)。当通过第一级16个加法器的加法操作后,可以获得16个求和结果作为第二级8个加法器的输入。以此类推,最终作为第四级2个加法器输出的求和结果被输入到第五级的1个加法器,而该第五级加法器的输出可以作为图10的中间结果1020输入到位于更新模块1008中的第二加法器1024中。视应用场景的不同,该中间结果1020可以经历如下的操作之一:
当该中间结果1020是第一轮调用乘法单元1002所获得的中间结果1020时,其可以输入到前述的更新模块1008的第二加法器1024中,并且随后缓存于更新模块1008的寄存器1026中,以等待与第二轮所获得的中间结果1020进行加法操作;或者
当该中间结果1020是中间一轮(例如当执行多于两轮的操作时)所获得的结果时,其可以输入到第二加法器1024中,并且随后与由寄存器1026输入到第二加法器1024中的前一轮加法操作所获得的求和结果进行相加,以作为此中间一轮加法操作的求和结果存储到寄存器1026中;或者
当该中间结果1020是最后一轮调用乘法单元1002所获得的中间结果1020时,其可以输入到第二加法器1024中,并且随后与由寄存器1026输入到第二加法器1024中的前一轮加法操作所获得的求和结果进行相加,以作为此次向量内积运算的最终结果1022。
考虑到前述加法模块1006的第一加法器1028可以是支持多种模式的浮点加法器,与之相对应,更新模块1008中的第二加法器1024也可以具有相同或相类似的性质,即也同样支持多种模式的浮点数加法操作。而当第一加法器1028或第二加法器1024并不支持多种浮点数据格式的加法运算时,本披露还公开了第一或第二类型转换单元,用于执行数据类型或格式间的转换,从而同样使得可以利用第一或第二加法器执行多种运算模式的浮点数相加。尽管图12是以树状层级的形式来布置多个加法器来完成多个数的加法操作,但本披露的方案并不限于此。本领域技术人员根据本披露的教导也可以以其他适宜的结构或方式来布置多个加法器,例如通过串行或并行连接多个全加器、半加器或其他类型的加法器来实现对多个输入的浮点数的加法操作。另外,为了简明的目的,图12所示出的加法树结构并没有示出如图11中所示出的第二类型转换单元1108。然而,根据应用的需要,本领域技术人员可以想到在图12所示的多级加法器中布置一个或多个级间的类型转换单元,以实现不同层级之间的数据类型的转换,从而进一步扩大本披露的计算装置的适用范围。
图13进一步示出更新模块1008的操作流程1300。为了更清楚地说明,在此假设图10的乘法单元1002共有16个乘法器1010,而第一向量1012为64个FP32,第二向量1014也为64个FP32。由于乘法器1010共有16个,因此以16个FP32为单位进行批次处理,例如乘法单元1002先接收第一向量1012及第二向量1014的第1至第16个FP32,经第一类型转换单元1004和加法模块1006处理后,输出至更新模块1008。
在步骤S1302中,第二加法器1024接收来自于加法模块1006的第1至第16个FP32的第一段中间结果。在步骤S1304中,第二加法器1024将第一段中间结果传送至寄存器1026储存。在更新模组1008执行步骤S1302及S1304的同时,乘法单元1002接收第一向量1012及第二向量1014的第17至第32个FP32,经第一类型转换单元1004和加法模块1006处理后,在步骤S1306中,第二加法器1024接收来自于加法模块1006的下一段中间结果(例如第17至第32个FP32的第二段中间结果),和来自于寄存器1026的前一段(如第一段)中间结果。在步骤S1308中,第二加法器1024将下一段中间结果和前一段中间结果进行相加,例如将第二段中间结果和第一段中间结果进行相加,以获得求和结果。在步骤S1310中,第二加法器1024将求和结果传送至寄存器1026,更新寄存器1026中存储的结果。之后重复执行步骤S1306、S1308及S1310,直至完成全部64个FP32的加法操作。
在一个实施例中,乘法单元1002、第一类型转换单元1004、加法模块1006及更新模块1008均可以独立且并行运作。例如:乘法单元1002输出乘积结果1016后,便接收下一对的对应向量元素进行乘法操作,无需等待后级(第一类型转换单元1004、加法模块1006及更新模块1008)均运行完毕再接收处理。同样地,第一类型转换单元1004输出转换后的乘积结果1018后,便接收下一个乘积结果1016进行类型转换操作;加法模块1006输出中间结果1020后,便接收下一个来自第一类型转换单元1004的转换后的乘积结果1018进行加法操作。在一些实施例中,向量类型不需要转换,计算装置1000可以不用设置第一类型转换单元1004,该技术领域者轻易可以推及在没有第一类型转换单元1004的情况下,各级单元/模块如何并行运作,故不再赘述。
图14是示出根据本披露实施例的计算装置进行向量内积运算的方法1400流程图。可以理解的是此处所述的计算装置可以是图2或图10的计算装置。
以图2的计算装置为例。在步骤S1402中,利用乘法单元202来执行针对第一向量208和第二向量210对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果212;在步骤S1404中,利用加法模块204对第一向量208和第二向量210的对应向量元素的乘积结果执行加法操作,以获得浮点数向量内积结果216。尽管在图14中未示出,但如前所述,在一些实施例中,当输入的向量或其向量元素的位宽超出计算装置输入端口的位宽时,可以循环地执行方法。
尽管上述方法以步骤形式示出利用本披露的计算装置来执行浮点数向量内积运算,但这些步骤顺序并不意味着本方法的步骤必须依所述顺序来执行,而是可以采其他顺序或并行的方式来处理。另外,此处为了描述的简明而没有阐述本披露的其他步骤,但本领域技术人员根据本披露的内容可以理解该方法也可以通过使用计算装置来执行前述结合附图所描述的各种操作。
在本披露的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
图15是示出根据本披露实施例的一种组合处理装置1500的结构图。如图所示,该组合处理装置1500包括计算装置1502,该计算装置1502可以是图2或图10的计算装置。另外,该组合处理装置1500还包括通用互联接口1504和其他处理装置1506。根据本披露的计算装置与其他处理装置进行交互,共同完成用户指定的操作。
根据本披露的方案,该其他处理装置1506可以包括中央处理器(“CPU”)、图形处理器(“GPU”)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器,其数目不做限制而是依实际需要来确定。在一个或多个实施例中,该其他处理装置1506可以作为本披露的计算装置1502(其可以具体化为人工智能运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运,完成对本机器学习运算装置的开启、停止等的基本控制;其他处理装置也可以和机器学习运算装置协作共同完成运算任务。
根据本披露的方案,该通用互联接口1504可以用于在计算装置1502与其他处理装置1506间传输数据和控制指令。例如,该计算装置1502可以经由所述通用互联接口1504从其他处理装置1506中获取所需的输入数据,写入该计算装置1502片上的存储装置。进一步,该计算装置1502可以经由所述通用互联接口1504从其他处理装置1506中获取控制指令,写入计算装置1502片上的控制缓存。替代地或可选地,通用互联接口1504也可以读取计算装置1502的存储模块中的数据并传输给其他处理装置1506。
可选地,该组合处理装置1500还可以包括存储装置1508,其可以分别与所述计算装置1502和所述其他处理装置1506连接。在一个或多个实施例中,存储装置1508可以用于保存所述计算装置1502和所述其他处理装置1506的数据,尤其适用于所需要运算的数据在本计算装置1502或其他处理装置1506的内部存储中无法全部保存的数据。
根据应用场景的不同,本披露的组合处理装置1500可以作为手机、机器人、无人机、视频采集、视频监控设备等设备的SOC片上系统,从而有效地降低控制部分的核心面积,提高处理速度并降低整体的功耗。在此情况时,该组合处理装置1500的通用互联接口1504与设备的某些部件相连接。此处的某些部件可以例如是摄像头,显示器,鼠标,键盘,网卡或wifi接口。
在一些实施例里,本披露还公开了一种芯片或集成电路芯片,其包括了组合处理装置1500。在另一些实施例里,本披露还公开了一种芯片封装结构,其包括了上述芯片。
在一些实施例里,本披露还公开了一种板卡,其包括了上述芯片封装结构。参阅图16,其提供了前述的示例性板卡1600,上述板卡1600除了包括上述芯片1602以外,还可以包括其他的配套部件,该配套部件可以包括但不限于:存储器件1604、接口装置1606和控制器件1608。
所述存储器件1604与所述芯片封装结构内的芯片1602通过总线连接,用于存储数据。所述存储器件1604可以包括多组存储单元1610。每一组所述存储单元1610与所述芯片1602通过总线连接。可以理解,每一组所述存储单元1610可以是DDR SDRAM(“Double DataRate SDRAM”,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储器件1604可以包括4组所述存储单元1610。每一组所述存储单元1610可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述芯片1602内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。
在一个实施例中,每一组所述存储单元1610可以包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片1602中设置控制DDR的控制器,用于对每个所述存储单元1610的数据传输与数据存储的控制。
所述接口装置1606与所述芯片封装结构内的芯片1602电连接。所述接口装置1606用于实现所述芯片1602与外部设备1612(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置1606可以为标准PCIE接口。例如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片1602,实现数据转移。在另一个实施例中,所述接口装置1606还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述芯片1602的计算结果仍由所述接口装置1606传送回外部设备(例如服务器)。
所述控制器件1608与所述芯片1602电连接,以便对所述芯片1602的状态进行监控。具体地,所述芯片1602与所述控制器件1608可以通过SPI接口电连接。所述控制器件1608可以包括单片机(“MCU”,Micro Controller Unit)。所述芯片1602可以包括多个处理芯片、多个处理核或多个处理电路,并且可以带动多个负载。由此,所述芯片1602可以处于多负载和轻负载等不同的工作状态。通过所述控制器件1608可以实现对所述芯片1602中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
在一些实施例里,本披露还公开了一种电子设备或装置,其包括了上述板卡1600。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本披露所提供的几个实施例中,应该理解到,所披露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、光学、声学、磁性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,当本披露的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(“ROM”,Read-OnlyMemory)、随机存取存储器(“RAM”,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
依据以下条款可更好地理解前述内容:
条款A1、一种用于执行向量内积运算的计算装置,包括:
乘法单元,其包括一个或多个浮点乘法器,该浮点乘法器配置用于对接收到的第一向量和第二向量执行对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果,其中所述第一向量和第二向量各自包括一个或多个所述向量元素;以及
加法模块,其配置用于对所述第一向量和第二向量的所述对应向量元素的乘积结果执行加法操作,以获得求和结果。
条款A2、根据条款A1所述的计算装置,进一步包括:
更新模块,其配置用于响应于所述求和结果是所述内积运算的中间结果,执行针对产生的多个所述中间结果的多次加法操作,以输出所述内积运算的最终结果。
条款A3、根据条款A1或A2所述的计算装置,其中所述更新模块包括第二加法器和寄存器,所述第二加法器配置用于重复地执行以下操作,直至完成对全部所述多个中间结果的加法操作:
接收来自于所述加法模块的中间结果和来自于所述寄存器的、前次加法操作的前次求和结果;
将所述中间结果和所述前次求和结果进行相加,以获得本次加法操作的求和结果;以及
利用本次加法操作的结果来更新所述寄存器中存储的前次求和结果。
条款A4、根据条款1所述的计算装置,其中:所述乘法单元输出所述乘积结果后,便接收下一对的对应向量元素进行乘法操作;所述加法模块输出所述求和结果后,便接收下一个来自所述乘法单元的乘积结果进行加法操作。
条款A5、根据条款A1-A4的任意一项所述的计算装置,进一步包括:
第一类型转换单元,其配置用于对所述乘积结果进行数据类型的转换,以便所述加法模块执行所述加法操作。
条款A6、根据条款A1-A5的任意一项所述的计算装置,其中所述加法模块包括以多层级树状结构方式排列的多级加法器组,每级加法器组包括一个或多个第一加法器。
条款A7、根据条款A1-A6的任意一项所述的计算装置,进一步包括布置在所述多级加法器组中的一个或多个第二类型转换单元,其配置用于将一级加法器组输出的数据转换成另一类型的数据,以用于后一级加法器组的加法操作。
条款A8、根据条款A1-A7的任意一项所述的计算装置,其中所述浮点乘法器用于根据运算模式进行浮点数乘法运算,其中所述第一向量和第二向量的所述对应向量元素至少包括指数和尾数,所述浮点乘法器包括:
指数处理单元,用于根据所述运算模式、所述第一向量和第二向量的所述对应向量元素的指数来获得所述乘法运算后的指数;以及
尾数处理单元,用于根据所述运算模式、所述第一向量和第二向量的所述对应向量元素来获得所述乘法运算后的尾数;
其中,所述运算模式用于指示所述第一向量和第二向量的所述对应向量元素的数据格式。
条款A9、根据条款A8所述的计算装置,其中所述运算模式还用于指示所述乘法运算后的数据格式。
条款A10、根据条款A8所述的计算装置,其中所述数据格式包括半精度浮点数、单精度浮点数、脑浮点数、双精度浮点数、自定义浮点数中的至少一种。
条款A11、根据条款A8所述的计算装置,其中所述第一向量和第二向量的所述对应向量元素还包括符号,所述浮点乘法器进一步包括:
符号处理单元,用于根据所述第一向量和第二向量的所述对应向量元素的符号获得乘法运算后的符号。
条款A12、根据条款A11所述的计算装置,其中所述符号处理单元包括异或逻辑电路,所述异或逻辑电路用于根据所述第一向量和第二向量的所述对应向量元素的符号进行异或运算,获得所述乘法运算后的符号。
条款A13、根据条款A8所述的计算装置,进一步包括:
规格化处理单元,用于当所述第一向量和第二向量的所述对应向量元素为非规格化的非零浮点数时,根据所述运算模式,对所述第一向量和第二向量的所述对应向量元素进行规格化处理,以获得对应的指数和尾数。
条款A14、根据条款A8所述的计算装置,其中所述尾数处理单元包括部分积运算单元和部分积求和单元,其中所述部分积运算单元用于根据所述第一向量和第二向量的所述对应向量元素的尾数获得中间结果,所述部分积求和单元用于将所述中间结果进行加和运算以获得加和结果,并将所述加和结果作为所述乘法运算后的尾数。
条款A15、根据条款A14所述的计算装置,其中所述部分积运算单元包括布斯编码电路,所述布斯编码电路用于对所述第一向量或第二向量的所述对应向量元素的尾数的高低位补0,并进行布斯编码处理,以获得所述中间结果。
条款A16、根据条款A15所述的计算装置,其中所述部分积求和单元包括加法器,所述加法器用于对所述中间结果进行加和,以获得所述加和结果。
条款A17、根据条款A15所述的计算装置,其中所述部分积求和单元包括华莱士树和加法器,其中所述华莱士树用于对所述中间结果进行加和,以获得第二中间结果,所述加法器用于对所述第二中间结果进行加和,以获得所述加和结果。
条款A18、根据条款A16-17的任意一项所述的计算装置,其中所述加法器包括全加器、串行加法器和超前进位加法器中的至少一种。
条款A19、根据条款A17所述的计算装置,其中当所述中间结果的个数不足M个时,补充零值作为中间结果,使得所述中间结果的数量等于M,其中M为预设的正整数。
条款A20、根据条款A19所述的计算装置,其中每个所述华莱士树具有M个输入和N个输出,所述华莱士树的数目不小于K,其中N为预设的小于M的正整数,K为不小于所述中间结果的最大位宽的正整数。
条款A21、根据条款A20所述的计算装置,其中所述部分积求和单元用于根据运算模式来选用一组或多组所述华莱士树对所述中间结果进行加和,其中每组所述华莱士树有X个华莱士树,X为所述中间结果的位数,其中各组内的所述华莱士树之间存在依次进位的关系,而各组之间的华莱士树不存在进位的关系。
条款A22、根据条款A19-21的任意一项所述的计算装置,其中所述尾数处理单元还包括控制电路,用于在所述运算模块指示所述第一向量或第二向量的所述对应向量元素中的至少一个的尾数位宽大于所述尾数处理单元一次可处理的数据位宽时,根据所述运算模式多次调用所述尾数处理单元。
条款A23、根据条款A22所述的计算装置,其中所述部分积求和单元还包括移位器,当所述控制电路根据所述运算模式多次调用所述尾数处理单元时,所述移位器在每次调用中用于对已有加和结果进行移位,并与当次调用获得的所述求和结果进行相加,以获得新的加和结果,并且将在最后一次调用中获得的新的加和结果作为所述乘法运算后的尾数。
条款A24、根据条款A23所述的计算装置,进一步包括规则化单元,用于:
对所述乘法运算后的尾数和指数进行浮点数规则化处理,以获得规则化指数结果和规则化尾数结果,并且将所述规则化指数结果和所述规则化尾数结果作为所述乘法运算后的指数和所述乘法运算后的尾数。
条款A25、根据条款A24所述的计算装置,进一步包括:
舍入单元,用于根据舍入模式对所述规则化尾数结果执行舍入操作以获得舍入后的尾数,并将所述舍入后的尾数作为所述乘法运算后的尾数。
条款A26、根据条款A8所述的计算装置,其进一步包括:
模式选择单元,用于从所述浮点乘法器支持的多种运算模式中选择指示所述第一向量和第二向量的所述对应向量元素的数据格式的运算模式。
条款A27、根据条款A1-A26的任意一项所述的计算装置执行向量内积运算的方法,包括:
利用所述浮点乘法器来执行针对所述第一向量和第二向量对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果;以及
对所述第一向量和第二向量的所述对应向量元素的乘积结果执行加法操作,以获得求和结果。
条款A28、一种集成电路芯片,包括A1-A26的任意一项所述的计算装置。
条款A29、一种集成电路装置,包括A1-A26的任意一项所述的计算装置。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。

Claims (29)

1.一种用于执行向量内积运算的计算装置,包括:
乘法单元,其包括一个或多个浮点乘法器,该浮点乘法器配置用于对接收到的第一向量和第二向量执行对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果,其中所述第一向量和第二向量各自包括一个或多个所述向量元素;以及
加法模块,其配置用于对所述第一向量和第二向量的所述对应向量元素的乘积结果执行加法操作,以获得求和结果。
2.根据权利要求1所述的计算装置,进一步包括:
更新模块,其配置用于响应于所述求和结果是所述内积运算的中间结果,执行针对产生的多个所述中间结果的多次加法操作,以输出所述内积运算的最终结果。
3.根据权利要求2所述的计算装置,其中所述更新模块包括第二加法器和寄存器,所述第二加法器配置用于重复地执行以下操作,直至完成对全部所述多个中间结果的加法操作:
接收来自于所述加法模块的中间结果和来自于所述寄存器的、前次加法操作的前次求和结果;
将所述中间结果和所述前次求和结果进行相加,以获得本次加法操作的求和结果;以及
利用本次加法操作的结果来更新所述寄存器中存储的前次求和结果。
4.根据权利要求1所述的计算装置,其中:所述乘法单元输出所述乘积结果后,便接收下一对的对应向量元素进行乘法操作;所述加法模块输出所述求和结果后,便接收下一个来自所述乘法单元的乘积结果进行加法操作。
5.根据权利要求1所述的计算装置,进一步包括:
第一类型转换单元,其配置用于对所述乘积结果进行数据类型的转换,以便所述加法模块执行所述加法操作。
6.根据权利要求5所述的计算装置,其中所述加法模块包括以多层级树状结构方式排列的多级加法器组,每级加法器组包括一个或多个第一加法器。
7.根据权利要求6所述的计算装置,进一步包括布置在所述多级加法器组中的一个或多个第二类型转换单元,其配置用于将一级加法器组输出的数据转换成另一类型的数据,以用于后一级加法器组的加法操作。
8.根据权利要求1-7的任意一项所述的计算装置,其中所述浮点乘法器用于根据运算模式进行浮点数乘法运算,其中所述第一向量和第二向量的所述对应向量元素至少包括指数和尾数,所述浮点乘法器包括:
指数处理单元,用于根据所述运算模式、所述第一向量和第二向量的所述对应向量元素的指数来获得所述乘法运算后的指数;以及
尾数处理单元,用于根据所述运算模式、所述第一向量和第二向量的所述对应向量元素来获得所述乘法运算后的尾数;
其中,所述运算模式用于指示所述第一向量和第二向量的所述对应向量元素的数据格式。
9.根据权利要求8所述的计算装置,其中所述运算模式还用于指示所述乘法运算后的数据格式。
10.根据权利要求8所述的计算装置,其中所述数据格式包括半精度浮点数、单精度浮点数、脑浮点数、双精度浮点数、自定义浮点数中的至少一种。
11.根据权利要求8所述的计算装置,其中所述第一向量和第二向量的所述对应向量元素还包括符号,所述浮点乘法器进一步包括:
符号处理单元,用于根据所述第一向量和第二向量的所述对应向量元素的符号获得乘法运算后的符号。
12.根据权利要求11所述的计算装置,其中所述符号处理单元包括异或逻辑电路,所述异或逻辑电路用于根据所述第一向量和第二向量的所述对应向量元素的符号进行异或运算,获得所述乘法运算后的符号。
13.根据权利要求8所述的计算装置,进一步包括:
规格化处理单元,用于当所述第一向量和第二向量的所述对应向量元素为非规格化的非零浮点数时,根据所述运算模式,对所述第一向量和第二向量的所述对应向量元素进行规格化处理,以获得对应的指数和尾数。
14.根据权利要求7所述的计算装置,其中所述尾数处理单元包括部分积运算单元和部分积求和单元,其中所述部分积运算单元用于根据所述第一向量和第二向量的所述对应向量元素的尾数获得中间结果,所述部分积求和单元用于将所述中间结果进行加和运算以获得加和结果,并将所述加和结果作为所述乘法运算后的尾数。
15.根据权利要求14所述的计算装置,其中所述部分积运算单元包括布斯编码电路,所述布斯编码电路用于对所述第一向量或第二向量的所述对应向量元素的尾数的高低位补0,并进行布斯编码处理,以获得所述中间结果。
16.根据权利要求15所述的计算装置,其中所述部分积求和单元包括加法器,所述加法器用于对所述中间结果进行加和,以获得所述加和结果。
17.根据权利要求15所述的计算装置,其中所述部分积求和单元包括华莱士树和加法器,其中所述华莱士树用于对所述中间结果进行加和,以获得第二中间结果,所述加法器用于对所述第二中间结果进行加和,以获得所述加和结果。
18.根据权利要求16或17所述的计算装置,其中所述加法器包括全加器、串行加法器和超前进位加法器中的至少一种。
19.根据权利要求17所述的计算装置,其中当所述中间结果的个数不足M个时,补充零值作为中间结果,使得所述中间结果的数量等于M,其中M为预设的正整数。
20.根据权利要求19所述的计算装置,其中每个所述华莱士树具有M个输入和N个输出,所述华莱士树的数目不小于K,其中N为预设的小于M的正整数,K为不小于所述中间结果的最大位宽的正整数。
21.根据权利要求20所述的计算装置,其中所述部分积求和单元用于根据运算模式来选用一组或多组所述华莱士树对所述中间结果进行加和,其中每组所述华莱士树有X个华莱士树,X为所述中间结果的位数,其中各组内的所述华莱士树之间存在依次进位的关系,而各组之间的华莱士树不存在进位的关系。
22.根据权利要求19-21的任意一项所述的计算装置,其中所述尾数处理单元还包括控制电路,用于在所述运算模块指示所述第一向量或第二向量的所述对应向量元素中的至少一个的尾数位宽大于所述尾数处理单元一次可处理的数据位宽时,根据所述运算模式多次调用所述尾数处理单元。
23.根据权利要求22所述的计算装置,其中所述部分积求和单元还包括移位器,当所述控制电路根据所述运算模式多次调用所述尾数处理单元时,所述移位器在每次调用中用于对已有加和结果进行移位,并与当次调用获得的所述求和结果进行相加,以获得新的加和结果,并且将在最后一次调用中获得的新的加和结果作为所述乘法运算后的尾数。
24.根据权利要求23所述的计算装置,进一步包括规则化单元,用于:
对所述乘法运算后的尾数和指数进行浮点数规则化处理,以获得规则化指数结果和规则化尾数结果,并且将所述规则化指数结果和所述规则化尾数结果作为所述乘法运算后的指数和所述乘法运算后的尾数。
25.根据权利要求24所述的计算装置,进一步包括:
舍入单元,用于根据舍入模式对所述规则化尾数结果执行舍入操作以获得舍入后的尾数,并将所述舍入后的尾数作为所述乘法运算后的尾数。
26.根据权利要求8所述的计算装置,其进一步包括:
模式选择单元,用于从所述浮点乘法器支持的多种运算模式中选择指示所述第一向量和第二向量的所述对应向量元素的数据格式的运算模式。
27.一种使用根据权利要求1-26的任意一项所述的计算装置执行向量内积运算的方法,包括:
利用所述浮点乘法器来执行针对所述第一向量和第二向量对应向量元素的乘法操作,以获得每一对的对应向量元素的乘积结果;以及
对所述第一向量和第二向量的所述对应向量元素的乘积结果执行加法操作,以获得求和结果。
28.一种集成电路芯片,包括权利要求1-26的任意一项所述的计算装置。
29.一种集成电路装置,包括根据权利要求1-26的任意一项所述的计算装置。
CN201911022958.XA 2019-10-25 2019-10-25 用于向量内积的计算装置、方法和集成电路芯片 Pending CN112711738A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201911022958.XA CN112711738A (zh) 2019-10-25 2019-10-25 用于向量内积的计算装置、方法和集成电路芯片
PCT/CN2020/122951 WO2021078212A1 (zh) 2019-10-25 2020-10-22 用于向量内积的计算装置、方法和集成电路芯片
US17/619,795 US20220366006A1 (en) 2019-10-25 2020-10-22 Computing apparatus and method for vector inner product, and integrated circuit chip

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911022958.XA CN112711738A (zh) 2019-10-25 2019-10-25 用于向量内积的计算装置、方法和集成电路芯片

Publications (1)

Publication Number Publication Date
CN112711738A true CN112711738A (zh) 2021-04-27

Family

ID=75541573

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911022958.XA Pending CN112711738A (zh) 2019-10-25 2019-10-25 用于向量内积的计算装置、方法和集成电路芯片

Country Status (3)

Country Link
US (1) US20220366006A1 (zh)
CN (1) CN112711738A (zh)
WO (1) WO2021078212A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114003198A (zh) * 2021-10-20 2022-02-01 中科寒武纪科技股份有限公司 内积处理部件、任意精度计算设备、方法及可读存储介质
CN115080916A (zh) * 2022-07-14 2022-09-20 北京有竹居网络技术有限公司 一种数据处理方法、装置、电子设备、计算机可读介质
CN117151169A (zh) * 2023-10-31 2023-12-01 北京弘微智能技术有限公司 数据处理电路及电子设备

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200218508A1 (en) * 2020-03-13 2020-07-09 Intel Corporation Floating-point decomposition circuitry with dynamic precision
US20210397414A1 (en) * 2021-06-25 2021-12-23 Intel Corporation Area and energy efficient multi-precision multiply-accumulate unit-based processor
CN113746471B (zh) * 2021-09-10 2024-05-07 中科寒武纪科技股份有限公司 运算电路、芯片和板卡
CN117632081B (zh) * 2024-01-24 2024-04-19 沐曦集成电路(上海)有限公司 一种用于gpu的矩阵数据处理系统
CN117785113B (zh) * 2024-02-07 2024-05-17 北京壁仞科技开发有限公司 计算装置及方法、电子设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8078836B2 (en) * 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
CN104699458A (zh) * 2015-03-30 2015-06-10 哈尔滨工业大学 定点向量处理器及其向量数据访存控制方法
CN109240746B (zh) * 2016-04-26 2020-12-18 安徽寒武纪信息科技有限公司 一种用于执行矩阵乘运算的装置和方法
CN110210615B (zh) * 2019-07-08 2024-05-28 中昊芯英(杭州)科技有限公司 一种用于执行神经网络计算的脉动阵列系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114003198A (zh) * 2021-10-20 2022-02-01 中科寒武纪科技股份有限公司 内积处理部件、任意精度计算设备、方法及可读存储介质
CN115080916A (zh) * 2022-07-14 2022-09-20 北京有竹居网络技术有限公司 一种数据处理方法、装置、电子设备、计算机可读介质
CN115080916B (zh) * 2022-07-14 2024-06-18 北京有竹居网络技术有限公司 一种数据处理方法、装置、电子设备、计算机可读介质
CN117151169A (zh) * 2023-10-31 2023-12-01 北京弘微智能技术有限公司 数据处理电路及电子设备

Also Published As

Publication number Publication date
US20220366006A1 (en) 2022-11-17
WO2021078212A1 (zh) 2021-04-29

Similar Documents

Publication Publication Date Title
CN112711738A (zh) 用于向量内积的计算装置、方法和集成电路芯片
CN112712172B (zh) 用于神经网络运算的计算装置、方法、集成电路和设备
CN112732221A (zh) 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
CN110221808B (zh) 向量乘加运算的预处理方法、乘加器及计算机可读介质
CN111008003B (zh) 数据处理器、方法、芯片及电子设备
CN110515589B (zh) 乘法器、数据处理方法、芯片及电子设备
TW202117534A (zh) 用於轉換資料類型的轉換器、晶片、電子設備及其方法
TW202319909A (zh) 用於將輸入集相乘之硬體電路及方法,以及非暫時性機器可讀儲存裝置
CN110531954B (zh) 乘法器、数据处理方法、芯片及电子设备
CN111258541B (zh) 乘法器、数据处理方法、芯片及电子设备
US20150370537A1 (en) High Efficiency Computer Floating Point Multiplier Unit
WO2021073512A1 (zh) 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
CN111258633B (zh) 乘法器、数据处理方法、芯片及电子设备
CN113408716A (zh) 计算装置、方法、板卡和计算机可读存储介质
CN110647307B (zh) 数据处理器、方法、芯片及电子设备
CN210109863U (zh) 乘法器、装置、神经网络芯片及电子设备
CN113033799B (zh) 数据处理器、方法、装置及芯片
CN110515586B (zh) 乘法器、数据处理方法、芯片及电子设备
WO2021073511A1 (zh) 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
CN117251132B (zh) 定浮点simd乘加指令融合处理装置、方法及处理器
WO2023231363A1 (zh) 乘累加操作数的方法及其设备
CN113031918B (zh) 数据处理器、方法、装置及芯片
CN209962284U (zh) 乘法器、装置、芯片及电子设备
CN113033788B (zh) 数据处理器、方法、装置及芯片
CN113031913B (zh) 乘法器、数据处理方法、装置及芯片

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