CN110955406A - 浮点动态范围扩展 - Google Patents

浮点动态范围扩展 Download PDF

Info

Publication number
CN110955406A
CN110955406A CN201910795048.9A CN201910795048A CN110955406A CN 110955406 A CN110955406 A CN 110955406A CN 201910795048 A CN201910795048 A CN 201910795048A CN 110955406 A CN110955406 A CN 110955406A
Authority
CN
China
Prior art keywords
circuit
inputs
range
exponent
input
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
CN201910795048.9A
Other languages
English (en)
Inventor
B·M·帕斯卡
M·朗哈默尔
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN110955406A publication Critical patent/CN110955406A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Logic Circuits (AREA)

Abstract

本公开总体涉及用于在对变量执行一个或多个算术运算之前和/或之后调整变量的数字表示(例如,格式)的技术。特别地,本公开涉及基于集成电路器件中的可用硬件(例如,硬逻辑)将变量的范围缩放到合适的表示。例如,第一数字格式的输入(例如,bfloat16)可以被缩放到第二数字格式(例如,半精度浮点),使得被实现为接收第二数字格式的输入的电路可以对输入执行一个或多个算术运算。此外,电路产生的输出可以被缩放回第一数字格式。因此,可以通过对至以另一种格式执行的算术运算的输入和/或来自该算术运算的输出进行缩放来仿真以第一格式执行的诸如点积的算术运算。

Description

