CN116601585A - 数据类型感知时钟门控 - Google Patents
数据类型感知时钟门控 Download PDFInfo
- Publication number
- CN116601585A CN116601585A CN202180083584.1A CN202180083584A CN116601585A CN 116601585 A CN116601585 A CN 116601585A CN 202180083584 A CN202180083584 A CN 202180083584A CN 116601585 A CN116601585 A CN 116601585A
- Authority
- CN
- China
- Prior art keywords
- data
- register
- value
- clock
- bits
- 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
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/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/5443—Sum of products
-
- 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
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3237—Power saving characterised by the action undertaken by disabling clock generation or distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/325—Power saving in peripheral device
- G06F1/3275—Power saving in memory, e.g. RAM, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3287—Power saving characterised by the action undertaken by switching off individual functional units in the computer system
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Nonlinear Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Logic Circuits (AREA)
Abstract
为了降低功率消耗,可将数据寄存器的不期望频繁地切换的数据位或一部分分组在一起,并且独立于所述数据寄存器的其余部分进行时钟门控。所述数据位的所述分组可基于正在操作的工作负载的数据类型来确定。对于支持多种数据类型的被配置为存储数值的数据寄存器,所述数据寄存器的被时钟门控的所述部分可存储不用于所述数据寄存器所支持的所述多种数据类型中的一种或多种的一组数据位。所述数据寄存器的被时钟门控的所述部分也可以是对于被频繁地操作的特定数值范围内的数值保持不变或具有恒定值的一组数据位。
Description
背景技术
人工神经网络利用具有基于生物神经网络的架构的计算模型。人工神经网络中的计算使用表示神经网络模型的一组权重来执行。权重可与输入数据(也称为特征图)结合用于执行推断操作。例如,在计算机视觉应用中,神经网络可将权重与输入图像结合,以提取图像的某些特征。基于所提取的特征,神经网络可生成关于图像中是否描绘特定对象的决定。可用训练数据训练神经网络来调整模型的权重值,以提高推断操作的准确度。
附图说明
将参考附图描述根据本公开的各种实施方案,在附图中:
图1示出神经网络计算的示例的概念图;
图2示出具有n位数据寄存器的集成电路的一个示例的框图;
图3示出具有n位数据寄存器的集成电路的另一个示例的框图;
图4示出用于时钟门控的数据位分组的示例的概念图;
图5示出支持多种数据类型的数据寄存器的示例;
图6A示出用于时钟门控的浮点数据寄存器的数据位分组的示例;
图6B示出用于时钟门控的浮点数据寄存器的数据位分组的附加示例;
图7A示出用于对数据寄存器进行时钟门控的示例性过程的流程图;
图7B示出用于对浮点数据寄存器进行时钟门控的示例性过程的流程图;
图8示出集成电路器件的示例的框图;
图9示出加速引擎的示例的框图;并且
图10包括示出主机系统的示例的框图。
具体实施方式
神经网络在很大程度上依赖于矩阵计算。权重和特征图通常表示为矩阵,并且在神经网络的各个层处对这些矩阵和中间结果执行一系列矩阵乘法(例如,点积)以生成计算结果。为了高效地执行这些计算,可使用布置成行和列的处理元件阵列来实现诸如神经网络处理器的加速器。每个处理元件可通过以下方式来执行乘法与累加运算:将特征图值与权重值相乘以生成乘法结果,并且将乘法结果与部分和输入相加以生成部分和输出。此部分和输出作为部分和输入馈送到下一处理元件。尽管此类加速器相比通用处理器可更高效地执行神经网络计算,但所执行的大量计算可能导致显著的功率消耗。
为了降低神经网络计算的功率消耗,可将数据类型感知时钟门控技术应用于加速器的集成电路设计。诸如特征图和权重的数值存储在阵列中的每个处理元件中的数据寄存器中。这些值可用各种数据类型来表示,并且被转换成通用格式以用于存储在处理元件的数据寄存器中。某些输入数据类型不需要数据寄存器的全位宽。通过一起对数据寄存器的未使用位进行时钟门控,可在处理不使用数据寄存器的时钟门控位的输入数据类型时降低数据寄存器的动态功率消耗。大多数神经网络计算也是用小值执行的。因此,也可一起对用于大数值的数据位(诸如指数的最高有效位)进行时钟门控以降低动态功率消耗,因为不期望频繁地更改这些位。此外,一起被时钟门控的位可在数据寄存器中实现为多位触发器,以减少时钟树布线和缓冲器,并最小化电路设计的布局面积。
在以下描述中,将描述各种示例。出于解释的目的,阐述了具体的配置和细节,以便提供对示例的透彻理解。然而,本领域技术人员还将明白,可在没有具体细节的情况下实践示例。此外,可省略或简化众所周知的特征,以免使所描述的实施方案混淆。
图1示出可由集成电路器件(例如,诸如神经网络处理器的加速器、图形处理单元、或诸如处理器、算术逻辑单元等的其他计算器件)中的逻辑块(例如,处理元件)执行的神经网络计算的示例的概念图。
图1所示的神经网络计算将权重输入值与特征图(FMAP)输入值相乘,并将相乘结果与部分和输入相加以生成部分和输出。此操作可称为融合乘加运算或乘法与累加运算。
执行计算的处理元件可接收特征图输入值和权重输入值。这些值可用各种数据类型(诸如8位浮点(FP8)、16位浮点(FP16)、脑浮点(BF16)、32位浮点(FP32)或其他合适的数据类型)来表示。为了支持各种数据类型,数据类型转换单元112和122将特征图(FMAP)输入和权重输入转换成处理元件的本机格式。数据转换可在处理元件接收到特征图输入值和权重输入值之前由软件或硬件执行。所转换的值分别存储在FMAP寄存器114和权重寄存器124中。在一些实现方式中,处理元件的本机格式可以是包括1位符号、10位指数和11位尾数的22位浮点(FP22)格式。因此,FMAP寄存器114和权重寄存器124各自可以是22位数据寄存器。在其他实现方式中,可使用具有相同或不同数量的指数和/或尾数位的其他合适的本机格式。
当在输入值的分量相比本机格式的对应分量具有更少位时,数据类型转换可例如通过以下方式来执行:用零填充输入值的分量(例如,指数、尾数等),或者在数据寄存器中使某些位保持未使用。当输入值的分量相比本机格式的对应分量具有更多位时,数据类型转换可例如通过截断输入值的某些位以对数进行舍入来执行,或者使用量化技术保留输入数据类型的动态范围来以本机格式表示。
一旦转换成本机格式,乘法器162就可将存储在FMAP寄存器114中的FMAP值与存储在权重寄存器124中的权重值相乘以生成乘法结果。然后,乘法结果可存储在乘法结果寄存器132中。在FMAP值和权重值的本机格式为FP22的实现方式中,乘法结果可为34位浮点(FP34)数。因此,乘法结果寄存器132可以是34位数据寄存器。在对FMAP值和/或权重值使用不同的本机格式的其他实现方式中,乘法结果寄存器132可包含不同数量的数据位来存储乘法结果。
执行神经网络计算的处理元件还可接收部分和输入(其是先前融合乘加运算的结果),并且将部分和输入存储在部分和输入寄存器142中。部分和输入可呈与乘法结果相同的格式。因此,在乘法结果为FP34数的实现方式中,部分和输入也可为FP34数,并且部分和输入寄存器142可以是34位数据寄存器。然后,加法器164将存储在乘法结果寄存器132中的乘法结果与存储在部分和输入寄存器142中的部分和输入相加以生成部分和输出。部分和输出可存储在乘法累加结果寄存器152中,并且作为下一处理元件的部分和输入提供给所述下一处理元件。部分和输出可呈与部分和输入相同的格式。因此,在部分和输入为FP34数的实现方式中,部分和输出也可为FP34数,并且乘法累加结果寄存器152可以是34位数据寄存器。
执行此类神经网络计算的集成电路器件可具有数百或甚至数千个逻辑块(例如,处理元件)来执行图1所示的计算以实现高度并行的矩阵乘法运算。此类计算也可在神经网络的执行期间执行数百万次。因此,降低执行此类计算的逻辑块的功率消耗可在集成电路器件的操作期间导致显著的功率节省。
图2示出具有n位数据寄存器290的集成电路200的示例的框图。n位寄存器可用于实现例如处理元件的FMAP寄存器和/或权重寄存器。n位数据寄存器290包括触发器252、254、256、258、264和262。尽管图2中仅示出6个触发器,但应当理解,n位数据寄存器290可包括更少或更多的触发器来实现数据寄存器290中的n个数据位。触发器252由数据位D[0]驱动;触发器254由数据位D[1]驱动;触发器256由数据位D[2]驱动;触发器258由数据位D[3]驱动;触发器264由数据位D[n-2]驱动;并且触发器262由数据位D[n-1]驱动。触发器中的每一个也由时钟信号驱动。
为了降低n位数据寄存器290的动态功率消耗,可将存储特定数据位的多个触发器分组在一起,并且独立于数据寄存器的其余部分进行时钟门控。将触发器时钟门控为禁用到所述触发器的时钟信号以减少所述触发器中的开关活动。当到触发器的数据输入具有与先前存储在触发器中的值相同的逻辑值时,可禁用时钟信号,而不影响数据寄存器的功能,因为触发器的数据输出将与数据输入处于相同的逻辑值。尽管可独立地对每个触发器进行时钟门控,但这样做可由于附加时钟门电路而显著增加集成电路器件的面积。因此,策略性地将数据位分组在一起以进行时钟门控可在功率节省与布局面积之间取得平衡。
参考图2,数据位D[3:0]可分组在一起并由时钟门电路270进行时钟门控。时钟门电路270包括异或门212、214、216和218。更一般地,时钟门电路可包括与分组在一起的数据位的数量相同数量的异或门。异或门212将数据输入D[0]与触发器252的存储值进行比较,并且如果两个值相同,则输出逻辑0。异或门214、216和218分别对数据位D[1]、D[2]和D[3]执行类似的功能。当数据输入D[3:0]具有与触发器258、256、254和252中的存储值相同的值时,异或门212、214、216和218的所有输出将处于逻辑0。
异或门212、214、216和218的输出由或门222进行逻辑或运算,并且或门222的输出被提供给时钟门224。时钟门224接收时钟信号CLK,并且执行时钟信号与或门222的输出的逻辑与。时钟门224的输出作为到触发器258、256、254和252的输入时钟信号被驱动。因此,当或门222的输出为逻辑0(指示数据输入D[3:0]等于它们对应的存储值)时,将禁用到触发器258、256、254和252的输入时钟信号。当数据输入D[3:0]中的任一个具有与存储值不同的逻辑值时,对应异或门的输出将处于逻辑1,并且或门222的输出将处于逻辑1。这使时钟门224能够驱动到触发器258、256、254和252的输入时钟信号CLK,以允许触发器258、256、254和252用数据输入D[3:0]更新存储值。
集成电路200还将数据位D[n-1:n-2]分组在一起,所述数据位由单独的时钟门电路280进行时钟门控。时钟门电路280包括异或门232和234、或门242和时钟门244。时钟门电路280的操作类似于时钟门电路270。当数据输入D[n-1:n-2]等于存储值时,时钟门电路280禁用到触发器262和264的输入时钟信号。当数据输入D[n-1:n-2]的任何位不同于存储值时,时钟门电路280启用到触发器262和264的输入时钟信号以允许触发器262和264用数据输入D[n-1:n-2]更新存储值。
时钟门电路270独立于数据寄存器290的数据位的其余部分禁用和启用到D[3:0]的触发器的时钟信号,并且时钟门电路280独立于数据寄存器290的数据位的其余部分禁用和启用到D[n-1:n-2]的触发器的时钟信号。n位数据寄存器290的其他数据位也可被分组成一个或多个组,所述一个或多个组各自独立地被时钟门控,和/或如果期望频繁地切换一个或多个数据位,则可不对此类数据位进行时钟门控。可策略性地选择用于时钟门控的数据位的分组,使得不太可能频繁地切换的数据位可分组在一起,和/或提供类似功能或表示类似数据的数据位可分组在一起。还应当指出的是,分组在一起的数据位不需要是连续的并且可包括由不是分组的一部分的中间数据位分开的数据位。
在一些实现方式中,分组在一起的数据位的数量也可与集成电路的多位触发器设计库中可用的数据位的数量对齐以利用多位触发器的架构。换句话讲,如果集成电路的设计库提供2位宽多位触发器(MFF)、4位MFF和8位MFF,则分组在一起用于时钟门控的数据位的数量可被选择为2位、4位或8位,使得可使用MFF而不是多个单独的单位触发器来实现对应于分组在一起的数据位的触发器。
图3示出具有用多位触发器实现的n位数据寄存器390的集成电路300的示例的框图。图3所示的集成电路300的部件包括n位数据寄存器390、时钟门电路370和时钟门电路380。时钟门电路370用于对数据位D[3:0]进行时钟门控,并且包括异或门312、314、316和318、或门322和时钟门324。时钟门电路380用于对数据位D[n-1:n-2]进行时钟门控,并且包括异或门332和334、或门342和时钟门344。集成电路300的功能类似于集成电路200的功能。因此,无需重复其详细描述。
在图3中,n位数据寄存器390使用MFF而不是图2中的多个单位触发器来实现。使用MFF的优点可包括通过减少时钟树布线和缓冲器而降低泄漏和动态功率消耗。MFF的使用还可通过减小标准单元面积而提高集成电路设计的密度,因为触发器之间的连接和MFF中诸如边界扫描链的测试逻辑部件的布局在MFF内部得到局部优化。用于时钟门控的数据位的分组可与设计库中MFF的可用数据位宽对齐。因此,由时钟门电路370进行时钟门控的对应于D[3:0]的触发器可用4位MFF 352来实现,并且由时钟门电路380进行时钟门控的对应于D[n-1:n-2]的触发器可用2位MFF 362来实现。
图4示出不同数据类型的数据位可如何被分组用于时钟门控目的的示例的概念图。图4所示的数据寄存器400用于存储整数数据类型。如果基于特定应用期望整数值为小,则数据寄存器400的最高有效位预计不会频繁地切换,并且将通常保持为零。因此,数据寄存器400的最高有效位可被分组在一起,并且独立于数据寄存器400的其余部分由时钟门电路XGATE进行时钟门控。
作为另一示例,图4所示的数据寄存器450用于存储浮点数据类型。浮点数据类型包括符号位、指数和尾数。如果基于特定应用期望浮点值为小,则指数的最高有效位预计不会频繁地切换,并且将通常保持为零。因此,指数的最高有效位可被分组在一起,并且独立于数据寄存器400的其余部分由时钟门电路XGATE2进行时钟门控。如果期望浮点值相比尾数中可用位的数量具有更低精度,则尾数的最低有效位可分组在一起,并且独立于数据寄存器400的其余部分由时钟门电路XGATE1进行时钟门控。
图5示出可支持多种数据类型的数据寄存器的示例的概念图500。在所示示例中,FP22数据寄存器是硬件实现方式。FP22数据寄存器可包括单符号位寄存器、10位指数寄存器和11位尾数寄存器。FP22数据寄存器可支持存储例如FP16数或BF16数。在不同数据类型之间保持指数与尾数之间的边界。因此,当存储BF16数据类型时,11位尾数寄存器的最低有效四位可未使用。这可以是将11位尾数寄存器的最低有效四位分组在一起以进行时钟门控的考虑因素。
上述时钟门控技术可扩展到用于执行神经网络计算的集成电路器件。例如,用于执行神经网络计算的集成电路器件可包括布置成行和列的处理元件阵列。处理元件中的每一个可包括被配置为存储浮点权重值的权重寄存器,以及被配置为存储浮点特征图(FMAP)值的FMAP寄存器。每个处理元件还可包括乘法器电路和加法器电路,所述乘法器电路被配置为将浮点FMAP值与浮点权重值相乘以生成乘法结果,所述加法器电路被配置为将乘法结果与部分和输入相加以生成部分和输出。为了降低功率消耗,每个处理元件还包括权重时钟门电路和FMAP时钟门电路,所述权重时钟门电路被配置为独立于权重寄存器的其余部分对权重寄存器的一部分进行时钟门控,所述FMAP时钟门电路被配置为独立于FMAP寄存器的其余部分对FMAP寄存器的一部分进行时钟门控。
在期望浮点FMAP和权重值为小的实现方式中,权重寄存器的被时钟门控的部分可被配置为存储浮点权重值的指数的较高部分(最高有效位),并且FMAP寄存器的被时钟门控的部分可被配置为存储浮点FMAP值的指数的较高部分(最高有效位)。在浮点FMAP值和权重值的精度不需要完全使用它们的相应寄存器中的尾数位的实现方式中,权重寄存器的被时钟门控的部分可被配置为存储浮点权重值的尾数的较低部分,并且FMAP寄存器的被时钟门控的部分可被配置为存储浮点FMAP值的尾数的较低部分。在一些实现方式中,集成电路器件可包括附加时钟门电路以对权重寄存器和/或FMAP寄存器的其他部分进行时钟门控。例如,集成电路器件可包括另一权重时钟门电路和/或另一FMAP时钟门电路,所述另一权重时钟门电路被配置为独立于权重寄存器的由第一权重时钟门电路门控的部分对权重寄存器的另一部分进行时钟门控,所述另一FMAP时钟门电路被配置为独立于FMAP寄存器的由第一FMAP时钟门电路门控的部分对FMAP寄存器的另一部分进行时钟门控。
更一般地,权重寄存器和/或FMAP寄存器可支持多种数据类型(例如,FP16、BF16等),并且一起被时钟门控的一组权重/FMAP数据位可以是不用于所支持的数据类型中的一种或多种的数据位。一起被时钟门控的一组权重/FMAP数据位也可以是对于神经网络频繁地操作的权重/FMAP值范围内的权重/FMAP值保持不变的数据位。
图6A至图6B示出浮点数据寄存器的用于时钟门控以降低功率消耗的数据位分组的各种示例。数据寄存器和时钟门电路的电路可类似于图2至图3所示的集成电路200和300的电路。尽管图6A至图6B中的数据寄存器的实现方式被示出为具有22位浮点(FP22)格式(例如,以实现图1的FMAP寄存器114或权重寄存器124),但应当理解,本文所述的技术可应用于具有不同数量的指数位和/或尾数位的浮点数,以及存储其他数据类型或格式的数据寄存器。
参考图6A,数据寄存器电路610包括数据寄存器,所述数据寄存器具有被配置为存储浮点数的符号位的符号寄存器、被配置为存储浮点数的指数的指数寄存器和被配置为存储浮点数的尾数的尾数寄存器。在浮点数具有FP22格式的实现方式中,指数寄存器被配置为存储10位指数,并且尾数寄存器被配置为存储11位尾数。在一些实现方式中,浮点数可以是用于神经网络计算的权重值或特征图值。
数据寄存器电路610还包括时钟门电路XGATE1,所述时钟门电路XGATE1被配置为独立于尾数寄存器的其余部分对尾数寄存器的较低部分(最低有效位)进行时钟门控。在图6A所示的示例,尾数的四个最低有效位(例如,MANT[3:0])被分组在一起并且由XGATE1进行时钟门控。回想图1,FP22本机格式提供对各种输入数据类型、包括BF16的支持,所述BF16频繁地用于硬件加速机器学习算法中。BF16数据类型包括单符号位、10位指数和7位尾数。因此,当将BF16转换为FP22时,尾数寄存器的最后四位未使用,如图5所示。通过将尾数的四个最低有效位(例如,MANT[3:0])分组在一起以由XGATE1进行时钟门控,在处理BF16数时到这些未使用触发器的时钟输入将被禁用以降低功率消耗。将四个尾数位分组在一起还允许使用4位MFF来实现这些尾数位的触发器。
数据寄存器电路620类似于数据寄存器电路610,并且还包括时钟门电路XGATE2,所述时钟门电路XGATE2被配置为独立于指数寄存器的其余部分对指数寄存器的较高部分(最高有效位)进行时钟门控。在图6A所示的示例,指数的四个最高有效位(例如,EXP[9:6])被分组在一起并且由XGATE2进行时钟门控。神经网络频繁地对诸如小权重和小梯度的小值执行计算,并且因此指数值倾向于为小。因此,在许多情况下,不切换指数的较高部分。然而,这些值不一定是正的并且可能改变符号。因此,对指数的较高部分进行时钟门控,无需对符号位进行时钟门控。将四个指数位分组在一起还允许使用4位MFF来实现EXP[9:6]触发器。
数据寄存器电路620类似于数据寄存器电路610,并且还包括时钟门电路XGATE2,所述时钟门电路XGATE2被配置为独立于指数寄存器的其余部分对指数寄存器的较高部分(最高有效位)进行时钟门控。在图6A所示的示例,指数的四个最高有效位(例如,EXP[9:6])被分组在一起并且由XGATE2进行时钟门控。神经网络频繁地对诸如小权重和小梯度的小值执行计算,并且因此指数值倾向于为小。因此,在许多情况下,不切换指数的较高部分。然而,这些值不一定是正的并且可能改变符号。因此,对指数的较高部分进行时钟门控,无需对符号位进行时钟门控。将四个指数位分组在一起还允许使用4位MFF来实现EXP[9:6]触发器。
数据寄存器电路630类似于数据寄存器电路620,并且还包括时钟门电路XGATE3,所述时钟门电路XGATE3被配置为独立于指数寄存器的其余部分对指数寄存器的中间部分(中间位)进行时钟门控。在图6A所示的示例,指数的四个中间位(例如,EXP[5:2])被分组在一起并且由XGATE3进行时钟门控。除了对小值执行计算外,神经网络通常还对极小值(例如,后ReLU激活、小梯度、稀疏权重)进行操作。考虑到这一点,可单独对指数的中间位进行时钟门控。将四个指数位分组在一起还允许使用4位MFF来实现EXP[5:2]触发器。
现在参考图6B,数据寄存器电路640类似于数据寄存器电路630,并且还包括附加时钟门电路XGATE4和XGATE5。除了对小值和极小值进行操作外,由于稀疏权重矩阵和/或后ReLU激活,神经网络还倾向于对零值的高出现率进行操作。考虑到对零值进行操作的可能性,数据寄存器电路640将指数寄存器和尾数寄存器的剩余部分或指数寄存器的较低部分与尾数寄存器的较高部分(例如,EXP[1:0]与MANT[10:4])分组在一起以由XGATE4进行时钟门控。符号位寄存器独立地由XGATE5进行时钟门控。尽管数据寄存器电路640的剩余数据位可以所示方式分组,但XGATE4和XGATE5各自对奇数个数据位进行时钟门控。这种分组不适合利用MFF,因为MFF通常可从2n个数据位的设计库获得。
数据寄存器电路650提供数据寄存器电路640的替代分组,并且允许在数据寄存器的剩余数据位上使用MFF以与时钟门控对齐。数据寄存器电路650将指数寄存器的剩余部分或较低部分(例如,EXP[1:0])分组在一起以由XGATE5进行时钟门控,并且将符号位与尾数寄存器的剩余部分或较高部分(例如,SIGN与MANT[10:4])分组在一起以由XGATE4进行时钟门控。由于XGATE4和XGATE5两者都用于对2n个数据位进行时钟门控,因此数据寄存器电路650的分组允许使用2位MFF来实现EXP[1:0]的触发器,并且使用8位MFF来实现SIGN和MANT[10:4]的触发器。
应当理解,虽然图6A至图6B示出FP22寄存器的数据位可如何被分组在一起用于时钟门控的各种示例,但其他实现方式可以不同的方式对数据位进行分组或者使用所示时钟门控的不同组合。此外,可不对一个或多个数据位进行时钟门控。例如,期望频繁地切换的数据位可免去任何时钟门控,因为最小的功率节省可能无法证明时钟门电路所需的附加布局面积是合理的。本文所述的时钟门控技术也不限于FP22或浮点数据类型,并且可应用于神经网络上下文之外以及存储其他类型数据的数据寄存器。
更一般地,取决于集成电路器件操作的工作负载的特定应用或数据类型,可将数据寄存器的不期望频繁地切换的数据位或部分可分组在一起,并且独立于数据寄存器的其余部分进行时钟门控。对于支持多种数据类型的被配置为存储数值的数据寄存器,时钟门电路可被提供来独立于数据寄存器的其余部分对数据寄存器的一部分进行时钟门控。数据寄存器的被时钟门控的部分可存储不用于数据寄存器所支持的多种数据类型中的一种或多种的一组数据位。举例来说,如果数据寄存器是16位数据寄存器,并且所支持的数据类型中的一种是8位整数,则当对8位整数进行操作时,数据寄存器的8个数据位可未使用,因此,数据寄存器的未使用的8个数据位可被分组在一起并且由时钟门电路进行时钟门控。
替代地或另外地,数据寄存器的被时钟门控的部分可存储对于被频繁地操作的数值范围内的数值保持不变或具有恒定值的一组数据位。举例来说,如果数据寄存器是用于存储整数的8位数据寄存器,并且240至255范围内的整数被频繁地操作,则数据寄存器的较高四个数据位可被分组在一起并且由时钟门电路进行时钟门控。这是因为数据寄存器的较高四个位具有恒定值b1111,并且当被操作的数值在240至255范围内时保持不变。
应当理解,数据寄存器可设置有各自对不同组数据位进行时钟门控的多个时钟门电路,并且数据位的每个分组可出于以上所讨论的原因中的任一个而被选择。此外,分组选择还可考虑设计库中可用的多位触发器的位宽,以将时钟门控与多位触发器实现方式对齐。换句话讲,数据位的分组可被选择为使得一起被时钟门控的一组数据位可使用多位触发器来实现。
图7A示出用于对数据寄存器进行时钟门控的示例性过程700的流程图。过程700可例如由诸如本文所述的那些的数据寄存器电路来执行。数据寄存器电路可以是支持多种数据类型的数据寄存器。数据寄存器电路可使用单独的单位触发器、多位触发器或它们的组合来实现。
过程700可在框702处通过数据寄存器电路接收第一数值(例如,整数、浮点数等)开始。在框704处,将第一数值存储在数据寄存器中。在框706处,数据寄存器电路接收第二数值。在框708处,响应于接收到第二数值,数据寄存器电路确定数据寄存器的一部分正在存储等于输入到数据寄存器的所述部分中的第二数值的一组数据位的值。例如,可通过将触发器的输出与其对应输入数据位进行比较的一系列异或门来作出确定。
所述一组数据位可不用于数据寄存器所支持的数据类型中的一种或多种,或者所述一组数据位可对于被频繁地操作的数值范围内的数值具有恒定值。在一些实现方式中,数据寄存器的所述部分中被比较的数据位的数量可与数据寄存器电路的设计库中可用的多位触发器的可用位宽(例如,2n个数据位)对齐。在此类实现方式中,数据寄存器的所述部分可使用多位触发器来实现。
在框710处,可禁用到数据寄存器的所述部分的时钟输入信号以降低功率消耗,而不影响数据寄存器的功能,因为到数据寄存器的这部分的输入数据等于存储值。当数据寄存器的多个部分正在存储与输入数据的对应部分相同的值时,过程700还可禁用到多个部分的时钟输入信号。
当接收到不同于存储值的新输入数据时,可重新启用到数据寄存器的所述部分的时钟输入信号。例如,假设已禁用到数据寄存器的所述部分的时钟输入信号,并且已接收到第三数值。响应于接收到第三数值,如果确定数据寄存器的所述部分正在存储不同于输入到数据寄存器的所述部分中的第三数值的一组数据位的值,则可启用到数据寄存器的所述部分的时钟输入信号以允许用新接收的值更新数据寄存器的所述部分。
图7B示出用于对数据寄存器进行时钟门控的示例性过程750的流程图。过程750可例如由诸如本文所述的那些的数据寄存器电路来执行。尽管过程750是在存储浮点数的上下文中描述的,但时钟门控技术可用于存储其他类型数据的数据寄存器中。
过程750可在框752处通过数据寄存器电路接收第一浮点数开始。第一浮点数包括第一符号、第一指数和第一尾数。符号通常表示为单数据位。取决于浮点格式以及特定应用的动态范围和精度,指数和尾数各自可采用任何数量的数据位。在框754处,将第一浮点数存储在数据寄存器中。数据寄存器包括用于存储符号位的符号寄存器、用于存储指数的指数寄存器和用于存储尾数的尾数寄存器。数据寄存器可使用单独的单位触发器、多位触发器或它们的组合来实现。
在框756处,数据寄存器电路接收第二浮点数。第二浮点数包括第二符号、第二指数和第二尾数。在框758处,响应于接收到第二浮点数,数据寄存器电路确定数据寄存器的一部分正在存储等于第二浮点数的对应部分的值。例如,可通过将触发器的输出与其对应输入数据位进行比较的一系列异或门来作出确定。在一些实现方式中,数据寄存器的所述部分中被比较的数据位的数量可与数据寄存器电路的设计库中可用的多位触发器的可用位宽(例如,2n个数据位)对齐。在框760处,可禁用到数据寄存器的所述部分的时钟输入信号以降低功率消耗,而不影响数据寄存器的功能,因为到数据寄存器的这部分的输入数据等于存储值。
举例来说,响应于接收到第二浮点数,过程750可确定指数寄存器的较高部分正在存储等于第二指数的较高部分的值,并且禁用到指数寄存器的较高部分的时钟输入信号以防止指数寄存器的较高部分被切换。又如,响应于接收到第二浮点数,过程750可确定尾数寄存器的较低部分正在存储等于第二尾数的较低部分的值,并且禁用到尾数寄存器的较低部分的时钟输入信号以防止尾数寄存器的较低部分被切换。又如,响应于接收到第二浮点数,过程750可确定符号寄存器正在存储等于第二符号的值,并且禁用到符号寄存器的时钟输入信号以防止符号寄存器被切换。当数据寄存器的多个部分正在存储与输入数据的对应部分相同的值时,过程750还可禁用到多个部分的时钟输入信号。
当接收到不同于存储值的新输入数据时,可重新启用到数据寄存器的所述部分的时钟输入信号。例如,假设已禁用到指数寄存器的较高部分的时钟输入信号,并且已接收到具有第三符号、第三指数和第三尾数的第三浮点数。响应于接收到第三浮点数,如果确定指数寄存器的较高部分正在存储不同于第三指数的较高部分的值,则可启用到指数寄存器的较高部分的时钟输入信号以允许用新接收的值更新指数寄存器的较高部分。
图8是示出可包括本文所述的数据寄存器电路的示例的集成电路器件的示例的框图。图8的示例示出加速器802。在各种示例中,针对一组输入数据(例如,输入数据850),加速器802可使用处理引擎阵列810、激活引擎816和/或池化引擎818来执行计算。在一些示例中,示例性加速器802可以是处理器的集成电路部件,诸如神经网络处理器。处理器可具有其他集成电路部件,包括附加加速器引擎。
在各种实现方式中,存储器子系统804可包括多个存储体814。在这些实现方式中,可独立访问每个存储体814,这意指对一个存储体的读取不依赖于对另一个存储体的读取。类似地,对一个存储体的写入不影响或限制对不同存储体的写入。在一些情况下,可同时读取和写入每个存储体。可使用各种技术来获得可独立访问的存储体814。例如,每个存储体可以是物理上分离的存储器部件,其地址空间与每个其他存储体的地址空间分离并且独立于每个其他存储体的地址空间。在此示例中,每个存储体可具有至少一个读取通道并且可具有可同时使用的至少一个单独写入通道。在这些示例中,存储器子系统804可允许同时访问多个存储体的读取或写入通道。作为另一示例,存储器子系统804可包括仲裁逻辑,使得例如多个存储体814的输出之间的仲裁可导致使用多于一个存储体的输出。在这些和其他示例中,尽管由存储器子系统804全局管理,但每个存储体可独立于任何其他存储体操作。
使存储体814可独立访问可提高加速器802的效率。例如,可同时读取值并将其提供给处理引擎阵列810的每一行,以便可在一个时钟周期内使用整个处理引擎阵列810。又如,可在将处理引擎阵列810计算的结果写入存储器子系统804的同时读取存储体814。相比之下,单个存储器可能够一次只服务一次读取或写入。例如,在单个存储器的情况下,可能需要多个时钟周期,以在可启动处理引擎阵列810之前为处理引擎阵列810的每一行读取输入数据。
在各种实现方式中,存储器子系统804可被配置为同时服务多个客户端,包括处理引擎阵列810、激活引擎816、池化引擎818和通过通信织构820访问存储器子系统804的任何外部客户端。在一些实现方式中,能够服务多个客户端可意指存储器子系统804具有至少与客户端一样多的存储体。在一些情况下,处理引擎阵列810的每一行都可算作一个单独的客户端。在一些情况下,处理引擎阵列810的每一列都可输出结果,使得每一列都可算作一个单独的写入客户端。在一些情况下,可将来自处理引擎阵列810的输出写入存储体814,所述存储体随后可为处理引擎阵列810提供输入数据。作为另一示例,激活引擎816和池化引擎818可包括多个执行通道,其中每一个都可以是单独的存储器客户端。例如,存储体814可使用静态随机存取存储器(SRAM)来实现。
在各种实现方式中,存储器子系统804可包括控制逻辑。例如,控制逻辑可跟踪存储体814中的每一个的地址空间,标识要读取或写入的存储体814,和/或使数据在存储体814之间移动。在一些实现方式中,存储体814可硬连线到特定客户端。例如,一组存储体814可被硬连线向处理引擎阵列810的行提供值,其中一个存储体服务每一行。又如,一组存储体可被硬连线来从处理引擎阵列810的列接收值,其中一个存储体接收每一列的数据。
处理引擎阵列810是示例性加速器802的计算矩阵。例如,处理引擎阵列810可执行并行积分、卷积、相关和/或矩阵乘法等。处理引擎阵列810可包括多个处理引擎811,所述多个处理引擎布置成行和列,使得一个处理引擎811输出的结果可直接输入到另一个处理引擎811中。不在处理引擎阵列810的外部边缘上的处理引擎811因此可从其他处理引擎811而不是从存储器子系统804接收要操作的数据。
在各种示例中,处理引擎阵列810使用脉动执行(systolic execution),在所述脉动执行中数据以定期间隔从不同方向到达每个处理引擎811。在一些示例中,输入数据可从左侧流入处理引擎阵列810并且权重值可在顶部加载。在一些示例中,权重和输入数据可从左侧流动,并且部分和可从顶部向底部流动。在这些和其他示例中,乘法与累加运算作为对角波前移动通过处理引擎阵列810,其中数据向右和向下移动穿过阵列。控制信号可与权重同时在左侧输入,并且可随计算横向和向下流动。
在各种实现方式中,处理引擎阵列810中的列数确定处理引擎阵列810的计算能力,并且行数确定实现处理引擎阵列810的最大限度的利用所需的存储器带宽。例如,处理引擎阵列810可具有64列和428行,或某一其他数量的列和行。
处理引擎811的示例在图8中以插图示出。如此示例所示,处理引擎811可包括乘法器-累加器电路。例如,来自左侧的输入可包括输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,并且权重值来自将神经网络的一层连接到下一层的一组权重值。例如,一组输入数据可以是提交用于标识或对象识别的图像、提供用于言语识别的音频剪辑、用于自然语言处理或机器翻译的文本串、或需要分析以确定下一步行动的游戏的当前状态等。在一些示例中,输入数据和权重值被输出到右侧,以用于输入到下一处理引擎811。
在所示示例中,来自上面的输入可包括从另一处理引擎811或者从处理引擎阵列810的前一轮计算提供的部分和p_in。当开始计算一组新的输入数据时,处理引擎阵列810的顶行可接收p_in的固定值,诸如零。如此示例所示,将i和w乘在一起,并且将结果与p_in求和以产生新的部分和p_out,所述部分和可输入到另一处理引擎811中。处理引擎811的各种其他实现方式也是可能的。
来自处理引擎阵列810中最后一行的输出可暂时地存储在结果缓冲器812中。结果可以是中间结果,其可被写入存储体814以提供给处理引擎阵列810用于附加计算。替代地,结果可以是最终结果,其一旦写入存储体814,就可通过通信织构820从存储器子系统804读取,以由系统输出。
在一些实现方式中,加速器802包括激活引擎816。在这些实现方式中,激活引擎816可将来自处理引擎阵列810的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可对来自多个通道的卷积求和以产生单个通道的输出激活。在其他示例中,可能需要累加来自处理引擎阵列810中的一个或多个列的结果以产生神经网络中的单个节点的输出激活。在一些示例中,可绕过激活引擎816。
在各种示例中,激活引擎816可包括多个单独的执行通道。在这些示例中,执行通道可对应于处理引擎阵列810的列,并且可对列的输出执行操作,其结果可存储在存储器子系统804中。在这些示例中,激活引擎816可能够执行1至n个并行计算,其中n等于处理引擎阵列810中的列数。在一些情况下,可同时执行计算中的一个或多个。每个执行通道可执行的计算的示例包括指数、平方、平方根、恒等式、二进制阶跃、双极阶跃、S型和斜坡等其他示例。
在一些实现方式中,加速器802可包括池化引擎818。池化是对处理引擎阵列810的列的输出进行组合。例如,组合可包括计算最大值、最小值、平均值、中值、求和、乘法或其他逻辑或数学组合。在各种示例中,池化引擎818可包括可对来自处理引擎阵列810的对应列的值进行操作的多个执行通道。在这些示例中,池化引擎818可能够执行1至n个并行计算,其中n等于处理引擎阵列810中的列数。在各种示例中,池化引擎818的执行通道可并行和/或同时操作。在一些示例中,可绕过池化引擎818。
在本文中,激活引擎816和池化引擎818可统称为执行引擎。处理引擎阵列810是执行引擎的另一个示例。执行引擎的另一个示例是直接存储器访问(DMA)引擎,其可位于加速器802之外。
输入数据850可通过通信织构820到达。通信织构820可将加速器802连接到处理器的其他部件,诸如可从输入/输出(I/O)设备、存储驱动器或网络接口获得输入数据850的DMA引擎。例如,输入数据850可以是一维数据,诸如字符串或数字序列,或二维数据,诸如图像的像素值阵列或音频信号随时间变化的频率值和振幅值。在一些示例中,输入数据850可以是三维的,例如,可能是自动驾驶汽车使用的情境信息或虚拟现实数据的情况。在一些实现方式中,存储器子系统804可包括用于输入数据850的单独缓冲器。在一些实现方式中,当加速器802接收到输入数据850时,输入数据850可存储在存储体814中。
在一些示例中,加速器802可实现神经网络处理引擎。在这些示例中,针对一组输入数据850,加速器802可执行神经网络以执行针对其训练神经网络的任务。对一组输入数据执行神经网络可称为推断或执行推断。
神经网络的权重可连同神经网络将操作的输入数据850一起存储在存储器子系统804中。神经网络还可包括指令,所述指令可对处理引擎阵列810进行编程以对权重和输入数据执行各种计算。指令还可存储在存储器子系统804、存储体814或单独的指令缓冲器中。处理引擎阵列810可输出中间结果,其表示神经网络的个别层的输出。在一些情况下,可启用激活引擎816和/或池化引擎818以进行神经网络的某些层所要求的计算。加速器802可将中间结果存储在存储器子系统804中,以用于输入到处理引擎阵列810中以计算神经网络的下一层的结果。处理引擎阵列810可进一步从神经网络的最后一层输出最终结果。最终结果可存储在存储器子系统804中,然后复制到主机处理器存储器或另一位置。
图9包括示出加速引擎900的示例的框图。加速引擎900是集成电路的示例,其可包括一个或多个加速器902a至902n,所述一个或多个加速器可类似于图8所示的加速器。
在图9的示例中,加速引擎900包括多个加速器902a至902n,其中每一个都可执行一组操作。在各种示例中,加速器902a至902n用于特定类型的操作,以便加速器902a至902n执行操作可比通用处理器执行类似操作时快得多。在各种示例中,为了执行一组操作,必须首先将要对其执行操作的输入数据移动到加速器902a至902n中。另外,在一些情况下,还将程序代码移动到加速器902a至902n中,所述程序代码对加速器902a至902n将对数据执行的操作进行编程。在所示示例中,加速引擎900包括n个加速器902a至902n。可包括在加速引擎900中的加速器的示例包括图形加速器、浮点加速器、神经网络加速器等。在各种示例中,加速器902a至902n各自可以是相同的(例如,其中每一个都是图形加速器),或可以是不同的(例如,加速器902a至902n包括图形加速器、浮点加速器和神经网络加速器)。
示例性加速引擎900还包括用于与外部存储器通信的DRAM控制器942a至942k。在此示例中,外部存储器是使用DRAM 930实现的。在所示示例中,加速引擎900包括k个DRAM控制器942a至942k,其中每一个都可能够与独立的一组DRAM存储体通信。在其他示例中,对于外部存储器,可使用其他类型的RAM技术。DRAM控制器942a至942k也可称为存储器控制器。
在各种示例中,用于加速器902a至902n的输入数据和/或程序代码可存储在DRAM930中。不同的程序可使加速器902a至902n执行不同的操作。例如,当加速器中的一个是神经网络加速器时,一个程序可配置神经网络加速器来执行言语识别,而另一个程序可配置神经网络加速器来执行图像识别。在各种示例中,可用不同的程序对不同的加速器902a至902n进行编程,以便每个加速器执行不同的一组操作。在各种示例中,处理器948a至948s可管理程序代码从DRAM 930到加速器902a至902n的移动。
示例性加速引擎900还包括用于与系统中的I/O设备932通信的I/O控制器944a至944p。例如,加速引擎900可通过处理器总线与I/O设备通信。在一些示例中,可使用外围部件互连(PCI)和/或PCI总线协议的变型来实现处理器总线。处理器总线可将加速引擎900连接到I/O设备诸如例如输入和输出设备、存储器控制器、存储设备和/或网络接口卡等。在一些示例中,I/O控制器944至944p可使加速引擎900能够充当主机处理器的I/O设备。例如,加速引擎900可以是来自主机处理器的输入数据和指示要对输入数据执行操作(例如,特定计算或分析)的命令的接收者。在所示示例中,加速引擎900包括p个I/O控制器944a至944p,其中每一个都可包括单独的根复合体并且可与单独的一组I/O设备932通信。在其他示例中,对于主机总线,可使用诸如超路径互连(UPI)的其他标准化总线协议。在其他示例中,可使用专有总线协议。
加速引擎900中的数据移动可由一个或多个处理器948a至948s管理,所述一个或多个处理器也可称为数据管理处理器。在图9的示例中,加速引擎900包括并入设备中(例如,在相同的硅裸片上)的s个处理器948a至948s。在其他示例中,处理器948a至948s可在加速引擎900的外部(例如,在不同的裸片上和/或在不同的封装中)。在一些示例中,处理器948a至948s可管理数据从I/O设备932到加速器902a至902n或DRAM 930的移动。例如,输入数据可位于I/O设备932处或处理器存储器中,并且处理器948a至948s可将输入从I/O设备932或处理器存储器移动到加速器或DRAM 930中。又如,用于加速器902a至902n的程序代码可位于I/O设备932上或处理器存储器中。
示例性加速引擎900还包括DMA引擎946a至946d,其可使数据在加速器902a至902n、DRAM控制器942a至942k与I/O控制器944a至944p之间移动。在所示示例中,加速引擎900包括d个DMA引擎946a至946d。在一些实现方式中,DMA引擎946a至946d可分配给特定任务,诸如将数据从DRAM控制器942a至942d移动到加速器902a至902n,或者使数据在I/O控制器944a至944p与加速器902a至902n之间移动。例如,可通过使用DMA引擎946a至946d将描述符入队来分配这些任务,其中描述符标识数据块的地址和要执行的操作(例如,读取或写入)。例如,描述符可指导DMA引擎指示DMA控制器从DRAM 930读取数据块。又如,描述符可指示DMA引擎将由DMA控制器读取的数据写入加速器。另外的描述符可用于将数据从加速器移动到DRAM 930。
在各种示例中,处理器948a至948s中的每一个可负责管理针对不同加速器的数据移动。在一些示例中,处理器可管理针对多于一个加速器的数据移动。类似地,在各种示例中,处理器948a至948s中的每一个可分配给一个或多个DMA引擎946a至946d。在这些和其他示例中,处理器948a至948s、加速器902a至902n与DMA引擎946a至946d之间的关联关系由每个相应处理器执行的程序代码确定。
在示例性加速引擎900中,各种部件可通过芯片互连920进行通信。芯片互连920主要包括用于在加速引擎900的部件之间路由数据的配线。在一些情况下,芯片互连920可包括最少量的逻辑部件,诸如用于控制数据方向的多路复用器、用于处理时钟域交叉的触发器以及时序逻辑部件。
图10包括示出可在其中使用加速引擎1060的主机系统1000的示例的框图。图10的加速引擎1060是可包括诸如图9所示的一个或多个加速器的设备的示例。图10的示例性主机系统1000包括加速引擎1060、主机处理器1072、DRAM 1030或处理器存储器、I/O设备1032和支持系统1074。在各种实现方式中,主机系统1000可包括此处未示出的其他硬件。
主机处理器1072是能够执行程序指令的通用集成电路。在一些示例中,主机处理器1072可包括多个处理核心。多核处理器可包括同一处理器内的多个处理单元。在一些示例中,主机系统1000可包括多于一个主机处理器1072。在一些示例中,主机处理器1072和加速引擎1060可以是一个芯片,诸如同一封装内的一个或多个集成电路。
在各种示例中,主机处理器1072可通过一个或多个通信通道与主机系统1000中的其他部件通信。例如,主机系统1000可包括主机处理器总线,主机处理器1072可使用所述主机处理器总线来与例如DRAM 1030通信。又如,主机系统1000可包括I/O总线,诸如基于PCI的总线,主机处理器1072可通过所述I/O总线与例如加速引擎1060和/或I/O设备1032通信。在各种示例中,主机系统1000可替代地或另外地包括其他通信通道或总线,诸如串行总线、电源管理总线、存储设备总线等。
在一些示例中,在主机处理器1072上执行的软件程序可接收或生成输入以供加速引擎1060处理。在一些示例中,程序可针对给定输入选择适当的要执行的神经网络。例如,程序可用于语言翻译,并且可选择具有语音识别和/或机器翻译的能力的一个或多个神经网络。在这些和其他示例中,程序可向加速引擎1060配置要执行的神经网络,和/或可在先前已被配置为执行所需神经网络的加速引擎1060上选择神经网络处理引擎。在一些示例中,一旦加速引擎1060已开始对输入数据的推断,主机处理器1072就可管理数据(诸如权重、指令、中间结果、条件层的结果和/或最终结果)进出加速引擎1060的移动。
在一些示例中,使用加速引擎1060来进行推断的软件程序可从来自加速引擎1060的条件层和/或从诸如DRAM 1030中的存储位置读取结果。在这些示例中,程序可确定神经网络接下来应当采取什么动作。例如,程序可确定终止推断。又如,程序可确定改变推断的方向,这可由较低级别的代码和/或神经网络处理器翻译给下一层来执行。在这些和其他示例中,神经网络的执行流程可由软件协调。
DRAM 1030是由主机处理器1072用于存储主机处理器1072正在执行的程序代码以及正在操作的值的存储器。在一些示例中,神经网络的数据(例如,权重值、指令和其他数据)可全部或部分地存储在DRAM 1030中。DRAM是处理器存储器的常用术语,并且尽管DRAM是易失性存储器,但处理器存储器可以是易失性和/或非易失性的。尽管此处未示出,但主机系统1000可包括用于其他目的的其他易失性和非易失性存储器。例如,主机系统1000可包括只读存储器(ROM),其存储用于在开机时引导主机系统1000的引导代码和/或基本输入/输出系统(BIOS)代码。
尽管此处未示出,但DRAM 1030可存储用于各种程序的指令,这些指令可加载到主机处理器1072中并由主机处理器执行。例如,DRAM 1030可存储用于操作系统、一个或多个数据存储库、一个或多个应用程序、一个或多个驱动程序和/或用于实现本文所公开的特征的服务的指令。
操作系统可管理和编排主机系统1000的整体操作,诸如调度任务、执行应用和/或控制器外围设备等其他操作。在一些示例中,主机系统1000可托管一个或多个虚拟机。在这些示例中,每个虚拟机可被配置为执行其自己的操作系统。操作系统的示例包括Unix、Linux、Windows、Mac OS、iOS、Android等。替代地或另外地,操作系统可以是专有操作系统。
数据存储库可包括由操作系统、应用程序或驱动程序使用和/或操作的永久性或暂时性数据。此类数据的示例包括网页、视频数据、音频数据、图像、用户数据等。在一些示例中,数据存储库中的信息可通过一个或多个网络提供给用户设备。在一些情况下,数据存储库可另外地或替代地包括存储的应用程序和/或驱动程序。替代地或另外地,数据存储库可存储标准和/或专有软件库,和/或标准和/或专有应用程序用户接口(API)库。存储在数据存储库中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
驱动程序可包括提供主机系统1000中的部件之间的通信的程序。例如,一些驱动程序可提供操作系统与外围设备或I/O设备1032之间的通信。替代地或另外地,一些驱动程序可提供应用程序与操作系统和/或应用程序与主机系统1000可访问的外围设备之间的通信。在许多情况下,驱动程序可包括提供易于理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态设备驱动程序等)。在其他情况下,驱动程序可提供专有或专门功能。
I/O设备1032可包括用于连接到用户输入和输出设备(诸如键盘、鼠标、笔、平板、语音输入设备、触摸输入设备、显示器或监视器、扬声器和打印机等其他设备)的硬件。I/O设备1032还可包括存储驱动器和/或用于连接到网络1080的网络接口。例如,主机系统1000可使用网络接口来与存储设备、用户终端、其他计算设备或服务器和/或其他网络等各种示例通信。
在各种示例中,I/O设备1032中的一个或多个可以是存储设备。在这些示例中,存储设备包括非易失性存储器并且可存储程序指令和/或数据。存储设备的示例包括磁存储装置、光盘、固态盘、快闪存储器和/或带存储装置等。存储设备可容纳在与主机系统1000相同的机箱中或者可位于外壳中。存储设备可以是固定的(例如,通过螺钉附接)或可移动的(例如,具有物理释放机制和可能的热插拔机制)。
主机系统1000中的存储设备、DRAM 1030和任何其他存储器部件是计算机可读存储介质的示例。计算机可读存储介质是能够以可由诸如主机处理器1072的设备读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可在没有向介质施加功率时保留存储在其上的数据。非暂时性计算机可读介质的示例包括ROM设备、磁盘、磁带、光盘、快闪设备和固态驱动器等。如本文所用,计算机可读存储介质不包括计算机可读通信介质。
在各种示例中,存储在计算机可读存储介质上的数据可包括程序指令、数据结构、程序模块、库、其他软件程序部件和/或可在数据信号(诸如载波或其他传输)内传输的其他数据。计算机可读存储介质可另外地或替代地包括文档、图像、视频、音频和可通过使用软件程序来操作或操纵的其他数据。
在各种示例中,I/O设备1032中的一个或多个可以是基于PCI的设备。在这些示例中,基于PCI的I/O设备包括用于与主机系统1000通信的PCI接口。术语“PCI”或“基于PCI的”可用于描述PCI总线协议族中的任何协议,包括原始PCI标准、PCI-X、加速图形端口(AGP)和PCI-Express(PCIe)或基于本文所讨论的PCI协议的任何其他改进或衍生协议。基于PCI的协议是用于将诸如本地外围设备的设备连接到主机设备的标准总线协议。标准总线协议是数据传送协议,其规范已由各种制造商定义和采用。制造商确保兼容设备与实现总线协议的计算系统兼容,并且反之亦然。如本文所用,基于PCI的设备还包括使用非易失性快速存储器(NVMe)进行通信的设备。NVMe是用于使用PCIe访问附接到计算系统的非易失性存储介质的设备接口规范。
基于PCI的设备可包括一个或多个功能。“功能”描述可由基于PCI的设备提供的操作的硬件和/或软件。功能的示例包括海量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器等。在一些情况下,基于PCI的设备可包括多于一个功能。例如,基于PCI的设备可提供海量存储控制器和网络适配器。又如,基于PCI的设备可提供两个存储控制器,以控制两个不同的存储资源。在一些实现方式中,基于PCI的设备可具有多达八个功能。
在一些示例中,基于PCI的设备可包括单根I/O虚拟化(SR-IOV)。SR-IOV是可包括在基于PCI的设备中的扩展能力。SR-IOV允许物理资源(例如,单个网络接口控制器)表现为多个虚拟资源(例如,六十四个网络接口控制器)。因此,提供特定功能的基于PCI的设备(例如,网络接口控制器)对于使用基于PCI的设备的设备而言可表现为提供相同功能的多个设备。具有SR-IOV能力的存储适配器设备的功能可分类为物理功能(PF)或虚拟功能(VF)。物理功能是设备的全特性功能,其可被发现、管理和操纵。物理功能具有可用于配置或控制存储适配器设备的配置资源。物理功能包括与非虚拟化设备具有的相同的配置地址空间和存储器地址空间。物理功能可具有许多与之相关联的虚拟功能。虚拟功能类似于物理功能,但为通常可无配置资源的轻量级功能,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一者可分配给在主机设备上运行的相应执行线程(诸如例如,虚拟机)。
在各种实现方式中,支持系统1074可包括用于协调加速引擎1060的操作的硬件。例如,支持系统1074可包括微处理器,其协调加速引擎1060的活动,包括在加速引擎1060上来回移动数据。在此示例中,微处理器可以是可执行微码的集成电路。微码是可使集成电路能够在集成电路可执行的操作上具有一定灵活性的程序代码,但由于程序代码使用有限的指令集,因此微处理器相比主机处理器1072可能具有更有限的能力。在一些示例中,由微处理器执行的程序存储在微处理器的硬件上,或者存储在主机系统1000中的非易失性存储芯片上。在一些示例中,微处理器和加速引擎1060可位于芯片(诸如同一裸片上和同一封装中的一个集成电路)上。
在一些示例中,当在主机处理器1072上执行的程序请求神经网络的执行时,支持系统1074可负责从主机处理器1072获取指令。例如,主机处理器1072可向支持系统1074提供输入数据集和要对所述输入数据集执行的任务。在此示例中,支持系统1074可标识可执行任务的神经网络,并且可对加速引擎1060进行编程以对输入数据集执行神经网络。在一些示例中,支持系统1074仅需要选择神经网络处理器的适当的神经网络处理引擎。在一些示例中,在加速引擎1060可开始执行神经网络之前,支持系统1074可能需要将神经网络的数据加载到加速引擎1060上。在这些和其他示例中,支持系统1074可进一步接收执行神经网络的输出,并且将输出提供回给主机处理器1072。
在一些示例中,支持系统1074的操作可由主机处理器1072处理。在这些示例中,可不需要支持系统1074并且可从主机系统1000省略支持系统。
在各种示例中,主机系统1000可包括主机系统、处理器节点、存储子系统和表示用户设备、服务提供商计算机或第三方计算机的I/O机箱的组合。
用户设备可包括计算设备来访问应用(例如,网络浏览器或移动设备应用)。在一些示例中,应用可由计算资源服务或服务提供商托管、管理和/或提供。应用可使用户能够与服务提供商计算机交互以例如访问网络内容(例如,网页、音乐、视频等)。用户设备可以是计算设备,诸如例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、瘦客户端设备、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些示例中,用户设备可通过一个或多个网络与服务提供商计算机通信。另外,用户设备可以是由服务提供商计算机管理、控制或者另外是服务提供商计算机的一部分的分布式系统(例如,与服务提供商计算机集成的控制台设备)的一部分。
主机系统1000还可表示一个或多个服务提供商计算机。服务提供商计算机可提供被配置为在用户设备上运行的用户可与之交互的本地应用。在一些示例中,服务提供商计算机可提供计算资源,诸如但不限于客户端实体、低延迟数据存储、持久数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可以可操作以提供网络托管、存入数据库、计算机应用开发和/或实现方式平台、前述项的组合等。在一些示例中,服务提供商计算机可提供为在托管计算环境中实现的一个或多个虚拟机。托管计算环境可包括一个或多个快速供应和释放的计算资源。这些计算资源可包括计算、网络和/或存储设备。托管计算环境也可称为云计算环境。服务提供商计算机可包括可能在集群中布置为服务器群或彼此不相关联的单独服务器的一个或多个服务器,并且可托管应用和/或基于云的软件服务。这些服务器可配置为集成的分布式计算环境的一部分。在一些示例中,服务提供商计算机可另外地或替代地包括计算设备,诸如例如移动电话、智能电话、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、瘦客户端设备、平板计算机、游戏控制台等。在一些情况下,服务提供商计算机可与一台或多台第三方计算机通信。
本文所述的模块可以是软件模块、硬件模块或它们的合适的组合。如果模块是软件模块,则模块可体现在非暂时性计算机可读介质上并且由本文所述的计算机系统中的任一者中的处理器处理。应当指出的是,所描述的过程和架构可在任何用户交互之前以实时或异步模式执行。模块可以前面的附图中建议的方式配置,和/或本文所述的功能可由作为单独模块存在的一个或多个模块提供,和/或本文所述的模块功能可散布在多个模块上。
因此,本说明书和附图应被视为具有说明性意义而不是限制性意义。然而,显然,在不偏离如权利要求中所阐述的本公开的更宽泛的精神和范围的情况下,可对本公开进行各种修改和改变。
本公开的各种实现方式可根据以下条款来描述:
条款1.一种集成电路器件,其包括:
布置成行和列的处理元件阵列,其中每个处理元件包括:
权重寄存器,所述权重寄存器被配置为存储浮点权重值,支持多种数据类型;
第一权重时钟门电路,所述第一权重时钟门电路被配置为独立于所述权重寄存器的其余部分对所述权重寄存器的第一部分进行时钟门控,其中所述权重寄存器的所述第一部分被配置为存储第一组权重数据位,所述第一组权重数据位不用于所述多种数据类型中的一种数据类型;
特征图(FMAP)寄存器,所述FMAP寄存器被配置为存储支持所述多种数据类型的浮点FMAP值;
第一FMAP时钟门电路,所述第一FMAP时钟门电路被配置为独立于所述FMAP寄存器的其余部分对所述FMAP寄存器的第一部分进行时钟门控,其中所述FMAP寄存器的所述第一部分被配置为存储第一组FMAP数据位,所述第一组FMAP数据位不用于所述多种数据类型中的第二数据类型;
乘法器,所述乘法器被配置为将所述浮点FMAP值与所述浮点权重值相乘以生成乘法结果;以及
加法器,所述加法器被配置为将所述乘法结果与部分和输入相加以生成部分和输出。
条款2.如条款1所述的集成电路器件,其中所述第一组权重数据位对应于所述浮点权重值的尾数的较低部分,并且所述第一组FMAP数据位对应于所述浮点FMAP值的尾数的较低部分。
条款3.如条款1的集成电路器件,其还包括:
第二权重时钟门电路,所述第二权重时钟门电路被配置为独立于所述权重寄存器的所述第一部分对所述权重寄存器的第二部分进行时钟门控,其中所述权重寄存器的所述第二部分被配置为存储第二组权重数据位,所述第二组权重数据位对于权重值范围内的权重值保持不变;以及
第二FMAP时钟门电路,所述第二FMAP时钟门电路被配置为独立于所述FMAP寄存器的所述第一部分对所述FMAP寄存器的第二部分进行时钟门控,其中所述FMAP寄存器的所述第二部分被配置为存储第二组FMAP数据位,所述第二组FMAP数据位对于FMAP值范围内的FMAP值保持不变。
条款4.如条款3所述的集成电路器件,其中所述第二组权重数据位对应于所述浮点权重值的指数的较高部分,并且所述第二组FMAP数据位对应于所述浮点FMAP值的指数的较高部分。
条款5.一种集成电路器件,其包括:
数据寄存器,所述数据寄存器被配置为存储数值,支持多种数据类型;
第一时钟门电路,所述第一时钟门电路被配置为独立于所述数据寄存器的其余部分对所述数据寄存器的第一部分进行时钟门控,所述数据寄存器的所述第一部分存储第一组数据位,所述第一组数据位不用于所述多种数据类型中的一种数据类型;以及
第二时钟门电路,所述第二时钟门电路被配置为独立于所述数据寄存器的其余部分对所述数据寄存器的第二部分进行时钟门控,所述数据寄存器的所述第二部分存储第二组数据位,所述第二组数据位对于数值范围内的数值具有恒定值。
条款6.如条款5所述的集成电路器件,
其中所述数值是浮点数,
其中所述数据寄存器包括被配置为存储所述浮点数的符号位的符号寄存器、被配置为存储所述浮点数的指数的指数寄存器和被配置为存储所述浮点数的尾数的尾数寄存器,并且
其中所述第一组数据位对应于所述尾数寄存器的较低部分。
条款7.如条款6所述的集成电路器件,其中所述尾数寄存器的所述较低部分使用多位触发器来实现。
条款8.如条款6或7所述的集成电路器件,其中所述第二组数据位对应于所述指数寄存器的较高部分。
条款9.如条款8所述的集成电路器件,其中所述指数寄存器的所述较高部分使用多位触发器来实现。
条款10.如条款6至9中任一项所述的集成电路器件,其还包括:第三时钟门电路,所述第三时钟门电路被配置为对所述指数寄存器的较低部分与所述尾数寄存器的较高部分进行时钟门控。
条款11.如条款6至9中任一项所述的集成电路器件,其还包括:第三时钟门电路,所述第三时钟门电路被配置为对所述符号寄存器与所述尾数寄存器的较高部分进行时钟门控。
条款12.如条款6至11中任一项所述的集成电路器件,其中所述指数寄存器被配置为存储10位指数,并且所述尾数寄存器被配置为存储11位尾数。
条款13.如条款6至12中任一项所述的集成电路器件,其中所述多种数据类型包括浮点16(FP16)数据类型和脑浮点(BF16)数据类型。
条款14.如条款6至13中任一项所述的集成电路器件,其中所述浮点数是用于神经网络计算的权重值或特征图值。
条款15.如权利要求5所述的集成电路器件,其中所述数值是整数。
条款16.如条款5或15所述的集成电路器件,其中所述数据寄存器的所述第一部分和所述数据寄存器的所述第二部分各自使用多位触发器来实现。
条款17.一种方法,其包括:
接收第一数值;
将所述第一数值存储在支持多种数据类型的数据寄存器中;
接收第二数值;以及
响应于接收到所述第二数值:
确定所述数据寄存器的一部分正在存储等于输入到所述数据寄存器的所述部分的所述第二数值的一组数据位的值,
其中所述一组数据位不用于所述多种数据类型中的一种数据类型中,或者所述一组数据位对于数值范围内的数值具有恒定值;以及
禁用到所述数据寄存器的所述部分的时钟输入信号。
条款18.如条款17所述的方法,其中所述数据寄存器的所述部分用多位触发器来实现。
条款19.如条款17或18所述的方法,其中所述数据寄存器的所述部分是尾数寄存器的较低部分或指数寄存器的较高部分。
条款20.如条款17至19中任一项所述的方法,其还包括:
接收第三数值;以及
响应于接收到所述第三数值:
确定所述数据寄存器的所述部分正在存储不同于输入到所述数据寄存器的所述部分的所述第三数值的一组数据位的值;以及
启用到所述数据寄存器的所述部分的所述时钟输入信号以允许更新所述数据寄存器的所述部分。
其他变型也在本公开的精神内。因此,虽然所公开的技术可容易有各种修改和替代构造,但其某些所说明示例已在附图中示出并且在上文详细描述。然而,应当理解,并不意图将本公开限制于所公开的一种或多种具体形式,而是相反,意图涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等效物。
除非本文另外指示或明显与上下文相矛盾,否则在描述所公开示例的上下文中(尤其是在以下权利要求的上下文中),术语“一个”和“一种”和“所述”以及类似指称对象的使用应解释为涵盖单数和复数两者。除非另外指出,否则术语“包括”、“具有(having)”、“包含”和“含有”应解释为开放式术语(即,意指“包括但不限于”)。术语“连接”应解释为部分地或全部包含在内、附接到或结合在一起,即使存在中间物也是如此。除非本文另外指出,否则本文中对值范围的列举仅仅意图用作单独提及落在所述范围内的每个单独值的速记方法,并且如同在本文中单独叙述地那样将每个单独值并入本说明书中。除非本文另外指示或明显与上下文相矛盾,否则本文所描述的所有方法都可按任何合适的顺序进行。除非另外要求保护,否则本文所提供的任何以及所有示例或示例性语言(例如,“诸如”)的使用仅仅意图更好地阐明本公开的示例,并且不对本公开的范围造成限制。本说明书中的语言不应解释为将任何非要求保护的要素指示为实践本公开所必需。
除非另外特别说明,否则诸如短语“X、Y或Z中的至少一者”的析取语言在上下文内意图理解为通常用于表示项、术语等可以是X、Y或Z或它们的任何组合(例如,X、Y和/或Z)。因此,这种析取语言通常不意图且不应暗示某些示例要求X中的至少一个、Y中的至少一个或Z中的至少一个各自都存在。
本文描述了本公开的各种示例,包括发明人已知用于执行本公开的最佳模式。在阅读前述描述后,本领域普通技术人员可明白这些示例的变型。发明人希望技术人员视情况采用此类变型,并且发明人意图以不同于如本文所特别描述的其他方式来实践本公开。因此,在适用法律允许的情况下,本公开包括本公开所附权利要求中叙述的主题的所有修改和等效物。此外,除非本文另外指示或明显与上下文相矛盾,否则本公开涵盖这些示例的所有可能变型中的上述要素的任何组合。
Claims (15)
1.一种集成电路器件,其包括:
数据寄存器,所述数据寄存器被配置为存储数值,支持多种数据类型;
第一时钟门电路,所述第一时钟门电路被配置为独立于所述数据寄存器的其余部分对所述数据寄存器的第一部分进行时钟门控,所述数据寄存器的所述第一部分存储第一组数据位,所述第一组数据位不用于所述多种数据类型中的一种数据类型;以及
第二时钟门电路,所述第二时钟门电路被配置为独立于所述数据寄存器的其余部分对所述数据寄存器的第二部分进行时钟门控,所述数据寄存器的所述第二部分存储第二组数据位,所述第二组数据位对于数值范围内的数值具有恒定值。
2.如权利要求1所述的集成电路器件,其中所述数值是浮点数,
其中所述数据寄存器包括被配置为存储所述浮点数的符号位的符号寄存器、被配置为存储所述浮点数的指数的指数寄存器和被配置为存储所述浮点数的尾数的尾数寄存器,并且
其中所述第一组数据位对应于所述尾数寄存器的较低部分。
3.如权利要求2所述的集成电路器件,其中所述尾数寄存器的所述较低部分使用多位触发器来实现,或者所述指数寄存器的较高部分使用多位触发器来实现。
4.如权利要求2所述的集成电路器件,其中所述第二组数据位对应于所述指数寄存器的较高部分。
5.如权利要求2至4中任一项所述的集成电路器件,其还包括:第三时钟门电路,所述第三时钟门电路被配置为对所述指数寄存器的较低部分与所述尾数寄存器的较高部分进行时钟门控。
6.如权利要求2至4中任一项所述的集成电路器件,其还包括:第三时钟门电路,所述第三时钟门电路被配置为对所述符号寄存器与所述尾数寄存器的较高部分进行时钟门控。
7.如权利要求2至6中任一项所述的集成电路器件,其中所述指数寄存器被配置为存储10位指数,并且所述尾数寄存器被配置为存储11位尾数。
8.如权利要求2至7中任一项所述的集成电路器件,其中所述多种数据类型包括浮点16(FP16)数据类型和脑浮点(BF16)数据类型。
9.如权利要求2至8中任一项所述的集成电路器件,其中所述浮点数是用于神经网络计算的权重值或特征图值。
10.如权利要求1所述的集成电路器件,其中所述数值是整数。
11.如权利要求1或10所述的集成电路器件,其中所述数据寄存器的所述第一部分和所述数据寄存器的所述第二部分各自使用多位触发器来实现。
12.一种方法,其包括:
接收第一数值;
将所述第一数值存储在支持多种数据类型的数据寄存器中;
接收第二数值;以及
响应于接收到所述第二数值:
确定所述数据寄存器的一部分正在存储等于输入到所述数据寄存器的所述部分的所述第二数值的一组数据位的值,
其中所述一组数据位不用于所述多种数据类型中的一种数据类型中,或者所述一组数据位对于数值范围内的数值具有恒定值;以及
禁用到所述数据寄存器的所述部分的时钟输入信号。
13.如权利要求12所述的方法,其中所述数据寄存器的所述部分用多位触发器来实现。
14.如权利要求12或13所述的方法,其中所述数据寄存器的所述部分是尾数寄存器的较低部分或指数寄存器的较高部分。
15.如权利要求12至14中任一项所述的方法,其还包括:
接收第三数值;以及
响应于接收到所述第三数值:
确定所述数据寄存器的所述部分正在存储不同于输入到所述数据寄存器的所述部分的所述第三数值的一组数据位的值;以及
启用到所述数据寄存器的所述部分的所述时钟输入信号以允许更新所述数据寄存器的所述部分。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/247,475 US20220188073A1 (en) | 2020-12-11 | 2020-12-11 | Data-type-aware clock-gating |
US17/247,475 | 2020-12-11 | ||
PCT/US2021/072814 WO2022126116A1 (en) | 2020-12-11 | 2021-12-08 | Data-type-aware clock-gating |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116601585A true CN116601585A (zh) | 2023-08-15 |
Family
ID=79287614
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180083584.1A Pending CN116601585A (zh) | 2020-12-11 | 2021-12-08 | 数据类型感知时钟门控 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220188073A1 (zh) |
EP (1) | EP4260174A1 (zh) |
CN (1) | CN116601585A (zh) |
WO (1) | WO2022126116A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102568906B1 (ko) * | 2021-04-13 | 2023-08-21 | 에스케이하이닉스 주식회사 | PCIe 디바이스 및 그 동작 방법 |
US11928070B2 (en) | 2021-04-13 | 2024-03-12 | SK Hynix Inc. | PCIe device |
US11726746B1 (en) * | 2022-09-14 | 2023-08-15 | Moffett International Co., Limited | Vector operation acceleration with convolution computation unit |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8650231B1 (en) * | 2007-01-22 | 2014-02-11 | Altera Corporation | Configuring floating point operations in a programmable device |
US20130194016A1 (en) * | 2012-01-31 | 2013-08-01 | Shmuel Wimer | System and method for generating a clock gating network for logic circuits |
US9152382B2 (en) * | 2012-10-31 | 2015-10-06 | Intel Corporation | Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values |
US10489197B2 (en) * | 2015-06-01 | 2019-11-26 | Samsung Electronics Co., Ltd. | Highly efficient inexact computing storage device |
US9761303B2 (en) * | 2016-01-28 | 2017-09-12 | Apple Inc. | Storage element with multiple clock circuits |
US20190101952A1 (en) * | 2017-09-30 | 2019-04-04 | Intel Corporation | Processors and methods for configurable clock gating in a spatial array |
GB2568085B (en) * | 2017-11-03 | 2020-01-01 | Imagination Tech Ltd | Hardware unit for performing matrix multiplication with clock gating |
US10459876B2 (en) * | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US11188303B2 (en) * | 2019-10-02 | 2021-11-30 | Facebook, Inc. | Floating point multiply hardware using decomposed component numbers |
US11467806B2 (en) * | 2019-11-27 | 2022-10-11 | Amazon Technologies, Inc. | Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range |
CN115934030B (zh) * | 2020-01-20 | 2024-01-16 | 华为技术有限公司 | 算数逻辑单元、浮点数乘法计算的方法及设备 |
US11275560B2 (en) * | 2020-02-19 | 2022-03-15 | Meta Platforms, Inc. | Hardware for floating-point arithmetic in multiple formats |
KR20220071723A (ko) * | 2020-11-24 | 2022-05-31 | 삼성전자주식회사 | 딥러닝 연산 수행 방법 및 장치 |
-
2020
- 2020-12-11 US US17/247,475 patent/US20220188073A1/en active Pending
-
2021
- 2021-12-08 WO PCT/US2021/072814 patent/WO2022126116A1/en active Application Filing
- 2021-12-08 CN CN202180083584.1A patent/CN116601585A/zh active Pending
- 2021-12-08 EP EP21840398.8A patent/EP4260174A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220188073A1 (en) | 2022-06-16 |
EP4260174A1 (en) | 2023-10-18 |
WO2022126116A1 (en) | 2022-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220188073A1 (en) | Data-type-aware clock-gating | |
US11783200B2 (en) | Artificial neural network implementation in field-programmable gate arrays | |
US11809953B1 (en) | Dynamic code loading for multiple executions on a sequential processor | |
US20210158131A1 (en) | Hierarchical partitioning of operators | |
US11500962B1 (en) | Emulating fine-grained sparsity in a systolic array | |
US11562554B1 (en) | Workload reduction for non-maximum suppression operation | |
US11435941B1 (en) | Matrix transpose hardware acceleration | |
US11610128B2 (en) | Neural network training under memory restraint | |
US11494326B1 (en) | Programmable computations in direct memory access engine | |
US11500802B1 (en) | Data replication for accelerator | |
US11803736B1 (en) | Fine-grained sparsity computations in systolic array | |
US11354130B1 (en) | Efficient race-condition detection | |
US11868872B1 (en) | Direct memory access operation for neural network accelerator | |
US11636569B1 (en) | Matrix transpose hardware acceleration | |
US11868875B1 (en) | Data selection circuit | |
US20220318604A1 (en) | Sparse machine learning acceleration | |
US11550736B1 (en) | Tensorized direct memory access descriptors | |
US11625453B1 (en) | Using shared data bus to support systolic array tiling | |
US11983128B1 (en) | Multidimensional and multiblock tensorized direct memory access descriptors | |
US11875247B1 (en) | Input batching with serial dynamic memory access | |
US20240111528A1 (en) | Programmable compute engine having transpose operations | |
CN113508363B (zh) | 多用户网络中的算术和逻辑运算 | |
US20240103813A1 (en) | Compute engine with transpose circuitry | |
US11748253B1 (en) | Address generation for page collision prevention in memory regions | |
US11789859B1 (en) | Address generation for page collision prevention |
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 |