CN118176480A - 用于加速倒数函数和平方根倒数函数的计算的系统和方法 - Google Patents
用于加速倒数函数和平方根倒数函数的计算的系统和方法 Download PDFInfo
- Publication number
- CN118176480A CN118176480A CN202280072822.3A CN202280072822A CN118176480A CN 118176480 A CN118176480 A CN 118176480A CN 202280072822 A CN202280072822 A CN 202280072822A CN 118176480 A CN118176480 A CN 118176480A
- Authority
- CN
- China
- Prior art keywords
- exponent
- value
- reciprocal
- mantissa
- square root
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title description 60
- 238000007667 floating Methods 0.000 claims abstract description 119
- 238000004364 calculation method Methods 0.000 claims abstract description 54
- 239000004744 fabric Substances 0.000 claims description 3
- 230000006870 function Effects 0.000 description 238
- 238000010801 machine learning Methods 0.000 description 44
- 238000012549 training Methods 0.000 description 39
- 238000010586 diagram Methods 0.000 description 27
- 238000013528 artificial neural network Methods 0.000 description 22
- 230000004913 activation Effects 0.000 description 20
- 238000001994 activation Methods 0.000 description 20
- 230000015654 memory Effects 0.000 description 18
- 239000000047 product Substances 0.000 description 16
- 238000013139 quantization Methods 0.000 description 12
- 230000000052 comparative effect Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 11
- 239000013598 vector Substances 0.000 description 11
- 238000012545 processing Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 238000007620 mathematical function Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 101100269618 Streptococcus pneumoniae serotype 4 (strain ATCC BAA-334 / TIGR4) aliA gene Proteins 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003044 adaptive effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 101100242909 Streptococcus pneumoniae (strain ATCC BAA-255 / R6) pbpA gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4873—Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/552—Powers or roots, e.g. Pythagorean sums
- G06F7/5525—Roots or inverse roots of single operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/552—Indexing scheme relating to groups G06F7/552 - G06F7/5525
- G06F2207/5521—Inverse root of a number or a function, e.g. the reciprocal of a Pythagorean sum
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)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Complex Calculations (AREA)
- Logic Circuits (AREA)
Abstract
一种现场可编程门阵列(FPGA),包括连接多个逻辑块的可配置互连结构,该多个逻辑块被配置为实现倒数函数数据路径,包括:包括倒数函数数据路径的尾数部分的尾数计算级,其被配置为:将输入浮点值的M位尾数分量划分为L个最高有效位和M‑L个最低有效位;基于L个最高有效位,从倒数查找表中查找斜率值和偏移值;通过将斜率值乘以M‑L个最低有效位来计算乘积并将偏移值与乘积相加,来计算输出浮点值的输出尾数分量;以及指数计算级,其被配置为计算输出浮点值的输出指数分量,计算输出指数分量包括对输入浮点值的指数分量取反。
Description
背景技术
现场可编程门阵列(FPGA)是一种硬件设备,包括逻辑块阵列以及这些逻辑块之间的可重新配置互连。在(或以前的/>)产品中,这些逻辑块可以被称为自适应逻辑模块(ALM),而在/>产品中,这些逻辑块可以被称为可配置逻辑块(CLB)。每个逻辑块可以包括可编程逻辑,诸如用于执行从输入到输出的可配置逻辑映射的一个或多个查找表(LUT)、用于将输入值相加的加法器、用于临时保存数据的寄存器等等。用配置文件对FPGA进行编程或配置,设置互连(或互连“结构”)以将不同的逻辑块连接在一起,从而将FPGA配置为执行由配置文件(有时称为“位文件”)指定的特定功能。
与由通用处理器执行的软件实现相比,FPGA带来了在低级别(例如,在电路级别)实现计算时的更高性能和更低功耗的益处。这类似于使用专用集成电路(ASIC)的益处,诸如专用协处理器,诸如图形处理单元(GPU)或神经加速器,其分别被用来加速特定于计算机图形和人工神经网络的操作。然而,ASIC的设计和制造是一个漫长而昂贵的过程,并且前期固定成本很高。
因此,FPGA的一些应用包括,例如,最终可以在ASIC中实现的硬件设计原型制作,以及在设计和制造ASIC可能不合理的情况下(例如,由于数量少或计算的高度专业化)的计算硬件加速。此外,FPGA还提供了底层硬件(在“现场”)的重新配置的灵活性,而无需被锁定到固定的硬件配置,如在ASIC的情况中,其中逻辑在制造时直接被实现在电路布局中,因此几乎没有可重构性。一些云计算提供商提供对包括已连接的FPGA的硬件实例(例如服务器)的访问,从而允许用户定制FPGA以执行计算操作的硬件加速。
正是针对这些和其他考虑因素,给出了一些示例。另外,虽然已经讨论了相对具体的问题,但是应当理解,示例不应限于解决背景技术中确定的具体问题。
发明内容
提供此发明内容是为了以简化的形式介绍一系列概念,这些概念将在下面的详细描述中被进一步描述。本发明内容不旨在识别所要求保护的主题的关键特征或基本特征,也不旨在帮助确定所要求保护的主题的范围。
本技术涉及用于使用诸如现场可编程门阵列(FPGA)之类的硬件来加速反函数(或倒数函数f(x)=1/x)和反平方根函数(或平方根倒数函数)的计算的系统和方法。本公开的一些具体示例涉及加速在低精度浮点数(例如,诸如BFloat 16、IEEE半精度16位浮点FP 16等等之类的浮点格式的16位浮点数)上的反函数和反平方根函数的计算,但是本公开的示例不限于此。在本公开的一些示例中,对输入执行反函数或反平方根函数的计算有效的近似值,其中函数的近似值与实际函数之间的差异对于近似值的特定用例来说足够小(例如,当近似值被用于机器学习模型(诸如深度神经网络)的训练时,足够小以产生类似的模型收敛属性)。使用本公开的示例来训练神经网络的实验显示出与使用反函数或反平方根函数的比较真值实现来训练的神经网络基本上相同的训练特性(例如,训练模型的收敛性和准确度)。
一个或多个方面的细节在附图和下面的描述中被阐述。通过阅读以下详细描述和回顾相关附图,其他特征和优点将变得显而易见。应当理解,以下详细描述仅是解释性的,而不是对所要求保护的本发明的限制。
附图说明
被并入到本公开中并构成本公开的一部分的附图图示了本发明的各个方面。在附图中:
图1是根据本公开的一个示例的被配置为计算倒数函数和/或平方根倒数函数的近似值的现场可编程门阵列(FPGA)的一部分的示意性框图。
图2是描绘根据本公开的一个示例的用于计算倒数函数的近似值的方法的流程图。
图3是根据本公开的一个示例的被配置为计算倒数函数的输出的尾数分量和指数分量的数据路径的一部分的框图。
图4是描绘根据本公开的一个示例的倒数函数在[1,2)的域上的线性插值的图。
图5是描绘根据本公开的一个示例的用于计算平方根倒数函数的近似值的方法的流程图。
图6是根据本公开的一个示例的被配置为计算平方根倒数函数的输出的尾数分量和指数分量的数据路径的一部分的框图。
图7是描绘根据本公开的一个示例的平方根倒数函数在[1,4)的域上的线性插值的图。
图8是根据本公开的一个示例的组合的倒数和平方根倒数数据路径的尾数部分的框图,其被配置为计算由函数选择输入所选择的倒数函数或平方根倒数函数的输出的尾数分量。
图9是根据本公开的一个示例的组合的倒数和平方根倒数数据路径的指数部分的框图,其被配置为计算由函数选择输入所选择的倒数函数或平方根倒数函数的输出的指数分量。
图10是描绘根据本公开的一个示例的用于根据函数选择输入选择性地计算倒数或平方根倒数的方法的流程图。
图11是描绘根据本公开的一个示例的用于使用倒数函数或平方根倒数函数的近似值来训练机器学习模型(诸如深度神经网络(DNN))的方法的流程图。
图12A是描绘与倒数函数的参考实现相比、与使用根据本公开的一个示例的系统和方法计算倒数函数相关联的误差的图。
图12B是描绘与图12A中使用的倒数函数的相同参考实现相比、与使用基于比较二次插值的技术计算倒数函数相关联的误差的图。
图12C是描绘与平方根倒数函数的参考实现相比、与使用根据本公开的一个示例的系统和方法计算平方根倒数函数相关联的误差的图。
图12D是描绘与图12C中使用的平方根倒数函数的相同参考实现相比、与使用基于比较二次插值的技术计算平方根倒数函数相关联的误差的图(其中使用平方根函数和倒数函数的级联,因为比较技术没有描述具体的平方根倒数函数的实现)。
图13是图示了可以利用其来实现本发明的各方面的计算设备的示例物理组件的框图。
图14A和图14B是可以利用其来实现本发明的各方面的移动计算设备的简化框图。
具体实施方式
以下详细描述参考附图。在可能的情况下,在附图和以下描述中使用相同的参考标记来指代相同或相似的元件。虽然可以描述本发明的各方面,但是修改、改编和其他实现是可能的。例如,可以对附图中图示出的元件进行替换、添加或修改,并且可以通过对所公开的方法替换、重新排序或添加阶段来修改本文描述的方法。因此,下面的详细描述并不限制本发明,而是相反,本发明的适当范围由所附权利要求来限定。示例可以采取硬件实现、或完全软件实现、或组合软件和硬件方面的实现的形式。因此,下面的详细描述不应被理解为限制性的。
本技术涉及用于使用诸如现场可编程门阵列(FPGA)之类的硬件来加速数学函数的计算的系统和方法。FPGA的一种用例是加速与机器学习任务相关联的计算,诸如计算机视觉(例如图像分类、实例分割等等)、自然语言处理(例如变换器模型)等等。训练机器学习模型(诸如深度神经网络(DNN))对于小型模型通常花费数小时,对于大型模型可能花费数周或数月的计算时间。将计算成本高昂的操作从缓慢的通用处理器转移到被专门配置来执行这些昂贵的数学操作的FPGA上,可以显著减少总计算时间并降低功耗。
在训练机器学习模型时,值常常彼此相除,诸如在对值进行归一化时。除法运算获取被除数操作数并将其除以除数操作数。这相当于将被除数操作数乘以除数操作数的乘法逆元(或倒数)。
例如,在训练机器学习模型中、尤其是在包括深度神经网络的神经网络模型中执行的一种常见操作是softmax函数或归一化指数函数。softmax函数对一组K个正值或负值进行归一化,以使得每个值都在0到1的区间内(例如,在区间[0,1]内),以使得K个值的总和就是1。对于K个值z1,...,zK的输入集合或向量z,特定值zi的softmaxσ可以被表达为:
如上面所看见的,计算值zi的softmax需要将值(其中e是欧拉数(例如,e=2.71828…))除以值的集合中的每个K值之和值/>其相当于将/>乘以/>的倒数。类似地,在高斯误差线性单元(GELU)激活函数中,为张量行中的每个元素计算向量倒数1/(1+e-1.702x)。作为另一个示例,在层归一化(LayerNorm)层中,使用标量倒数来计算值的向量的方差。
深度神经网络的一些部分或层也可以使用平方根倒数函数。例如,平方根倒数可以被用来在计算softmax函数之前执行预缩放,并且可以被用来计算深度神经网络的LayerNorm层中的标准偏差。
在训练机器学习模型的过程中,倒数函数和/或平方根倒数函数可能被计算大量次数(例如,数十亿或数万亿次或者更多,具体取决于模型的大小和复杂性)。因此,将倒数函数和平方根倒数函数卸载(offload)到被专门设计来计算这些函数的处理器(例如硬件加速器)可以在这些机器学习任务中提供显著的速度改善和能效改善。
如发明背景部分中所指出,现场可编程门阵列(FPGA)由大量逻辑块(例如,数万个逻辑块)组成,这些块之间具有可重新配置的互连,其中FPGA可以被编程或配置为使用开发人员定义的配置文件或位文件来执行特定功能,其中配置文件是电子设计自动化(EDA)软件基于电路的功能描述所生成的输出,其可以用硬件描述语言来编写,诸如Verilog、SystemVerilog、VHDL或更高级语言(诸如SystemC)。这些基本逻辑块在或产品中可以被称为自适应逻辑模块(ALM)并且在/>产品中可以被称为可配置逻辑块(CLB)。每个逻辑块通常包括一个或多个查找表(LUT)、1位加法器和用于存储数据的寄存器。
计算倒数函数和平方根倒数函数的一种方法是通过二次插值或递归方法(诸如牛顿-拉夫森)。递归方法通常需要浮点乘法器和加法器,当在没有浮点硬宏的FPGA上实现时,这会消耗大量的硬件资源。基于插值的方法不一定需要浮点单元,但是通常使用数据宽度适中的两个定点加法器和三个定点乘法器,并且在没有定点DSP宏的FPGA上实现时硬件效率低下。
FPGA的用例之一是专门计算任务的硬件加速,诸如机器学习(尤其是深度神经网络)中频繁使用的特定数学函数。J-A.等人的“High-speed functionapproximation using a minimax quadratic interpolator”(IEEE Transactions onComputers 54.3(2005):304-318)中描述了配置FPGA来计算此类专门数学函数(包括倒数和平方根)的比较方法的一些示例。在/>等人所使用的方法中,倒数函数使用二次插值器进行近似,该插值器在/>FPGA上消耗162个ALM。当实现16路向量倒数时(例如,用于对包含16个值的向量进行并行操作),这相当于大约2,590个ALM。/>等人中的倒数函数的实现还需要11个周期的长延迟,这进而又需要FPGA中的额外逻辑来实现数据路径中的延迟匹配。
如此,本公开的本技术涉及低面积和低延迟架构以近似低精度浮点格式(例如BFloat 16、IEEE半精度16位浮点(FP 16)、NVidia TensorFloat、AMD fp24和Pixar PXR24)的反函数(或倒数函数f(x)=1/x)和/或反平方根函数(或平方根倒数函数)。这使得能够有效扩展针对最先进的变换器模型(诸如GPT-3、TNLG-XXL等)的softmax加速器,以及计算反和/或反平方根的其他大型人工神经网络(例如,将值彼此相除或将值除以其他值的平方根)。
虽然本文在加速在BFloat 16格式的值上计算反(或倒数)函数和/或反平方根(或平方根倒数)函数的上下文中呈现本技术,但是本公开的示例不限于此,并且可以被应用来在以其他低精度浮点格式表示的值上计算倒数函数和平方根倒数函数,诸如IEEE半精度16位浮点(FP 16)、NVidia TensorFloat、AMD fp24和Pixar PXR24,如上面所指出的。在一些示例中,术语“低精度浮点”被用来指代尾数位数小于23的浮点数据格式。
更详细地,本技术的一些方面仅使用一次整数乘法和一次加法以执行线性插值从而在低精度浮点值上实现反函数和/或反平方根函数,而不使用一个或多个浮点乘法器,不使用一个或多个浮点加法器,并且也不使用二次插值,从而与FPGA中的倒数函数的比较实现相比,使得能够以非常低的复杂度和相对较少的周期(较低的延迟)实现倒数函数和平方根倒数函数。
图1是根据本公开的一个示例的被配置为计算倒数函数和/或平方根倒数函数的近似值的现场可编程门阵列(FPGA)的一部分的示意性框图。在图1中所示的示例中,FPGA10的一部分被配置为通过FPGA的逻辑块的互连和编程来计算一个或多个函数的近似值,诸如倒数函数、平方根倒数函数或其组合。更详细地,输入浮点值x被供应给FPGA 10的部分100(也被称为数据路径100,其在各种示例中被配置为实现:倒数函数数据路径;平方根倒数函数数据路径;或者倒数函数和平方根倒数数据路径的组合),以计算浮点值y的输出,其中在倒数函数的情况下y≈1/x,并且其中在平方根倒数函数的情况下数据路径100可以被用作FPGA 10内的较大计算电路的组件,诸如是并行布置在FPGA的一部分中的K个函数数据路径之一,被配置为计算对输入向量最多K个值的K路操作(例如,将K个不同值除以相同值或计算函数,诸如K个不同值的倒数或平方根倒数)。该操作进而又可以是用于执行更高级别操作(诸如神经网络的训练)以及其他操作(诸如激活函数、反向传播中的梯度计算等等)的数据处理路径的组件。
二进制浮点数据格式以与“科学记数法”类似的方式表示基于尾数(或有效数)、指数和符号的组合的数字:
(符号)基数指数×尾数 (2)
不同之处在于二进制浮点表示使用以2为底而不是以10为底。为了本文的方便和讨论,浮点数在本文中可以被称为具有一个符号位、M个尾数位和N个指数位。
在图1中所示的布置中,输入浮点值x和输出浮点值y均为BFloat16数据格式,其包含在位置[15]处的1个符号位(符号位的值被标示为b15),在位置[14:7]处的8位指数位(N=8)(指数位的值被标示为b14...b7,以及在位置[6:0]处的七个尾数位(M=7)(尾数位的值被标示为b6...b0)。更具体地说,BFloat 16数据格式在IEEE 754单精度二进制浮点格式(有时被称为binary32、float32或FP32)之后模式化的,其中指数以偏移二进制格式来表示,其中零偏移(或“偏置”)为127(或二进制为0b01111111),并且因此恢复编码值需要从数据格式的数据中减去127:
其他低精度浮点数据表示可能具有类似的布置,可能具有不同的零偏移和分配给指数和尾数分量的不同位数,以及不同的总位数(例如,少于16位或超过16位)。
返回参见图1,数据路径100包括被配置为计算输出y的符号位ysign的符号计算级110、被配置为计算输出y的尾数分量yman的尾数计算级120、以及被配置为计算输出y的指数分量yexp的指数计算级150。在一些示例中,尾数计算级120包括一个或多个线性插值查找表,其存储定义在尾数值的域上的对应子区间上近似倒数函数和/或平方根倒数函数的线段的斜率和偏移。下面将更详细地描述根据各种示例的由符号计算级110、尾数计算级120和指数计算级150执行的操作。
图2是描绘根据本公开的一个示例的用于计算倒数函数的近似值的方法200的流程图。
给定一个浮点数x,其中具有尾数分量xman(对于BFloat 16,为x[6:0])、指数分量xexp(对于BFloat 16,为x[14:7])和符号分量xsign(对于BFloat 16,为x[15]),x的值由下式给出:
其中,基于浮点值的定义,xman∈[1,2)。
x的倒数(recip(x))可以被重写为:
在操作202中,数据路径将输入浮点值x划分为其符号位xsign、指数分量xexp和尾数分量xman。由于倒数函数保留了输入的符号,因此直接传递输入x的符号位xsign作为输出y的符号位ysign,并且因此在计算倒数函数的情况下的符号计算110可以通过导线来实现而不必使用任何逻辑块。
如上面的等式5所示,x的倒数的尾数分量yman可以直接根据浮点输入值x的尾数分量xman计算,而与指数分量xexp无关。因此,在一些示例中,基于线性插值来计算尾数部分xman的倒数或逆。
在操作220中,数据路径100使用线性插值来计算输入浮点值x的尾数分量xman的倒数。在操作222中,数据路径100将尾数部分划分成两部分:尾数xman的L个最高有效位(LMSB)xl和尾数xman的剩余M-L个最低有效位(LSB)xr。在BFloat 16的当前示例中,尾数具有7位(M=7),并且因此剩余位或LSB xr具有7-L位。
图3是根据本公开的一个示例的被配置为计算倒数函数的输出y的尾数分量yman和指数分量yexp的数据路径的一部分的框图。特别地,图3示出了倒数函数数据路径300的尾数部分302和倒数函数数据路径300的指数部分304。如图3中所示,从输入x的尾数xman中划分或提取L个最高有效位xl和M-L个最低有效位xr。
图4是描绘根据本公开的一个示例的倒数函数在[1,2)的域上的线性插值的图。如上面所指出,在各种浮点数据格式中,尾数部分表示[1,2)区间内的值,基于隐式前导位为1的约定,并且因此线性插值在[1,2)的相同区间内计算1/xman就足够了。
尾数部分xman的输入域[1,2)被分为2L个等长的子区间。每个区间由与该区间的左端相对应的L位xl来标识,并且与对应的预先计算出的斜率k和预先计算出的偏移c相关联。对于第i个子区间(被标示为xl[i]),基于连接的线段(xl[i],recip(xl[i]))和针对第(i+1)个子区间的对应点(被标示为xl[i+1])-(xl[i+1],recip(xl[i+1]))来计算斜率k和截距,其中,在预先计算斜率k和偏移c时,recip(xl[i])的值以全精度来计算(例如FP32)。作为一个具体示例,如果L=3,那么区间[1,2)被分为8个子区间,每个子区间的长度为0.125。因此,xl[0]为(1.000)2(或十进制1.000),xl[1]为(1.001)2(或十进制1.125)。在这种情况下,(xl[0],recip(xl[0]))=(1.0,1.0)且(xl[1],recip(xl[1])≈(1.125,0.889)。
更准确地说,由尾数xman的L个MSB xl标识的第i个区间的线段的斜率k[i]根据以下来计算:
并且针对第i个区间的线段偏移c[i]根据以下来计算:
这些斜率k和偏移c值可以以更高精度来预先计算,诸如FP32。这些高精度斜率k和偏移c值分别被量化为较低精度值kq和cq。由于区间[1,2)上的倒数函数的性质,k的所有值都是负数并且具有小于1的绝对值。斜率kq和偏移cq的量化表示中使用的位数是可调参数,其可以根据应用的设计约束、基于准确度与FPGA面积之间的权衡来进行设置。在一个示例中,基于L=4的一些特定设计约束,kq[i]被量化为u0.4(四位)并且cq[i]被量化为u0.8(八位)。
预先计算出的斜率和偏移的值与其对应的xl值相关联地被存储在线性插值查找表(LUT)中。在上面的示例中,L=4,并且其中kq[i]被表示为4位,cq[i]被表示为8位,表中的每个条目具有4位+8位=12位,并且具有24=16个条目。
因此,在操作224中,数据路径100基于尾数xman的L个MSB xl来查找存储在倒数线性插值查找表310中的预先计算出的量化斜率kq[i]和量化偏移cq[i]值,并且,在操作226中,根据以下来计算输入值x的尾数部分的倒数recip(xman)的线性近似值:
recip(xman)≈k[i]·(xl[i]+xr[i])+c[i]=k[i]·xr[i]+recip(xl[i])
≈kq[i]·xr[i]+cq[i](8)
以这种方式执行线性插值涉及整数乘法器320的使用,其被配置为将量化斜率kq乘以输入尾数的最低有效位xr以计算乘积(prod)kq[i]·xr[i]。具体地,整数乘法器320将量化斜率kq中的位数乘以M-L位。在图3中所示的示例中,整数乘法器320将4位乘以3位以产生7位乘积。固定移位器330被应用于偏移cq以生成移位值cq_shft,并且加法器340被配置为将移位值cq_shft与乘积prod相加以计算12位中间尾数sum(u1.11)。然后12位尾数的最高有效位(sum[11])被用来使用复用器342选择中间尾数的哪些位被输出作为输出浮点值y的输出尾数部分yman。在图3中所示的示例中,当中间尾数的MSB为1时,那么位sum[10:4]被输出作为yman,当中间尾数的MSB为0时,那么位sum[9:3]被输出作为yman。
返回参见图2,在操作250中,数据路径100基于输入浮点值x的指数部分xexp来计算输出浮点值y的指数部分yexp。
如上所示,在计算倒数时,指数分量的值被取反(例如,从xexp-127到127-xexp),其中127的值对应于BFloat 16数据格式中定义的偏置。概念上对指数取反包括执行偏置调整252以对指数进行去偏置(例如,通过从指数xexp中减去127)、对无偏指数取反254、以及执行偏置调整256(例如,通过将127加到取反后的无偏指数上),以计算输出y的输出有偏指数分量yexp。然而,在一些示例中,可以组合这些逻辑步骤以减少延迟。为了在操作250中对浮点输入值x的指数分量xexp取反,考虑两种情况:当xexp小于253时,那么从xexp中减去值253;否则从其自身中减去xexp的值。在图5的框图中,确定xexp<253的条件是由比较器计算的,其输出被用来控制第一复用器或复用器350在十进制值253或xexp值之间选择作为中间值。在一些示例中,如图3中所示,第二复用器360然后使用中间尾数的MSB(sum[[11])来在中间值exp2与固定值254之间进行选择。在这样的示例中,第二复用器360的输出可以在本文中被称为倒数指数调整值recip_exp_adj。在省略第二复用器360的一些示例中,第一复用器350的输出在本文中可以被称为倒数指数调整值recip_exp_adj(例如,其中第一复用器350的输出直接连接到整数加法器370)。recip_exp_adj值,无论是在一些示例中由第一复用器350输出还是在其他示例中由第二复用器输出,都被供应作为整数加法器370的输入,整数加法器370对xexp取反并将取反的值与recip_exp_adj值相加以计算输出浮点值y的指数分量yexp。
因此,本技术的各方面涉及用于通过线性插值来计算输入浮点值的倒数(或反或乘法反)的技术,其中基于针对尾数域(例如,[1,2))内的线段或子区间预先计算出的斜率和偏移通过线性插值来计算尾数分量,其中特定线段或子区间是基于尾数的L个最高有效位来选择的,并且其中指数分量是通过对输入浮点值的指数部分取反来计算的。在一些示例中,图1中所示的数据路径100的尾数计算级120和指数计算级150是基于图3中所示的数据路径的部分300来实现的,其被配置为分别计算输出浮点值y的尾数部分yman和指数部分yexp。
本技术的一些方面涉及计算平方根倒数函数或反平方根函数。如上面所指出,浮点数x带有尾数分量xman(对于BFloat 16,为x[6:0])、指数分量xexp(对于BFloat 16,为x[14:7])和符号分量xsign(对于BFloat16,为x[15]),x的值由以下给出:
其中,与之前一样,基于浮点值的定义,xman∈[1,2)。
x的平方根倒数(rsqrt(x))可以被重写为:
具体地,通过将无偏指数分量除以2来计算指数分量的平方根,这可以使用右移1来实现。然而,解决了两种不同的情况——有偏指数xexp为偶数的情况或有偏指数xexp为奇数的情况,以便在执行右移1时保留信息。
图5是描绘根据本公开的一个示例的用于计算平方根倒数函数的近似值的方法500的流程图。在操作502中,数据路径100将输入浮点值x划分为其符号位xsign、指数分量xexp和尾数分量xman。图6是根据本公开的一个示例的被配置为计算平方根倒数函数的输出的尾数分量和指数分量的数据路径的一部分的框图。特别地,图6示出了平方根倒数函数数据路径600的尾数部分602和倒数函数数据路径600的指数部分604。因为在一些示例中,平方根倒数函数对于负输入值是未定义的(产生虚数),因此指示负输入值的符号位触发符号计算110的数据路径,该路径导致输出浮点值y表示非数字(NaN)值。在一些其他示例中,符号位被忽略并被保留在输出浮点值y中。
如上面的等式10中所示,x的平方根倒数的尾数分量yman可以直接根据浮点输入值x的尾数分量xman来计算。然而,如公式10中所示,平方根倒数函数的输入的无偏指数分量必须是偶数,才能将指数除以2。由于偏置(127)是奇数,因此在有偏指数xexp为奇数时,无偏指数xexp-127为偶数;当有偏指数为偶数时,无偏指数为奇数。
为了解决有偏指数为偶数(并且因此无偏指数为奇数)的情况,无偏指数可以递增(或增加)1,并且尾数可以预先缩放2以进行补偿(如等式10中的项所示),以使得尾数表示[2,4)范围内的值,而不是[1,2)范围内的值。在这种情况下,对[1,4)的输入域中的尾数值xman执行线性插值。
因此,在操作510中,数据路径确定输入浮点值x的指数分量xexp是否为偶数以生成信号exp_is_even,诸如通过将指数分量的最低有效位(xexp[0])供应给反相器605。
以与上述用于计算倒数的方式类似的方式,在操作520中,数据路径100使用线性插值来计算输入浮点值x的尾数分量xman的平方根倒数。在操作522中,数据路径100将尾数部分划分成两部分:尾数xman的L个最高有效位(LMSB)xl和尾数xman的剩余M-L个最低有效位(LSB)xr。
图6是根据本公开的一个示例的被配置为计算平方根倒数函数的输出的尾数分量yman和指数分量yexp的数据路径的一部分的框图。如图3中所示,从输入x的尾数xman中划分或提取L个最高有效位xl和M-L个最低有效位xr。
图7是描绘根据本公开的一个示例的平方根倒数函数在[1,4)的域上的线性插值的图。如上面所指出,在各种浮点数据格式中,尾数部分表示[1,2)区间内的值,基于隐式前导位1的约定,并且尾数值可以基于指数部分是偶数还是奇数而由2来预先缩放。因此,线性插值在[1,2)区间以及[2,4)区间并且总区间为[1,4)内计算就足够了。
由于输入域较大,在一些示例中,[1,4)的区间被分为2*2L个线段(2L+1个线段),其中第一区间[1,2)被分为第一2L个子区间,并且第二区间[2,4)被分为第二2L个子区间,如图7中所示。查找表存储针对每个子区间预先计算出的量化斜率kq[i]和偏移cq[i],由输入浮点值x的尾数xman的L个MSB xl和exp_is_even值进行索引,其中exp_is_even值确定是从第一区间[1,2)还是从第二区间[2,4)查找值。
更准确地说,由尾数xman的LMSB xl标识的第i个区间的斜率k[i]根据以下来计算:
并且针对第i个区间的斜率c[i]根据以下来计算:
与倒数函数的情况一样,这些斜率k和偏移c值可以以更高精度来预先计算,诸如FP32。这些高精度值k和c分别被量化为较低精度值kq和cq。由于区间[1,4)上的平方根倒数函数的性质,k的所有值都是负数并且具有小于1的绝对值。斜率kq和偏移cq的量化表示中使用的位数是可调参数,其可以根据应用的设计约束、基于准确度与FPGA面积之间的权衡来进行设置。在一个示例中,基于L=4的一些特定设计约束,kq[i]被量化为u0.4(四位)并且cq[i]被量化为u0.8(八位)。预先计算出的斜率和偏移值与其对应的xl值和exp_is_even值相关联地被存储在线性插值查找表(LUT)中。在上面的示例中,L=4,并且其中kq[i]被表示为4位,cq[i]被表示为8位,表中的每个条目具有4位+8位=12位,并且具有24+1=32个条目,其中16个条目对应于exp_is_even为0的情况,并且剩余16个条目对应于exp_is_even为1的情况,并且每种情况下的16个条目是基于xman的4个MSB来访问的。
因此,如图6中所示,来自反相器605的exp_is_even值和来自xman的L个MSB xl作为输入被供应到平方根倒数线性插值查找表610(被指示为{exp_is_even,xl})以在操作524中查找对应的量化斜率kq(在图6中被示出为4位值)和对应的量化偏移cq(在图6中被示出为8位值)。
以类似于上述用于计算输入值x的尾数部分recip(xman)的倒数的线性近似值的方式,输入值x的尾数部分rsqrt(xman)的平方根倒数的线性近似值根据如下来计算:
rsqrt(xman)≈k[i]·(xl[i]+xr[i])+c[i]=k[i]·xr[i]+rsqrt(xl[i])
≈kq[i]·xr[i]+cq[i](13)
因此,在操作526中,量化斜率kq被供应给整数乘法器620,整数乘法器620被配置为实现量化斜率kq乘以xman的(M-L)个LSB xr,以计算乘积prod(在图6中示出为7位)。量化偏移cq被供应给固定移位器630以产生移位值cq_shift,其通过加法器640来与乘积prod相加以计算中间尾数sum(u1.11)(在图6中被示出为12位值)。然后12位尾数的最高有效位(sum[11])被用来使用复用器642选择中间尾数的哪些位被输出作为输出浮点值y的输出尾数部分yman。在图6中所示的示例中,当中间尾数的MSB为1时,那么位sum[10:4]被输出作为yman,当中间尾数的MSB为0时,那么位sum[9:3]被输出作为yman。
如图5中所示,在操作550中,数据路径100基于输入浮点值x的输入指数分量xexp来计算输出浮点值y的输出指数分量yexp。更详细地,在操作552中,数据路径100基于指数值xexp的奇偶性来设置偏置调整值。这对应于基于xexp是偶数还是奇数来设置等式10中的指数中的分子是被设置为127-xexp还是128-xexp。这在图6的示例中被实现,其包括加法器650,其将exp_is_even的值与对应于十进制值380(在图6中被指示为9'd380)的9位值相加,以计算中间指数值exp1。更详细地,当计算输出的有偏指数时,yexp=127+(127-xexp)/2=(381-xexp)/2。但是,当exp_is_even时,则通过缩放尾数将xexp调整-1,并且因此,输出指数yexp=(380-xexp)/2。如此,加法器650输出380(在xexp为奇数的情况下)或381(在xexp为偶数的情况下)的正确常数exp1。
在操作554中,基于中间尾数和(sum[11])的最高有效位来进一步调整偏置,该中间尾数和是在操作526中计算的,同时计算输出yman的M位尾数分量。复用器660在表示1(当sum[11]为1时)和0(当sum[11]为0时)的两个不同的9位值之间进行选择,并且加法器665将该值与中间指数值exp1相加以计算平方根倒数指数调整值rsqrt_exp_adj。然后,在操作556中,加法器670对输入浮点值x的指数分量xexp取反,并将取反的值与值rsqrt_exp_adj相加,以计算表示指数的取反版本的指数和值exp_sum。固定右移1 680然后在操作558中将该值除以2以计算输出浮点值y的指数分量yexp。
在一些示例中,使用两个8位加法器以及右移1来执行指数分量yexp的计算以执行平方根倒数中的指数部分的除以二。在一些示例中,图1中所示的数据路径100的尾数计算级120和指数计算级150是基于图3中所示的数据路径的部分600来实现的,其被配置为分别计算输出浮点值y的尾数部分yman和指数部分yexp。
考虑分别实现了倒数函数和平方根倒数函数的图3和图6中所示的框图,许多组件被共享。两个框图之间的主要差异涉及不同的查找表(存储针对区间[1,2)上的倒数函数的斜率和偏移的倒数线性插值查找表310与针对区间[1,4)上的平方根倒数函数倒数的斜率和偏移的平方根线性插值查找表610),以及在平方根倒数函数的情况下将指数除以2,以及随之而来的调整,以确保被右移的该值是偶数。因此,本技术的一些方面涉及基于选择器输入(rsqrt)选择性地计算倒数函数或平方根倒数函数的组合数据路径。
图8是根据本公开的一个示例的组合的倒数和平方根倒数数据路径的尾数部分800的框图,其被配置为计算由函数选择输入所选择的倒数函数或平方根倒数函数的输出的尾数分量。图9是根据本公开的一个示例的组合的倒数和平方根倒数数据路径的指数部分900的框图,其被配置为计算由函数选择输入所选择的倒数函数或平方根倒数函数的输出的指数分量。图10是描绘根据本公开的一个示例的用于根据函数选择输入选择性地计算倒数或平方根倒数的方法1000的流程图。
在图8中所示的示例中,线性插值查找表810包括尺寸为32×12位和16×12位的两个表。当执行倒数时,选择较小的16条目表,而当选择rsqrt时,选择较大的32条目表,如“rsqrt”输入值所指示,其中rsqrt输入值中的“1”指示选择计算平方根倒数函数并且rsqrt输入值中的“0”指示选择计算倒数函数。如上面所讨论的,当查找rsqrt时,如果有偏指数是偶数(基于由图9中所示的反相器902计算出的exp_is_even值),则访问较高的16个条目;否则,访问较低的16个条目。
乘法器820将4位表输出kq与输入尾数的M-L个LSB xr相乘以生成7位乘积,该7位乘积与8位表输出cq的移位版本相加以形成12位中间尾数和。中间尾数的MSB(sum[11])选择其位域[10:4]或[9:3]作为recip/rsqrt的最终7位尾数yman。
如图9中所示的指数路径包括2个9位加法器和1个增量器,以覆盖等式5(127-xexp)和等式10((127-xexp)/2或(128-xexp)/2)中指定的三种可能条件之一。四个9位复用器(930、940、960和967)基于如下来选择适当的数据源来计算结果指数:基于计算是针对倒数(当“rsqrt”为0时)还是平方根倒数(当“rsqrt”为1时);或者在计算平方根倒数时的输入指数xexp的偶数或奇数值。例如,复用器967被用来基于函数选择输入rsqrt的值来选择平方根倒数指数调整值rsqrt_exp_adj和倒数指数调整值recip_exp_adj。
因此,函数选择输入(“rsqrt”)被用来选择尾数计算级和指数计算级的各部分以实现倒数函数数据路径或平方根倒数函数数据路径。例如,当rsqrt被设置为0时,那么复用器930和940以及加法器970被包括在数据路径中,并且移位器980被设置为移位0位,从而产生功能上与图3中所示的电路等效的电路,其被配置为计算倒数函数的指数分量(例如,从而选择倒数函数数据路径的指数部分)。作为另一示例,当rsqrt被设置为1时,那么反相器902、加法器950、复用器960、加法器965、加法器970和移位器980位于数据路径中,其中移位器980被设置为执行右移1,从而产生与图6中所示电路等效的电路,其被配置为计算平方根倒数函数的指数分量(例如,从而选择平方根倒数函数数据路径的指数部分)。额外的复用器可以被用来在特定输入极端情况下提供非数(NaN)和无穷大(Inf)生成(例如,平方根倒数情况下的负输入值和被设置为0的x的输入值)。
参见图10,函数选择输入(例如,上面图8和图9中所示的“rsqrt”)被用来在计算输入浮点值x的倒数或计算平方根倒数之间进行选择。当函数选择输入指示倒数函数被选择时,那么根据图2中所示的方法200来处理输入浮点值x,其中功能选择输入rsqrt将图8和图9中所示的电路配置为计算倒数函数。同样,当函数选择输入指示平方根倒数函数被选择时,那么根据图5中所示的方法500来处理输入浮点值x,其中功能选择输入rsqrt将图8和图9中所示的电路配置为计算平方根倒数函数。
如上面所指出,根据本公开的各种示例的倒数和平方根倒数数据路径的设计中的各种选择可以相对于所使用的浮点数据格式的特定选择而变化。这些参数包括L中使用的位数,其影响倒数线性插值查找表310、平方根倒数线性插值查找表610和/或组合的倒数和平方根倒数线性插值查找表810中的条目数,预先计算出的量化斜率kq和预先计算出的量化偏移cq中使用的位数,其影响查找表的尺寸和整数乘法器的尺寸等等。其他低精度浮点格式的示例包括:IEEE半精度16位浮点(其具有1个符号位、5个指数位、和10个尾数位)、Nvidia TensorFloat(其具有1个符号位、8个指数位、和10个尾数位)、AMD fp24(其具有1个符号位、7个指数位、和16个尾数位)、以及Pixar PXR24(其具有1个符号位、8个指数位、和15个尾数位)。
如此,本公开的示例的各方面提供了用于在FPGA中实现数据路径以计算倒数函数、平方根倒数函数的近似值的架构,以及具有用于在低精度浮点输入上计算两个函数的共享组件的组合电路。本公开的示例提供了比FPGA中的倒数函数的比较实现涉及更少逻辑块的更简单的实现。作为一个示例,图3中所示的示例仅包括3个复用器、1个恒定量移位器、1个整数乘法器、2个整数加法器以及1个具有12位数据输出的查找表。恒定量移位器可能不需要任何FPGA硬件资源(例如,可以通过向特定引脚供应输入来实现)。本公开的示例使用零浮点乘法器来实现倒数函数和平方根倒数函数(例如,以执行任何二次插值),从而与FPGA中倒数函数的比较实现相比实现显著的硬件资源节省(例如,使用更少的逻辑块)并达成更低的延迟(更快的性能),因为查找表中的查找比(例如,在基于二次插值的比较技术中使用的)定点乘法器具有更低的延迟。
图11是描绘根据本公开的一个示例的用于使用倒数函数或平方根倒数函数的近似值来训练机器学习模型(诸如深度神经网络(DNN))的方法1100的流程图。在图11中所示的示例中,机器学习模型训练应用(参见例如在包括FPGA的计算设备上运行的机器学习训练应用1352,如图13中所示)执行监督学习算法以基于标记的输入数据的集合来训练机器学习模型。在图11中所示的示例中,机器学习模型训练应用在操作1110中接收标记的训练数据,并将训练数据(例如,一批训练数据)供应给当前机器学习模型以计算激活(例如,将来自训练数据的数据样本的值的输入向量供应给深度神经网络,其中深度神经网络的一层生成激活)。
在操作1130中,机器学习模型训练应用计算K个激活上的K路倒数或K路平方根倒数,作为计算深度神经网络的当前层的一部分。这可以包括根据上面参考图1、图2、图3、图5、图6、图8、图9和/或图10描述的技术通过将K个激活供应给函数数据路径(例如,在FPGA中并行实现的K个独立函数数据路径)来计算K个激活中的每一个的倒数或平方根倒数,从而计算每个输出得分的倒数或平方根倒数(在图10中所示的示例中,示出了组合的可选择的倒数或平方根倒数方法1000,但是本公开的实施例不限于此)。然后,在操作1132中,K个单独的值被形成为新的输出激活向量。然后,新的输出激活向量可以作为输入被供应给深度神经网络的下一层,或者可以对应于深度神经网络的输出。在操作1134中,机器学习模型训练应用基于输出激活来计算机器学习模型的归一化输出得分(例如,因为使用加速计算倒数函数和/或平方根倒数函数的FPGA硬件计算出的输出激活在通过机器学习模型的数据的向前传播中被使用)。可以使用例如softmax函数来计算归一化输出得分以使由深度神经网络的输出层所生成的激活归一化。
在操作1140中,机器学习模型训练应用基于机器学习模型的归一化输出得分(其中输出是使用根据本技术的技术基于在深度神经网络的隐藏层或输出层中计算出的激活来计算的)来更新机器学习模型,以生成更新后的机器学习模型(诸如,在深度神经网络中,通过将归一化得分与训练数据的标签进行比较并通过梯度下降和反向传播来更新神经元之间的连接权重)。在操作1150中,机器学习模型训练应用确定训练是否完成(例如,最大数量的训练间隔或训练时期是否已经完成或者机器学习模型的性能是否已经收敛),并且如果没有,那么训练过程可以通过使用更新后的机器学习模型返回到操作1120来继续。如果训练过程完成,那么将更新后的机器学习模型作为经训练的机器学习模型输出并存储,并且训练过程结束。然后,可以部署存储的、经训练的机器学习模型,用于通过利用经训练的机器学习模型处理实时数据以生成输出(例如,输入实时数据的分类或序列中预测的下一项),来基于与训练数据(例如,自然语言输入数据、图像等)类似的实时数据来执行推理任务(例如,进行预测或估计)。
为了验证根据本公开的示例的架构的数值准确度,(-∞,+∞)域上的所有BFloat16值作为输入x被供应给基于关于图2和图3描述的上述参数的本公开的实现,以便计算倒数函数的对应近似值。同样,[0,+∞)域上的所有BFloat 16值都作为输入x被供应给基于关于图5和图6描述的上述参数的本公开的实现,以便计算平方根倒数函数的对应近似值。然后将基于本公开的示例计算出的这些值与使用倒数函数和平方根倒数函数的标准参考实现以FP32数据格式计算出的“真值”或参考值进行比较。
图12A是描绘与倒数函数的参考实现相比、与使用根据本公开的一个示例的系统和方法计算倒数函数相关联的误差的图。图12B是描绘与图12A中使用的倒数函数的相同参考实现相比、与使用基于比较二次插值的技术计算倒数函数相关联的误差的图。
图12C是描绘与平方根倒数函数的参考实现相比、与使用根据本公开的一个示例的系统和方法计算平方根倒数函数相关联的误差的图。图12D是描绘与图12C中使用的平方根倒数函数的相同参考实现相比、与使用基于比较二次插值的技术计算平方根倒数函数相关联的误差的图(其中使用平方根函数和倒数函数的级联,因为比较技术没有描述平方根倒数的具体实现)。
如图12A和图12C中所见,根据本技术所实现的倒数函数和平方根倒数函数两者的误差在大约[-2,2]ulp(最小精度单位,指的是两个连续浮点数之间的间距)。基于比较二次插值的技术实现了针对倒数函数的[-1,1]ulp范围内的误差以及针对平方根倒数函数的[-1,2]ulp范围内的误差。
在训练神经网络模型时,在倒数函数上和在平方根倒数函数上的额外的1ulp误差对准确度和收敛性的影响可以忽略不计。特别地,图12A中所示的2ulp误差仅针对整个域中的两个特定样本出现,而其余输入表现出与基于比较二次插值的技术的最大误差相同的1ulp误差。
使用等人的方法的可比较实现使用FPGA的大约160个ALM来实现倒数函数。相比之下,本公开的一个示例使用大约34个ALM来实现倒数函数,导致倒数函数所使用的FPGA面积减少了大约79%。
类似地,使用等人的方法的可比较实现通过级联一个平方根函数和一个倒数函数,消耗了FPGA的大约350个ALM。相比之下,本公开的一个示例使用大约38个ALM来实现平方根倒数函数,导致平方根倒数函数所使用的FPGA面积减少了大约89%。
面积要求的减少意味着FPGA中计算倒数和平方根倒数函数时的延迟的减少。特别地,与等人的可比较方法相比,一些示例实现在计算倒数函数时延迟减少了72.7%。类似地,与/>等人中描述的级联平方根和倒数数据路径相比,一些示例实现的延迟减少了81.8%。因此,本技术相对于比较技术提供了显著的功率、延迟和面积方面的改善。
因此,与可比较实现相比,本公开的示例显著提高了倒数和平方根倒数函数的计算密度。本技术涉及应用线性插值来近似FPGA上的低精度浮点数据格式的两个超越函数(倒数和平方根倒数),并使用涉及3个整数乘法器和2个加法器的二次插值达到与用于在FPGA上实现类似的数学函数的最先进技术相当的准确度水平。本技术的一些方面涉及实现倒数和平方根倒数函数的组合的或共享的数据路径,其中在两个函数之间共享具有窄整数乘数的公共尾数数据路径,并且其中两个小尺寸查找表(例如,针对倒数函数的16个条目,以及针对平方根倒数函数的32个条目)使得该技术在针对具有丰富查找表(LUT)资源的FPGA时非常节省空间。
图13、图14A和图14B相关联的描述提供了对在其中可以实现本技术的示例的各种操作环境的讨论。然而,关于图13、图14A和图14B示出和讨论的设备和系统是为了示例和说明的目的,并且不限制可以被用于实现本文描述的本发明的各方面的大量计算设备配置。
图13是图示了可以利用其来实现本公开的示例的计算设备1300的物理组件(即,硬件)的框图。下面描述的计算设备组件可以适合于运行用于机器学习模型的训练过程或者适合于使用经训练的机器学习模型来执行推理,如上所述。在基本配置中,计算设备1300可以包括至少一个处理单元1302、现场可编程门阵列(FPGA)1303和系统存储器1304。在一些示例中,处理单元1302包括FPGA 1303(例如,处理单元1302可以包括可通过设置互连来重新配置的逻辑块阵列)。在一些示例中,处理单元1302被集成或嵌入到FPGA 1303中(例如,在一个或多个嵌入式“硬IP”CPU核心直接连接到FPGA 1303的互连或结构和/或使用FPGA 1303的逻辑块所实现的一个或多个嵌入式“软IP”CPU核心的情况下)。取决于计算设备的配置和类型,系统存储器1304可以包括但不限于易失性存储器(例如,随机存取存储器)、非易失性存储器(例如,只读存储器)、闪存或这些存储器的任意组合。系统存储器1304可以包括操作系统1305和一个或多个程序模块1306,其适合于运行软件应用1350,诸如机器学习模型训练应用1352或客户端应用1354。操作系统1305例如可以适合于控制计算设备1300的操作。此外,本发明的各方面可以结合图形库、其他操作系统或任何其他应用程序来实现,并且不限于任何特定应用或系统。该基本配置如图13中由虚线1308内的那些组件所图示。计算设备1300可以具有附加特征或功能性。例如,计算设备1300还可以包括附加数据存储设备(可移除和/或不可移除),诸如例如磁盘、光盘或磁带。这种附加存储装置在图13中由可移除存储设备1309和不可移除存储设备1310示出。
如上所述,数个程序模块和数据文件可以被存储在系统存储器1304中。当在处理单元1302上执行时,程序模块1306可以执行将计算任务卸载到FPGA 1303的处理。FPGA1303可以包括数据路径,其被配置为加速各种数学函数的计算,包括但不限于如上文关于图1、图2、图3、图4、图5、图6、图7、图8、图9和图10所述的倒数函数和平方根倒数函数的近似值的各种示例,以及使用一个或多个数据路径在数据向量上实现倒数函数的各函数(例如,在单个指令中,多个数据或与矢量处理器相关联的SIMD方式)。FPGA 1303可以被配置为包括用于实现根据本发明的示例的其他数学函数的其他数据路径。
此外,本发明的示例可以被实现在包括分立电子元件的电路、包含逻辑门的封装或集成电子芯片、利用微处理器的电路中、或者在包含电子元件或微处理器的单个芯片上。例如,本发明的示例可以经由片上系统(SOC)来实现,其中图13中所图示的每个或许多组件都可以被集成到单个集成电路上。这种SOC器件可以包括一个或多个处理单元、现场可编程门阵列、图形单元、通信单元、系统虚拟化单元和各种应用功能性,所有这些都作为单个集成电路而被集成(或“被烧录”)到芯片衬底上。当经由SOC来进行操作时,本文描述的关于训练机器学习模型(诸如,深度神经网络)或执行涉及倒数函数和/或平方根倒数函数的计算的一些功能性可以经由与计算设备1300的其他组件集成在单个集成电路(芯片)上的专用逻辑来操作。本公开的示例还可以使用能够执行逻辑操作(诸如例如AND、OR和NOT)的其他技术来实现,包括但不限于机械、光学、流体和量子技术。另外,本发明的各方面可以被实现在通用计算机内或者在任何其他电路或系统中。
计算设备1300还可以具有一个或多个输入设备1312,诸如键盘、鼠标、笔、声音输入设备、触摸输入设备等。还可以包括(多个)输出设备1314,诸如显示器还可以包括扬声器、打印机等。上述设备是示例并且可以使用其他设备。在计算设备1300是服务器的情况下,这样的用户输入设备和用户输出设备通常不存在或者不直接连接到计算设备1300。计算设备1300可以包括允许与其他计算设备1318进行通信的一个或多个通信连接1316。合适的通信连接1316的示例包括但不限于RF发射器、接收器和/或收发器电路;通用串行总线(USB)、并行端口和/或串行端口。
如本文中所使用的术语计算机可读介质可以包括计算机存储介质。计算机存储介质可以包括以用于存储信息的任何方法或技术来实现的易失性和非易失性、可移除和不可移除介质,诸如计算机可读指令、数据结构、程序模块或指定FPGA的配置以实现特定功能性的配置文件(“位文件”)。系统存储器1304、可移除存储设备1309和不可移除存储设备1310都是计算机存储介质示例(即,存储器存储)。计算机存储介质可以包括RAM、ROM、电可擦除可编程只读存储器(EEPROM))、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁盒、磁带、磁盘存储或其他磁存储设备、或任何其他可以被用来存储信息并且可以由计算设备1300访问的制品。任何这样的计算机存储介质可以是计算设备1300的一部分。计算机存储介质不包括载波或其他传播的数据信号。
通信介质可以由计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据(诸如载波或其他传送机制)来实现,并且包括任何信息递送介质。术语“调制数据信号”可以描述具有以将信息编码在信号中的方式来设置或改变的一个或多个特性的信号。作为示例而非限制,通信介质可以包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、射频(RF)、红外和其他无线介质之类的无线介质。
图14A和图14B图示了可以利用其来实现本发明的各方面的移动计算设备1400,例如移动电话、智能电话、平板个人计算机、膝上型计算机等。参考图14A,图示了用于实现这些方面的移动计算设备1400的示例。在基本配置中,移动计算设备1400是具有输入元件和输出元件的手持计算机。移动计算设备1400通常包括显示器1405和一个或多个输入按钮1410,输入按钮1410允许用户将信息输入到移动计算设备1400中。移动计算设备1400的显示器1405还可以用作输入设备(例如,触摸屏显示器)。如果被包括的话,可选的侧面输入元件1415允许另外的用户输入。侧面输入元件1415可以是旋转开关、按钮或任何其他类型的手动输入元件。在替代示例中,移动计算设备1400可以并入更多或更少的输入元件。例如,在一些示例中,显示器1405可以不是触摸屏。在替代示例中,移动计算设备1400是便携式电话系统,诸如蜂窝电话。移动计算设备1400还可以包括可选的键盘1435。可选的键盘1435可以是物理键盘或者在触摸屏显示器上生成的“软”键盘。在各个方面,输出元件包括用于示出图形用户界面(GUI)的显示器1405、视觉指示器1420(例如,发光二极管)和/或音频换能器1425(例如,扬声器)。在一些示例中,移动计算设备1400并入了用于向用户提供触觉反馈的振动换能器。在又一示例中,移动计算设备1400并入了输入和/或输出端口,诸如音频输入(例如,麦克风插孔)、音频输出(例如,耳机插孔)和视频输出(例如,HDMI端口),以用于向外部设备发送信号或从外部设备接收信号。
图14B是图示了移动计算设备的一个示例的架构的框图。也就是说,移动计算设备1400可以并入一个系统(即,架构)1402来实现一些示例。在一个示例中,系统1402被实现为能够运行一个或多个应用(例如,浏览器、电子邮件、日历、联系人管理器、消息传送客户端、游戏和媒体客户端/播放器)的“智能电话”。在一些示例中,系统1402被集成为计算设备,诸如集成个人数字助理(PDA)和无线电话。如图14B中所示,系统1402还包括处理器1460、存储可以由处理器1460执行的操作系统1464的存储器1462。系统1402还可以包括FPGA 1463,其可以被配置(使用配置文件或位文件)以实现用于加速数学操作的数据路径,诸如根据本公开的各种示例的如上所述的倒数函数数据路径和平方根倒数函数数据路径。
一个或多个应用1450可以被加载到存储器1462中并在操作系统1464上运行或与操作系统1464相关联地运行。应用的示例包括电话拨号程序、电子邮件程序、个人信息管理(PIM)程序、文字处理程序、电子表格程序、互联网浏览器程序、消息传送程序、机器学习软件(例如,用于再训练模型和/或联合机器学习)等等。系统1402还包括存储器1462内的非易失性存储区域1468。非易失性存储区域1468可以被用来存储在系统1402断电的情况下不应丢失的持久信息。应用1450可以使用非易失性存储区域1468中的信息并将信息存储在非易失性存储区域1468中,诸如电子邮件或由电子邮件应用使用的其他消息等等。同步应用(未示出)也驻留在系统1402上,并且被编程为与驻留在主计算机上的对应同步应用进行交互,以保持存储在非易失性存储区域1468中的信息与存储在主计算机处的对应信息同步。应当了解,其他应用可以被加载到存储器1462中并且在移动计算设备1400上运行。
系统1402具有电源1470,其可以被实现为一个或多个电池。电源1470还可以包括外部电源,诸如AC适配器或对电池进行补充或再充电的供电对接支架。
系统1402还可以包括执行发射和接收射频通信的功能的无线电1472。无线电1472促进系统1402与“外部世界”之间经由通信运营商或服务提供商的无线连接性。往来于无线电1472的传输是在操作系统1464的控制下实施的。换言之,由无线电1472接收到的通信可以经由操作系统1464传播到应用1450,反之亦然。
视觉指示器1420可以被用来提供视觉通知,和/或音频接口1474可以被用于经由音频换能器1425产生听觉通知。在所图示的示例中,视觉指示器1420是发光二极管(LED)并且音频换能器1425是扬声器。这些设备可以直接耦合到电源1470,使得当被激活时,它们在通知机制所指示的持续时间内保持开启,即使处理器1460和其他组件可能关闭以节省电池电力时也是如此。LED可以被编程为无限期地保持开启状态,直到用户采取行动来指示设备的开机状态。音频接口1474被用来向用户提供可听信号并从用户接收可听信号。例如,除了耦合到音频换能器1425之外,音频接口1474还可以耦合到麦克风以接收可听输入,诸如以便于电话交谈。系统1402还可以包括视频接口1476,其使得机载相机1430能够操作以记录静止图像、视频流等。
实现系统1402的移动计算设备1400可以具有附加特征或功能性。例如,移动计算设备1400还可以包括附加数据存储设备(可移除和/或不可移除),诸如磁盘、光盘或磁带。这种附加存储装置在图14B中由非易失性存储区域1468示出。
由移动计算设备1400生成或捕获并经由系统1402存储的数据/信息可以被本地存储在移动计算设备1400上,如上所述,或者数据可以被存储在可以由设备通过以下方式访问的任何数量的存储介质上:该设备经由在移动计算设备1400和与移动计算设备1400相关联的单独计算设备(例如分布式计算网络(诸如互联网)中的服务器计算机)之间的有线连接或者经由无线电1472。应当了解,这样的数据/信息可以经由移动计算设备1400经由无线电1472或者经由分布式计算网络来访问。类似地,根据公知的数据/信息传送和存储装置,包括电子邮件和协作数据/信息共享系统,这样的数据/信息可以很容易在计算设备之间被传送以用于存储和使用。
根据一个示例,一种现场可编程门阵列(FPGA),包括连接多个逻辑块的可配置互连结构,该FPGA被配置为实现倒数函数数据路径,包括:由逻辑块和可配置互连结构实现的尾数计算级,其包括倒数函数数据路径的尾数部分,其被配置为:将输入浮点值的M位尾数分量划分为L个最高有效位和M-L个最低有效位;基于L个最高有效位,从包括倒数查找表的线性插值查找表中查找斜率值和偏移值;以及通过将斜率值乘以M-L个最低有效位来计算乘积并将偏移值与乘积相加,来计算输出浮点值的输出尾数分量;以及由逻辑块和可配置互连结构实现的指数计算级,其包括多个加法器,其被配置为计算输出浮点值的输出指数分量,计算输出指数分量包括对输入浮点值的指数分量取反。
可配置互连结构和逻辑块还可以被配置为实现平方根倒数函数数据路径,包括:由尾数计算级的逻辑块和可配置互连结构实现的尾数部分;以及由指数计算级的逻辑块和可配置互连结构实现的指数部分,并且尾数计算级和指数计算级可以被配置为根据函数选择输入值来在倒数函数数据路径与平方根倒数函数数据之间进行选择路径。
平方根倒数函数数据路径的指数部分还可以被配置为对输入浮点值的指数分量取反并将其除以2;并且平方根倒数函数数据路径的尾数部分可以被配置为在输入浮点值的M位尾数分量的域上执行平方根倒数的线性插值。
平方根倒数函数数据路径的指数部分还可以被配置为:确定输入浮点值的指数分量的奇偶性;基于指数分量的奇偶性来计算指数和值;以及将指数和值除以二以计算输出浮点值的输出指数分量。
线性插值查找表还可以包括平方根倒数查找表,并且平方根倒数函数数据路径的尾数部分还可以被配置为:基于输入浮点值的L个最高有效位和指数分量的奇偶性,从平方根倒数查找表中查找斜率值和偏移值。
平方根倒数查找表可以包括[1,4)域中的条目。
尾数计算级可以包括整数乘法器和加法器,整数乘法器和加法器由倒数函数数据路径的尾数部分和平方根倒数函数数据路径的尾数部分共享。
尾数计算级还可以被配置为基于L个最高有效位、函数选择输入值和输入浮点值的指数分量的奇偶性,从线性插值查找表中查找斜率值和偏移值,该线性插值查找表还包括平方根倒数查找表,并且指数计算级还可以被配置为:基于输入浮点值的指数分量的奇偶性和由尾数计算级所计算出的中间尾数值的最高有效位来计算平方根倒数指数调整值;基于中间尾数值的最高有效位来计算倒数指数调整值;基于函数选择输入值来生成从平方根倒数指数调整值和倒数指数调整值中选择的指数调整值;基于指数调整值对输入浮点值的指数分量取反以计算指数和值;以及当函数选择输入值指示平方根倒数函数时,将指数和值除以二以计算输出浮点值的输出指数分量。
根据一个示例,存储配置文件的计算机存储介质,该配置文件指定包括可配置互连结构和多个逻辑块的现场可编程门阵列(FPGA)的配置,其中基于该配置文件所配置的FPGA包括由可配置互连结构连接的逻辑块,实现:由逻辑块和可配置互连结构实现的尾数计算级,其包括倒数函数数据路径的尾数部分,其被配置为:将输入浮点值的M位尾数分量划分为L个最高有效位和M-L个最低有效位;基于L个最高有效位,从包括倒数查找表的线性插值查找表中查找斜率值和偏移值;以及通过将斜率值乘以M-L个最低有效位来计算乘积并将偏移值与乘积相加,来计算输出浮点值的输出尾数分量;以及由逻辑块和可配置互连结构实现的包括多个加法器的指数计算级,其被配置为计算输出浮点值的输出指数分量,计算输出指数分量包括对输入浮点值的指数分量取反。
配置文件还可以指定FPGA的可配置互连结构和逻辑块的配置,以实现平方根倒数函数数据路径,包括:由尾数计算级的逻辑块和可配置互连结构实现的尾数部分;由指数计算级的逻辑块和可配置互连结构实现的指数部分,以及尾数计算级和指数计算级可以被配置为根据函数选择输入值而在倒数函数数据路径与平方根倒数函数数据之间进行选择路径。
配置文件还可以将平方根倒数函数数据路径的指数部分配置为对输入浮点值的指数分量取反并将其除以2。配置文件还可以将平方根倒数函数数据路径的尾数部分配置为在输入浮点值的M位尾数分量的域上执行平方根倒数的线性插值。
配置文件还可以将平方根倒数函数数据路径的指数部分配置为:确定输入浮点值的指数分量的奇偶性;基于指数分量的奇偶性来计算指数和值;并将指数和值除以二以计算输出浮点值的输出指数分量。
配置文件还可以将线性插值查找表配置为还包括平方根倒数查找表,并且配置文件还可以将平方根倒数函数数据路径的尾数部分配置为:基于L个最高有效位和输入浮点值的指数分量的奇偶性,从平方根倒数查找表中查找斜率值和偏移值。
配置文件还可以将平方根倒数查找表配置为包括域[1,4)中的条目。
配置文件还可以将尾数计算级配置为包括整数乘法器和加法器,该整数乘法器和加法器由倒数函数数据路径的尾数部分和平方根倒数函数数据路径的尾数部分共享。
配置文件还可以将尾数计算级配置为基于L个最高有效位、函数选择输入值以及输入浮点值的指数分量的奇偶性,从线性插值查找表中查找斜率值和偏移值,该线性插值查找表还包括平方根倒数查找表,并且配置文件还可以将指数计算级配置为:基于输入浮点值的指数分量的奇偶性和由尾数计算级所计算出的中间尾数值的最高有效位来计算平方根倒数指数调整值;基于中间尾数值的最高有效位来计算倒数指数调整值;基于函数选择输入值来生成从平方根倒数指数调整值和倒数指数调整值中选择的指数调整值;基于指数调整值对输入浮点值的指数分量取反以计算指数和值;以及当函数选择输入值指示平方根倒数函数时,将指数和值除以二以计算输出浮点值的输出指数分量。
根据一个示例,一种用于在包括连接多个逻辑块的可配置互连结构的现场可编程门阵列(FPGA)中加速计算的方法包括:通过由可配置互连结构和多个逻辑块实现的FPGA的尾数计算级来将输入浮点值的M位尾数分量划分为L个最高有效位和M-L个最低有效位;通过尾数计算级基于L个最高有效位从包括倒数查找表的线性插值查找表中查找斜率值和偏移值;通过尾数计算级的整数加法器将斜率值乘以M-L个最低有效位以计算乘积并将偏移值与乘积相加来计算输出浮点值的输出尾数分量;通过由可配置互连结构和多个逻辑块实现的指数计算级来计算输出浮点值的输出指数分量,计算输出指数分量包括对输入浮点值的指数分量取反。
可配置互连结构和逻辑块还可以被配置为实现平方根倒数函数数据路径,包括:由尾数计算级的逻辑块和可配置互连结构实现的尾数部分;以及由指数计算级的逻辑块和可配置互连结构实现的指数部分,线性插值查找表还可以包括平方根倒数查找表,并且该方法还可以包括:根据函数选择输入值来在倒数函数数据路径与平方根倒数函数数据路径之间进行选择;当函数选择输入值指示平方根倒数函数时,将输入浮点值的指数分量除以二;并且当函数选择输入值指示平方根倒数函数时,基于L个最高有效位和输入浮点值的指数分量的奇偶性,从平方根倒数查找表中查找斜率值和偏移值。
平方根倒数查找表可以包括域[1,4)中的条目。
该方法还可以包括训练机器学习模型,包括:通过由包括处理器、存储器和FPGA的计算设备所执行的机器学习模型训练应用接收标记的训练数据;由机器学习模型训练应用向机器学习模型的第一层供应训练数据以计算多个K个第一层激活;计算机器学习模型的第二层的多个第二层激活,计算多个第二层激活包括将多个K个第一层激活供应给FPGA的尾数计算级和指数计算级,多个第二层激活包括K个第一层激活的K个倒数或K个第一层激活的K个平方根倒数;响应于训练数据来计算机器学习模型的输出的多个归一化得分;基于归一化得分来更新机器学习模型;并将更新后的机器学习模型输出作为经训练的机器学习模型。
例如,上面参考根据本发明的各方面的方法、系统和计算机程序产品的框图和/或操作图示描述了本发明的各方面。框中标注的功能/动作可以不按任何流程图所示的顺序发生。例如,连续示出的两个框实际上可以基本上同时被执行,或者这些框有时可以以相反的顺序被执行,具体取决于所涉及的功能性/动作。此外,如本文和权利要求中所使用的,短语“元素A、元素B或元素C中的至少一个”旨在传达以下中的任一种:元素A、元素B、元素C、元素A和B、元素A和C,元素B和C、以及元素A、B和C。
本申请中提供的一个或多个实施例的描述和图示并不旨在以任何方式限制或约束本发明的范围。本申请中提供的各方面、示例和细节被认为足以传达所有权并使得其他人能够制造和使用要求保护的发明的最佳模式。所要求保护的发明不应被解释为限制于本申请中提供的任何方面、示例或细节。无论是组合还是单独地示出和描述,各种特征(结构上的和方法上的)旨在选择性地被包括或被省略以产生具有特定特征集的示例。已经提供了本申请的描述和图示,本领域技术人员可以设想落入本申请中所体现的总体发明构思的更广泛方面的精神内的变化、修改和替代示例,这些变化、修改和替代示例没有背离要求保护的本发明的更广范围。
Claims (15)
1.一种现场可编程门阵列(FPGA),包括连接多个逻辑块的可配置互连结构,所述可配置互连结构和所述多个逻辑块被配置为实现倒数函数数据路径,包括:
由所述逻辑块和所述可配置互连结构实现的尾数计算级,所述尾数计算级包括所述倒数函数数据路径的尾数部分,所述尾数计算级被配置为:
将输入浮点值的M位尾数分量划分为L个最高有效位和M-L个最低有效位;
基于所述L个最高有效位,从包括倒数查找表的线性插值查找表中查找斜率值和偏移值;以及
通过将所述斜率值乘以所述M-L个最低有效位来计算乘积并将所述偏移值与所述乘积相加,来计算输出浮点值的输出尾数分量;以及
由所述逻辑块和所述可配置互连结构实现的包括多个加法器的指数计算级,所述指数计算级被配置为计算所述输出浮点值的输出指数分量,所述计算所述输出指数分量包括对所述输入浮点值的指数分量取反。
2.根据权利要求1所述的FPGA,其中所述可配置互连结构和所述逻辑块还被配置为实现平方根倒数函数数据路径,所述平方根倒数函数数据路径包括:
由所述尾数计算级的所述逻辑块和所述可配置互连结构实现的尾数部分;以及
由所述指数计算级的所述逻辑块和所述可配置互连结构实现的指数部分,以及
其中所述尾数计算级和所述指数计算级被配置为根据函数选择输入值来在所述倒数函数数据路径与所述平方根倒数函数数据路径之间进行选择。
3.根据权利要求2所述的FPGA,其中所述平方根倒数函数数据路径的所述指数部分还被配置为对所述输入浮点值的所述指数分量取反并将其除以2;以及
其中所述平方根倒数函数数据路径的所述尾数部分被配置为在所述输入浮点值的所述M位尾数分量的域上执行平方根倒数的线性插值。
4.根据权利要求3所述的FPGA,其中所述平方根倒数函数数据路径的所述指数部分还被配置为:
确定所述输入浮点值的所述指数分量的奇偶性;
基于所述指数分量的所述奇偶性来计算指数和值;以及
将所述指数和值除以2以计算所述输出浮点值的所述输出指数分量。
5.根据权利要求4所述的FPGA,其中所述线性插值查找表还包括平方根倒数查找表,以及
其中所述平方根倒数函数数据路径的所述尾数部分还被配置为:
基于所述L个最高有效位和所述输入浮点值的所述指数分量的所述奇偶性,从所述平方根倒数查找表中查找所述斜率值和所述偏移值。
6.根据权利要求5所述的FPGA,其中所述平方根倒数查找表包括域[1,4)中的条目。
7.根据权利要求2所述的FPGA,其中所述尾数计算级包括整数乘法器和加法器,所述整数乘法器和所述加法器由所述倒数函数数据路径的所述尾数部分和所述平方根倒数函数数据路径的所述尾数部分共享。
8.根据权利要求2所述的FPGA,其中所述尾数计算级还被配置为基于所述L个最高有效位、所述函数选择输入值以及所述输入浮点值的所述指数分量的所述奇偶性,从所述线性插值查找表中查找所述斜率值和所述偏移值,所述线性插值查找表还包括平方根倒数查找表,以及
其中所述指数计算级还被配置为:
基于所述输入浮点值的所述指数分量的所述奇偶性和由所述尾数计算级计算出的中间尾数值的最高有效位来计算平方根倒数指数调整值;
基于所述中间尾数值的所述最高有效位来计算倒数指数调整值;
基于所述函数选择输入值来生成从所述平方根倒数指数调整值和所述倒数指数调整值中选择的指数调整值;
基于所述指数调整值对所述输入浮点值的所述指数分量取反以计算指数和值;以及
当所述函数选择输入值指示平方根倒数函数时,将所述指数和值除以2以计算所述输出浮点值的所述输出指数分量。
9.一种存储配置文件的计算机存储介质,所述配置文件指定包括可配置互连结构和多个逻辑块的现场可编程门阵列(FPGA)的配置,其中基于所述配置文件被配置的FPGA包括由所述可配置互连结构连接的逻辑块,所述FPGA实现:
由所述逻辑块和所述可配置互连结构实现的尾数计算级,所述尾数计算级包括倒数函数数据路径的尾数部分,所述尾数计算级被配置为:
将输入浮点值的M位尾数分量划分为L个最高有效位和M-L个最低有效位;
基于所述L个最高有效位,从包括倒数查找表的线性插值查找表中查找斜率值和偏移值;以及
通过将所述斜率值乘以所述M-L个最低有效位来计算乘积并将所述偏移值与所述乘积相加,来计算输出浮点值的输出尾数分量;以及
由所述逻辑块和所述可配置互连结构实现的包括多个加法器的指数计算级,所述指数计算级被配置为计算所述输出浮点值的输出指数分量,所述计算所述输出指数分量包括对所述输入浮点值的指数分量取反。
10.根据权利要求9所述的计算机存储介质,其中所述配置文件还指定所述FPGA的所述逻辑块和所述可配置互连结构的配置以实现平方根倒数函数数据路径,所述平方根倒数函数数据路径包括:
由所述尾数计算级的所述逻辑块和所述可配置互连结构实现的尾数部分;以及
由所述指数计算级的所述逻辑块和所述可配置互连结构实现的指数部分,以及
其中所述尾数计算级和所述指数计算级被配置为根据函数选择输入值而在所述倒数函数数据路径与所述平方根倒数函数数据路径之间进行选择。
11.根据权利要求10所述的计算机存储介质,其中所述配置文件还将所述平方根倒数函数数据路径的所述指数部分配置为对所述输入浮点值的所述指数分量取反并将其除以2;以及
其中所述配置文件还将所述平方根倒数函数数据路径的所述尾数部分配置为在所述输入浮点值的所述M位尾数分量的域上执行平方根倒数的线性插值。
12.根据权利要求11所述的计算机存储介质,其中所述配置文件还将所述平方根倒数函数数据路径的所述指数部分配置为:
确定所述输入浮点值的所述指数分量的奇偶性;
基于所述指数分量的所述奇偶性来计算指数和值;以及
将所述指数和值除以2以计算所述输出浮点值的所述输出指数分量。
13.根据权利要求12所述的计算机存储介质,其中所述配置文件还将所述线性插值查找表配置为还包括平方根倒数查找表,以及
其中所述配置文件还将所述平方根倒数函数数据路径的所述尾数部分配置为:
基于所述L个最高有效位和所述输入浮点值的所述指数分量的所述奇偶性,从所述平方根倒数查找表中查找所述斜率值和所述偏移值。
14.根据权利要求13所述的计算机存储介质,其中所述配置文件还将所述平方根倒数查找表配置为包括域[1,4)中的条目。
15.根据权利要求10所述的计算机存储介质,其中所述配置文件还将所述尾数计算级配置为包括整数乘法器和加法器,所述整数乘法器和所述加法器由所述倒数函数数据路径的所述尾数部分和所述平方根倒数函数数据路径的所述尾数部分共享。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/533,970 US20230161554A1 (en) | 2021-11-23 | 2021-11-23 | Systems and methods for accelerating the computation of the reciprocal function and the reciprocal-square-root function |
US17/533,970 | 2021-11-23 | ||
PCT/US2022/042573 WO2023096689A1 (en) | 2021-11-23 | 2022-09-05 | Systems and methods for accelerating the computation of the reciprocal function and the reciprocal-square-root function |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118176480A true CN118176480A (zh) | 2024-06-11 |
Family
ID=83903237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280072822.3A Pending CN118176480A (zh) | 2021-11-23 | 2022-09-05 | 用于加速倒数函数和平方根倒数函数的计算的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230161554A1 (zh) |
CN (1) | CN118176480A (zh) |
TW (1) | TW202324143A (zh) |
WO (1) | WO2023096689A1 (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117238B1 (en) * | 2002-09-19 | 2006-10-03 | Nvidia Corporation | Method and system for performing pipelined reciprocal and reciprocal square root operations |
US7406589B2 (en) * | 2005-05-12 | 2008-07-29 | International Business Machines Corporation | Processor having efficient function estimate instructions |
-
2021
- 2021-11-23 US US17/533,970 patent/US20230161554A1/en active Pending
-
2022
- 2022-09-05 WO PCT/US2022/042573 patent/WO2023096689A1/en active Application Filing
- 2022-09-05 CN CN202280072822.3A patent/CN118176480A/zh active Pending
- 2022-10-21 TW TW111139991A patent/TW202324143A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
TW202324143A (zh) | 2023-06-16 |
WO2023096689A1 (en) | 2023-06-01 |
US20230161554A1 (en) | 2023-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230106651A1 (en) | Systems and methods for accelerating the computation of the exponential function | |
US10140092B2 (en) | Closepath fast incremented sum in a three-path fused multiply-add design | |
US20200117426A1 (en) | Efficient modulo calculation | |
De Dinechin et al. | Table-based division by small integer constants | |
Zhang et al. | Area‐and power‐efficient iterative single/double‐precision merged floating‐point multiplier on FPGA | |
Venkata Dharani et al. | Booth multiplier: the systematic study | |
JP2006172035A (ja) | 除算・開平演算器 | |
JP2001350623A (ja) | 絶対値算術演算ユニット | |
Gowreesrinivas et al. | Comparative study on performance of single precision floating point multiplier using vedic multiplier and different types of adders | |
US20230161554A1 (en) | Systems and methods for accelerating the computation of the reciprocal function and the reciprocal-square-root function | |
WO2022164678A1 (en) | Digital circuitry for normalization functions | |
Pineiro et al. | A radix-2 digit-by-digit architecture for cube root | |
SalehiTabrizi et al. | Designing Efficient Two-Level Reverse Converters for Moduli Set {2^ 2n+ 1-1, 2^ 2n, 2^ n-1\} 2 2 n+ 1-1, 2 2 n, 2 n-1 | |
US11934327B2 (en) | Systems and methods for hardware acceleration of data masking using a field programmable gate array | |
De Dinechin et al. | Reconfigurable Arithmetic for High-Performance Computing | |
Saha et al. | High speed multiplier using high accuracy floating point logarithmic number system | |
US20230334117A1 (en) | Method and system for calculating dot products | |
US20230376663A1 (en) | Systems and methods for hardware acceleration of masking and normalizing data with a triangular input mask | |
TWI802095B (zh) | 模數乘法電路與對應之計算模數乘法之方法 | |
Immaneni et al. | PosAx-O: Exploring Operator-level Approximations for Posit Arithmetic in Embedded AI/ML | |
Kumar et al. | Simulation And Synthesis Of 32-Bit Multiplier Using Configurable Devices | |
Rajani et al. | Verilog implementation of double precision floating point division using vedic paravartya sutra | |
Aditya et al. | ASIC Implementation of Approximate Single Precision Floating Point Multiplier | |
Saha et al. | IMPROVED FLOATING POINT MULTIPLIER DESIGN BASED ON CANONICAL SIGN DIGIT. | |
GB2622034A (en) | Efficient floating point squarer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |