CN112241252A - 用于处理浮点数的设备和方法 - Google Patents

用于处理浮点数的设备和方法 Download PDF

Info

Publication number
CN112241252A
CN112241252A CN202010646442.9A CN202010646442A CN112241252A CN 112241252 A CN112241252 A CN 112241252A CN 202010646442 A CN202010646442 A CN 202010646442A CN 112241252 A CN112241252 A CN 112241252A
Authority
CN
China
Prior art keywords
floating
sign
numbers
floating point
circuit
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
CN202010646442.9A
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN112241252A publication Critical patent/CN112241252A/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/485Adding; Subtracting
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • 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/50Adding; Subtracting
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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/74Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders

Landscapes

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

Abstract

本发明公开了电路和相关联的方法,用于处理两个浮点数(A、B)以生成所述两个数字之和(A+B)与所述两个数字之差(A‑B)。所述方法包括使用相同符号浮点加法器(1020)来计算(806)所述两个浮点数的所述绝对值之和(|A|+|B|),以产生第一结果。所述方法还包括计算(808)所述绝对值之差(|A|‑|B|),以产生第二结果。基于所述第一结果(|A|+|B|)、所述第二结果(|A|‑|B|)和每个浮点数的所述符号来生成(810、812)所述和(A+B)与所述差(A‑B)。

Description