浮点动态范围扩展
背景技术
本公开总体涉及集成电路,诸如现场可编程门阵列(FPGA)。更具体地,本公开涉及在处理之前和之后调整(例如,缩放(scale))变量,使得以第一数字格式对变量执行的操作可以通过使用集成电路(例如,FPGA的可编程逻辑)的电路元件以另一数字格式执行的操作来仿真,的技术。
该部分旨在向读者介绍可能与下面描述和/或要求保护的本公开的各个方面有关的技术的各个方面。相信该讨论有助于向读者提供背景信息以促进更好地理解本公开的各个方面。因此,应该理解,这些陈述应该从这个角度来阅读,而不是承认为现有技术。
集成电路可以根据许多不同格式表示变量。例如,变量可以用单精度浮点格式、半精度浮点格式、bfloat16格式等表示。每种格式(例如,数字表示)可以在存储器使用、可表示值的精度、可表示值的范围等方面提供不同的优点。在一些实施例中,集成电路中的变量的应用(诸如操作和/或处理)可以给变量规定合适的格式。例如,在机器学习应用中,与半精度浮点格式的范围相比,增加的格式范围(诸如bfloat16)可能是有益的。然而,在一些实施例中,可用于在集成电路中表示的数字格式可能受到可用硬件资源的限制。
附图说明
在阅读以下详细描述并参考图样时,可以更好地理解本公开内容的各个方面,其中:
图1是根据实施例的用于实现缩放电路的系统的框图;
图2是根据实施例的缩放电路可以被实现所在的集成电路的框图;
图3是根据实施例的数字信号处理(DSP)电路的框图;
图4是根据实施例的输入到DSP电路的一组变量的范围图;
图5是根据实施例的算术运算仿真电路的框图,其包括通信地耦合到图3的DSP电路的缩放电路;
图6是根据实施例的用于在处理之前和之后调整数字的表示(例如,格式)的过程的流程图;
图7是根据实施例的将一组输入从第一格式缩放到第二格式的过程的流程图;
图8是根据实施例的扩展算术运算仿真电路的框图;以及
图9是根据实施例的数据处理系统的框图。
具体实施方式
以下将描述一个或多个具体实施例。为了提供这些实施例的简明描述,并未在说明书中描述实际实现的所有特征。应当理解,在任何这样的实际实现的开发中,如在任何工程或设计项目中,可以做出许多特定于实现的决策以实现开发者的特定目标,诸如遵守与系统相关的和与业务相关的约束,这可能从一个实施到另一个实施而变化。此外,应当理解,这种开发努力可能是复杂且耗时的,但是对于受益于本公开的普通技术人员来说仍然是设计、制造和加工的常规任务。
如在下面进一步详细讨论的,本公开的实施例总体涉及在对变量执行一个或多个算术运算之前和/或之后,调整变量的数字表示(例如,格式)。更具体地,本公开涉及基于集成电路中的可用硬件(例如,硬逻辑)将变量缩放到合适的表示。例如,第一数字格式的输入(例如,bfloat16)可以被缩放到第二数字格式(例如,半精度浮点),使得被实现为接收第二数字格式的输入的数字信号处理(DSP)电路可以对输入执行一个或多个算术运算。此外,在一些实施例中,由DSP电路以第二或第三数字格式(例如,单精度浮点)产生的输出可以缩放回第一数字格式。因此,可以通过缩放至以第二格式执行的算术运算的输入和/或来自以第二格式执行的算术运算的输出来对以第一格式执行的诸如点积的算术运算进行仿真。
因此,集成电路可以包括通信地耦合到DSP电路的输入端的预缩放电路和/或通信地耦合到的DSP电路的输出端的后缩放电路。如下面将进一步详细讨论的,DSP电路可以被实现为对具有第二数字格式的一组输入执行诸如点积的乘法运算。这样,可以实现预缩放电路以将一组输入从第一数字格式缩放到第二数字格式。为此,预缩放电路可以确定可以在DSP电路中相乘的输入对的指数的最大和。也就是说,例如,预缩放电路可以确定将两个输入相乘在一起所产生的最大指数值。为了避免DSP电路处的溢出,预缩放电路然后可以至少部分地基于最大指数值,根据第二数字格式将该组输入中的每一个的指数缩放到合适的范围。因此,输入可以缩放到第二格式并且路由到DSP电路。在DSP电路对缩放的输入执行一个或多个算术运算之后,后缩放电路可以将DSP电路的输出缩放回第一格式。更具体地,至少部分地基于由预缩放电路确定的最大指数值以及第一格式,可以将输出的指数缩放到与第一格式相对应的范围。因此,虽然以不同的格式执行算术运算,但是缩放的输出对以第一数字格式执行算术运算的结果进行仿真。
考虑到前述内容,图1示出了可以实现算术运算的系统10的框图。设计者可能希望在集成电路器件12(诸如现场可编程门阵列(FPGA)或专用集成电路(ASIC))上实现诸如本公开的缩放运算的功能。在一些情况下,设计者可以指定要实现的高级程序,例如OpenCL程序,其可以使设计者能够更有效且容易地提供编程指令以配置用于集成电路器件12的一组可编程逻辑单元,而无需低级硬件描述语言(例如,Verilog或VHDL)的特定知识。例如,由于OpenCL与其他高级编程语言(诸如C++)非常类似,所以熟悉此类编程语言的可编程逻辑的设计者可能比需要学习不熟悉的低级硬件描述语言的设计者具有减少的学习曲线来在集成电路器件12中实现新功能。
设计者可以使用设计软件14(诸如英特尔公司的
Figure BDA0002180681800000031
版本)来实现其高级设计。设计软件14可以使用编译器16将高级程序转换为较低级别的描述。编译器16可以向主机18和集成电路器件12提供表示高级程序的机器可读指令。主机18可以接收可以由内核程序20实现的主机程序22。为了实现主机程序22,主机18可以经由通信链路24将来自主机程序22的指令传送到集成电路器件12,通信链路24可以是例如直接存储器访问(DMA)通信或外围组件互连表达(PCIe)通信。在一些实施例中,内核程序20和主机18可以使得能够在集成电路器件12上实现缩放电路26(例如,组合电路)的配置。缩放电路26可以包括电路和/或其他逻辑元件,并且可以配置为例如,将变量从第一数字表示缩放到第二数字表示。
虽然在此描述的技术涉及高级程序的应用,但是在一些实施例中,设计者可以使用设计软件14生成和/或指定低级程序,诸如上述低级硬件描述语言。此外,在一些实施例中,系统10可以在没有单独的主机程序22的情况下实现。此外,在一些实施例中,本文描述的技术可以在电路中实现为非可编程电路设计。因此,本文描述的实施例旨在说明而非限制。
现在转到集成电路器件12的更详细的讨论,图2示出了作为诸如现场可编程门阵列(FPGA)的可编程逻辑器件的集成电路器件12的示例。此外,应该理解,集成电路器件12可以是任何其他合适类型的可编程逻辑器件(例如,专用集成电路和/或专用标准产品)。如图所示,集成电路器件12可以具有输入/输出电路42,用于经输入/输出引脚44驱动信号离开器件并接收来自其他器件的信号。互连资源46,诸如全局和局部垂直和水平导线和总线,可用于在集成电路器件12上路由信号。另外,互连资源46可包括固定互连(导线)和可编程互连(即,相应固定互连之间的可编程连接)。可编程逻辑48可以包括组合和顺序逻辑电路。例如,可编程逻辑48可以包括查找表,寄存器和多路复用器。在各种实施例中,可编程逻辑48可以被配置为执行定制逻辑功能。与互连资源相关联的可编程互连可以被认为是可编程逻辑48的部分。
可编程逻辑器件,诸如集成电路器件12,可以包含可编程元件50与可编程逻辑48。例如,如上面所讨论的,设计者(例如,客户)可以对可编程逻辑48进行编程(例如,配置)以执行一个或多个所需功能。举例来说,可以通过使用掩模编程布置来配置其可编程元件50来对一些可编程逻辑器件进行编程,掩模编程布置在半导体制造期间执行。在完成半导体制造操作之后配置其他可编程逻辑器件,诸如通过使用电编程或激光编程来对它们的可编程元件50进行编程。通常,可编程元件50可以基于任何合适的可编程技术,诸如熔丝、反熔丝、电可编程只读存储器技术、随机存取存储器单元、掩模编程元件等。
许多可编程逻辑器件被电编程。利用电编程布置,可编程元件50可以由一个或多个存储器单元形成。例如,在编程期间,使用引脚44和输入/输出电路42将配置数据加载到存储器单元中。在一个实施例中,存储器单元可以实现为随机存取存储器(RAM)单元。这里描述的基于RAM技术的存储器单元的使用仅旨在作为一个示例。此外,因为这些RAM单元在编程期间加载了配置数据,所以它们有时被称为配置RAM单元(CRAM)。这些存储器单元可各自提供对应的静态控制输出信号,该信号控制可编程逻辑48中的相关逻辑组件的状态。例如,在一些实施例中,输出信号可施加到可编程逻辑48内的金属氧化物半导体(MOS)晶体管的栅极。
现在转到图3,在一些实施例中,集成电路器件12可以包括数字信号处理(DSP)电路60,诸如乘法累加(MAC)电路、DSP块、算术电路或DSP片(DSP slice)(例如,DSP块的部分),被实现为对输入执行一个或多个算术运算(例如,点积)。此外,在一些实施例中,DSP电路60可以包括硬化(hardened)逻辑(例如,硬化MAC电路、硬化DSP块、硬化算术电路、硬化DSP片等)以执行一个或多个算术运算。该一个或多个算术运算可以产生具有特定数字表示(例如,格式和/或范围)的结果。此外,在一些实施例中,结果的数字表示可能与原始输入的数字表示不匹配。例如,在所示实施例中,DSP电路60包括输入电路62,输入电路62被实现为接收多个半精度浮点(例如,FP16)输入。因此,每一个输入包括十六位,其中一位表示数字的符号位,五位表示数字的指数,并且十位表示该数字的尾数(例如,分数)。此外,在确定输入的点积之后,DSP电路60输出单精度浮点(例如,SP)结果,其包括单符号位、8位指数字段和23位尾数字段(例如,总共三十二位)。然而,输入和输出的所示格式并不意味着限制。实际上,输入和输出可以采用任何合适的格式。
要对一组输入执行该一个或多个算术运算(例如,以确定该组输入的点积),DSP电路60可以包括多个乘法器64。虽然输入电路62可以接收具有第一数字表示(例如,半精度浮点格式)的输入,但是乘法器64可以以DSP电路60的第二内部数字格式(图3中标记为FP16+++)输出一组乘法结果。例如,为了考虑潜在的溢出,可以使用1位符号字段、8位指数字段和10位尾数字段来格式化乘法结果。在其他实施例中,乘法结果可以保持在半精度浮点格式中,或者可以根据另一种合适的数字格式(例如,单精度浮点等)来格式化,这可以取决于至DSP电路60的该组输入的格式。
DSP电路60还可以包括合适数量的加法器66(例如,浮点加法器)和/或加法器树68的合适数量的级以对乘法结果进行求和。加法器66可以被实现为根据DSP电路60的内部数字格式对乘法结果进行求和,与乘法结果的格式相比,内部数字格式可以是相同或不同的格式。此外,在一些实施例中,每一个乘法结果的最终和可以由例如加法器树68的最终加法器级中的单精度加法器66A确定。因此,单精度加法器66A可以输出具有1位符号字段、8位指数字段和23位尾数字段的32位结果。为此,到单精度加法器66A的输入的10位分数字段可以在它们被求和之前被扩展到23位。在其他实施例中,最终和可以由加法器66确定,加法器66被实现为以另一数字格式(例如,半精度浮点,FP16+++,扩展精度等)产生结果,这可能取决于至DSP电路60的该组输入的格式、用于初始对乘法结果进行求和的格式等。
然而,在一些实施例中,用于由DSP电路60执行的算术运算的输入也可以不根据在输入电路62(例如,半精度浮点)处预期的数字格式格式化。例如,在一些实施例中,输入电路62可以接收具有1位符号字段、8位指数字段和7位分数字段(例如,bfloat16)的输入。因此,在一些实施例中,在在输入电路62处接收输入之前,可以将输入从一种格式缩放到另一种格式。此外,在一些实施例中,可能期望产生其格式不对应于(例如,匹配)由单精度加法器66A产生的单精度浮点格式的输出。例如,继续上述示例,在DSP电路60接收bfloat16格式的输入的情况下,可能希望将输出缩放回bfloat16。这样,DSP电路60的输出可以从一种格式缩放到另一种格式。
尽管所示的DSP电路60被实施为确定点积,但是DSP电路60也可以被实现为执行任何合适的乘法-累加功能和/或其它算术运算。此外,DSP电路60的输入、输出和任何中间值的格式可以是任何合适的数字格式。因此,bfloat16输入可以缩放到半精度浮点,扩展精度输入可以缩放到单精度浮点,以及其他组合。因此,本文描述的实施方案旨在说明而非限制。
为了更好地说明DSP电路60的输入和/或输出的缩放,图4描绘了用于输入到DSP电路60的示例组变量(例如,P0、P1、P2和P3)的范围图70。范围图70示出了对该组变量的无偏范围(例如,指数范围)的变化,可能由缩放和/或算术运算产生。例如,第一范围72A可以表示输入到DSP电路60的该组变量中的每一个的范围。因此,对于每一个都按照bfloat16格式化的一组变量,第一范围72A可以从'-126'延伸到'127'。更具体地,如下面更详细描述的,因为成对的对应输入可以在DSP电路60的乘法器64处相乘,所以所示组变量中的每一个可以表示一对变量的相应乘积的范围。因此,该组变量可以表示相应对指数的和。
第二范围72B可以表示输入电路62被实现为接收诸如半精度浮点的范围。因此,在一些实施例中,第二范围72B可以从'-14'延伸到'15'。此外,第三范围72C可以表示乘法器64输出的乘积的范围。这样,因为至乘法器64的一对输入的指数可以在乘法运算期间求和,所以第三范围72C可以是第二范围72A的两倍,并且可以包括用于归一化的附加位。因此,在一些实施例中,第三范围72B可以从'-28'延伸到'31'。此外,因为DSP电路60在加法器树68中包括两级加法器66,所以范围图70包括两个加法器范围(例如,第四范围72D和第五范围72E),每一个加法器范围按位扩展先前范围的最大值(例如,分别为第三范围72C和第四范围72D)以应对来自加法运算的溢出。此外,范围图70包括第一内部范围74A,其可以对应于DSP电路60的内部数字格式的第一实施例的范围,诸如FP16+++。范围图70还包括第二内部范围74B,其可以表示DSP电路60的内部数字格式的第二实施例的范围,诸如半精度浮点。
如下面更详细讨论的,在一些实施例中,输入到输入电路62的该组变量的缩放可以部分取决于DSP电路60(例如,74A或74B)的内部范围。例如为了最大化输入电路62处在该组变量中保留的数据量(例如,精度)并且为了防止和/或减少DSP电路60内的内部溢出,可以部分地基于第二范围72B和内部范围(例如,74A或74B)来缩放该组变量。例如,在内部范围对应于第一内部范围74A(例如,FP16+++范围)的实施例中,由该组变量表示的最大乘积(例如,P0)可以在被输入到输入电路62之前被缩放(例如,预缩放),使得对应的缩放乘积(例如,SP0)的无偏指数是'30'。因此,在一些实施例中,对应于最大乘积(P0)的指数对可以各自被缩放到无偏值'15',这可以最大化使用第二范围72B来表示该组变量中的每一个指数。此外,可以根据相同的技术和/或偏移来缩放该组变量(例如,P1,P2和P3)中的变量的其余指数以产生其余的缩放乘积(例如,分别SP1、SP2和SP3)。此外,因为内部范围对应于第一内部范围74A,所以对DSP电路60中的该组缩放乘积执行的后续算术运算(例如,加法)可能不会导致溢出(例如,数据丢失)。因此,可以缩放由DSP电路60产生的结果(R)以产生第六范围72F内的缩放结果(SR),其可以与第一范围72A相同,而不会丢失包括在该组变量中的数据。
然而,在内部范围对应于第二内部范围74B(例如,半精度浮点范围)的实施例中,例如,可以在输入到输入电路62之前缩放(例如,预缩放)由该组变量表示的最大乘积(例如,P0),使得对应的缩放乘积(例如,'SP0')的无偏指数小于'15'。更具体地,可以缩放最大乘积(例如,P0),如下面更详细地描述的,使得在由加法器树68实现的两个加法级之后,最终和(R')的指数不超过第二内部范围74B的最大值(例如,15)。此外,可以根据相同的技术和/或偏移来缩放该组变量中的其余变量(例如,P1,P2和P3)以产生其余的缩放乘积(例如,分别SP1'、SP2'和SP3')。然而,如范围图70的区域76所示,小于最大乘积的乘积的指数可以被缩放到超出第二内部范围74B的范围,这可能导致在在加法器树68处计算任何加法之前丢失数据(例如,下溢)。因此,由DSP电路60所产生的附加的结果(R')可能没有在具有第一内部范围74A的实施例中所产生的结果(R)准确。这样,缩放附加结果(R')以产生附加缩放结果(SR')产生的最终结果可能没有缩放结果(SR)准确。此外,可以理解,上述在具有第二内部范围74B的实施例中应用的缩放技术和/或偏移可以应用于具有第一内部范围74A的实施例。例如,在内部范围是第一内部范围74的实施例中,该组变量可以被缩放到小于'30'的值。然而,该实施例产生的缩放结果可能没有以上参考具有第一内部范围74A的实施例描述的缩放技术和/或偏移准确。
此外,虽然示出的实施例描绘了一定范围(例如,72A、72B、72C、72D、72E和72F)和某些内部范围(例如,74A和74B),其可分别对应于某些数字格式,但是可以理解,可以在DSP电路60内应用任何合适的范围。此外,可以将任何合适的范围缩放到输入电路62的对应的范围,并且可以将DSP电路60的输出缩放到任何合适的范围。
图5示出了算术运算仿真电路100的实施例,其可包括可操作地耦合到DSP电路60的缩放电路26。缩放电路26可包括实现为调整一组输入(例如,A0、A1、A2、A3、B0、B1、B2和B3)的格式的预缩放电路102并且可以包括实现为调整由DSP电路60产生的输出的格式的后缩放电路104。更具体地,预缩放电路102可以例如通过将输入的指数从第一位数缩放到第二位数来调整至DSP电路60的输入的范围。此外,后缩放电路104可以通过例如将输出的指数缩放到第一位数(例如,输入的原始位数)来调整DSP电路60的输出的范围。
如所示,在一些实施例中,预缩放电路102可以包括输入电路106,其接收一组输入,每一个输入具有第一数字格式(例如,bfloat16)。为此,因为所示输入电路62实现为以半精度浮点格式接收输入,所以预缩放电路102可以缩放该组输入(例如,分别为A0、A1、A2、A3、B0、B1、B2和B3)中的每一个的指数(例如,eA0、eA1、eA2、eA3、eB0、eB1、eB2、eB3和eB4)。更具体地,预缩放电路102可以将该组输入中的输入的指数从8位缩放到5位,以在DSP电路60实现的算术运算期间避免溢出。例如,DSP电路60包括乘法运算(例如,由乘法器64执行),其有效地对一对相乘的输入(例如,A0和AB,A1和B1,A2和B2以及A3和B3)的相应指数求和。因此,为了减少和/或防止溢出,可以缩放一对相乘的输入的相应指数的和中的每一个,以便不超过以在输入电路62处预期的数字格式(例如,半精度浮点格式)可表示的最大范围。因此,输入电路106可以路由与在DSP电路60处相乘的输入(例如,A0和B0,A1和B1,A2和B2,A3和B3)相对应的指数对以在相应的加法器103处求和(例如,103A、103B、103C、103D),其可以被实现为对整数值求和。
预缩放电路102然后可使用例如比较电路107确定指数的成对和的最大值(例如,M)。在一些实施例中,例如,预缩放-电路102可包括一组减法器108和/或比较器,实现为用于确定指数的所计算的和的对之间的差。因此,如所示,第一减法器108A可以减去由最低有效输入得到的和(例如,从A1和B1的指数之和减去A0和B0的指数之和),并且第二减法器108B可以减去最高有效(most significant)输入得到的和(例如,从A3和B3的指数之和减去A2和B2的指数之和)。此外,第一减法器108A的输出可以路由到第一多路复用器110A(mux)中,其可以基于输出在第一组输入(例如,A0和B0)的指数之和或者第二组输入(例如,A1和B1)的指数之和之间进行选择。这样,第一多路复用器110A可以使用由第一减法器108A提供的差来选择两个和之间的最大和。类似地,第二多路复用器110B可以使用由第二减法器108B提供的两个和之间的差在第三组输入(例如,A2和B2)的指数之和与第四组输入(例如,A3和B3)的指数之和之间进行选择。因此,为了确定由第一多路复用器110A和第二多路复用器110B选择的和之间的最大和,预缩放电路102可以包括可操作地耦合到第三多路复用器110C的第三减法器108C。第三减法器108C可以确定第一多路复用器110A和第二多路复用器110B输出的相应和之间的差。然后,第三多路复用器110C可以使用该差作为选择信号,以在由第一多路复用器110A和第二多路复用器110B输出的相应和之间进行选择。为此,第三多路复用器110C可以选择对应的指数对的和的最大值(M)。
使用最大值(M),预缩放电路102可确定偏移值(W)。因此,在一些实施例中,预缩放电路102可以包括附加减法器108C,其可以接收最大值(M)和整数(例如,'60')作为输入。在一些实施例中,路由到减法器108C中的整数可以取决于DSP电路60的输入电路62所预期的数字格式(例如,半精度浮点格式)和/或DSP电路60的内部数字格式(例如,FP16+++),如上面参考图4所描述的。
例如,在所示实施例中,输入电路62被实现为接收半精度浮点格式数字,乘法器64被实现为根据FP16+++格式实现以输出乘积。在半精度浮点格式中,最大有偏指数值为'30'(例如,'15'与有偏值'15'相加),因此两个有偏指数之和的最大值为'60'(例如,(15+15)+(15+15))。然而,在bfloat16中,最大有偏指数值是'254'(例如,'127'与有偏值'127'相加),并且两个指数之和的最大有偏值是'508'(例如,(127+127)+(127+127))。因此,为了调整bfloat16和/或与半精度浮点不同的另一种格式中的输入的指数值,两个有偏指数的最大和(M)可以按整数缩小到'60'(例如,半精度浮点中两个指数的最大有偏和)。在所示实施例中,在乘法器64输出的乘积的尾数大于或等于'2'的情况下,乘积可具有大于最大和(M)(例如,'60')的指数最大有偏值。例如,乘积的有偏指数可以是'61',其从半精度浮点范围溢出。然而,因为所示DSP电路60的内部数字格式是FP16+++,其与半精度浮点相比具有增加的范围,所以可以减少和/或消除溢出。
另一方面,在一些实施例中,诸如当内部数字格式与输入电路62的数字格式匹配时,可以根据替代技术确定整数。例如,至少在输入电路62的数字格式和内部数字格式是半精度浮点的情况下,可以部分地基于加法器树68中包括的加法器级的数量来确定整数。作为说明性示例,整数可以是基于以下等式确定的:
整数=偏差*3-1-adderStages,
其中,术语偏差(bias)表示对应于内部数字格式的范围的偏差,术语adderStages表示加法器树68中的加法器级的数量。因为每一个加法器级可以将指数增加单个位,所以减去加法器级的数量可以减少和/或消除指数的范围的溢出。因此,对于与半精度浮点的偏差相对应的15的偏差值,以及包括两个加法器级的所示加法器树68,可以选择值'42'(例如,15*3-1-2)以给指数(例如,输入至DSP电路60和/或由DSP电路60确定的变量的)值提供增长(例如,高达'45')的机会。此外,虽然上面将整数描述为是部分地基于半精度浮点的范围和/或基于FP16+++和半精度浮点的范围二者来确定的,但是任何合适的整数可以用于另一数字格式或数字格式的组合,以便在后续计算中减轻范围溢出。因此,实施例旨在是说明性的而非限制性的。
为了确定合适的偏移值(W),附加减法器108D可以从和(M)的最大值减去整数。因此,利用附加减法器108C产生的偏移值(W),预缩放电路102可以根据输入到DSP电路60数字格式(例如,半精度浮点)和/或DSP电路60的内部数字格式将指数之和中的每一个缩小到合适的范围。更具体地,预缩放电路102可以从指数之和中的每一个减去偏移值(W),使得将指数的最大和(M)缩小到合适的范围,这可以减少和/或消除DSP电路60中的范围溢出,如上所述。例如,利用所示的将和缩放到半精度浮点指数(例如,5位指数)的情况,可以将指数的和缩放到'60'的最大值。
从指数的缩放和开始,预缩放电路102然后可以使用指数调整电路112为每一个输入(例如,A3、A2、A1、A0、B3、B2、B1和B0)计算新的相应指数。更具体地,在一些实施例中,预缩放电路102可将指数的缩放和中的每一个从10位的值分裂为二个5位值,如所示。为了确定用于输入的新的相应指数,预缩放电路102可以确定特定指数对的缩放和是偶数还是奇数。如果缩放和是偶数,则预缩放电路可以通过右移缩放和(例如,将缩放和除以二)来输出该对输入(例如,A0和B0)中的每一个的新指数。因此,在对应于最大值(M)(其随后被缩放到'60'(例如,偶数))的指数之和的情况下,预缩放电路102可以产生'30'作为对应的输入对中的每一个的新指数。另一方面,如果缩放和是奇数,则可以通过右移缩放和来确定该对的指数之一,并且可以通过将'1'加到右移的缩放和来确定另一个指数。此外,如果缩放的指数是负的,在某些情况下,这指示至少一个原始输入为'0',则预缩放电路102可以强制该对输入中的新指数之一为'0'。此外,由于新指数被均衡,因此半精度输入指数范围被最大化。
因此,对于一对输入中的第一输入(例如,A0),预缩放电路102可以包括多路复用器110,其可以输出缩放的指数和的值除以二(例如,位[5:1]右移一位)的值或'0',取决于由或门113(例如,逻辑或门)提供的选择信号。或门113可以接收缩放的指数和(例如,[9:6])的一个或多个最高有效位(MSB),并且可以确定位的逻辑或。因此,或门113的输出可以表示缩放的指数和是否为负。因此,如上所述,多路复用器110可以基于缩放的指数和是否为负来输出'0'或缩放的指数和除以二。
此外,对于该对输入的第二输入(例如,B0),预缩放电路102可以将缩放的指数和的第一位(例如,[0])路由到加法器103E(例如,整数加法器)的第一输入,并且可以将接着的四个位(例如,[5:1])路由到加法器103E的第二输入。如果缩放的指数和是偶数,则第一位的值为'0'。因此,加法器103E将输出已从其原始位位置右移一位的四位([5:1])。因此,如上所述,加法器103E将输出缩放的指数和除以二的值作为该对输入的第二输入(例如,B0)的新指数。但是,如果缩放的指数和为奇数,则第一位的值将为'1'。因此,加法器103E将对第一位与第四位[5:1]求和,这四位[5:1]已经从它们的原始位位置右移了一位。因此,如上所述,加法器103E将输出'1'加上缩放的指数和除以2的值作为该对输入的第二输入(例如,B0)的新指数。
如本文中所描述的,输入的指数由预缩放电路102缩放。另外,在一些实施例中,预缩放电路102可调整输入的分数。在一些实施例中,例如,与输入电路62处预期的分数格式相比,输入的分数可以在大小上不同。因此,预缩放电路102和/或附加电路和/或逻辑可以在在输入电路62处接收到缩放输入之前,以适合数量的位零填充(zero pad)分数,或从该分数截去适合数量的位。此外,对于每一个输入,输入的相应分数可以被路由为与输入电路62处的输入的相应新指数同时可用,如路由114所示(例如,布线和/或电连接)。
如上面参考图3所讨论的那样,DSP电路60然后可以在输入电路62处接收每一个缩放输入,并且可以对输入执行多个算术运算。更具体地,DSP电路60可以对每一个输入执行点积运算,并且可以输出单精度浮点格式结果。这样,后缩放电路104可以包括适合于将结果从单精度浮点格式缩放到另一种格式(诸如在输入电路106处接收的输入的原始格式(例如,bfloat16))的电路和/或逻辑。更具体地,后缩放电路104可以包括适合于将结果的范围缩放回到在输入电路106处接收的输入的原始范围(例如,bfloat16)的电路和/或逻辑。因此,后缩放电路104可以将结果的指数(eSUM')路由到加法器103F的第一输入。此外,后缩放电路104可以将结果偏移值(Wout)路由到加法器66的第二输入。为了确定结果偏移值(Wout),后缩放电路104可以将最大和值(M)路由到减法器108。减法器可从最大和值(M)减去整数(例如,'284')以产生结果偏移值(Wout)。由于结果偏移值(Wout)的目标是将结果的指数缩放回在输入电路106处接收的输入的原始范围,因此可以部分地基于原始输入格式的偏差、输入至减法器108D的整数(例如,用于缩小至输入电路106的输入的指数的整数)、在输入电路62处接收的输入的格式的偏差、和/或其适合的组合来选择整数。例如,对于所示实施例,可以对原始输入格式的偏差的两倍(例如,2*127=254)与从输入至减法器108D的整数(例如,60)减去在输入电路62处接收的输入的格式的偏差的两倍(例如,2*15)进行求和,以产生'284'的整数值(例如,(2*127)+(60-(2*15))=284)。此外,在减法器108D处施加不同整数值的实施例中,其可以取决于DSP电路60中实现的一种或多种数字格式,可以适当地调整在后缩放电路104的减法器108处施加的整数值。例如,在上面描述的在减法器108D处施加的整数是'42'的示例中,整数值'266'(例如,(2*127)+(42-(2*15))=266)可以被路由到后缩放电路104的减法器108。
尽管未示出,但是后缩放电路104可以附加地包括电路和/或逻辑来处理当结果的指数(eSUM')是'0'和/或当缩放和(S)的指数(eSUM)为负或大于或等于输出格式允许的最大指数值时的情况。如果结果的指数(eSUM')为'0',则结果偏移值(Wout)可以被刷新为'0'以保持缩放和(S)的指数(eSUM)的值'0'。因此,后缩放电路104可以包括,例如,逻辑门和/或多路复用器110,其被实现为确定结果的指数(eSUM')是否为'0'并且基于确定在结果偏移值(Wout)和'0'之间进行选择。如果缩放和的有偏指数(eSUM)是负的,则诸如多路复用器110的电路可以将'0'转发到缩放和的指数上(eSUM)。此外,后缩放电路104可以包括电路和/或逻辑,以处理缩放和的指数(eSUM)等于或超过DSP电路60的输出格式(例如,单精度浮点)的最大指数值时的情况。在所示实施例中,例如,如果缩放和的指数(eSUM)大于或等于单精度浮点的最大指数值(例如,'255'),则诸如多路复用器110的电路(未示出)可以将缩放和的指数(eSUM)转发为缩放和的指数(eSUM),并且可以将缩放和的分数(fSUM)的值刷新为零。
此外,虽然示出的缩放电路26适合于调整至DSP电路60的输入的格式和来自DSP电路的输出的格式,但是其它实施例可仅缩放输入或输出。此外,预缩放电路可以包括任何适合的电路和/或逻辑以确定最大值(M)。例如,除了减法器108和多路复用器110的所示的组合之外或作为其替代,预缩放电路102可以包括实现为确定最大值(M)的不同电路和/或逻辑,诸如比较器。此外,在一些实施例中,可以实现预缩放电路102以将输入从bfloat16之外的数字格式进行转换和/或后缩放电路104可以实现为将输出转换为bfloat16之外的数字格式。因此,可以调整用于确定偏移值(W)和结果偏移值(Wout)的整数。在一些实施例中,例如,可以基于至预缩放电路的输入的数字格式和在DSP电路60处接收的输入的预期数字格式来对每一个整数进行编程。因此,整数可以被存储在可编程模式寄存器和/或适合的存储器位置,并可以基于DSP电路60的实现和/或至预缩放电路102的输入的格式对其进行更新。在任何情况下,这里描述的实施例旨在是说明性的而非限制性的。
现在转到图6,示出了用于在处理之前和之后调整数字的表示(例如,格式)的过程140的示例。通常,过程140包括将至DSP电路60的一组原始输入从第一格式缩放到第二格式(过程框142),对缩放的输入执行运算(过程框144),并将由DSP电路产生的结果缩放为第一种格式(过程框146)。
尽管过程140的下面的描述以特定的顺序描述,其表示了特定实施例,但应当注意的是,过程140可以以任何适合的顺序来执行。另外,过程140的实施例可以省略过程框和/或包括适合的附加过程框。虽然过程140被描述为由缩放电路26(例如,预缩放电路102和后缩放电路104)和DSP电路60实现,但是过程140的部分可以由任何适合的电路和/或逻辑实现。例如,在一些实施例中,过程140可以至少部分地通过使用诸如一个或多个处理器的处理电路执行存储在有形的、非暂时性的计算机可读介质(诸如存储器)中的指令来实现。
如图所示,在一些实施例中,过程140可以通过将至DSP电路60的一组输入从第一格式缩放的到第二格式(过程框142)开始。例如,具有bfloat16浮点格式(例如,1位符号字段、8位指数字段和7位分数字段)的输入可以被缩放到半精度浮点格式。虽然示例输入被描述为从bfloat16缩放到半精度,但是任何适合的输入格式可以被缩放到任何适合的其他格式。例如,输入可以作为单精度、双精度或自定义数字格式以及其他格式被接收,并且可以被缩放到半精度、bfloat16、另一个自定义数字格式等。
现在转到图7,示出了将该组输入从第一格式缩放到第二格式的过程160的示例。通常,过程160包括对每对对应的原始输入的指数进行求和(过程框162),确定和的最大值(M)(过程框164),使用和的最大值(M)计算偏移值(W)(过程框166),使用偏移值(W)调整和(过程框168),使用相应的调整和确定每一个原始输入的相应的新指数(过程框170),并使用相应的新指数对每一个原始输入以第二格式形成相应的缩放输入(过程框172)。
尽管过程160的下面的描述以特定的顺序描述,其代表了特定的实施例,但应当注意的是,过程160可以以任何适合的顺序来执行。另外,过程160的实施例可以省略过程框和/或包括适合的附加过程框。虽然过程160被描述为由预缩放电路102实现,但是过程160的部分可以由任何适合的电路和/或逻辑来实现。例如,在一些实施例中,过程160可以至少部分地通过使用诸如一个或多个处理器的处理电路执行存储在有形的、非暂时性的计算机可读介质(诸如存储器)中的指令来实现。
如所示,在一些实施例中,过程160可以由对每对原始输入的指数进行求和(过程框162)开始。如上所述,例如,预缩放电路102中的一组加法器103可以对与点积输入对相对应的输入对进行求和。例如,该组加法器103可以对将在DSP电路60处彼此相乘的第一输入(例如,A0)和第二输入(例如,B0)的指数进行求和。
所说明的过程160然后进行对每对输入的指数的和的最大值(M)的确定(过程框164)。为了确定指数之和中的最大值(M),可以将和相互比较。因此,在一些实施例中,减法器108可以确定一对和之间的差。然后,可以使用由减法器108确定的差的符号t来在例如多路复用器110处选择具有更高值的和。此外,可以串行(例如,顺序地)和/或并行地使用任何适合数量的减法器108和多路复用器110来执行适合数量的比较以确定和的最大值(M)。附加地或替代地,可以通过其他适合的逻辑和/或电路来比较指数和以识别和的最大值(M)。
和的所识别的最大值(M)然后可以用于计算偏移值(W)(过程框166)。偏移值(W)可以用于基于DSP电路60的输入电路62预期的数字格式(例如,半精度)的范围和/或DSP电路60的内部数字格式来缩放指数的和。因此,在一些实施例中,可以通过使用减法器108D从最大值(M)中减去整数值来计算偏移值(W)。整数值可以表示输入电路62的数字格式的范围的最大有偏指数值的和。因此,为了将输入缩放到半精度浮点格式,可以使用'60'的整数值(例如,30+30)。附加地或替代地,可以选择整数值以在DSP电路60中实现的运算期间减少或消除范围溢出。
计算偏移值(W)之后,可使用偏移值来对输入对的指数之和进行调整(例如,缩放)(过程框168)。更具体地,可以从输入对的指数之和中的每一个减去偏移值(W)。结果,对应于和的最大值(M)的指数之和可以减小到适合的范围,以减轻DSP电路60中的范围溢出。例如,在第二种格式是半精度的情况下,可以将对应于最大值(M)的指数之和调低到'60'。
使用对应的调整和,然后可以对每一个原始输入确定相应的新的指数(过程框170)。对于第一输入和第二输入,如果第一输入和第二输入的指数的调整和是偶数,则可以通过将调整和除以二来确定第一输入和第二输入中的每一个的新指数。因此,第一输入的调整指数可以等于第二输入的调整指数。另一方面,如果调整和是奇数,则可以通过调整和除以二的发言(taking the floor)来确定第一输入的调整指数,并且可以通过调整指数除以二然后加'1'的发言来确定第二输入的调整指数。此外,如果调整和为负(例如,小于'0'),则可以强制第一输入为'0'。
确定每一个原输入的新指数之后,可使用相应的新的指数形成一组缩放输入(过程框172)。更具体地,每一个输入的相应其余位(例如,符号位和/或尾数)可以与对应的新指数合并,以以第二数字格式形成相应的缩放输入。在一些实施例中,如果尾数的精度(例如,位宽)与第二数字格式的精度不匹配,则尾数可以在适当时被截去或零填充(zero-pad)。例如,将输入从bfloat16缩放到半精度可能涉及将尾数从七位零填充到十位。此外,通过将诸如符号位和尾数的其余位与相应的新指数合并,每一个缩放输入的格式可以适合于输入到DSP电路60。
现在返回到图6,过程140的所示实施例然后进行对缩放输入执行运算(过程框144)。在一些实施例中,该运算涉及点积运算。例如,在将每一个输入的其余位与第二数字格式的对应的新输入合并之后,输入电路62可以将缩放输入路由到DSP电路60,DSP电路60可以使用缩放输入来确定点积。
对输入执行的运算可产生结果,其可以以第二数字格式或第三数字格式来表示,诸如单精度。例如,在一些实施例中,为了减少由多个半精度操作数的和产生的溢出,可以使用一个或多个单精度加法器和/或单精度组合电路来产生单精度结果。因此,运算的结果可以缩放到第一格式(例如,输入的原始格式)(过程框146)。在一些实施例中,将结果缩放到第一格式可以涉及将结果的范围缩放回第一格式的原始范围。因此,缩放结果可以涉及使用指数的和的最大值(M)和整数来确定结果偏移(Wout)。例如,可以通过从和的最大值(M)减去整数来确定结果偏移(Wout)。可以基于输入的格式(例如,第一格式)、DSP电路60的输入电路62处预期的格式(例如,第二格式)、DSP电路60的内部数字格式或其适合组合来对整数进行确定和/或编程。此外,如果指数非零,则可以将结果偏移(Wout)与结果的指数进行求和以缩放指数。如果指数为零,则可以将指数与零求和和/或可以绕过求和运算,使得指数保持为零。因此,虽然以另一种格式执行运算,但是来自DSP电路60的输出的格式可以通过例如后缩放电路104调整为输入的格式。也就是说,例如,可以在处理之前和之后调整输入的数字表示,使得可以通过以另一种格式执行的运算来仿真以第一格式执行的运算。
现在转到图8,虽然本文描述的DSP电路60用四个乘法器64实现(例如,实现为接收多达八个独立输入),但是本文描述的技术可以应用于更大的乘法器结构(例如,点积结构),诸如扩展的算术运算仿真电路180。因此,在一些实施例中,预缩放电路102可以包括附加输入电路106。此外,由于预缩放电路102可基于至预缩放电路102的每一个输入来确定指数对的和的最大值(M),所以对应于附加输入电路106的指数对的和可用于确定和(M)的最大值。例如,在图8的所示的实施例中,预缩放电路102被实现为接收三十二个输入(例如,十六个输入的两个向量(A和B))。这样,预缩放电路102可以确定指数对的十六个和的最大值(M)。如上所述,预缩放电路102然后可以至少使用使用最大值(M)确定的偏移值(W)来缩放三十二个输入中的每一个。
如进一步所示,经缩放的输入可被以群路由到适合数量的DSP电路60。例如,缩放输入可以以八的群被路由到具有四个乘法器的组的DSP电路60。附加地或替代地,DSP电路60可以用更多或更少数量的乘法器64来实现,这可以改变路由到DSP电路60的每一个群中包括的输入的数量和/或群的数量。每一个DSP电路60然后可以确定最终点积的部分。例如,DSP电路60可以确定第一对输入的第一乘积,可以确定第二对输入的第二乘积,并且可以输出第一乘积和第二乘积的和。
为了产生输入的点积的最终结果,可对每一个DSP电路60的输出进行求和。因此,在一些实施例中,扩展算术运算仿真电路180可以包括一个或多个加法器66,其可以在加法器树68中构造,实现为对DSP电路60的输出进行求和。此外,因为每一个DSP电路60可以产生单精度浮点输出,所以可以实现加法器66以添加单精度浮点输入并产生单精度浮点和。因此,由DSP电路60的每一个输出的和产生的最终的点积可以被格式化为单精度浮点数字。
为此,扩展算术运算仿真电路180可以包括后缩放电路104以缩放最终的点积。如图所示,例如,最终的点积可以被从单精度浮点格式缩放到bfloat16。为此,扩展乘法器结构可以将结果偏移值(Wout)路由到后缩放电路104。如上所述,后缩放电路104可以使用结果偏移值(Wout)来将最终点积的指数缩放回预缩放电路102的输入的原始范围。为了确定结果偏移值(Wout),在预缩放电路102处确定的最大和值(M)可以被路由到减法器108。减法器可以从最大和值(M)减去基于第一格式(例如,bfloat16)、第二格式(例如,半精度浮点)、DSP电路60的内部数字格式(例如,FP16+++)或其组合确定的整数(例如,'284'),以产生结果偏移值(Wout)。
尽管在扩展算术运算仿真电路180的所示实施例中被实现为接收bfloat16输入,但是扩展算术运算仿真电路180可被实现为接收任何适合的数字格式,诸如半精度浮点、单精度浮点和/或扩展精度格式。此外,如上所述,DSP电路60可以被实现为接收任何适合的格式。因此,可以实现扩展乘法器结构的预缩放电路102,以将接收的输入的格式调整为适合于DSP电路60的格式,诸如半精度浮点、单精度浮点等。此外,可以实现后缩放电路104以将最终点积调整为与由预缩放电路102接收的输入的格式相对应的任何格式。因此,这里描述的实施例旨在是说明性的而不是限制性的。
此外,在一些实施例中,这里描述的技术可以递归地实现。例如,在一些实施例中,扩展算术运算仿真电路180的加法器树68可以由一个或多个分级级别的附加算术运算仿真电路100和/或附加扩展算术运算仿真电路180替代。因而,代替对扩展算术运算仿真电路180的DSP电路60的输出进行求和,可以对输出进行缩放并将其路由到附加算术运算仿真电路100。更具体地,扩展算术运算仿真电路180的后缩放电路104可以将所示出的DSP电路60的每一个输出调整为至扩展算术运算仿真电路180的输入的原始范围和/或数字格式(例如,bfloat16),并且缩放输出可以被路由到附加算术运算仿真电路100。附加算术运算仿真电路100可以,如参考图5所述,包括适合于将每一个缩放输出缩放到适合于附加算术运算仿真电路100的DSP电路60的数字格式(例如,半精度浮点)的预缩放电路102。与适合于扩展算术运算仿真电路180的DSP电路60的数字格式相比,适合于附加算术运算仿真电路100的DSP电路60的数字格式可以相同或不同。
DSP电路60然后可对缩放输出执行一个或多个算术运算。该一个或多个算术运算可以相同或不同于与由扩展算术运算仿真电路180的DSP电路60执行的一个或多个算术运算。例如,DSP电路60可以计算点积和/或附加的MAC运算。此外,这里描述的DSP电路60包括八个独立输入。因此,可以采用DSP电路60的一半输入来对至附加算术运算仿真电路100的输入执行算术运算。替代地,用四个独立输入实现的DSP电路60(例如,输入电路62)的实施例可以包括在附加算术运算仿真电路100中。
附加算术运算仿真电路100可以使用后缩放电路104将DSP电路60的输出缩放回在附加算术运算仿真电路100的预缩放电路102处接收的原始格式(例如,bfloat16)。在一些实施例中,附加算术运算仿真电路100的缩放输出可表示在一个或多个算术运算仿真电路100和/或扩展算术运算仿真电路180处执行的一系列的一个或多个递归算术运算的最终结果。替代地,附加算术运算仿真电路的缩放输出然后可接着馈入另一算术运算电路100。
此外,在一些实施例中,代替在将输出路由到附加算术运算仿真电路100之前,将扩展算术运算仿真电路180的DSP电路60的输出缩放为扩展算术运算仿真电路180的输入的原始格式(例如,bfloat16),可以将输出直接路由到附加算术运算仿真电路100。在这种情况下,附加算术运算仿真电路100然后可以将输出从例如单精度浮点格式缩放到适合于附加算术运算仿真电路100的DSP电路60的格式(例如,半精度浮点)。此外,DSP电路60的输出可以由附加算术运算仿真电路100的后缩放电路104缩放回由扩展算术运算仿真电路180的DSP电路60输出的格式(例如,单精度浮点)。因此,扩展算术运算仿真电路180的后缩放电路104可以将附加算术运算仿真电路100的输出缩放到至扩展算术运算仿真电路180的输入的格式104(例如,从单精度浮点格式到bfloat16)。
此外,集成电路器件12可以是数据处理系统,或者可以是数据处理系统的组件。例如,集成电路器件12可以是图9所示的数据处理系统200的组件。数据处理系统200可包括主机处理器202、存储器和/或存储电路204、和网络接口206。数据处理系统200可以包括更多或更少的组件(例如,电子显示器、用户接口结构、专用集成电路(ASIC))。主机处理器202可以包括可以管理用于数据处理系统200的数据处理请求(例如,用于执行加密、解密、机器学习、视频处理、语音识别、图像识别、数据压缩、数据库搜索排名、生物信息学、网络安全模式识别、空间导航等)的任何适合的处理器,诸如
Figure BDA0002180681800000211
处理器或精简指令处理器(例如,精简指令集计算机(RISC),高级RISC机器(ARM)处理器)。存储器和/或存储电路204可以包括随机存取存储器(RAM)、只读存储器(ROM)、一个或多个硬盘驱动器、闪存等。存储器和/或存储电路204可以保持要由数据处理系统200处理的数据。在一些情况下,存储器和/或存储电路204还可以存储用于对集成电路器件12进行编程的配置程序(位流)。网络接口206可以允许数据处理系统200与其他电子设备通信。数据处理系统200可以包括若干不同的封装,或者可以包含在单个封装衬底上的单个封装内。
在一个示例中,数据处理系统200可以是处理各种不同的请求的数据中心的部分。例如,数据处理系统200可以经由网络接口206接收数据处理请求,以执行加密、解密、机器学习、视频处理、语音识别、图像识别、数据压缩、数据库搜索排名、生物信息学、网络安全模式识别、空间导航或一些其他专门任务。主处理器202可以使集成电路器件12的可编程逻辑结构编程有适合于实现所请求任务的加法器。例如,主机处理器202可以指示将存储在存储器和/或存储电路204上的配置数据(位流)编程到集成电路器件12的可编程逻辑结构中。配置数据(位流)可以表示用于缩放电路26的电路设计,其可以根据这里描述的技术被映射到可编程逻辑,以调整硬逻辑(例如DSP电路60)的输入和/或输出的数字表示。通过调整输入的数字表示,可以通过以第二格式执行的算术运算的缩放结果来对以第一格式执行的算术运算进行仿真。这样,即使当集成电路器件12缺乏对请求的任务的处理中所涉及的一个或多个变量(例如,输入)的数字格式的硬件支持时,集成电路器件12也可以帮助数据处理系统200执行所请求的任务。
尽管在本公开中阐述的实施例可以容许各种修改和替代形式,但具体实施例已通过示例在附图中示出,并已于此详细描述。例如,可以实现于此描述的实施例和/或技术的任何适合的组合。因此,应该理解的是,本公开不旨在限于所公开的特定形式。本公开内容将覆盖落入由以下所附权利要求限定的本公开的精神和范围内的所有修改、等同和替代。
提出并在此要求保护的技术被引用并应用于实践性质的具体示例和实质目的,实践性质的具体示例和实质目的显然改善本技术领域、且不是抽象的、无形的或纯理论的。此外,如果附加到本说明书末尾的任何权利要求包含一个或多个被指定为“[执行][功能]...的装置”或“[执行][功能]......的步骤”的元件,则其意图这些要素将根据35U.S.C 112(f)解释。但是,对于包含以任何其他方式指定的元素的任何权利要求,意图是这些要素不应根据35U.S.C 112(f)进行解释。

Claims (20)

1.一种集成电路器件,包括:
第一组合电路,其中,所述第一组合电路包括第一输入电路,所述第一输入电路被配置为接收具有第一范围的第一组输入,并且其中,所述第一组合电路被配置为将所述第一组输入中的每一个的相应指数从所述第一范围缩放到第二范围以产生第一组缩放输入,其中,所述第二范围小于所述第一范围;
第一算术电路,被配置为对所述第一组缩放输入执行一个或多个算术运算并产生具有第三范围的输出,其中,所述第一算术电路包括通信地耦合到所述第一组合电路的第二输入电路;以及
第二组合电路,通信地耦合到所述第一算术电路并且被配置为通过将所述输出从所述第三范围缩放到所述第一范围来产生缩放输出。
2.如权利要求1所述的集成电路器件,其中,缩放所述第一组输入中的每一个的所述相应指数包括:
确定第一组指数和,其中,确定所述第一组指数和包括对于所述第一组输入中的每对输入,对相应对中的相应第一输入的第一指数和相应对中的相应第二输入的第二指数进行求和;以及
至少部分地基于所述第一组指数和中的最大指数和,将所述第一组输入中的每一个的所述相应指数从所述第一范围缩放到所述第二范围。
3.如权利要求2所述的集成电路器件,其中,所述第一算术电路包括乘法器,且其中,所述相应对中的所述相应第一输入对应于所述乘法器的第一输入且所述相应对输入中的所述相应第二输入对应于所述乘法器的第二输入。
4.如权利要求1-3中任一项所述的集成电路器件,其中,所述一个或多个算术运算包括点积。
5.如权利要求1-3中任一项所述的集成电路器件,其中,所述第一组输入中的每一个的数字格式包括bfloat16。
6.如权利要求1所述的集成电路器件,包括:
第三组合电路,其中,所述第三组合电路包括第三输入电路,所述第三输入电路被配置为接收具有所述第一范围的第二组输入,其中,所述第二组输入包括所述缩放输出,并且其中,所述第三组合电路被配置为将所述第二组输入中的每一个的相应指数从所述第一范围缩放到所述第二范围,以产生第二组缩放输入;
第二算术电路,被配置为对所述第二组缩放输入执行一个或多个附加算术运算并产生具有所述第三范围的附加输出,其中,所述第二算术电路包括通信地耦合到所述第三组合电路的第四输入电路;以及
第四组合电路,通信地耦合到所述第二算术电路并且被配置为将所述附加输出从所述第三范围缩放到所述第一范围。
7.如权利要求1所述的集成电路器件,包括:
第三组合电路,其中,所述第三组合电路包括第三输入电路,所述第三输入电路被配置为接收具有第四范围的第二组输入,并且被配置为将所述第二组输入中的每一个的相应指数从所述第四范围缩放到第五范围,以产生第二组缩放输入;
第二算术电路,被配置为对所述第二组缩放输入执行一个或多个算术运算并产生具有所述第一范围的附加输出,其中,所述第一输入电路通信地耦合到所述第二算术电路,其中,所述第一组输入包括所述附加输出;以及
第二组合电路,通信地耦合到所述第二算术电路并且被配置为通过将所述缩放输出从所述第一范围缩放到所述第四范围来产生附加缩放输出。
8.如权利要求1-3中任一项所述的集成电路器件,其中,所述第一算术电路包括被配置为执行所述一个或多个算术运算中的至少一个的乘法器。
9.如权利要求1-3中任一项所述的集成电路器件,其中,所述第一算术电路包括硬逻辑。
10.如权利要求1-3中任一项所述的集成电路器件,其中,所述集成电路器件包括现场可编程门阵列。
11.一种硬件实现的方法,包括:
在第一输入电路处接收具有第一数字格式的一组输入,其中,所述第一数字格式包括第一范围;
使用预缩放电路将所述一组输入中的每一个从所述第一数字格式缩放到不同于所述第一数字格式的第二数字格式,以产生一组缩放输入,其中,所述第二数字格式包括低于所述第一范围的第二范围;
使用硬化算术电路接收根据所述第二数字格式的所缩放的一组输入;
使用所述硬化算术电路对所缩放的一组输入执行一个或多个算术运算以产生具有第三数字格式的输出,其中,所述第三数字格式包括第三范围;以及
使用后缩放电路将所述输出从所述第三数字格式缩放到所述第一数字格式。
12.如权利要求11所述的硬件实现的方法,其中,所述一组缩放输入中的第一输入的指数和所述一组缩放输入中的第二缩放输入的指数被均衡。
13.如权利要求11所述的硬件实现的方法,其中,缩放所述一组输入中的每一个包括:
确定一组指数和,其中,确定所述一组指数和包括对于所述一组输入中的每一对,对相应对中的相应第一输入的第一指数和所述相应对中的相应第二输入的第二指数进行求和;
确定所述一组指数和的最大指数和;以及
至少部分地基于所述一组指数和中的最大指数和,将所述一组输入中的每一个的相应指数从所述第一范围缩放到所述第二范围。
14.如权利要求13所述的硬件实现的方法,其中,至少部分地基于所述一组指数和中的所述最大指数和来缩放所述第一组输入的所述相应指数包括:
至少部分地基于所述一组指数和中的所述最大指数和以及所述第二数字格式的最大有偏指数值来确定偏移值;
从所述一组指数和中的每一个减去所述偏移值,以产生一组调整指数和;以及
至少部分地基于所述一组调整指数和中的对应的调整指数和来确定对于所述一组输入中的每一个的相应缩放指数。
15.如权利要求14所述的硬件实现的方法,其中,确定对于所述相应对中的所述相应第一输入的所述相应缩放指数包括:
将所述调整指数和右移一位或多位;以及
其中确定对于所述相应对输入中的所述相应第二输入的所述相应缩放指数包括:
将所述调整指数和右移一位或多位;以及
当所述调整指数和为奇数时:
对所移位的调整指数和与所述调整指数和的最低有效位进行求和。
16.如权利要求13所述的硬件实现的方法,其中,将所述输出从所述第三数字格式缩放到所述第一数字格式包括:
至少部分地基于所述一组指数和中的所述最大指数和以及所述第一数字格式的最大有偏指数值来确定偏移值;以及
对所述偏移值与所述输出的指数进行求和。
17.如权利要求11或12所述的硬件实现的方法,其中,缩放所述一组输入中的每一个包括将所述一组输入中的每一个的相应指数从第一位数缩放到第二位数。
18.如权利要求11或12所述的硬件实现的方法,其中,将所述一组输入中的每一个从所述第一数字格式缩放到所述第二数字格式包括以下之一:从所述一组输入中的每一个的相应尾数中截去一个或多个位;或零填充一个或多个位到所述一组输入的所述相应尾数。
19.一种有形的、非暂时性的机器可读介质,包括用于构造加法器电路的机器可读指令,所述机器可读指令在由一个或多个处理器执行时使得所述一个或多个处理器用于:
配置包括第一输入电路的第一组合电路,以便:
接收具有第一范围的一组输入;
将所述一组输入中的每一个的相应指数从所述第一范围缩放到第二范围,以产生一组缩放输入,其中,所述第二范围低于所述第一范围;以及
将所述一组缩放输入路由到第一数字信号处理(DSP)电路,所述第一数字信号处理(DSP)电路被配置为对所述一组缩放输入执行一个或多个算术运算并产生具有第三范围的输出,其中,所述第一DSP电路包括通信地耦合到所述第一组合电路的第二输入电路;以及
配置通信地耦合到所述DSP电路的第二组合电路,以通过将所述输出从所述第三范围缩放到所述第一范围来产生缩放输出。
20.如权利要求19所述的有形的、非暂时性机器可读介质,其中,配置所述第二组合电路,以通过将所述输出从所述第三范围缩放到所述第一范围来产生所述缩放输出包括:
当所述输出的指数的值为非零时,将所述第二组合电路配置为:
将偏移值与所述输出的所述指数进行求和;以及
当所述输出的所述指数的所述值为零时,将所述第二组合电路配置为:
将所述指数的所述值保持为零。
CN201910795048.9A 2018-09-27 2019-08-27 浮点动态范围扩展 Pending CN110955406A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/145,149 2018-09-27
US16/145,149 US11294626B2 (en) 2018-09-27 2018-09-27 Floating-point dynamic range expansion

Publications (1)

Publication Number Publication Date
CN110955406A true CN110955406A (zh) 2020-04-03

Family

ID=65231062

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910795048.9A Pending CN110955406A (zh) 2018-09-27 2019-08-27 浮点动态范围扩展

Country Status (3)

Country Link
US (2) US11294626B2 (zh)
CN (1) CN110955406A (zh)
DE (1) DE102019120838A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10963246B2 (en) * 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
BR112021016106A2 (pt) 2019-03-15 2021-11-09 Intel Corp Processador gráfico de propósito geral, método e sistema de processamento de dados
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2021073512A1 (zh) * 2019-10-14 2021-04-22 安徽寒武纪信息科技有限公司 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US20210319079A1 (en) * 2020-04-10 2021-10-14 Samsung Electronics Co., Ltd. Supporting floating point 16 (fp16) in dot product architecture
JP2022016795A (ja) * 2020-07-13 2022-01-25 富士通株式会社 情報処理装置、情報処理プログラムおよび情報処理方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5459681A (en) * 1993-12-20 1995-10-17 Motorola, Inc. Special functions arithmetic logic unit method and apparatus
US6978287B1 (en) * 2001-04-04 2005-12-20 Altera Corporation DSP processor architecture with write datapath word conditioning and analysis
ITTO20021081A1 (it) * 2002-12-13 2004-06-14 St Microelectronics Srl Procedimento e dispositivo per la moltiplicazione in virgola mobile, relativo prodotto informatico.
US7240184B2 (en) * 2004-11-10 2007-07-03 Nvidia Corporation Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations
JP4461135B2 (ja) * 2006-12-25 2010-05-12 富士通株式会社 演算回路及び演算方法並びに情報処理装置
US9053045B1 (en) * 2011-09-16 2015-06-09 Altera Corporation Computing floating-point polynomials in an integrated circuit device
US9489174B2 (en) * 2014-09-26 2016-11-08 Imagination Technologies Limited Rounding floating point numbers
JP7114622B2 (ja) * 2017-05-17 2022-08-08 グーグル エルエルシー ハードウェアにおける行列乗算の実行

Also Published As

Publication number Publication date
DE102019120838A1 (de) 2020-04-02
US11294626B2 (en) 2022-04-05
US20220222040A1 (en) 2022-07-14
US20190042193A1 (en) 2019-02-07

Similar Documents

Publication Publication Date Title
CN110955406A (zh) 浮点动态范围扩展
US11256978B2 (en) Hyperbolic functions for machine learning acceleration
US11907719B2 (en) FPGA specialist processing block for machine learning
CN114402289B (zh) 多模式运算电路
US11809798B2 (en) Implementing large multipliers in tensor arrays
CN104423926A (zh) 浮点加法器电路
CN110955861A (zh) 用于高带宽、低延迟机器学习的电路
CN110716707A (zh) 前缀网络定向的加法
US20180129474A1 (en) Closepath fast incremented sum in a three-path fused multiply-add design
US20210326111A1 (en) FPGA Processing Block for Machine Learning or Digital Signal Processing Operations
US9904512B1 (en) Methods and apparatus for performing floating point operations
US20220230057A1 (en) Hyperbolic functions for machine learning acceleration
EP3841461B1 (en) Digital circuit with compressed carry
CN109196465B (zh) 双精度浮点运算
US20210326116A1 (en) High precision decomposable dsp entity
US20210117157A1 (en) Systems and Methods for Low Latency Modular Multiplication
US20180129473A1 (en) Fast sticky generation in a far path of a floating point adder
CN110199255B (zh) 组合若干执行单元以计算单一宽标量结果
US20240028295A1 (en) Efficient logic blocks architectures for dense mapping of multipliers
JP2022101463A (ja) 浮動小数点仮数のための丸め回路
CN116340249A (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