用于处理浮点数的设备和方法
背景技术
浮点算术在多种应用中很有用,包括但不限于图形、数据处理、图像处理、信号处理、控制算法、科学编程,以及许多其他应用。将浮点数相加在一起是浮点算术中最基本的操作之一,并且在各种不同的应用和实施中都是普遍存在的。
浮点加法可以例如通过在通用处理单元上执行合适的指令来在软件中实现。替代性地,浮点加法可以例如通过适当地配置固定功能电路在硬件中实现。一般来讲,与硬件实施相比,软件实施允许更大的灵活性(例如,就设计时间之后改变加法运算而言,例如改变要相加在一起的数字的数量);然而,一般来讲,与软件实施相比,硬件实施提供更有效的操作(例如,就更低的等待时间和更低的功耗而言)。因此,如果认为操作的效率比灵活性更重要(例如,如果已知需要在功耗和等待时间非常重要的装置,诸如电池供电的移动装置(例如,智能电话、平板电脑或膝上型电脑)中多次执行特定类型的加法操作),那么硬件实施可能比软件实施更合适。
发明内容
提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
当在专用硬件中实现任何功能性(例如,浮点加法)时,硬件的大小是一个考虑因素,特别是要在大小受到严格限制的装置例如在移动装置中使用该硬件时。因此,在设计用于处理单元的硬件时,需要在以下方面进行权衡:(i)功耗,(ii)处理性能,以及(iii)大小(也可以被称为“半导体面积”或“硅面积”)。可以对这些因素中的一个因素进行改进(例如,降低功耗、提高处理性能或减少硅面积),但这可导致其他一个或两个因素的恶化(例如,增加功耗、降低处理性能或增加硅面积)。本文描述了用于处理将被相加在一起的至少三个浮点数的集合的加法器电路和相关联的方法,该加法器电路和相关联的方法可以提供这些因素中的一个或多个因素的改进,而不必导致其他一个或多个因素的恶化。该方法包括从至少三个数字中标识具有相同符号的至少两个数字,即,均为正或均为负的至少两个数字。使用一个或多个相同符号浮点加法器将所标识的至少两个数字相加在一起。相同符号浮点加法器包括被配置为将具有相同符号的浮点数相加在一起的电路,而不包括被配置为将具有不同符号的数字相加在一起的电路。
根据一个方面,提供了一种处理输入集合的机器实现的方法,该输入集合包括至少三个待求和的浮点数,该输入集合包括一个或多个正数和一个或多个负数,该方法包括:
接收输入集合的至少三个浮点数;
标识输入集合中具有相同符号的至少两个数字;以及
使用一个或多个相同符号浮点加法器将所标识的至少两个数字相加在一起,以产生一个或多个部分求和结果,
其中一个或多个相同符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中一个或多个相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
本发明人已经认识到两点。首先,如果提前知道浮点数具有相同的符号,则将浮点数加在一起比较容易。其次,在三个数字的任何集合中,至少必须存在两个数字具有相同的符号(或更一般地,在(2n)或(2n-1)个数字的任何集合中,至少存在n个数字具有相同的符号)。可以利用这种组合的标识,通过首先标识并且将具有相同符号的数字相加在一起来简化将至少三个浮点数的任何集合相加在一起的过程。
可以使用2:1相同符号加法器(即,具有两个输入端和一个输出端的相同符号加法器)将具有相同符号的两个数字相加在一起。
可以使用两个2:1相同符号加法器将具有相同符号的三个数字相加在一起,其中第一加法器的输出端将输入中的一个输入提供给第二加法器。替代性地,可以提供单个3:1相同符号加法器(即,具有三个输入端和一个输出端的相同符号加法器),以将具有相同符号的三个数字相加在一起。将具有相同符号的三个数字有效地相加在一起可能是有用的,例如,当期望将五个数字(具有任意符号)相加在一起时,因为在五个数字的任何集合中,至少存在三个共享相同符号的数字。
在使用多个相同符号浮点加法器将所标识的具有相同符号的数字相加在一起的情况下,加法器中的至少一些可以串联布置(即,一个或多个加法器的输出端将输入提供给一个或更多其他加法器)。加法器的串联布置可以包括具有多个层的树,其中树的每一层具有许多输入,并且产生的中间结果的数量小于输入的数量,其中中间结果作为输入被提供给下一层。
优选地,不使用混合符号加法器来产生一个或多个部分求和结果。
该方法还可以包括输出一个或多个部分求和结果和来自输入集合的每个剩余的数字。在此,“剩余的数字”是意指除所标识的具有相同符号的至少两个数字之外的数字。
该方法还可以包括:将一个或多个部分求和结果和来自输入集合的每个剩余的数字相加在一起,从而计算输入集合的总和,其中所述将一个或多个部分求和结果和来自输入集合的每个剩余的数字相加在一起包括使用在固定功能电路中实现的至少一个混合符号浮点加法器,该固定功能电路被配置为将具有相同或不同符号的浮点数相加在一起。
该方法还可以包括:使用混合符号浮点加法器将从输入集合导出的多个数字相加在一起,其中多个数字中的至少一个数字是由相同符号浮点加法器产生的部分求和结果,从而计算输入集合的总和,其中混合符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同或不同符号的浮点数相加在一起。
一个或多个相同符号浮点加法器可以包括相同符号浮点加法器的第一阵列和相同符号浮点加法器的第二阵列,其中标识具有相同符号的至少两个数字包括:至少评估输入集合的每个浮点数的符号位;仅当输入集合的每个浮点数的符号位为零时,才将该浮点数传递到第一阵列的相应的输入;仅当输入集合的每个浮点数的符号位为一时,才将该浮点数传递到第二阵列的相应的输入;该方法还包括将第二阵列的输出与第一阵列的输出进行组合。
组合可以包括使用浮点减法器(特别是如果第二阵列的输出表示为正数)从第一阵列的输出减去第二阵列的输出。替代性地,组合可以包括将第二阵列的输出与第一阵列的输出相加(特别是如果第二阵列的输出被表示为负数)。
在该方法中,来自输入集合的正数在第一阵列中相加在一起,并且来自输入集合的负数在第二阵列中相加在一起。
第一阵列的输入数量可以等于输入集合中浮点数的数量。第二阵列的输入数量可以等于输入集合中浮点数的数量。
第一阵列和第二阵列可以由两个不同的阵列实现。两个不同的阵列可以同时操作。
第一阵列和第二阵列可以由单个阵列来实现,该单个阵列在第一时间***作为第一阵列并且在不同的第二时间***作为第二阵列。
标识具有相同符号的至少两个数字可以包括将输入集合分类为正数和负数。
一个或多个相同符号浮点加法器可以包括相同符号浮点加法器的阵列,该阵列具有多个输入,并且其中将所标识的至少两个数字相加在一起可以包括:将一些或全部正数传递到多个输入的相应的第一子集;并且将一些或全部负数传递到多个输入的相应的第二子集,使得阵列中的每个相同符号浮点加法器均接收具有相同符号的输入。
标识具有相同符号的至少两个数字可以包括确定两个以上的数字具有相同的符号;以及在具有相同符号的两个以上数字中,标识具有最小绝对值的至少两个数字。
根据另一方面,提供了一种加法器电路,该加法器电路被配置为处理包括至少三个待求和的浮点数的输入集合,该输入集合包括一个或多个正数和一个或多个负数,该电路包括:
输入,该输入被配置为接收输入集合的至少三个浮点数;
多路复用逻辑,该多路复用逻辑被配置为标识输入集合中具有相同符号的至少两个数字;以及
一个或多个相同符号浮点加法器,该一个或多个相同符号浮点加法器被配置为将所标识的至少两个数字相加在一起,以产生一个或多个部分求和结果,
其中一个或多个相同符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中一个或多个相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
加法器电路还可以包括:第一输出端,该第一输出端被配置为输出一个或多个部分求和结果;以及第二输出端,该第二输出端被配置为输出来自输入集合的每个剩余的数字,而不是所标识的具有相同符号的至少两个数字。
加法器电路还可以包括在固定功能电路中实现的至少一个混合符号浮点加法器,该固定功能电路被配置为将具有相同或不同符号的浮点数相加在一起,其中所述至少一个混合符号浮点加法器的第一输入端被耦接到一个或多个相同符号浮点加法器的输出端,并且所述至少一个混合符号浮点加法器的第二输入端被配置为接收来自输入集合的至少一个剩余的数字,而不是所标识的至少两个数字。
加法器电路还可以包括在固定功能电路中实现的至少一个混合符号浮点加法器,该固定功能电路被配置为将具有相同或不同符号的浮点数相加在一起,其中至少一个混合符号浮点加法器被配置为将从输入集合导出的多个数字相加在一起,从而计算输入集合的总和,其中多个数字中的至少一个数字是由相同符号浮点加法器产生的部分求和结果。
还提供了一种复合加法器电路,该复合加法器电路包括本文概述的(具有相同类型或不同类型的,以任何方式组合的)多个电路,其中一个加法器电路的输出端耦接到另一个加法器电路的输入端。
在一些示例中,一个或多个相同符号浮点加法器包括相同符号浮点加法器的第一阵列和相同符号浮点加法器的第二阵列,其中复用逻辑被配置为:至少评估输入集合的每个浮点数的符号位;仅当输入集合的每个浮点数的符号位为零时,才将该浮点数传递到第一阵列的相应的输入;并且仅当输入集合的每个浮点数的符号位为一时,才将该浮点数传递到第二阵列的相应的输入,加法器电路还包括被配置为将第二阵列的输出与第一阵列的输出组合的浮点减法器或混合符号浮点加法器。如上所述,组合可以包括减去或相加。
第一阵列和第二阵列中的每一者可以包括相同符号浮点加法器的对数树。
第一阵列和第二阵列可以是硬件中的两个不同的物理阵列。特别地,这两个阵列可以被布置成彼此并联操作。
第一阵列和第二阵列可以由硬件中的单个物理阵列提供,其中复用逻辑被配置为:在第一时间间隔中将符号位为零的浮点数传递到单个阵列;并且在第二不同的时间间隔中将符号位为一的浮点数传递到单个阵列。
复用逻辑可以被配置为将输入集合分类为正数和负数。
一个或多个相同符号浮点加法器可以包括相同符号浮点加法器的阵列,该阵列具有多个输入,其中多路复用逻辑包括旋转多路复用器,被配置为将正数和负数之间的边界与阵列中两个相同符号浮点加法器之间的边界对准,使得阵列中的每个相同符号浮点加法器均接收具有相同符号的输入。
还公开了其他电路和相关联的方法,用于处理两个浮点数以生成两个数字之和,以及两个数字之差。该方法包括使用相同符号浮点加法器来计算两个浮点数的绝对值之和,以产生第一结果。该方法还包括计算绝对值的差以产生第二结果。基于第一结果、第二结果和每个浮点数的符号来生成和与差。
发明人已经认识到,计算两个数字之和与两个数字之差始终涉及将具有相同符号的两个数字相加在一起。因此,在该上下文中,还可以使用相同符号浮点加法器。
根据一个方面,提供了一种机器实现的方法,用于处理包括两个浮点数的输入集合,每个浮点数具有符号,以生成两个浮点数之和与两个浮点数之差,该方法包括:
接收输入集合的两个浮点数;
使用相同符号浮点加法器来计算两个浮点数的绝对值之和,以产生第一结果;
使用浮点减法器来计算两个浮点数的绝对值之差以产生第二结果;以及
基于以下项生成两个浮点数之和以及两个浮点数之差:第一结果、第二结果,以及每个浮点数的符号,
其中相同符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
生成两个浮点数之和以及两个浮点数之差可以包括:从第一结果和第二结果中的一者生成两个浮点数之和;以及从第一结果和第二结果中的另一者生成两个浮点数之差。
生成两个浮点数之和和两个浮点数之差可以包括基于两个浮点数的每个浮点数的符号来校正第一结果的符号和第二结果的符号。
根据另一方面,提供了一种电路,该电路被配置为处理包括两个浮点数的输入集合,每个浮点数具有符号,以生成两个浮点数之和与两个浮点数之差,该电路包括:
输入,该输入被配置为接收输入集合的两个浮点数;
相同符号浮点加法器,该相同符号浮点加法器被配置为计算两个浮点数的绝对值之和,以产生第一结果;
浮点减法器,该浮点减法器用于计算两个浮点数的绝对值之差,以产生第二结果;以及
多路复用和符号校正逻辑,该多路复用和符号校正逻辑被配置为基于以下项生成两个浮点数之和与两个浮点数之差:第一结果、第二结果,以及每个浮点数的符号,
其中相同符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
浮点减法器优选地在固定功能电路中实现。
在一些实施方案中,可以通过混合符号浮点加法器来实现浮点减法器。
复用和符号校正逻辑可以被配置为:从第一结果和第二结果中的一者生成两个浮点数之和;以及从第一结果和第二结果中的另一者生成两个浮点数之差。
复用和符号校正逻辑可以被配置为基于两个浮点数中的每一者的符号来校正第一结果的符号和第二结果的符号。
还提供一种处理***,该处理***包括以上概述的电路中的一者。还提供一种处理***,该处理***被配置为执行如上概述的方法。在一些实施方案中,处理***可以是图形处理***或人工智能加速器***。此类***可以体现在集成电路上的硬件中。
还提供了一种使用集成电路制造***、如上概述的电路或如上概述的处理***的制造方法。该制造方法包括:使用布局处理***来处理电路或处理***的计算机可读描述,以生成体现该电路或处理***的集成电路的电路布局描述;以及使用集成电路生成***,根据电路布局描述制造电路或处理***。
还提供了集成电路定义数据集,当在集成电路制造***中进行处理时,该集成电路定义数据集配置集成电路制造***以制造如上概述的电路或处理***。集成电路定义数据集可以存储在计算机可读存储介质上,优选地存储在非暂态计算机可读存储介质上。
还提供了一种计算机实现的方法,该方法处理集成电路的计算机可读描述以生成集成电路的表示,该方法包括:接收集成电路的计算机可读描述;在集成电路的计算机可读描述中,标识用于对至少三个浮点数求和的一个或多个功能块的描述;并且生成集成电路的表示,其中所述一个或多个功能块在集成电路的表示中被表示为如上概述的加法器电路的表示。
还提供了一种计算机实现的方法,该方法处理集成电路的计算机可读描述以生成集成电路的表示,该方法包括:接收集成电路的计算机可读描述;在集成电路的计算机可读描述中,标识用于计算两个浮点数之和与两个浮点数之差的一个或多个功能块的描述;并且生成集成电路的表示,其中所述一个或多个功能块在集成电路的表示中被表示为如上概述的电路的表示。
还提供了一种计算机程序代码,该计算机程序代码被配置为当代码在一个或多个处理器上运行时,致使一个或多个处理器执行如上概述的计算机实现的方法。计算机程序代码可以被存储在非暂态计算机可读存储介质上。
还提供了如上概述的电路或处理***的计算机可读描述,当在集成电路制造***中进行处理时,该计算机可读描述使集成电路制造***制造体现电路或处理***的集成电路。计算机可读描述可以被存储在计算机可读存储介质上,优选地在非暂态计算机可读存储介质上。
还公开了一种非暂态计算机可读存储介质,在该非暂态计算机可读存储介质上存储有如上概述的电路或处理***的计算机可读描述,当在集成电路制造***中进行处理时,致使集成电路制造***进行以下操作:使用布局处理***对计算机可读描述进行处理,以生成体现电路或处理***的集成电路的电路布局描述;并且使用集成电路生成***根据电路布局描述制造电路或处理***。
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是根据第一实施方案的加法器电路的示意性框图;
图2是根据第二实施方案的用于将三个浮点数相加在一起的加法器电路的示意性框图;
图3是示出根据实施方案的方法的流程图;
图4是根据第三实施方案的用于将任意数量的浮点数相加在一起的加法器电路的示意性框图;
图5是根据第四实施方案的用于将任意数量的浮点数相加在一起的加法器电路的示意性框图;
图6是根据另一个实施方案的加法器电路的示意性框图;
图7是根据另一个实施方案的用于将六个浮点数相加在一起的复合加法器电路的示意性框图;
图8示出了实现图形处理***的计算机***;
图9示出了用于生成体现图形处理***的集成电路的集成电路制造***;
图10是示出处理集成电路的计算机可读描述以生成集成电路的表示的方法的流程图;
图11是根据实施方案的用于计算两个浮点数之和与两个浮点数之差的电路的示意性框图;以及
图12是根据一个实施方案的可以由图11的电路执行的方法的流程图。
附图示出各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的群组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是,一个元件可以被设计成多个元件,或者多个元件可以被设计成一个元件。在适当时,贯穿各图使用共同附图标记来指示相似特征。
具体实施方式
在下面的优选实施方案的描述中,使用以下术语:
“相同符号浮点加法器”:只能将具有相同符号的浮点数相加在一起,而不能将具有不同符号的浮点数相加在一起的部件。换句话讲,如果相同符号浮点加法器被给予不同符号的输入,一般将给出不正确的结果(但可以存在仍然可以给出正确结果的输入值的有限组合)。在附图中,相同符号浮点加法器由标签“SS相加”表示。在本文所述的示例中,相同符号浮点加法器在被配置为将具有相同符号的浮点数相加在一起的固定功能电路中实现,但是相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
“混合符号浮点加法器”:能够将具有相同符号的浮点数相加在一起,并且能够将具有不同符号的浮点数相加在一起的部件。也就是说,当混合符号浮点加法器被给予相同或不同符号的输入时,将给出正确的结果。在附图中,混合符号浮点加法器由标签“相加”表示(因为它们是常规的浮点加法器,能够相加带符号的浮点数)。在本文所述的示例中,混合符号浮点加法器在固定功能电路中实现,该固定功能电路被配置为将具有相同或不同符号的浮点数相加在一起。
“浮点减法器”:能够将一个浮点数从另一个浮点数减去的部件。在本文所述的示例中,在固定功能电路中实现浮点减法器。在一些示例中,浮点减法器可以由混合符号浮点加法器实现(因为混合符号浮点加法器能够进行加法和减法两种操作)。
借助于示例呈现以下描述,使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。
现在仅通过示例的方式来描述实施方案。
图1示出了根据第一实施方案的加法器电路100。加法器电路100被配置为处理由三个待求和的浮点数A、B和C组成的输入集合。假设输入集合包括正数和负数的混合(但是当数字全为正数或全为负数时,加法器电路也能正常工作)。加法器电路100包括输入端,该输入端被配置为接收数字A、B和C;复用逻辑110,该复用逻辑被配置为标识输入集合中具有相同符号的两个数字;以及相同符号浮点加法器120,该相同符号浮点加法器被配置为将所标识的具有相同符号的两个数字相加在一起,从而产生部分求和结果。在图1的实施方案中,部分求和结果经由电路的第一输出端(“输出端1”)输出。第二输出端(“输出端2”)被配置为输出来自输入集合的剩余的数字,即,除了所标识的具有相同符号的两个数字之外的第三数字。这样,图1的加法器电路100用作“缩减器”,从而将需要求和的三个浮点输入减少为需要求和的两个浮点输出。如以下将更详细讨论的,该缩减器可以用作构建块以构造更大的加法器电路。
复用逻辑110包括三个复用器102、104和106。第一多路复用器102具有两个输入端,被配置为分别接收数字A和B。第二多路复用器104还具有两个输入端,被配置为分别接收数字B和C。第三多路复用器106具有三个输入端,被配置为分别接收三个数字A、B和C。每个多路复用器都具有一个输出端。第一多路复用器102的输出端耦接到相同符号浮点加法器120的一个输入端。第二多路复用器104的输出端耦接到相同符号浮点加法器120的另一个输入端。第三多路复用器106的输出端直接耦接到电路100的第二输出端。
当数字A和B具有相同的符号时,第一多路复用器102被控制为输出A,并且第二多路复用器104被控制为输出B。因此,相同符号浮点加法器120将A和B相加在一起。当数字A和C具有相同的符号时,第一多路复用器102被控制为输出A,并且第二多路复用器104被控制为输出C。因此,相同符号浮点加法器120将A和C相加在一起。同样,当数字B和C具有相同的符号时,第一多路复用器102被控制为输出B,并且第二多路复用器104被控制为输出C。因此,相同符号浮点加法器120将B和C相加在一起。在每种情况下,第三多路复用器106被控制为输出三个数字中的第三数字,即剩余的数字,既不由第一多路复用器102选择,也不由第二多路复用器104选择。为了清楚和简单起见,图1中未示出多路复用器的控制逻辑。然而,使用简单的逻辑运算对三个数字A、B和C的符号位进行实现很简单。
根据一个示例,可以如下控制多路复用器102至106。令Sa、Sb和Sc分别为A、B和C的符号位。
·如果(Sa XOR Sb),则第二多路复用器104选择C
·如果(Sa XOR Sc)与(Sa XOR Sb),则第一多路复用器102选择B
换句话讲,如果A和B的符号不同,则第二多路复用器104选择C;否则,选择B。如果A和C的符号不同并且A和B的符号不同,则第一多路复用器102选择B;否则,选择A。可以从其他两个多路复用器的控制信号生成第三多路复用器106的控制信号。替代性地,如下所述,它们可以从Sa、Sb和Sc生成。假设第三多路复用器106被实现为两个双输入多路复用器106a和106b。
·如果(Sb XOR Sc)多路复用器106a选择B而不是A
·如果(Sa XOR Sb)多路复用器106b选择多路复用器106a的输出而不是C
需注意,XOR项(Sa XOR Sb)使用了三次,因此可以共享单个XOR门。下面提供了上文综述的控制逻辑的真值表。在此,m102和m104分别是第一多路复用器102和第二多路复用器104的控制位;m106a和m106b是形成第三多路复用器106的多路复用器106a和106b的控制位。
Sa Sb Sc m102 m104 m106a m106b
0 0 0 0(A) 0(B) X 0(C)
0 0 1 0(A) 0(B) X 0(C)
0 1 0 0(A) 1(C) 1(B) 1(m106a)
0 1 1 1(B) 1(C) 0(A) 1(m106a)
1 0 0 1(B) 1(C) 0(A) 1(m106a)
1 0 1 0(A) 1(C) 1(B) 1(m106a)
1 1 0 0(A) 0(B) X 0(C)
1 1 1 0(A) 0(B) X 0(C)
如上所述,在三个数字的任何输入集合中,始终存在至少两个数字具有相同的符号。在一些情况下,所有三个数字可能同时具有相同的符号。在这种情况下,对于图1的电路,向相同符号浮点加法器120提供哪两个数字并不特别重要。然而,根据第一实施方案的修改,在这种情况下,多路复用逻辑可以选择具有最小绝对值的两个数字,并且将它们提供给相同符号加法器120。这是有利的,因为有时可以通过优先相加小数而不是将小数加到大数来提高浮点精度。在一些实施方案中,可以通过比较三个数字的指数来方便地标识最小的两个数字。当数字具有不同的指数时,这种近似将正确地标识最小的两个数字。当数字具有相同的指数时,可能无法正确地标识最小的两个数字,但这并不是一个明显的不足—在这种情况下,这些数字的数量级大致相同,并且计算的精度对加法运算的顺序应该不太敏感。
图2示出了根据第二实施方案的加法器电路130。该加法器电路包括图1的“缩减器”加法器电路100;以及混合符号浮点加法器132。混合符号浮点加法器132的输入耦接到第一实施方案的加法器电路100的输出。这样,第二实施方案的加法器电路130被配置为使用一个相同符号浮点加法器120和一个混合符号浮点加法器132将三个数字A、B和C相加在一起。混合符号浮点加法器132接收以下项作为输入:(i)由相同符号浮点加法器120产生并且在加法器电路100的第一输出端处提供的部分求和结果;以及(ii)在加法器电路100的第二输出端处提供的剩余的数字。混合符号浮点加法器132的输出被提供作为加法器电路130的输出,并且表示输入数字(A、B和C)之和的结果。
将三个数字相加在一起的朴素方法是使用两个没有多路复用逻辑的混合符号浮点加法器。混合符号浮点加法器中的第一混合符号浮点加法器将被布置成将输入数字中的两个输入数字(例如,A和B)相加。混合符号浮点加法器中的第二混合符号浮点加法器将被布置成将剩余的输入数字(例如,C)和来自第一混合符号浮点加法器的结果相加在一起,以提供表示三个输入数字之和的结果。与这种朴素方法相比,第二实施方案的加法器电路130已经用加法器电路100替代了混合符号浮点加法器中的一个混合符号浮点加法器,该加法器电路包括相同符号浮点加法器120和一些复用逻辑110。如下所述,与混合符号浮点加法器132相比,该相同符号浮点加法器120更易于进行较简单的实施(例如,具有减少的硅面积),因此可以允许三个数字的相加更有效地实现(例如,具有降低的功耗和/或减少的等待时间)。例如,发明人已经发现,通过使用相同符号浮点加法器120(而不是混合符号浮点加法器)实现的半导体面积的减少可以明显超过多路复用逻辑110所占据的附加的面积。因此,与具有两个混合符号浮点加法器的朴素加法器电路相比,使用第二实施方案的加法器电路130可以明显更为有效(例如,就硅面积、功耗和/或等待时间而言)。
图3是根据实施方案的由加法器电路执行的方法的流程图。在步骤604中,加法器电路100、130接收输入集合的三个浮点数A、B和C。在步骤606中,多路复用逻辑110标识输入集合中具有相同符号的两个数字。在步骤608中,相同符号浮点加法器120将所标识的两个数字相加在一起,以产生部分求和结果。在图1的“缩减器”加法器电路100中,在步骤610中,加法器电路100输出部分求和结果和三个数字中剩余的一个数字。在图2的加法器电路130中,在步骤612中,混合符号浮点加法器132将由相同符号浮点加法器120生成的部分求和结果与剩余的数字相加,从而计算三个输入数字A、B和C之和。在步骤612之后,在步骤614中,加法器电路130输出三个数字A、B和C之和的结果。
如本领域的技术人员从以上描述中将理解的,本公开的范围不限于将三个浮点数相加在一起。可以将相同的原理扩展到输入的任意大集合。例如,“缩减器”加法器电路100和/或加法器电路130可以树状结构实现,具有或不具有另外的混合符号加法器,以提供优于仅使用混合符号加法器实现的类似电路的改进(例如,减少的半导体面积)。在下面的讨论中,将提供用于将原理扩展到输入的任意大集合的可能架构的许多另外的示例。
图4示出了根据第三实施方案的用于将浮点数相加在一起的架构。该实施方案的加法器电路包括布置在对数树中的相同符号浮点加法器的阵列。为了简单和清楚起见,仅示出了树中的相同符号加法器的第一层220a。复用逻辑包括分类块214,该分类块被配置为按符号将输入数字A、B、C……N的集合分类为正数和负数。一般来讲,集合的大小(N)可以是任意大的。在正数的子集内,不必对数字进行分类。类似地,在负数的子集中,不必对数字进行分类。分类块214被配置为输出数字向量,其中输入集合的正数设置在向量的一个端部处,并且负数设置在向量的另一个端部处。多路复用逻辑还包括由单个多路复用器的阵列形成的旋转多路复用器212a、212b……。这些单独的多路复用器被分层布置,其中多路复用器的一个层212a、212b处于树中的相同符号浮点加法器的每一层220a的输入处。多路复用器被配置为将正数和负数之间的边界与阵列中两个相同符号浮点加法器之间的边界对齐,使得阵列中的每个相同符号浮点加法器始终接收具有相同符号的输入。参见多路复用器的第一层212a,这可以通过将分类的数字直接传递到加法器,或者将数字循环左移一位来实现,具体取决于正数的数量是奇数还是偶数。这将确保在树的每一层最多需要一次计算来对具有不同符号的两个浮点数进行运算,并且该计算位于树的右侧的可预测位置。在该位置设置有一个混合符号浮点加法器232a,以对混合符号数字进行运算。在多路复用器和加法器的连续层中重复相同的过程,直到在树的端部处提供最终的混合符号浮点加法器232n。该混合符号加法器232n在其输入端中的一个输入端处接收从相同符号浮点加法器阵列的端部输出的部分求和结果。在其另一个输入端处,混合符号加法器在上一层中接收混合符号加法器的输出。
可以通过对输入集合中正(或负)数的数量进行计数来生成用于控制多路复用器的每一层212a、212b处的循环移位的控制信号。因此,多路复用逻辑可以包括被配置为对正(或负)数进行计数的计数块216。计数输出提供控制位,因此可以在计算到达树的较低层之前就及早生成控制位。计数的最低有效位控制旋转多路复用器的第一层212a处的多路复用器。第二最低有效位控制第二层212b处的多路复用器,依此类推。这样,旋转多路复用器212a,b,……确保在每一层最多进行一次混合符号计算,并且由混合符号浮点加法器在该层树的右侧进行。
如上所述,图4的架构在每一层包括一个混合符号浮点加法器。这样成本略高。这可以通过从除最后一层以外的所有层中消除混合符号浮点加法器,并且相反将混合符号数字简单地传递到下一层直到最后一层来避免,在最后一层中提供单个混合符号浮点加法器232n。在这种情况下,为了避免在每一层增加的混合符号数字的数量,优选地增加多路复用逻辑以允许在每一层将数字向左和向右移位一位的循环移位。通过在每一层处适当地向左或向右移位,这可以确保最多存在两个混合符号数字,这些混合符号数字在每一层始终位于树的右侧。
已经发现,分类框214的实现成本可能是高昂的。在某些情况下,实现分类块214的成本(就半导体面积而言)可超过相同符号浮点加法器220a所占面积减少的益处。如果已知输入由于某种原因而被预先分类(至少被分类为正子集和负子集),则不需要包括分类块214,这将使该实施方案就半导体面积、功耗和等待时间而言成本降低。期望有一种不依赖分类的架构。图5示出了一种此类架构。
图5是根据第四实施方案的加法器电路的框图。在该实施方案中,加法器电路包括相同符号浮点加法器的第一阵列320和相同符号浮点加法器的第二阵列325。复用逻辑以块317a-n和318a-n的形式提供。电路针对每个输入浮点数包括一个块317a-n和一个块318a-n。每个阵列320、325具有等于输入集合中的(待相加在一起的)浮点数的数量的许多输入。因此,对于每个阵列,阵列的每个输入对应于输入集合中的相应的浮点数。块317a-n控制至第一阵列320的输入,而块318a-n控制至第二阵列325的输入。
每个块317被配置为评估输入集合的相应的浮点数的符号位。如果符号位为零,则块317将数字传递到第一阵列320的对应的输入。如果符号位为一,则块317不将数字传递到阵列320的对应的输入。而在图5的实施方案中,当符号位为一时,块317将浮点数零传递到阵列320的对应的输入。这意指第一阵列320接收输入集合中的所有正数,并且在与输入集合中的负数相对应的位置中接收浮点值零。
每个块318被配置为评估输入集合的相应的浮点数的符号位,并且进行与块317相反的操作。也就是说,如果符号位为一,则块318将数字传递到第二阵列325的对应的输入。如果符号位为零,则块318不将数字传递到阵列325的对应的输入。相反,当符号位为零时,它将浮点数零传递到阵列325的对应的输入。这样,第二阵列325接收输入集合中的所有负数,并且在与输入集合中的正数相对应的位置中接收浮点值零。
第一阵列320包括相同符号浮点加法器的对数树。由于所有输入均为正数或零,因此在此树内不需要附加的多路复用逻辑。类似地,第二阵列325包括相同符号浮点加法器的第二对数树,没有附加的多路复用逻辑,因为所有输入均为负或零。加法器电路还包括浮点减法器332。减法器332的一个输入端耦接到第一阵列320中的最终的相同符号浮点加法器的输出端。减法器332的另一个输入端耦接到第二阵列325中的最终的相同符号浮点加法器的输出端。因此,减法器332被配置为将由第一阵列产生的部分求和结果与由第二阵列产生的部分求和结果进行组合。特别地,减法器332被配置为从正数之和减去负数之和的绝对值。减法器332可以由混合符号浮点加法器实现,其中将正数和负数相加对应于从正数中减去负数的绝对值。替代性地,由于减法器332始终保证具有一个正(或零)的输入和一个负(或零)的输入,因此可以为此进行优化。
需注意,(针对相同大小的输入集合)与图4的加法器电路相比,图5的加法器电路需要更多数量的相同符号浮点加法器。然而,令人惊讶的是,已经发现通过消除图4的分类块214节省的面积可以超过图5中的两个阵列320和325所需的附加的面积。图5的架构的进一步优化也是可能的。例如,对于任何给定的输入集合,每个阵列320、325中的加法器中的一些可以具有一个为零的输入,并且一些加法器可以在两个输入处为零。提供旁路电路来应对这些情况以降低功耗可以是有益的。通过检测零输入并且绕过相同符号浮点加法器来供应零输出,可以避免0+0=0的相加。类似地,可以通过检测零输入并且绕过相同符号浮点加法器来供应X的输出,可以避免X+0=X的相加。当然,这种优化节省能量,但不节省半导体面积,因为对于每个阵列的加法器的输入为非零的情况,仍然需要将其实现。
在图5中,两个阵列的大小相同。在图5的实施方案的变型中,一个阵列可能大于另一个阵列。一个此类示例包括第一阵列,其大小与图5中的阵列的大小相同;并且第二阵列的大小是这个大小的一半。也就是说,第一阵列具有N个输入,而第二阵列具有N/2个输入(当N为奇数时,舍入到下一个整数)。这基于以下观察:在(2n-1)或(2n)个数字的任何集合中,必须存在具有相同符号的至少n个数字。在该变型中,并非将所有正数提供给第一阵列(如图5所示),而是将较大的子集提供给第一阵列,并且将较小的子集提供给第二阵列。对于第一阵列,最坏的情况是所有数字均具有相同的符号(无论是全部为正还是全部为负)。换句话讲,在最坏的情况下,较大的集合包含完整的输入数字的集合。这意味着第一阵列需要为“完整”大小,具有N个输入。第二阵列的最坏情况是较小的集合包含一半的输入集合的数字。因此,第二阵列需要N/2个输入。在该变型中,需要一些附加的逻辑来标识哪个数字子集是较大的集合,哪个是较小的集合,也就是说,为了标识正数的数量是否大于负数的数量,反之亦然。该附加逻辑的成本可以与通过将第二阵列的大小减半而实现的面积节省进行权衡。
由于图5的架构中两个阵列320和325之间的相似性,因此存在另一种方式来权衡面积与速度。在图5的替代性的实施中,第一阵列和第二阵列可以由单个阵列提供。然后,多路复用逻辑被配置为在第一时间间隔(例如,第一时钟周期)中将符号位为0的浮点数传递到该单个阵列,并且在第二时间间隔(例如,随后的时钟周期)中将符号位为1的浮点数传递到该单个阵列。可以将第一间隔(时钟周期)中阵列的输出存储在寄存器中,使得随后可以从中减去第二间隔(时钟周期)中生成的结果。(自然地,第一时间间隔和第二时间间隔不必按此顺序进行—可以先处理输入集合的正数或负数。)
在如图4和图5所示的示例中,使用一个或多个阵列或树,在单个时钟周期内将计算传播遍及整个阵列或树不是必需的。相反,将每个阵列或树实现为流水线可能是有益的,其中在一个时钟周期中由给定层(或一组层)生成的结果在该时钟周期结束时存储在寄存器中。在下一个时钟周期中,这些结果将从寄存器中读取到阵列中下一层(或一组层)的输入中。这样,在整个阵列中一次计算紧随另一次计算进行,即使阵列需要若干时钟周期来执行整个计算,该阵列仍可以在每个时钟周期产生输出值。
流水线概念还可以应用于上面讨论的图5的替代性的实施,其中第一阵列和第二阵列由单个物理阵列提供。例如,单个流水线阵列可以在交替的时钟周期中分别设置有正数和负数。计算在随后的时钟周期中传播遍及单个阵列,直到到达阵列的端部为止。阵列端部处的减法器被控制为重新组合源自相同输入集合的正负总和(根据是输入集合的正数首先进入流水线还是负数首先进入流水线)。这样,图5的单阵列实施的流水线型式可以每两个时钟周期产生一个输出值。
在上面的示例中,假设每个相同符号浮点加法器都能够将具有相同符号的两个输入相加在一起,以生成一个输出。然后,这不是必需的。还可能设计一种以集成方式将大量输入相加在一起的相同符号浮点加法器。图6示出了围绕相同符号浮点加法器420构建的加法器电路400,该加法器电路采用具有相同符号的三个浮点输入,并且将它们相加在一起以产生单个输出。在图6中,它用作5:3缩减器的基础,该缩减器求五个浮点输入的总和并且输出三个浮点输出。这类似于图1的3:2缩减器进行工作。在五个浮点输入中,多路复用逻辑410选择具有相同符号的三个输入。(将始终至少存在三个。)这三个输入由3:1相同符号浮点加法器420相加在一起。剩余两个输入被传递到缩减器的输出(加法器电路400)。
随后可以将在缩减器(加法器电路400)的输出端处提供的三个数字相加在一起—例如,使用图2中所示的加法器电路130,以提供五个输入加法器。该步骤不是必需的。
3:2缩减器和5:3缩减器的基本概念可以概括为(2n-1):n缩减器,因为在2n-1个数字的任何集合中,必须有至少n个数字具有相同的符号。然而,这是一种权衡,因为复用逻辑随着数字n的增加而变得更加复杂(并且占据更大的面积)。
如上所述,可以将根据示例的加法器电路诸如上述的加法器电路组合成复合加法器电路。图7示出了一个这样的复合加法器电路的实施方案。它包括6:4缩减器加法器电路500;如图1所示的3:2缩减器加法器电路100;以及如图2所示的加法器电路130。6:4缩减器加法器电路500类似于图6的5:3加法器电路400。它围绕相同的3:1相同符号浮点加法器420构建,但是多路复用逻辑510采用六个输入;将其中三个具有相同符号的信号传递到加法器420;并且将剩余的三个传递到输出端。传递到电路500的输出端的剩余的三个输入被输入到电路100的多路复用逻辑110。这标识其中两个具有相同符号并且将它们输入到相同符号浮点加法器120。需注意,可以通过逻辑门的相对简单、快速的布置来实现复用逻辑块510和110。因此,在实践中,当加法器420开始其计算时,加法器120可以例如在相同的时钟周期内与之同时或在其之后不久开始其计算。这对于电路的整体等待时间可能是有利的,并且因此可能比将各种部件电路的输入端和输出端连接在一起的其他方式更好。特别地,这在设计流水线实施时可能是优选的,因为这种情况下的目标通常是将流水线的每个阶段在每个时钟周期内可以完成的计算工作量最大化。然而,这种连接配置并非在所有实施方案中都是必不可少的。
需注意,6:4缩减器加法器电路500不是上面提及的(2n-1):n的一般原理的示例。然而,它属于密切相关的一般类别的缩减器,其中通过构建(2n-1):n缩减器并且将附加的m个输入传递到输出,将(2n-1+m)个输入减少为(n+m)个输出。
上述任何电路都可以混合配置进行组合。例如,可以构造部分阵列,该部分阵列相比整个阵列具有更少的层数并且具有多个输出。可以将部分阵列的输出作为输入提供给类似于图7的复合电路。同样,可以构造类似于图6或图7的电路的许多电路,其中这些电路的输出作为输入馈送到类似于图4或图5的阵列。
为了完整性起见,现在将讨论相同符号浮点加法器的设计,以示出如何简化该方法,使其与混合符号浮点加法器相比,就硅面积、功耗和等待时间而言更有效。由相同符号浮点加法器实现的算法如下。为了计算Y,两个浮点数A和B的总和具有相同的符号:
·标识A’,较大的数字。A’=max(A,B)
·标识B’,较小的数字。B’=min(A,B)
·将B’的尾数与A’的尾数对齐。这可以通过将B’的尾数右移一些位数来完成,该位数等于A的指数与B的指数之间的差。
·将(如对齐的)两个尾数的位相加以产生Y’,从而在左侧包括附加的进位位c。应当理解,进位位c为0或1。重要的是,该进位独自对输出值Y关于较大的输入值A'的量值变化进行编码。
·如果进位位c=1,则将Y的尾数设置为Y’[M:1]];如果没有进位(进位位c=0),则将Y的尾数设置为Y’[M-1:0],其中M是待包括在结果Y中的尾数位数。
·将Y的指数设置为等于A’的指数加c。
·将Y的符号位设置为等于A的符号位(在任何情况下都与B的符号位相同)。
假设截断相加结果的加法器(即,始终向零舍入)。如果期望通过舍入到最近的浮点数来产生结果,则需要一些附加的逻辑进行处理。可以添加另外的逻辑来处理异常(NaN、inf、下溢、上溢等)。
与混合符号浮点加法器相比,上述算法消除了若干(可能成本高昂的)操作。在混合符号浮点加法器中,首先,需要进行二进制补码取反,以反转负输入的尾数。其次,两个数字之差可能比两个数字本身中的任何一个小得多。这意指结果的量值可能与输入数字的量值非常不同(与已知的结果的指数等于两个输入数字中较大者的指数或比它大一个的相同符号加法器不同)。对于混合符号浮点加法器,需要对Y’进行前导零计数,以便确定Y的指数。第三,Y’需要左移等于前导零计数的位数(提前不知道的可变位数),以产生Y的尾数。通过消除这些操作,相同符号浮点加法器可以比混合符号浮点加法器明显更简单(例如,面积显著更小)。对于一个示例性实施,基于32位浮点数和1ns的时钟周期,发明人已经发现,就片上面积而言,相同符号浮点加法器可以是混合符号浮点加法器大小的约三分之一。
在期望将三个或更多个浮点数相加在一起的任何情况下,实施方案可以是有用的。在许多实际应用中出现了这种需求。例如,这是内积计算中的关键步骤。两个数字向量的内积(也称为标量积或点积)是通过将每个向量中的对应元素成对相乘并且对这些相乘的结果求和而产生的。内积计算出现在包括图形和神经网络的实施的应用中。例如,用于渲染3D场景的图形处理***经常可以执行三个数字的相加(例如,作为三维矢量之间的点积的一部分),因此加法器电路可以包括在固定功能电路中配置的图形处理***中,专门用于(例如,使用图2所示的加法器电路130)将三个数字相加在一起。又如,神经网络加速器可以被配置为执行数字(例如64、128或256个数)的大集合的相加,例如,作为大加权总和的一部分,并且因此,加法器电路可以包括在神经网络加速器中,该神经网络加速器被配置在固定功能电路中,专门用于将特定数量的数字(例如,64、128或256个数字)相加在一起,例如使用图5所示的加法器电路或类似于图7所示的复合加法器电路。因此,实施方案可以在处理***诸如图形处理***或人工智能加速器***(例如,包括神经网络加速器)中找到特定的效用。
图8示出了其中可以实现此类图形处理***的计算机***。计算机***包括CPU902、GPU 904、存储器906和其他设备914,例如显示器916、扬声器918和摄像头919。在GPU904上实现处理块910(对应于上述加法器电路100、130、400、500中的一者)。计算机***的部件可以通过通信总线920彼此进行通信。
虽然图8示出了图形处理***的实施,但是应理解,可以针对人工智能加速器***绘制类似的框图—例如,通过用神经网络加速器(NNA)替代GPU 904,从而在NNA中实现处理框910。
图1、图2和图4至图7的加法器电路被示出为包括许多功能块。这仅是示意性的,并不希望限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中被描述为由加法器电路形成的中间值不需要由加法器电路在任何时间点物理地生成,并且可以仅表示方便地描述由加法器电路在其输入端与输出端之间执行的处理的逻辑值。
本文所述的加法器电路以硬件体现在集成电路上。本文中所述的加法器电路可以被配置为执行本文所述的任一种方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并可以由机器存取的其他存储器装置。
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机***的处理器执行由所述代码指定的任务。
处理器、计算机或计算机***可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、NNA、芯片上***、状态机、媒体处理器、专用集成电路(ASIC)等。计算机或计算机***可以包括一个或多个处理器。
术语“电路的计算机可读描述”旨在涵盖限定如本文所述的硬件配置的软件,诸如HDL(硬件描述语言)软件,用于设计集成电路或用于配置可编程芯片以执行期望的功能。也就是说,可以提供一种计算机可读存储介质,在该计算机可读存储介质上对集成电路定义数据集形式的计算机可读程序代码进行编码,该计算机可读程序代码在集成电路制造***中处理(即,运行)时将***配置为制造配置为执行本文所述的任一种方法的加法器电路,或制造包括本文中所述的任何设备的加法器电路。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造***处制造如本文所述的加法器电路的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造***中处理时使制造加法器电路的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机***上处理,该计算机***被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机***处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机***配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
现将关于图9来描述在集成电路制造***处处理集成电路定义数据集以便将***配置为制造加法器电路的示例。
图9示出被配置为制造如本文中的任一个示例中描述的加法器电路的集成电路(IC)制造***1002的示例。特别地,IC制造***1002包括布局处理***1004和集成电路生成***1006。IC制造***1002被配置为接收IC定义数据集(例如,定义如本文中的任一个示例中所述的加法器电路),处理IC定义数据集,并且根据IC定义数据集生成IC(例如,其体现如本文中的任一个示例中所述的加法器电路)。IC定义数据集的处理将IC制造***1002配置为制造体现如本文中的任一个示例中所述的加法器电路的集成电路。
布局处理***1004被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理***1004确定了电路布局时,它可以将电路布局定义输出到IC生成***1006。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成***1006根据电路布局定义来生成IC。例如,IC生成***1006可以实现生成IC的半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代性地,提供给IC生成***1006的电路布局定义可以是计算机可读代码的形式,IC生成***1006可以使用该计算机可读代码来形成用于生成IC的合适掩模。
由IC制造***1002执行的不同过程可以全部在一个位置例如由一方来实现。替代性地,IC制造***1002可以是分布式***,使得一些过程可以在不同位置执行,并且可以由不同的方来执行。例如,以下阶段中的一些可以在不同位置中和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
在其他示例中,集成电路定义数据集在集成电路制造***处的处理可以将***配置为制造其中IC定义数据集不进行处理以便确定电路布局的加法器电路。
在一些实施方案中,当在集成电路制造***中处理时,集成电路定义数据集可以使集成电路制造***生成如本文所述的装置。例如,通过集成电路定义数据集以上文关于图9描述的方式对集成电路制造***进行配置,可以制造出如本文所述的装置。
在一些示例中,集成电路定义数据集可以包含在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图9所示的示例中,IC生成***可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
图10示出处理集成电路的计算机可读描述以生成集成电路的表示的计算机实现的方法的示例。该方法可以由合成工具执行,该合成工具对RTL代码进行合成以确定待生成的电路的门级表示,例如,就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。在该合成过程中,合成工具可以通过使用上述加法器电路中的一者实现浮点数之和,或使用类似于下文所述的电路来实现浮点数之和与浮点数之差来优化电路,参考图11和图12。在步骤702中,合成工具接收集成电路的计算机可读描述。该计算机可读描述可以包括RTL代码。在步骤704中,合成工具在RTL代码中标识用于对三个(或更多)浮点数求和,或用于计算两个浮点数之和与两个浮点数之差的一个或多个功能块的描述。在步骤706中,合成工具生成集成电路的表示。合成工具通过将标识的功能块表示为如本文所述的电路的表示来优化表示。合成工具可以基于因素诸如所标识的功能块的输入和输出的数量和/或要优先排序的设计参数(例如,速度或面积)来选择使用哪种类型的电路。所生成的集成电路表示可以包括网表—即,门级表示。可以在后续步骤中进一步处理该门级表示,以生成电路布局。
图11示出了被配置为计算两个浮点数A和B的和与差的电路。也就是说,图11的电路被配置为计算A+B和A-B。与A和B的符号无关,这些计算中的一者可以由相同符号浮点加法器执行,如上所述。其他计算需要减法器或混合符号浮点加法器。在图11的示例中,电路包括:相同浮点加法器1020;浮点减法器1032;以及多路复用和符号校正逻辑1010。加法器1020和减法器1032中的每一者在固定功能电路中实现。加法器1020和减法器1032中的每一者具有两个输入端。将数字A和B提供给加法器1020和减法器1032的相应的输入端。相同符号浮点加法器1020被配置为计算两个数字的绝对值之和(|A|+|B|),以产生第一结果。例如,这可以通过将两个数字的符号位强制置零(表示正数),然后将所得的两个正数相加在一起来实现。在替代性的示例中,相同符号浮点加法器1020可以忽略两个数字的符号位,或者可以将两个符号位强制置一(表示负数),然后将所得的两个数字相加在一起。减法器1032被配置为计算两个浮点数的绝对值之差(|A|-|B|),以产生第二结果。例如,它可以通过将A的符号位强制置零(表示正数),并且将B的符号位强制置一(表示负数)来做到这一点。在替代性的示例中,减法器1032可以将A的符号位强制置一(表示负数),并且将B的符号位强制置零(表示正数)。相同符号浮点加法器1020的输出和减法器1032的输出被提供为多路复用和符号校正逻辑1010的输入。复用和符号校正逻辑1010被配置为基于以下项来生成两个浮点数之和(A+B)和两个浮点数之差(A-B):第一结果、第二结果,以及每个浮点数A、B的符号。
图12示出了可以由图11的电路执行的方法。在步骤804中,电路接收浮点数A和B。在步骤806中,相同符号浮点加法器1020计算A和B的绝对值之和,从而产生第一结果。在步骤808中,减法器1032计算A和B的绝对值之差,从而产生第二结果。在步骤810中,多路复用和符号校正逻辑1010根据两个浮点数A和B中的每一个的符号来校正第一结果的符号和第二结果的符号。在该上下文中,“校正”第一结果和第二结果的符号意指多路复用和符号校正逻辑1010确保基于两个浮点数的每一个浮点数的符号正确地设定和/差的符号。换句话讲,符号校正逻辑基于两个浮点数中每个浮点数的符号来确定和/差的符号。根据浮点数的符号,和(A+B)或差(A-B)的正确符号可与第一结果或第二结果的符号相同或不同。因此,在一些情况下,第一结果/第二结果的符号可以由复用和符号校正逻辑1010来改变;同时,在一些情况下,第一结果/第二结果的符号在未改变的情况下已经是正确的。下文中对此进一步详细描述。在步骤812中,多路复用和符号校正逻辑1010选择(经过符号校正的)第一结果和(经过符号校正的)第二结果中的一者,以生成两个浮点数之和(A+B)。在同一步骤中,多路复用和符号校正逻辑1010选择(经过符号校正的)结果中的另一者,以生成两个浮点数之差(A-B)。最后,在步骤814中,从电路输出和值和差值。
下面提供根据本发明示例的由复用和符号校正逻辑1010执行的操作的真值表。在该表中,Sa表示第一数字A的符号位,并且Sb表示第二数字的符号位。右侧的两列指示选择哪个结果来产生电路的相关输出,以及如何执行符号校正。
Figure BDA0002573304470000221
例如,参考表的第三行,当A为负且B为正时,两个浮点数的总和A+B由-(|A|-|B|)给出;因此,多路复用和符号校正逻辑1010选择第二结果(|A|-|B|)并且改变符号位(如果为一,则改变为零;如果为零,则改变为一)。同时,两个数字之差A-B由-(|A|+|B|)给出;因此,多路复用和符号校正逻辑1010选择第一结果(|A|+|B|)并且改变符号位。这将符号位改变为一(因为第一结果始终为正,从而使符号位等于零)。
减法器1032可以被实现为混合符号浮点加法器,因为它能够减去浮点数。替代性地,由于提前已知减法器的第一输入A将始终将其符号位强制置零,并且减法器的第二输入B将始终将其符号位强制置一,因此减法器可以被简化。(二进制补码求逆将始终在第二输入B上执行,而永远不会在第一输入A上执行。)
在上述示例中,参考图12,在步骤812中选择输出之前,在步骤810中校正第一结果和第二结果的符号。然而,如本领域的技术人员将理解的,选择和符号校正可以同样地以相反的顺序执行。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或***中(以及在本文中实施的方法中)的实施可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和***(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用更少的硅。例如,这可以通过以串行方式再使用功能块或在装置、设备、模块和/或***的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和***的物理实施方案的改进(例如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个例项来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。

Claims (15)

1.一种机器实现的处理输入集合的方法,所述输入集合包括两个浮点数(A、B),每个浮点数具有符号,以生成所述两个浮点数之和(A+B)和所述两个浮点数之差(A-B),所述方法包括:
接收(804)所述输入集合的所述两个浮点数;
使用相同符号浮点加法器(1020)来计算(806)所述两个浮点数的绝对值之和,以产生第一结果;
使用浮点减法器(1032)来计算(808)所述两个浮点数的所述绝对值之差,以产生第二结果;以及
基于以下项生成(810、812)所述两个浮点数之和(A+B)和所述两个浮点数之差(A+B):所述第一结果、所述第二结果,以及每个浮点数的所述符号,
其中所述相同符号浮点加法器(1020)在固定功能电路中实现,所述固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中所述相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
2.如权利要求1所述的方法,其中生成所述两个浮点数之和(A+B)和所述两个浮点数之差(A-B)包括:
从所述第一结果和所述第二结果中的一者生成(812)所述两个浮点数之和(A+B);以及
从所述第一结果和所述第二结果中的另一者生成(812)所述两个浮点数之差(A-B)。
3.如前述权利要求中任一项所述的方法,其中生成所述两个浮点数之和(A+B)和所述两个浮点数之差(A-B)包括基于所述两个浮点数中每一个浮点数的所述符号校正(810)所述第一结果的符号和所述第二结果的符号。
4.一种电路,所述电路被配置为处理包括两个浮点数(A、B)的输入集合,每个浮点数具有符号,以生成所述两个浮点数之和(A+B)和所述两个浮点数之差(A-B),所述电路包括:
输入,所述输入被配置为接收(804)所述输入集合的所述两个浮点数;
相同符号浮点加法器(1020),所述相同符号浮点加法器被配置为计算(806)所述两个浮点数的所述绝对值之和,以产生第一结果;
浮点减法器(1032),所述浮点减法器被配置为计算(808)所述两个浮点数的所述绝对值之差,以产生第二结果;以及
多路复用和符号校正逻辑(1010),所述多路复用和符号校正逻辑被配置为基于以下项来生成所述两个浮点数之和(A+B)和所述两个浮点数之差(A-B):所述第一结果、所述第二结果,以及每个浮点数(A、B)的所述符号,
其中所述相同符号浮点加法器在固定功能电路中实现,所述固定功能电路被配置为将具有相同符号的浮点数相加在一起,并且其中所述相同符号浮点加法器不包括被配置为将具有不同符号的数字相加在一起的电路。
5.如权利要求1所述的方法或如权利要求4所述的电路,其中所述浮点减法器(1032)在固定功能电路中实现。
6.如权利要求1或5所述的方法,或者如权利要求4或5所述的电路,其中所述浮点减法器(1032)由混合符号浮点加法器实现。
7.如权利要求4至6中任一项所述的电路,其中所述多路复用和符号校正逻辑(1010)被配置为:
从所述第一结果和所述第二结果中的一者生成所述两个浮点数之和(A+B);并且
从所述第一结果和所述第二结果中的另一者生成所述两个浮点数之差(A-B)。
8.如权利要求4至7中任一项所述的电路,其中所述复用和符号校正逻辑(1010)被配置为基于所述两个浮点数中的每一个浮点数的所述符号来校正所述第一结果的符号和所述第二结果的符号。
9.一种处理***,所述处理***包括如权利要求4至8中任一项所述的电路。
10.一种处理***,所述处理***被配置为执行如权利要求1至3、5或6中任一项所述的方法。
11.如权利要求9或10所述的处理***,其中所述处理***是图形处理***或人工智能加速器***。
12.一种使用集成电路制造***制造如权利要求4至8中任一项所述的电路或制造如权利要求9至11中任一项所述的处理***的方法,所述方法包括:
使用布局处理***来处理所述电路或处理***的计算机可读描述,以生成体现所述电路或处理***的集成电路的电路布局描述;以及
使用集成电路生成***,根据所述电路布局描述来制造所述电路或处理***。
13.一种非暂态计算机可读存储介质,在所述非暂态计算机可读存储介质上存储有如权利要求4至11中任一项所述的电路或处理***的计算机可读描述,当所述计算机可读描述在集成电路制造***中处理时,致使所述集成电路制造***执行以下操作:
使用布局处理***对所述计算机可读描述进行处理,以生成体现所述电路或处理***的集成电路的电路布局描述;并且
使用集成电路生成***,根据所述电路布局描述来制造所述电路或处理***。
14.一种处理集成电路的计算机可读描述以生成所述集成电路的表示的计算机实现的方法,所述方法包括:
接收所述集成电路的所述计算机可读描述;
在所述集成电路的所述计算机可读描述中,标识用于计算两个浮点数之和与所述两个浮点数之差的一个或多个功能块的描述;以及
生成所述集成电路的所述表示,其中所述一个或多个功能块在所述集成电路的所述表示中表示为根据权利要求4至8中任一项所述的电路的表示。
15.一种非暂态计算机可读存储介质,在所述非暂态计算机可读存储介质上存储有计算机程序代码,所述计算机程序代码被配置为当所述代码在所述一个或多个处理器上运行时使所述一个或多个处理器执行如权利要求14所述的方法。
CN202010646442.9A 2019-07-19 2020-07-07 用于处理浮点数的设备和方法 Pending CN112241252A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1910400.9A GB2581543B (en) 2019-07-19 2019-07-19 Apparatus and method for processing floating-point numbers
GB1910400.9 2019-07-19

Publications (1)

Publication Number Publication Date
CN112241252A true CN112241252A (zh) 2021-01-19

Family

ID=67839812

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010646442.9A Pending CN112241252A (zh) 2019-07-19 2020-07-07 用于处理浮点数的设备和方法

Country Status (4)

Country Link
US (2) US11609741B2 (zh)
EP (1) EP3767455A1 (zh)
CN (1) CN112241252A (zh)
GB (1) GB2581543B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2607364B (en) * 2021-11-18 2023-05-24 Imagination Tech Ltd Floating point adder
CN114968170B (zh) * 2022-06-24 2024-05-14 北京百度网讯科技有限公司 浮点数的定和生成方法、相关装置及计算机程序产品

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6175851B1 (en) * 1998-02-06 2001-01-16 S3 Incorporated Fast adder/subtractor for signed floating point numbers
JP4388543B2 (ja) 2006-12-14 2009-12-24 株式会社日立製作所 3項入力の浮動小数点加減算器
US8161090B2 (en) * 2008-12-05 2012-04-17 Crossfield Technology LLC Floating-point fused add-subtract unit
US8645449B1 (en) * 2009-03-03 2014-02-04 Altera Corporation Combined floating point adder and subtractor
US9317478B2 (en) * 2012-09-10 2016-04-19 Crossfield Technology LLC Dual-path fused floating-point add-subtract
GB2543511B (en) 2015-10-19 2018-07-25 Imagination Tech Ltd Rounding reciprocal square root results
US10534578B1 (en) 2018-08-27 2020-01-14 Google Llc Multi-input floating-point adder

Also Published As

Publication number Publication date
US20230221924A1 (en) 2023-07-13
GB201910400D0 (en) 2019-09-04
GB2581543A (en) 2020-08-26
GB2581543B (en) 2021-03-03
US20210042086A1 (en) 2021-02-11
US11609741B2 (en) 2023-03-21
EP3767455A1 (en) 2021-01-20

Similar Documents

Publication Publication Date Title
US20230221924A1 (en) Apparatus and Method for Processing Floating-Point Numbers
US20240126507A1 (en) Apparatus and method for processing floating-point numbers
CN114816331B (zh) 具有时钟选通的用于执行矩阵乘法的硬件单元
Farrukh et al. Power efficient tiny yolo cnn using reduced hardware resources based on booth multiplier and wallace tree adders
US20210326111A1 (en) FPGA Processing Block for Machine Learning or Digital Signal Processing Operations
EP4206993A1 (en) Configurable pooling processing unit for neural network accelerator
CN112204517A (zh) 多输入浮点加法器
CN110858137A (zh) 除以整数常数的浮点除法
CN110349245A (zh) 高精度纹理过滤
CN114077419A (zh) 用于处理浮点数的方法和***
CN115543255A (zh) 通过除法进行常数乘法
GB2611522A (en) Neural network accelerator with a configurable pipeline
CN116610284A (zh) 用于计算点积的方法和***
CN115079997A (zh) 对数执行硬件高效无偏舍入的方法
GB2611520A (en) Methods and devices for configuring a neural network accelerator with a configurable pipeline
GB2591713A (en) Hardware unit for performing matrix multiplication with clock gating
GB2584228A (en) Hardware unit for performing matrix multiplication with clock gating
GB2576282A (en) Hardware unit for performing matrix multiplication with clock gating
CN116610285A (zh) 用于计算点积的方法和***
GB2590866A (en) Float Division by constant integer using a predetermined number of modulo units

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