CN112988656A - 用于将权重加载到张量处理块中的系统和方法 - Google Patents

用于将权重加载到张量处理块中的系统和方法 Download PDF

Info

Publication number
CN112988656A
CN112988656A CN202011021655.9A CN202011021655A CN112988656A CN 112988656 A CN112988656 A CN 112988656A CN 202011021655 A CN202011021655 A CN 202011021655A CN 112988656 A CN112988656 A CN 112988656A
Authority
CN
China
Prior art keywords
values
dsp
integrated circuit
circuit device
block
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
CN202011021655.9A
Other languages
English (en)
Inventor
M·朗哈默尔
S·P·芬恩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN112988656A publication Critical patent/CN112988656A/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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/527Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • 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/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Medical Informatics (AREA)
  • Mathematical Physics (AREA)
  • Logic Circuits (AREA)

Abstract

本公开描述一种包括数字信号处理(DSP)块的集成电路器件。DSP块包括多列权重寄存器和多个输入,多个输入被配置为接收第一多个值和第二多个值。第一多个值在被接收之后存储在多列权重寄存器中。此外,第一多个输入、第二多个输入或两者是从较高精度值得出的。附加地,DSP块包括多个乘法器,多个乘法器被配置为将第一多个值中的每个值同时乘以第二多个值中的每个值。

Description

用于将权重加载到张量处理块中的系统和方法
相关申请的交叉引用
本申请要求2019年12月13日提交的标题为“用于人工智能FPGA专家处理块(FPGASpecialist Processing Block for Artificial Intelligence)”的No.62/948110的美国申请的优先权,要求2019年12月13日提交的标题为“在张量阵列中实施大乘法器(Implementing Large Multipliers in Tensor Arrays)”的No.62/948114的美国申请的优先,以及要求2019年12月13日提交的标题为“用于将权重加载到张量处理块中的系统和方法(Systems and Methods for Loading Weights into a Tensor Processing Block)”的No.62/948124的美国申请的优先权,出于所有目的通过引用将所有这些申请的全部内容并入本文。本申请涉及2020年6月26日提交的标题为“用于机器学习的FPGA专家处理块FPGASpecialist Processing Block for Machine Learning”(代理人案卷No.AC6404-US/INTL:0482)的No.____________的美国申请以及2020年6月26日提交的标题为“用于将权重加载到张量处理块中的系统和方法(Systems and Methods for Loading Weights into aTensor Processing Block)”(代理人案卷No.AC6039-US/INTL:0484)No.____________的美国申请,出于所有目的通过引用将这两个申请的全部内容都并入本文。
背景技术
本公开一般涉及诸如可编程逻辑器件(PLD)的集成电路(IC)器件。更特别地,本公开涉及可以包括在集成电路器件上的处理块以及可以利用所述处理块执行的应用。
本部分旨在向读者介绍可能与本公开的各方面相关的技术的各方面,本公开的各方面在以下被描述和/或要求保护。相信该讨论有助于向读者提供背景信息,以促进更好地理解本公开的各方面。因此,可以理解,这些陈述应从这个角度来阅读,而不是作为对现有技术的承认。
集成电路器件可以用于诸如数字信号处理和机器学习的各种目的或应用。实际上,机器学习和人工智能应用已经变得越来越普遍。可编程逻辑器件可以用于例如使用特定电路(例如,处理块)来执行这些功能。在一些情况下,对于数字信号处理有效的特定电路可能不是很适合于机器学习,而用于机器学习的特定电路可能不是很适合于数字信号处理。
附图说明
通过阅读以下具体实施方式并且参考附图,可以更好地理解本公开的各个方面,在附图中:
图1是根据本公开的实施例的可以使用DSP块实施算术操作的系统的块图;
图2是根据本公开的实施例的图1的集成电路器件的块图;
图3是根据本公开的实施例的图1的集成电路器件的数字信号处理(DSP)块可以在进行乘法操作时执行的过程的流程图;
图4是根据本公开的实施例的可以经由图1的DSP块实施的虚拟带宽扩展结构的块图;
图5A和图5B是根据本公开的实施例的图1的DSP块中的张量处理块的部分的块图;
图6A和图6B示出了根据本公开的实施例的并行权重加载;
图7A和图7B示出了根据本公开的实施例的级联权重加载;
图8A和图8B示出了根据本公开的实施例的端口权重加载;
图9示出了根据本公开的实施例的将权重加载到权重寄存器中的并行权重加载;
图10示出了根据本公开的另一实施例的并行权重加载;
图11示出了根据本公开的实施例的具有多组权重的权重加载;
图12示出了根据本公开的实施例的具有多组权重的权重加载;
图13示出了根据本公开的实施例的具有多组权重的权重加载;
图14示出了根据本公开的实施例的具有多组权重的权重加载;
图15示出了根据本公开的实施例的将权重加载到权重寄存器中;
图16示出了根据本公开的实施例的当提供权重的数据端口宽于权重寄存器时的权重加载;
图17示出了根据本公开的实施例的可以基于寻址接收输入的权重寄存器的块图;
图18是示出根据本公开的实施例的独立寻址的权重寄存器的块图;
图19是根据本公开的实施例的图5A和图5B的张量处理块的级的块图;
图20是根据本公开的实施例的图5A和图5B的张量处理块的另一级的块图;
图21是根据本公开的实施例的当在浮点张量模式中使用时的DSP块的块图;
图22是根据本公开的实施例的当在定点张量模式中使用时的DSP块的块图;
图23示出了根据本公开实施例的进入并通过DSP块链的最后一个DSP块的数据流;
图24示出了根据本公开实施例的由DSP块生成的浮点值的累加;
图25是根据本公开的实施例的图1的集成电路器件的块图;
图26是根据本公开的实施例的表示可以使用图1的DSP块实施的张量块的块图;
图27是示出根据本公开的实施例的可以使用图1的DSP块实施的向量乘法器的构造的块图;
图28示出了根据本公开实施例的其中利用三列的四个DSP块的乘法操作;
图29示出了根据本公开的实施例的使用级联添加多个向量;
图30是根据本公开的实施例的由到DSP块的输入的确定的部分乘积生成的分量的对准;
图31表示根据本公开实施例的彼此通信地耦合的四个DSP块;
图32示出了根据本公开的实施例的可使用浮点级联实施的两种类型的向量乘法器;
图33和图34示出了根据本公开的实施例可以如何用多个DSP块实施INT15复向量倍数;
图35示出了根据本公开实施例的包括预处理电路、DSP块及后处理电路的图1的集成电路器件的块图;
图36是根据本公开的实施例的图35的预处理电路的映射电路的块图;
图37是根据本公开的实施例的后处理电路的块图;
图38是根据本公开的实施例包括预处理电路、DSP块和后处理电路的图1的集成电路器件的块图;以及
图39是根据本公开的实施例的数据处理系统。
具体实施方式
以下将描述一个或多个具体实施例。为了提供这些实施例的简明描述,在说明书中没有描述实际实施方式的所有特征。应当理解,在任何这种实际实施方式的开发中,如在任何工程或设计项目中,必须做出许多实施方式特定的决定以实现开发者的特定目标,例如符合系统相关和商业相关的约束,其可能从一个实施方式到另一实施方式而变化。此外,应当理解,这种开发努力可能是复杂且耗时的,但对于受益于本公开的普通技术人员而言,仍然是设计、制作和制造的例行任务。
当介绍本公开的各种实施例的元件时,冠词“一”和“所述”旨在意指存在一个或多个元件。术语“包括”和“具有”旨在是包括性的,并且意指除了所列元件之外还可以存在附加元件。另外,应当理解,对本公开的“一些实施例”、“一个实施例”或“实施例”的引用不旨在被解释为排除也并入了所记载的特征的附加的实施例的存在。此外,短语A“基于”B旨在意指A至少部分地基于B。此外,术语“或”旨在是包括性(例如,逻辑或)而不是排他的(例如,逻辑异或)。换句话说,短语A“或”B“旨在意指A、B或A和B两者。
随着机器学习和人工智能应用变得越来越普遍,越来越期望用于执行在机器学习和人工智能应用中所利用的计算的电路,该电路也能够用于数字信号处理应用。本系统和技术涉及数字信号处理(DSP)块的实施例,该DSP块可以提供与用于人工智能(AI)操作的专用标准产品(ASSP)或专用集成电路(ASIC)相似水平的算术性能(TOPs/TFLOPs)。一般地,DSP块是一种类型的用在集成电路器件(例如,现场可编程门阵列(FPGA)中以执行乘法、累加和加法操作的电路。本文描述的DSP块可以利用FPGA的灵活性来适用新兴算法或修复计划的实施方式中的漏洞。所使用的数字表示可以是定点或浮点。浮点数也可以用块浮点表达,其中单个指数可以被多个输入值共享。
FPGA还可以提供其他类型的灵活性。例如,可以将诸如tanh(x)和sigmoid(x)的非线性激活函数插入到数据流中的任何地方,并且可以针对应用需求定制由这样的函数支持的精度或范围,从而节省面积和功率。此外,包括本文所述DSP电路的FPGA还可以用于非AI信号处理或不涉及任何信号处理或硬算术的应用。
目前描述的技术还提供了改进的计算密度和功耗(例如,每W更大量的TOPs/TFLOPs)。例如,如本文所讨论的,DSP块可以执行虚拟带宽扩展,使得可用带宽可以更有效地用于所使用的处理,并且使得计算的成本(例如,用于算术的面积)以人工智能应用的期望(例如,最优)方式与FPGA的导线的可用性平衡。此外,本文所述的DSP块可以使用执行乘法累加操作的其他DSP块的面积及接口。有界框浮点可以用于提供浮点准确度,以及全单精度浮点(例如,FP32)输出能力。
考虑到这一点,图1示出了可以使用DSP块来实施算术操作的系统10的块图。设计者可能期望在集成电路器件12(例如,现场可编程门阵列(FPGA)或专用集成电路(ASIC))上实施诸如本公开的大精度算术操作的功能。在一些情况下,设计者可以指定诸如OpenCL程序的待实施的高级程序,这可以使得设计者能够更有效并且容易地提供编程指令以配置用于集成电路器件12的一组可编程逻辑单元,而无需低级硬件描述语言(例如,Verilog或VHDL)的特定知识。例如,因为OpenCL与诸如C++的其他高级编程语言非常相似,所以熟悉这种编程语言的可编程逻辑单元的设计者与需要学习不熟悉的低级硬件描述语言以在集成电路器件12中实施新功能的设计者相比,可能具有减少的学习曲线。
设计者可以使用设计软件14(例如,INTEL公司的
Figure BDA0002700828930000051
的版本)来实施他们的高级设计。设计软件14可以使用编译器16将高级程序转换成低级描述。编译器16可以向主机18和集成电路器件12提供表示高级程序的机器可读指令,主机18可以接收可以由内核程序20实施的主机程序22。为了实施主机程序22,主机18可以经由通信链路24将指令从主机程序22传递到集成电路器件12,该通信链路24可以是例如直接存储器访问(DMA)通信或外围部件互连快速(PCIe)通信。在一些实施例中,内核程序20和主机18可以启用集成电路器件12上的一个或多个DSP块26的配置。DSP块26可以包括实施例如执行用于AI或非AI数据处理的矩阵-矩阵或矩阵-向量乘法的操作的电路。集成电路器件12可以包括许多(例如,数百或数千个)DSP块26。另外,DSP块26可以通信地耦合到另一DSP块,使得从一个DSP块26输出的数据可以被提供到其他DSP块26。
虽然以上讨论的技术是针对高级程序的应用来描述的,但是在一些实施例中,设计者可以使用设计软件14来生成和/或指定低级程序,例如上述低级硬件描述语言。此外,在一些实施例中,系统10可以在没有单独的主机程序22的情况下实施。此外,在一些实施例中,本文描述的技术可以在电路中实施为不可编程的电路设计。因此,本文描述的实施例旨在是说明性的而非限制性的。
现在转到对集成电路器件12的更详细论述,图2示出作为可编程逻辑器件(例如,现场可编程门阵列(FPGA))的集成电路器件12的示例。此外,应当理解,集成电路器件12可以是任何其他合适类型的集成电路器件(例如,专用集成电路和/或专用标准产品)。如图所示,集成电路器件12可以具有输入/输出电路42,其用于将信号驱动出器件和用于经由输入/输出引脚44从其他器件接收信号。诸如全局和局部垂直和水平导线和总线的互连资源46可以用于在集成电路器件12上路由信号。另外,互连资源46可以包括固定互连(导电线)和可编程互连(例如,相应的固定互连之间的可编程连接)。可编程逻辑单元48可以包括组合和时序逻辑电路。例如,可编程逻辑单元48可以包括查找表、寄存器和多路复用器。在各种实施例中,可编程逻辑单元48可以被配置成执行定制逻辑功能。与互连资源相关联的可编程互连可以被认为是可编程逻辑单元48的一部分。
可编程逻辑器件(例如,集成电路器件12)可以包含可编程逻辑单元48内的可编程元件50。例如,如上所述,设计者(例如,客户)可以对可编程逻辑单元48进行编程(例如,配置)以执行一个或多个期望的功能。作为示例,一些可编程逻辑器件可以通过使用掩模编程布置对其可编程元件50进行配置来编程,这在半导体制造期间执行。在半导体制造操作已经完成之后,例如通过使用电编程或激光编程来编程它们的可编程元件50,从而对其他可编程逻辑器件进行配置。一般地,可编程元件50可以基于诸如熔丝、反熔丝、电可编程只读存储器技术、随机存取存储器单元、掩模编程元件等的任何合适的可编程技术。
许多可编程逻辑器件是电编程的。在电编程布置下,可编程元件50可以由一个或多个存储器单元形成。例如,在编程期间,使用引脚44和输入/输出电路42将配置数据加载到存储器单元中,在一个实施例中,存储器单元可以被实施为随机存取存储器(RAM)单元。本文描述的基于RAM技术的存储器单元的使用仅旨在作为一个示例。此外,因为这些RAM单元在编程期间加载有配置数据,所以其有时被称为配置RAM单元(CRAM)。这些存储器单元均可以提供对应的静态控制输出信号,该信号控制可编程逻辑单元48中的相关联的逻辑分量的状态。例如,在一些实施例中,输出信号可以被施加到可编程逻辑单元48内的金属氧化物半导体(MOS)晶体管的栅极。
记住前述内容,这里讨论的DSP块26可以用于各种应用,并且执行与应用相关联的诸如乘法和加法的许多不同操作。例如,矩阵和向量(例如,矩阵-矩阵、矩阵-向量、向量-向量)乘法操作可以很好地合适于AI和数字信号处理应用两者。如下所述,DSP块26可以通过将一行或多行数据乘以一列或多列数据来同时计算许多乘积(例如点积)。在描述DSP块26的电路之前,为了帮助提供DSP块26可以执行的操作的概述,提供了图3。特别地,图3是DSP块26可以执行的过程70的流程图,例如,DSP块26可以对DSP块26接收的数据执行以确定输入数据的乘积的过程70的流程图。另外,应当注意,参考后续附图更详细地讨论了关于过程70所描述的操作。
在处理块72处,DSP块26接收数据。数据可以包括将被相乘的值。数据可以包括定点和浮点数据类型。在一些实施例中,数据可以是共享公共指数的定点数据类型。另外,数据可以是已被转换成定点值(例如,共享共同指数的定点值)的浮点值。如以下关于包括DSP块26中的电路更详细描述的,输入可以包括将被存储在DSP块26中所包括的权重寄存器中的数据以及将与存储在权重寄存器中的值相乘的值。
在处理块74处,DSP块26可以将所接收到的数据(例如,数据的一部分)相乘以生成乘积。例如,乘积可以是与被乘以DSP块26接收的数据的若干列数据相关联的子集乘积(例如,作为确定矩阵乘法操作中的一个或多个部分乘积的一部分而确定的乘积)。例如,当乘以矩阵时,矩阵的行的值可以乘以另一矩阵的列的值以生成子集乘积。
在处理块76处,DSP块26可以压缩乘积以生成向量。例如,如以下更详细描述的,可以使用若干压缩级来生成DSP块26求和的向量。
在处理块78,DSP块26可以确定压缩数据的和。例如,对于已经压缩(例如,成为比子集乘积更少的向量)的一列数据的子集乘积,可以使用DSP块26的加法电路(例如,一个或多个加法器、累加器等)来确定子集乘积的和。可以为如下所述对应于DSP块26内的寄存器的列(和行)的每列(或行)数据确定和。另外,应当注意,在一些实施例中,DSP块26可以在处理块78处确定所述和之前将定点值转换为浮点值。
在处理块80处,DSP块26可以输出所确定的和。如下所述,在一些实施例中,DSP块26输出的数据可以由后处理电路接收,该后处理电路可以进一步处理该数据。此外,输出可以被提供给链接到DSP块26的另一DSP块26。
记住图3的讨论,图4是示出使用DSP块26实施的虚拟带宽扩展结构100的块图。虚拟带宽扩展结构100包括可以存储DSP块26接收的数据值的寄存器104的列102。例如,所接收的数据可以是诸如四位或八位整数值的定点值。在其他实施例中,所接收的数据可以是具有一到八个整数位或多于八个整数位的定点值。另外,接收的数据可以包括共享指数,在这种情况下,所接收的数据可以被认为是浮点值。虽然示出了三列102,但是在其他实施例中,可以存在少于三列102或多于三列102。列102的寄存器104可以用于存储与DSP块26接收的数据的特定部分相关联的数据值。例如,当执行矩阵乘法操作时,每列102可以包括与矩阵的特定列相对应的数据。如以下更详细论述,可以将数据预加载到列102中,并且可以使用该数据来同时执行多个乘法操作。例如,由DSP块26接收的对应于行106(例如,寄存器104)的数据可以(使用乘法器108)乘以存储在列102中的值。更具体地,在所示实施例中,可以接收十行数据,并且该十行数据同时乘以三列102中的数据,这表明可以计算三十个乘积(例如,子集乘积)。
例如,当执行矩阵-矩阵乘法时,通过将所接收的数据值乘以存储在列102的寄存器104中的数据值,相同的(多个)行或(多个)列可以被应用于其他维度的多个向量。也就是说,矩阵的维度之一的多个向量可以被预加载(例如,存储在列102的寄存器104中),并且来自另一维的向量被流送通过DSP块26以与预加载的值相乘。因此,在具有三列102的所示实施例中,可以针对每一输入(例如,数据的每一行106)同时确定多达三个独立点积。如下所述,这些特征可以被利用于乘以一般较大的值。另外,如上所述,DSP块26还可以接收用于被接收的数据的共享指数的数据(例如,8位数据)。
如压缩块110所指示,可以压缩用于每列102的部分乘积以生成一个或多个向量(例如,由寄存器112表示),可以经由进位传送加法器114将一个或多个向量相加以生成一个或多个值。定点到浮点转换器116可以将该值转换为浮点格式(例如,由IEEE标准754提供的单精度浮点值(例如,FP32))以生成浮点值(由寄存器118表示)。
DSP块26可以通信地耦合到其他DSP块26,使得DSP块26可以从其他DSP块26接收数据,并向DSP块26提供数据。例如,如级联寄存器120所指示,DSP块26可以从另一DSP块26接收数据,其可以包括将被相加(例如,经由加法器122)以生成值(由寄存器124表示)的数据。可以将值提供给多路复用器选择电路126,多路复用器选择电路126选择要从DSP块26输出的值或值的子集(例如,输出到可以基于所接收的数据值确定数据的每列102的和的电路)。多路复用器选择电路126的输出可以是浮点值,例如FP32值或诸如bfloat24格式的其他格式的浮点值(例如,具有一个符号位、八个指数位和十六个隐式(十五个显式)尾数位的值)。
继续参考附图,图5A和图5B是均示出了包括在DSP块26内的张量处理块150的一部分的块图,张量处理块150包括执行以上关于图3描述的处理70的电路,并且张量处理块150是图4中描绘的虚拟带宽扩展结构100的硬件实施。如图所示,张量处理块150可以经由输入152接收数据,这些数据将乘以“权重”或“常数”,这些“权重”或“常数”指的是与上述列102相关联的值。换句话说,“权重”和“常数”是存储在(例如,与列相关联的)寄存器中的将乘以其他所接收到的数据(例如,与行106相关联的数据)的值。张量处理块150还可以包括接收共享指数位(例如,由乘以权重的数据共享的输入的值)的输入154、可以从通信地耦合到包括该张量处理块150的DSP块26的另一DSP块26接收权重的输入156、以及可以从通信地耦合到包括该张量处理块150的DSP块26的另一DSP块26接收数据的输入158。
为了帮助讨论用于将权重加载到DSP块26中的各种技术,提供了图6-图14。特别地,可以使用三种技术将值加载到DSP块26中。图6A和图6B示出了第一种技术:并行权重加载。在并行权重加载中,权重作为常规数据输入被加载到寄存器中。例如,如图所示,可以提供两组170A、170B的权重寄存器172,并且可以加载这两组(例如,每个加载的权重使用一个时钟周期)。因为使用与将用于接收将与权重(例如,存储在权重寄存器172中的值)相乘的值的输入相同的输入(例如,端口)来加载权重,所以可以在执行乘法之前发生权重的加载。然而,在使用单组权重寄存器172加载三列权重的情况下,将使用三个时钟周期。如果权重要用于许多计算(例如,几十或几百或几千或更多),则使用并行的权重加载可以是高效的。例如,因为相同的值(即,权重)可以乘以接收的许多值而不改变,所以DSP块26可以针对将涉及权重的每次确定来确定涉及权重的乘积。例如,在矩阵-矩阵乘法操作中,权重可以对应于矩阵的列的值。一旦已经预加载了权重,就可以将权重乘以另一矩阵的每行的每个值,其中权重的值仅被输入单次。
如上所述,存在两组170A、170B的权重寄存器172。权重寄存器172的组170A、170B可以动态地切换。例如,DSP块26可以在处理的中间立即从权重寄存器172的组170A切换到组170B。例如,在已经计算了对应于一组权重寄存器172的列的每个部分乘积之后,DSP块26可以切换到另一组权重寄存器172,以确定涉及另一列数据的部分乘积。权重寄存器172可以动态地切换的另一示例是在处理的中间在多组权重寄存器172之间交替。另外,应当注意,虽然图6A与图6B(除了图7A与图7B以及图8A与图8B)包括两组170A、170B的权重寄存器172,但在其他实施例中,可以包括更少或更多组的权重寄存器172。
现在将在示例中讨论并行权重加载,该示例描述了可以在DSP块26操作时在各种时钟周期期间执行的操作。在时钟周期1至3中,动态控制总线feed_sel=2’b00选择data_in[79:0]和shared_exponent[7:0]作为馈送输入源。控制位load_bb_oneff=1’b1和load_bb_twoff=1’b0将权重及其共享指数预加载到第一组170A权重寄存器172中。另外,位load_buf_selff=1’b0。
从时钟周期4至6,动态控制总线feed_sel=2’b00不改变,但load_bb_oneff=1’b0及load_bb_twoff=1’b1将权重及共享指数预加载到第二组170B的权重寄存器中。位load_buf_selff=1’b0也未改变。
从时钟周期7到N(取决于用当前权重组处理多少向量),存储在第一组170A的权重寄存器172中的权重用于乘法操作中。通过load_bb_oneff=1’b0和load_bb_twoff=1’b0禁用权重寄存器172的加载。分别从data_in[79:0]和shared_exponent[7:0]馈入激活数据和共享指数。位load_buf_selff=1’b0指示正在利用第一组170A。
从时钟周期N+1至2N,再次禁用对权重寄存器172的加载,但是位load_buf_selff=1’b1选择第二组170B的权重寄存器172。因此,可以执行涉及存储在第二组170B的权重寄存器172中的值的乘法操作。从2N+1个周期开始,DSP块26可以开始加载新的权重和共享指数(例如,如上所述)。
DSP块26可以采用以加载权重的另一种技术在图7A和图7B中示出,它们示出了DSP块26的部分的块图,这第二种技术被称为“级联权重加载”。在级联权重加载中,权重可以被提供给第一DSP块26,该第一DSP块将权重值提供给通信地耦合到DSP块26的其他DSP块26。权重的值可以从一个DSP块26发送(例如,经由图5A的输出180)到另一DSP块26,该另一DSP块可以经由图7A中所示的“cascade_weight_in”接收所述值,该“cascade_weight_in”对应于图5A的输入156。
级联链中的每个DSP块26可以使用一到三个时钟周期来加载其权重,这取决于将利用多少列(例如,一个时钟周期用于一列,两个时钟周期用于两列,三个时钟周期用于三列)。另外,可以从外部选择权重缓冲器。
当使用级联权重加载时,可以在处理发生的同时加载权重。换句话说,当DSP块26正在设置权重值(例如,权重寄存器172的值)时,可以对传入的数据及权重执行乘法。
作为在执行级联权重加载时的时序的示例,级联链中的第一DSP块被配置为权重馈送器,这意指DSP块26将把权重的值级联到DSP块26的链中的另一DSP块26。从时钟周期1至3N,动态控制总线feed_sel=2’b00选择data_in[79:0]和shared_exponent[7:0]作为馈送输入源。控制位load_bb_oneff=1’b1和load_bb_twoff=1’b0将权重及其共享指数预加载到第一组170A的权重寄存器172中。另外,位load_buf_selff=1’b0。
级联链的其他DSP块26被配置作为计算引擎。从周期4至~3N,动态控制总线feed_sel=2’b01选择cascade_weight_in[87:0]作为馈送输入源。控制总线load_bb_oneff=1’b1和load_bb_twoff=1’b0将权重及其共享指数预加载到第一组170A的权重寄存器172。位load_buf_selff=1’b0。在~3N个周期之后,整个级联链的权重已经被加载。
从周期~3N+1至~6N周期,激活数据和其共享指数分别从data_in[79:0]和shared_exponent[7:0]馈入。使用动态信号load_buf_self=1’b0和第一组170A的权重寄存器172(例如,用于点积计算)。此外,feed_sel=2’b01再次选择cascade_weight_in[87:0]作为馈送输入源。位load_bb_oneff=1’b0和load_bb_twoff=1’b1将权重及其共享指数预加载到第二组170B的权重寄存器172中。这在乘法操作(例如,点积计算)中利用权重寄存器172的第一组170A时执行。另外,位load_buf_selff=1’b0保持不改变。
从6N+1至9N周期,激活数据和其共享指数分别从data_in[79:0]和shared_exponent[7:0]馈入。动态信号load_buf_selff=1’b1,并且来自第二组170B的权重寄存器172的权重被用于点积计算。从~6N+1到9N个周期,程序可以重新开始(例如,从周期1开始恢复上述操作)。
继续参考附图和权重加载的讨论,第三类型的权重加载是“端口权重加载”,其在图8中示出。特别地,端口权重加载利用与用于将其他数据值加载到DSP块26中的数据端口分离的数据端口。这些数据端口可以包括在图5A的输入152中(例如,九十六个“data_in”位中的十六位)中。例如,DSP块26可以包括接收将乘以权重的数据的八十位宽的端口、接收该数据的共享指数的八位宽端口、以及可以接收用于加载权重的十六位的权重数据的十六位宽的端口。经由权重端口流送的权重数据可以与其他数据类型分离地流送。另外,当端口权重加载发生时,可以发生乘法操作。例如,在具有多组权重寄存器172的实施例中,可以执行涉及一组权重寄存器172的乘法操作,同时将权重加载到另一组权重寄存器172中的权重寄存器172中。
根据端口的宽度与每个寄存器的宽度的比较,权重寄存器可以被划分为多个区域。例如,在所示实施例中,端口是十六位宽,并且权重寄存器172是八位宽。具有十个权重寄存器的列可以被划分成两列,每列具有五个权重寄存器1并且可以被同时加载。
现在将讨论端口权重加载的示例。从1至18个时钟周期,动态控制总线被设置为feed_sel=2’b10以选择data_in[87:80]和data_in[95:88]作为馈送输入源。控制位load_bb_oneff=1’b1和load_bb_twoff=1’b0将权重及其共享指数预加载到第一组170A的权重寄存器172。此外,位load_buf_selff=1’b0。
从19至~N个周期,激活数据及其共享指数分别从data_in[79:0]和shared_exponent[7:0]馈入。通过load_buf_selff=1’b0禁用加载。在权重寄存器172的第一组170A中的先前加载的权重被用于点积计算。从19至36个周期(与从19至~N个周期的操作同时发生),控制总线feed_sel=2’b10选择data_in[87:80]和data_in[95:88]作为馈送输入源。控制总线load_bb_oneff=1’b0和load_bb_twoff=1’b1将权重及其共享指数预加载到第二组170B的权重缓冲器172中。由于第一组加载的权重仍然在使用,控制位load_buf_selff=1’b0。
从~N+1到~2N+1个周期,从data_in[79:0]和shared_exponent[7:0]馈入激活数据及其共享指数。控制位load_buf_selff=1’b1,使得来自第二组170B的权重寄存器172的权重被用于点积计算。从~N+1到~N+18个周期,该过程可以返回以在时钟周期1处执行上述操作,使得可以将新的权重加载到第一组170A的权重缓冲器172中。
为了帮助进一步示出权重加载,提供了图9-图18。图9示出了并行加载方法的逻辑流程。权重与数据(例如,提供给寄存器190以与存储在权重寄存器172中的值相乘的数据)共享相同的总线。权重的多个组均对应于独立的列。列被流送入并被移位。如上所述,虽然在所示出的实施例中包括权重寄存器172的三列102,但是在其他实施例中可以包括其他数量的列102(例如,少于三列或多于三列)。另外,在一些情况下,可以仅使用权重寄存器的一部分(例如,列的一部分)。如上所述,可能需要一个时钟周期来加载每一列102的权重。当不使用列102时,可以用零加载或忽略这样的列102。另外或替代地,列宽或块宽复位可以用于清除所有或不想要的列,而不需要将零加载到未被利用的列102的权重寄存器172中。
图10示出了并行权重加载的另一种方法。更具体地,在有足够的输入引脚可用的情况下,权重寄存器172可以直接加载,而不与数据共享输入端口。这可以在将数据提供给DSP块26的权重寄存器172之前简化集成电路器件12的软逻辑单元中的控制和多路复用。
如图11-图14所示,也可以支持多组170的权重。可以在不同的时间加载或者一起加载多组170的权重。例如,在执行乘法操作之前,数据值可以被加载到组170的权重寄存器172中或其一部分中。当一起加载权重时,可以在逐个时钟周期的基础上交替权重,使得可以执行涉及两组权重的乘法操作。另外,当执行乘法操作时,多路复用器192选择将使用哪一组170来提供将被相乘的输入。与图10相似,图12示出了一种并行权重加载的替代方法,其中使用了独立的端口。此外,虽然图13示出了加载端口与数据端口共享,但也可使用独立的加载端口,例如图12所示。可以用个体的加载端口或加载设置地址端口来控制加载的寄存器。对于图13中所示的四个组170(即,组170C至组170F),可以使用两位地址。在具有更多组170的权重的实施例中,可以使用更大的地址(例如,对于具有五、六、七或八组170的实施例,使用三位地址)。
图14示出了其中利用八组170的权重的方法。使用所示的方法可以减少用于深亚微米实施方式的布线负载。在这种情况下,地址计数器也可以用于在逐个时钟周期的基础上使权重组循环通过。这可以应用于诸如小的2D矩阵的情况。
如果用于加载权重的端口不与它们所遇到的第一组寄存器一样宽,则可以使用多种不同的方法来访问寄存器172。如图15所示,数据可以流送跨过列102,然后流送到下一行170中。在一些情况下,即使仅利用列102的一部分,仍可以加载每一列102(例如,在将不被使用的列102的权重寄存器172中具有零值)。
图16示出了如果端口宽度(例如,2n位)大于寄存器宽度(例如,n位),则该端口可以用于加载多组194的寄存器。在所示实施例中,如以上关于图12所述,寄存器172被顺序地加载,但是组194被并行地加载。换句话说,可以同时加载多组194的权重。
在其他实施例中,可以例如使用寻址将权重提供给特定权重寄存器172。例如,在图17中,地址解码器196可以接收地址(例如,行地址),将地址转换为使能位以将数据加载到单个行170或权重寄存器172。每行170的权重寄存器172可以被顺序地加载。另外,在数据端口比寄存器宽的情况下,图17中所示的结构可以并行复制,相似于图16中所示的结构。
通过使用图17所示的结构,可以独立地加载每一行170。例如,行170的子集可以被改变,这可以在不用在所示的权重寄存器172中的每一个中重新加载数据的情况下完成。如果仅使用一列或列的子集,则可以加载权重而不使数据流送通过可能不使用的列。这可以节省面积和功率。一旦数据被加载,多路复用器192就可以被利用以提供待相乘的特定数据(例如,来自特定组的权重寄存器172的数据)。
如图18所示,以上关于图17所述的技术可以扩展到独立地寻址权重寄存器172。换句话说,替代向权重寄存器172的行170发送要加载的权重,地址解码器196可以向特定的权重寄存器172而不是权重寄存器172的特定行提供权重。
此外,可以并行地加载用于任何行的多个寄存器。这可以由图17和图18所示实施例中的地址解码器196来完成,或者在使用顺序加载时(例如图15和图16所示的实施例),通过并行地启用加载控制(例如图6-8中的load_bb_oneff和load_bb_two_ff)来完成。这在某些情况下可能是有用的,例如在其中不同的权重组是相似的,但是彼此偏移的情况下。这在以下的表1和表2中示出。在表1中,两组的权重寄存器172并行地加载相同的数据(例如,权重值W0、W1和W2)。在表2中,第二组从第一组偏移一个新的权重值W3。
表1:初始并行加载
列1 列2 列3
W2 W1 W0
W2 W1 W0
表2:偏移并行加载
列1 列2 列3
W2 W1 W0
W3 W2 W1
暂时回到图5A和图5B,权重(例如,列值)可以由乘法器块200乘以传入的数据(例如,行值),乘法器块200可以包括生成部分乘积的若干乘法器(例如,四个或六个乘法器)。例如,图19是示出了可以包括在DSP块26中并且用于确定特定列的部分乘积的第一级电路的图5A的一部分的块图。如图所示,电路202可以向乘法器204提供输入,乘法器可以通过将输入乘以其他值(例如,权重)来确定部分乘积。在所示的示例中,来自十个INT8乘法器(例如,乘法器204)的部分乘积被求和。更具体地,由每个乘法器204生成的四个部分乘积然后由一系列3-2压缩器(例如,可以包括在图5A的压缩电路210中的加法器206和多路复用器208)压缩。在其他实施例中,可以利用其他类型的压缩或压缩电路(例如,4-2压缩器)。电路202可以包括寄存器和导线,寄存器和导线使得来自输入152、154的数据能够被提供给乘法器204,从而使得许多输入能够根据期望被路由以执行各种确定(例如,乘法操作)。因此,电路202使得能够实施虚拟带宽扩展结构100。
回到图5A和图5B,可以由加法器220(例如,进位传送加法器)对压缩数据(例如,冗余向量)求和,以生成单个数字输出。定点到浮点转换电路222可以将加法器220的输出转换成浮点值。例如,定点到浮点转换电路222可以使用定点到浮点转换电路222接收的共享指数值将由加法器220确定的二十位点积结果转换成单精度(例如,FP32)值。
张量处理块150还包括FP32加法器240(例如,单精度浮点加法器)。在其他实施例中,可以利用具有其他精度水平的浮点加法器。FP32加法器240可以用作级联求和操作或用于数据的每列的累加器。也就是说,FP32加法器240可以从另一DSP块26接收值,并且将所接收到的值与定点到浮点转换电路222生成的值相加,以生成另一值(例如,单精度浮点值)。FP32加法器240也可以输出另一值,例如bfloat24浮点值,其指示由DSP块26执行的乘法操作的乘积。另外,应当注意,可以在数据路径中的许多位置处插入寄存器(例如,管线级)以提供所使用的面积/频率折衷。
DSP块26(和张量处理块150)可以以若干不同的模式起作用。如以下更详细讨论的,这些模式包括张量模式、向量模式和标量模式。为了帮助解释,图20是张量处理块150的另一级(例如,图5B的“ds_stage3”)的块图。在模式的每一个中,可以基于操作的模式来多路复用输入以控制FP32加法器240接收哪些数据。例如,当FP32加法器240用作累加器时,FP32加法器240可以接收级联输入(即,来自通信地耦合到DSP块26的另一DSP块26的输出)、直接来自DSP块26的输入(例如,当在标量模式中操作时)、或来自FP32加法器240的(经寄存)输出作为第一输入。FP32加法器240可以从点积或直接从DSP块26的输入接受数据(例如,当在标量模式操作中时)。另外,到FP32加法器240的输入也可以归零,这可以用于重置FP32加法器240(例如,当用作累加器时)。
记住这一点,现在将讨论张量操作模式。在张量模式中,权重寄存器的各列中的每一列可以在预加载的权重下是活动的。一般地,这种模式可以与级联的多个DSP块26一起使用,这意指随后的DSP块26可以对从先前DSP块26接收的值执行定点或浮点加法操作,并且级联链中的最后一个(或两个)DSP块26被用作张量累加器。如以下所讨论的,张量操作模式可以用于增加浮点或定点值。
图21是当在浮点张量模式中使用时DSP块26的块图,其中80位权重和8位共享指数的三列被首先预加载(例如,如上所述)。然后从data_in[79:0]馈入激活,使得权重的每列同时接收相同的激活。三个DOT引擎(由块260表示)开始同时计算有符号的20位定点DOT乘积。如以上所讨论的,每一DOT乘积的输出被转换为32位浮点操作数,并且通过shared_exponent[7:0]来调整。这三个FP32值然后由FP32加法器240加到来自cascade_data_in[95:0]总线的它们相应的FP32值,或者加到先前周期的累加值。FP32加法器240的输出可以被发送出到交换结构(例如,经由输出268以bfloat24数据格式)或经由输出270级联到链中的下一DSP块26。
图22是当在定点张量模式中使用时DSP块26的块图。相似于定点张量模式,80位权重的三列首先被预加载。然后,从data_in[79:0]馈入激活,并且三个DOT引擎(由块260表示)开始同时计算有符号的20位定点DOT乘积。然后,加法器220(例如,与3-2压缩器组合)将每一DOT乘积的输出加到来自cascade_data_in[95:0]总线的它们相应的32位定点值,或加到先前周期的累加值。加法器220的输出可以以(25位)定点数据格式发送出到交换结构,或者经由cascade_data_out[95:0]级联到链中的下一个DSP块26。
继续讨论操作模式,向量模式相似于张量模式,除了仅有单列的权重寄存器是活动的,并且两个输入来自DSP块26的外面。换句话说,权重可以不像张量操作模式那样被预加载。因为当在向量模式中操作时,输入的数量可能是有限的,所以仅可以使用列的一半。例如,如果每一列具有十个乘法器,则向量操作模式可以利用乘法器中的五个,因为权重是直接输入的。换句话说,当在向量模式中操作时,权重将从通常用于在该模式下不使用的乘法器的数据输入的引脚取得。乘法器被求和并且流经定点到浮点转换电路222,并且然后进入FP32加法器240。图21和图22除了示出DSP块26在张量模式中的操作之外,还示出了在向量模式中操作时DSP块26的操作。
暂时回到图5A和图5B,标量操作模式将每列的一个乘法器隔离或仅隔离FP32加法器240。换句话说,当在标量模式中操作时,例如当执行乘法操作时,可以利用单行的权重寄存器。替代地,标量模式可以用于利用FP32加法器240。因此,可以支持三个INT8值(即,8位定点值)或多达3个浮点加法器。当利用bfloat16值时,三个加法器是可用的。当使用bfloat24值时,两个加法器是可用的,并且当使用FP32值时,一个加法器是可用的。由于可用于发送和接收值的输入/输出导线的量,可以利用的加法器的数量取决于要相加的值的精度。
如上所述,DSP块26可以用在级联链中,其中,将由DSP块26确定的列的值加到从级联链中的先前DSP块26接收的输出上。例如,当通过阻塞DSP块26来执行涉及相对较大矩阵的乘法操作时,链的最后一块可以被配置为累加器块。
图23示出了进入并通过配置为累加器块的最后一个DSP块26C的示例性数据流。如图所示,DSP块26C可以接收作为其他DSP块(例如,DSP块26A、26B)的输出的数据。其中所有三个张量在单个块中累加的直接累加可以提供bfloat24或bfloat16和。所存储的累加值可以存储在软逻辑单元(由缓冲器290表示)中的DSP块26外面。换句话说,许多DSP块26的输出可以被求和,并得到具有bfloat24或bfloat16格式的最终值。在其他实施例中,可以利用其他数据格式(例如,具有二十四或少于二十四位的数据格式)。
也可以使用单精度浮点值(例如,FP32值)执行累加。如图24所示,使用DSP块26C实施两个累加器。第三链被转发到另一DSP块26D用于最终累加。累加值在DSP块26外面的软逻辑单元中(例如,在缓冲器290中)存储和管理。特别地,由于被相加的值(例如FP32值)的大小和DSP块26上可用的输入/输出导线的数量,可以利用其他DSP块26D。换句话说,相对于图23中所示的使用不太精确的数据类型(例如,bfloat24或bfloat16值)的累加,涉及单精度浮点值的累加利用更多的输入/输出导线,并且要利用的输入/输出导线的量可以多于单个DSP块26所包括的量。因此,为了累加更大的值(例如,FP32值或比bfloat24值更精确的其他类型的值),可以利用多个DSP块26。例如,在所示实施例中,每个DSP块26包括七十二条输出导线。因此,每个DSP块26可以输出多达三个24位值(例如,bfloat24)或多达两个FP32值。
如上所指示,DSP块26可以用于若干应用,例如执行与人工智能(例如,机器学习)和数字信号处理相关联的操作。例如,如上所述,DSP块26可以执行涉及相对低精度值(例如,四位或八位值)的乘法操作(例如,矩阵-矩阵乘法、向量-向量乘法和向量-矩阵乘法)。如下所述,DSP块26可以用于执行较高精度乘法操作,例如涉及具有十五或十六位的数据的乘法操作。特别地,DSP块26可以用于仿真较大乘法器、较大精度点积以及较大精度复数乘法的不同分量。为此,终端用户可能能够在同一器件(例如,集成电路器件12)上混合AI和DSP应用。在一些情况下,例如当集成电路器件12是FPGA时,DSP块26的效率可以提供与用于相似精度的典型数字信号处理相比高大约十倍的密度。因此,DSP块26非常适合于AI应用以及数字信号处理应用。
记住这一点,图25是集成电路器件12的块图。如图所示,集成电路器件12可以是诸如FPGA的可编程逻辑器件(PLD),其包括预处理电路300、DSP块26和后处理电路310。预处理电路300可以对数据执行各种操作,并且将数据提供给DSP块26。例如,预处理电路300可以将传入的数据分成较低精度的数据类型。例如,十六位数据值可以被分成两个具有较少位(例如,七或八位)的值。预处理电路300可以向DSP块26提供值,例如以上讨论的权重以及将乘以权重的值。后处理电路310可以接收DSP块26的输出,并且对所接收的数据执行数学操作。例如,后处理电路310可以是加法器或累加器,加法器或累加器可以确定从DSP块26接收的值的和。以下更详细地讨论预处理电路300和后处理电路310,以及涉及十五和十六位值的乘法操作。
继续参考附图,图26是表示可以使用DSP块26实施的张量块330的块图。张量块330一般地对应于图5A和图5B的张量处理块150。张量块330将许多较小精度的乘法器打包在可以包括在集成电路器件12中的传统DSP块的空间中,包括但不限于集成电路器件12是FPGA的实施例。如上所述,预加载权重,并且跨多个列共享激活,列中的每一个实施DOT乘积。提供了三列或点积。在一种情况下,每个DOT由十个INT8乘法器的和组成(例如,有符号8位×8位乘法操作)。张量块330的输出可以是三个定点数(例如,十个INT8乘法的结果可以使用每列20位输出)。另外,也可以如上所述将结果转换成浮点。
张量块330也可以串联级联。该级联可以是定点的(例如,具有32位字以允许多个块被级联,并且可选地被累加)。该级联也可以是浮点的,其中使用32位(例如,IEEE754单精度浮点)浮点值。专用级联总线可以比进入可编程交换结构的总线更有效地支持大的总线宽度,其中可以涉及附加的多路复用以支持集成电路器件12的灵活性质。
INT8(可选地具有共享指数)值对于深度学习推理是有用的,但是对于深度学习训练更受限。INT8张量块对于常规信号处理应用也具有有限的效用,在常规信号处理应用中更典型地使用较高精度的数据值。更接近INT16(C短)或FP32(或FP24)的整数精度对于这些应用将是有用的。然而,在DSP块26中支持这些数据类型将增加面积和复杂度,以至于DSP块26可能太大而不能有效地包括在集成电路器件12上。记住这一点,以下讨论使用DSP块26执行涉及较高精度数据类型的乘法操作。实际上,不是扩展张量块330的大小以执行这样的乘法操作,而是可以虚拟地扩展DSP块26以使得能够执行这些乘法操作。
图27为示出可以使用DSP块26实施的INT15向量乘法器的构造的块图。换句话说,DSP块26可以用于执行涉及INT15值的乘法操作。INT15数可以被分解成两半(即八位高位和七位低位)。预处理电路300可以执行这样的分解。然后使用四个八位乘法操作来执行INT15乘法。例如,{a,b}和{c,d}可以是两个INT15值,其中‘a’和‘c’是有符号八位值,并且‘b’和‘d’是无符号七位值。在该示例中,这些值的乘积是(ac<<14)+((ad+cb)<<7)+bd,其中“<<x”指示该值是与‘bd’的量级不同的x位的量级。将低位的两个值(例如,分开初始INT15值之后剩余的最低有效值)表示为无符号数,这可以涉及将每一八位输入的最高有效位设置为“0”。由于某些值是有符号的而其他值是无符号的,所以根据相乘的值,乘积可以是有符号、无符号或混合符号部分乘积。
因为张量块330包括点积,所以通过实施DOT乘积可以实现较大乘法器的最大效率。值‘A’、‘B’、‘C’和‘D’分别表示阵列‘a’、‘b’、‘c’和‘d’的向量。在一种情况下,支持多个张量,其中,预加载多达三个向量‘C’和‘D’,并且然后与相同向量‘A’和‘B’相乘。换句话说,‘C’和‘D’可以用作预加载到DSP块26的两列权重寄存器中的权重,可以使用多达三个不同组的权重(例如,C1-C3和D1-D3),并且‘A’和‘B’可以以上述方式乘以该权重。在另一实施例中,例如当在向量模式中操作时,可以使用单个DOT乘积,同时具有‘A’、‘B’、‘C’和‘D’输入。
在所示实施例中,使用四个DSP块26,并且每个DSP块26彼此独立(例如,不级联到其他DSP块26)。输出(例如,其对应于由DSP块26的加法电路(例如,加法器220或FP32加法器240)确定的值)可以使用移位器电路350相对于彼此移位,并且然后使用加法器360求和,两者都可以包括在后处理电路310中。另外,加法器360可以在集成电路器件12的软逻辑单元中实施。换句话说,可以使用移位器电路350来移位与DSP块26E-26H中的两个DSP块相关联的小数位,使得由DSP块26E-26H生成的和共享公共指数,并且可以在加法器360中求和。
这个方案可以扩展到多分量乘法的较大或较小版本。例如,22位有符号乘法器可以用{a,b,c}*{d,e,f}或(ad<<28)+((de+bd)<<21)+((af+be+cd)<<14)+((bf+ce)<<7)+cf的分解来实施,其中‘a’和‘b’是八位有符号值,并且‘b’、‘c’、‘e’和‘f’是七位无符号值。
也可以实施无符号数,例如使用分解成仅七位无符号值的十四位无符号乘法。也可以实施非对称乘法,例如十五位与八位数之间的乘法操作。在这种情况下,十五位被乘数的值是{a,b},其中‘a’是八位有符号值,‘b’是七位无符号数,并且八位乘数值是有符号的。许多其他组合可以以这种方式组装。
继续参考附图,图28示出了乘法操作,其中利用了四个DSP块26的三列102。特别地,权重C1和D1被加载到第一列102A中,权重C2和D2被加载到第二列102B中,并且权重C3和D3被加载到第三列102C中。然后,值A和B可以被流送通过DSP块26中的每一个,然后,DSP块可以生成和(例如,24位数)。后处理电路310可以接收DSP块26的输出,如上所述将值移位,并且然后使用加法器360确定和。换句话说,可以将每一列102的值提供到后处理电路310的特定部分并且然后求和。
然而,该实施例仍然描绘了DSP块26彼此独立。换句话说,不利用级联。然而,在一些实施例中,可以利用级联。例如,尽管图28中的逻辑加法示出了在软逻辑单元中(例如,通过后处理电路310)求和所有四个向量或张量分量,但是可以通过级联包含具有相同排序(位位置)的分量的DSP块26来求和具有相同排序的分量。因此,当使用级联时,仅三个外部分量将被求和。图29示出了示出经由级联相加多个向量的示例,特别地,通过级联将两个向量(例如,ad和cb)求和。因此,后处理电路310可以仅接收三个输入并对其求和。
向量/张量分量可以具有自然乘数大小上的字增长。例如,在单个DSP块26内,低分量(b*d)可以具有四位的字增长,其可以与其他分量(例如,a*c)范围重叠。这在图30中示出。更具体地,图30示出了三个分量的对准(例如,在中间两个分量已经经由级联相加的情况下,如图29所示)。
图30的第一部分400示出了单个乘法器分量的对准。特别地,区段402A可以对应于在计算(A*C)时执行的单次乘法操作,区段404A可以对应于在计算(B*D)时执行的单次乘法操作,并且区段406A可以对应于在计算(A*D)时执行的单次乘法操作与在计算(B*C)时执行的单次乘法操作之和。图30的第二部分410示出了具有字增长扩展412的若干乘法器的三个分量的对准。换句话说,区段402B对应于(A*C),区段404B对应于(B*D),并且区段406B对应于(A*D)和(B*C)的和。由于字增长扩展412,如图30的第二部分410所示,区段402B、404B重叠。可以使用3-2压缩器将低位分量(b*d)的字增长扩展412从三位压缩成两位(如图30的第三区段420中的块418所指示)。另外,如区段420所指示,可以通过在两个剩余的两个分量(例如,(A*D)与(B*C)的和、以及A*C)的部分上使用2-2压缩器430来形成该压缩的最高有效进位位的空间。另外,应当注意,在使用更多分量的情况下(例如,在其中使用INT22值的实施例中),发生更复杂的重叠。在执行最终求和之前,可以使用提供更高压缩水平的压缩策略。
如上所述,可以采用级联。级联可以比不使用级联时更有效。图31中示出了其中利用级联的示例,其表示彼此通信地耦合的四个DSP块。特别地,当将定点和转换为浮点值时,可以利用共享指数(例如,如图31所指示的零或七的值)。例如,可以基于定点到浮点转换电路222也接收的共享指数的值来调整提供到定点到浮点转换电路222的和的偏置点。浮点值可以被提供(例如,作为级联输出)给随后的DSP块26,其可以确定所接收的浮点值和由定点到浮点转换电路222生成的浮点值之间的和。例如,图31中的加法器440对应于图5A和图5B中所示的DSP块26的FP32加法器。
记住图31的讨论,图32示出了使用浮点级联可实施的两种类型的向量乘法器。在布置460中,向量根据其秩值分组。换句话说,基于与被相乘的值相关联的共享指数的值的和来对向量进行分组。在布置470中,在逐DSP块的基础上在DSP块上混合秩。在布置470中,可以如上参考图31所述的那样将秩移位。在任一情况下,可以利用布置460、470两者。另外,应当注意,尽管‘b’和‘d’输入中的每一个为八位,但其为如上文所描述的无符号低位值。因此,b’和‘d’输入中的每一个包括具有零的最高有效位的七位无符号值。
DSP块26也可以用于执行涉及复数值的乘法操作。特别地,图33和图34示出了可以如何用多个DSP块26实施INT15复数向量乘法。更具体地,图33和图34示出了可以如何确定{a+bj}和{c+dj}的乘积,其中{a+bj}和{c+dj}均是十五位值。如图所示,总共使用了四列。特别地,列102E、102H用于确定乘积的实部,并且列102F、102G用于确定虚部。例如,在列102E、102F中,‘C’和‘D’向量可以作为权重被预加载,并且‘A’向量可以是流送跨过DSP块26的输入。对于列102G、102H,‘(-D)’和‘C’向量是预加载的权重,并且‘B’向量可以流送跨过DSP块26。‘(-D)’值可以被预计算,或者可以在值作为权重被加载时应用求反。可以使用DSP块26的加法器(例如,FP32加法器240)将列的每一组(例如,与实部相关的列102E、102H的第一组和与虚部相关的列102F、102G的另一组)相加。
虽然上述乘法操作的示例包括涉及十五位值的操作,但是涉及十五位乘法器的示例中的每个可以用来执行涉及其他数据类型的乘法操作,所述乘法器的示例是例如具有共享指数的FP23乘法器类似物。
此外,DSP块26可以用于执行涉及十六位值的乘法操作,其可以用于人工智能确定(例如,机器学习推理确定)以及在执行数字信号处理时利用。如下所述,涉及十六位值(例如,十六位整数值)的乘法操作可以通过将待相乘的值划分成有符号字节对来执行。然而,在讨论有符号字节对之前,将首先讨论切片。
如以上所讨论的,为了执行涉及比用于执行乘法操作的电路的本机宽度宽的值的乘法,可以将待相乘的值分成若干较低精度值(例如,如上文所讨论的,将十五位值分成有符号八位值和无符号七位值)。这些所得值可以被称为“切片”。为了确定两个值的乘积,可以生成切片,可以将切片相乘,并且可以将涉及切片的乘法操作的乘积求和(其中,值被适当地移位以考虑具有不同指数的值)。
作为另一示例,如果a和b是十六位数,则a和b均可以划分成两个八位切片。也就是a可以被划分为切片a1和a0,其中a=(a1<<8)+a0。也就是说,a等于a0和向左移位八个位置的a1的和。相似地,b可以被划分为切片b1和b0,其中b=(b1<<8)+b0。另外,应当注意,a1和b1是有符号的,而a0和b0是无符号的。在该示例中,a和b的乘积可以根据以下列出的等式1给出:
a*b=((a1*b1)<<16)+(((a1*b0)+(a0*b1))<<8)+(a0*b0)
等式1
相似地,如果A和B是包括十六位数的向量,则可以计算A和B的标量积(或点积),对每个向量进行位切片,然后计算切片的标量积:
A·B=((A1·B1)<<16)+(((A1·B0)+(A0·B1))<<8)+(A0·B0)
等式2
其中,A1和A0是A的切片,并且B1和B0是B的切片。
然而,根据等式1和2的切片值可能是不切实际的。例如,将a0和b0相乘可能需要无符号乘法器(例如,无符号八位乘法器电路)。此外,可能需要混合符号乘法器来确定a1与b0的乘积以及b1与a0的乘积。然而,通常被优化以执行机器学习推理操作的硬件(例如,中央处理单元(CPU)或图形处理单元(GPU))可能不被配置为执行无符号乘法、混合符号乘法或无符号乘法和混合符号乘法两者,为了防止这种情况,值可以被切片成一个八位切片和一个七位切片,例如,a可以被划分成切片a1和a0,其中a=(a1<<7)+a0,并且b可以被划分成切片b1和b0,其中b=(b1<<7)+b0。这种切片类型一般地是以上关于十五位值所描述的切片类型。另外,a和b的乘积可以根据等式3给出:
a*b=((a1*b1)<<14)+(((a1*b0)+(a0*b1))<<7)+(a0*b0)
等式3
在该修改方案中,可以使用有符号8位乘法器来执行每个乘法操作。例如,任何无符号自变量首先被零扩展到八位。然而,当使用这种方案时,a和b是15位宽,而当执行数字信号处理时遇到的许多量是16位宽。此外,应当注意,该方案可以通过使用更多的切片来适应更宽的操作数(例如,比15位更宽的操作数)。例如,均对a和b使用三个切片将得到22位乘法器。然而,这种方法将要求使用更多的8位乘法器。
为了使DSP块26能够执行涉及十六位值的乘法操作,从而使DSP块26能够在用于人工智能和数字信号处理应用时有效地执行,可以使用整数的替代表示:有符号字节元组。有符号字节元组是8位有符号切片的集合。每个元组表示整数。例如,十六位整数a可以由有符号字节对(a1,a0)表示(其中,(a 1<<8)+a0=a)。作为另一示例,可以使用(a2、a1、a0)的有符号字节三元组,其表示(a2<<16)+(a1<<8)+a0。也可以使用包括更多切片(例如,四个、五个或多于五个切片)的更大的元组。换句话说,有符号字节元组不限于仅包括两个或三个切片。
因为有符号字节元组的切片是有符号的,所以可以表示的值的范围不同于可以用被切片成有符号和无符号值的值表示的值的范围。例如,常规的16位数可以表示范围[-215,215-1]中的整数(即,-32768到32767),而有符号字节对(即,具有两个切片的有符号字节元组)可以表示范围[-215-27,215-27-1]中的整数。最大的有符号字节对是(127,127),其表示32639,而最小的有符号字节对是(-128,-128),其表示-32896。为了确定两个整数a和b的乘积,可以利用等式1。然而,在这种情况下,值a1、a0、b1和b0中的每一个是有符号八位值。因为当采用有符号字节元组时,a0和b0是有符号的,所以可以使用有符号8位乘法器执行每个个体的乘法操作。
记住,可以使用有符号字节元组(例如,有符号字节对)表示的值的范围不同于当使用有符号和无符号切片时存在的值的范围,现在将讨论有符号整数到有符号字节元组的转换。可以通过将整数分成切片a1和a0来实现将有符号16位整数转换成有符号字节对同时保存其值,其中a1是有符号的,并且a0是无符号的。如果a0的值小于128,则a的有符号字节对表示是(a1和a0)。否则,a的有符号字节对表示是(a1+1,a0-256)。换句话说,256(即28)可以被加到a1以说明从a0减去256。应当注意,作为有符号字节的(a0-256)具有与作为无符号字节的a0的表示相同的位模式。对低位字节(即,a0)不执行物理操作。
然而,如上所述,由有符号字节元组(例如,有符号字节对)表示的值的范围不同于常规十六位值的范围。这意指几个16位整数(即,相对高的值)不能被表示为保持与初始16位值相同的值的标准基础对。在讨论整数到有符号字节元组的映射之前,应当注意,存在相似的过程来将较宽的有符号整数转换成有符号字节元组(例如,当有符号字节元组保持与从其得出有符号字节元组的整数相同的值时)。
当将16位整数值a映射到有符号字节对时,不是试图保存16位整数值a的确切值,而是可以采用使这种整数的整个范围能够被表示为有符号字节对的映射。可以通过将16位整数分成8位切片a0和a0来实施这样的映射f(a),其中a1是有符号的,并且a0是无符号的,其中:
f(a)=(a1,a0-128)
等式4
因此,由标准字节对f(a)表示的值是(a-128)。应当注意,作为有符号字节的(a0-128)的表示具有与作为无符号字节的a0的表示相同的位模式,除了被反转的最高有效位。因此,可以使用单个非门来实施该映射。
也可以执行映射更大的有符号整数。例如,当a是24位有符号整数时,a可以通过将a分成8位切片a2、a1和a0而由有符号字节三元组表示,其中a2是有符号的,并且a1和a0是无符号的。对于有符号字节三元组:
f(a)=(a2,a1-128,a0-128)
等式5
在这种情况下,由有符号字节三元组表示的值是(a-215-27)。另外,应当注意,可以以相似的方式将较宽的整数映射到有符号字节元组。
当使用有符号字节元组执行乘法时,如上所述,可以根据a0的值,使用(a1和a0)或(a1+1,a0-256)来给出a的有符号字节元组。使用等式4将用于值x的有符号字节元组乘以给定值,其中a被替换为x。例如,为了确定a和x的乘积,其中a是已知的16位整数,并且x是未知的16位整数,可以使用有符号字节元组。因为a的值是已知的,所以可以使用将a映射到有符号字节对(a1,a0)或(a1+1,a0-256)的值保存转换。然而,等式4将用于生成x的有符号字节元组,因为x可能潜在地是在有符号字节对可以提供的范围外面的值。换句话说,通过确定为f(x),x可以被映射到有符号字节对,在这种情况下,有符号字节对将相等于(x-128)。一旦已经发生a和x到有符号字节对的映射,则有符号字节对的乘积在相乘时将等于a和(x-128)的乘积,其相等于a和x的乘积减去128和a的乘积。为了得到a和x的乘积,128和a的乘积可以被加到该值。然而,因为128是二的幂,所以128和2的乘积可以计算为(a<<7)。因此,不需要额外的乘法操作来确定将与有符号字节对的乘积相加的(128*a)。因此,a和x的乘积可以给出为:
a*x=((a1*x1)<<16)+(((a1*x0)+(a0*x1))<<8)+(a0*x0)+(a<<7)
等式6
其中(a1,a0)是a的有符号字节对表示,并且(x1,x0)是x的有符号字节对表示。
记住到这一点,现在将讨论示例性乘法。在该示例中,a等于5001,并且x等于-763。可以如上所述确定a和x的有符号字节对。例如,将5001转换为两个八位切片(其中,a1是有符号的,并且a0是无符号的)将给出(19,137)的有符号字节对(即,19x28+128等于5001)。然而,因为a0具有不小于128的值137,所以将用于执行a和x的乘法的a的有符号字节对是(20,-119)。在继续讨论x之前,应当注意,作为无符号8位整数的137具有与作为有符号8位整数的119相同的位模式。
为了确定x的有符号字节对,确定f(x)。因此,具有值-763的x的有符号字节对将是(-3,-123),其相等于-891(即,-3*28-123),其等于x-128。这给出以下部分乘积:
a1*x1=20*-3=-60;
a1*x0=20*-123=-2460;
a0*x1=-119*-3=357;
a0*x0=-119*-123=14637
将这些部分乘积代入等式6中给出:
a*x=((-60)<<16)+((-2460+357)<<8)+14637+(5001<<7)
其可以被简化为
a*x=-3932160+-538368+14637+640128=-3815763
因此,等式6给出了a和x的乘积是-3815763,其实际上是5001和-763的乘积。
有符号字节对也可以用于确定标量积(也称为点积)。例如,如果A=<ai>是已知16位整数的向量并且X=<xi>是未知16位值的向量,则A和X的标量积是:
A·X=∑i(ai*xi)
等式7
A和X的标量积也可以确定为:
A·X=∑i(ai*(xi-k))+∑i(ai*k)=∑i(ai*(xi-k))+k*∑iai
等式8
其中,对于十六位整数,k=128。
因为k是已知的,所以(xi-k)的每个值可以表示为有符号字节对。另外,值(k*∑iai)将为已知值,因为ai中的每一个是已知的,k也是如此。因此,为了确定A与X的标量积,可以通过如下方式来确定:对每个ai进行位切片并且将每个xi映射到有符号字节对,以使得ai=(a1i,a0i)并且f(xi)=f(x1i,x0-i),从而形成位切片的向量(A1,A0)与(X1,X0),其中A1=<a1-i>,A0=<a0i>,X1=<x1i>并且X0=<x0i>。因此:
A·X=((A1·X1)<<16)+((A1·X0))<<8)+A0·X0+K
等式9
其中,K=k*∑iai。这样,可以给出用于8位标量积中的每一个的本机有符号8位标量积操作。
另外,可以利用相似的技术来执行涉及复数的乘法操作。例如,在a等于(a0,j·a1)并且x等于(x0,j·x1)的场景中,结果的虚部可以被给出为(a1*x0+a0*x1)。使用上述技术,这等于<a1,a0>和<x0,x1>的标量积。对于乘积的实部,结果是(a0*x0-a1*x1),其等于<a0,-a1>和<x0,x1>的标量积。
继续讨论使用有符号字节元组执行乘法操作,可能存在十六位整数不能直接从整数的正常二进制表示转换为诸如有符号字节对的有符号字节元组表示的情况。例如,当a的值位于[-215-27,215-27-1]的范围外面(例如,值相对高的整数)时,使用上述技术,a可能不能被转换成有符号字节元组。然而,因为a位于[215-27,215-1]范围,-a将可转换成有符号字节元组。因此,对于落在[-215-27,215-27-1]范围外面的a的值,可以使用a的负值来代替a。另外,可以使用不同的映射g(x)(例如,替换f(x)):
g(x)=-x-(k+1)
等式10
其中k对于有符号字节对具有值128(即,27),并且对于有符号字节三元组具有值32896(即,215+27)。
与使用f(x)确定的值类似,可以使用有符号字节元组(例如,有符号字节对)来表示g(x)的值。将映射g(x)应用于16位值的二进制表示产生了有符号字节对表示,其中x的每一位(除了低位字节(例如,x0)的最高有效位)都已被反转。这种映射也可以使用非门来实施。
此外,由于(a*x)=(-a*-x),因此a与x的乘积可以给出为:
a*x=-a*(-x-(k+1))+-a*(k+1)
等式11
其中对于有符号字节对,k是128。另外,a和x的乘积可以给出为:
a*x=((a1*x1)<<16)+(((a1*x0)+(a0*x1))<<8)+(a0*x0)+K
等式12
其中,(a1,a0)为-a的有符号字节对表示,(x1,x0)=g(x)并且K=-a*(k+1),其等于=-129*a。对于标量积(包括复数乘法),也可以对每个个体的ai进行相似的调整。这影响了将在计算结束时相加的常数(因为现在存在正项和负项的和)。这意指一些xi将使用f(x)转变,并且其他xi将使用g(x)转变。特别地,使用f(x)还是g(x)取决于a是否可转换为有符号字节元组。例如,当a的值位于[215-27,215-1]的范围内时,可以使用f(x),而当ai在该范围外面时,使用g(x)。换句话说,当a可被转换成有符号字节元组(例如,有符号字节对)时,使用f(x)。当a不可转换为有符号字节元组(例如,因为a的值位于[215-27,215-1]范围外面)时,-a可以用作有符号字节元组,并且可以利用函数g(x)。
记住以上对有符号字节元组的讨论,将讨论使用有符号字节元组在DSP块26上执行乘法操作。回到图26,其表示单个DSP块26,DSP块26在每个时钟周期期间接收十个有符号字节的向量。每个向量对应于上述X。每个向量可以乘以存储在DSP块26的权重寄存器中的有符号字节。例如,存储在权重寄存器中的值与以上讨论的A相关联。DSP块26计算输入向量与每个权重向量(例如,存储在权重寄存器中的值)的标量积。如以上讨论的,由DSP块26计算的值可以被立即输出或链接到下一个DSP块26(例如,使用级联),这允许为包含多于十个要素的向量计算标量积。
考虑到这一点,现在将讨论A和X的5要素有符号字节对标量积的示例。特别地,这可以通过在输入中使用<X1,X0>,将<A1,0>存储在权重寄存器的第一列102J中,将<A0,A1>存储在权重寄存器的第二列102K中,以及将<0,A0>存储在权重寄存器的第三列102L中来完成。在这种情况下,X1和X0是包含X的每个要素的SBP表示的高位和低位字节的5要素向量,其中<X1,X0>是包含X的要素的串联的10要素向量。值“0”是仅包含零的5要素向量。换句话说,具有十个权重寄存器的列中的五个权重寄存器可以存储五要素向量A1、A0和0。
在这些值作为权重存储的情况下(例如,当DSP块26在张量模式中操作时),<X1,X0>可以流送跨过列102的权重寄存器的列。第一列102J将生成值S1,其等于A1和X1的标量积。第二列102K将生成值S2,其等于以下标量积之和:1)A0和X1,和2)A1和X0。第三列102L将生成值S3,其等于A0和X0的标量积。因此,由DSP块26确定的值可以被定义为(S1<<16)+(S2<<8)+S3,其可以使用后处理电路310来确定。S1、S2和S3的值也可以级联到另一DSP块以获得较大标量积。
然而,该讨论一般地假设16位输入<xi>已经是有符号字节对格式。记住这一点,图35示出了包括预处理电路300、DSP块26和后处理电路310的集成电路器件12的实施例的块图。在该示例中,输入500将是A向量或X向量(取决于正在加载权重还是正在确定部分乘积),其可以由预处理电路300转换成有符号字节对格式。更具体地,预处理电路300包括可以将A和X转换成有符号字节对格式的映射电路502。例如,A可以被转换成如上所述的有符号字节对(例如,通过按需调整每个值ai的符号以确保转换成有符号字节对)。对于X,映射电路502可以基于存储在权重寄存器中的ai的值来确定要利用哪个映射函数(例如,f(x)或g(x)),xi将与ai相乘以生成部分乘积。每个映射电路502可以对一个十六位整数输入执行映射。
继续讨论映射电路502,图36是映射电路502的块图。映射电路502可以接收输入510(例如,有符号的十六位整数)。输入的每一位可以被提供给映射电路502的不同门512(包括门512A和门512B)。在所示实施例中,除了作为同或门的门512B(其接收输入510的低位字节的最高有效位)之外,门512中每一个是异或门。门512还可以基于f(x)或g(x)是否用作映射函数而从控制寄存器514接收值。换句话说,控制寄存器514可以确定使用哪个映射(基于ai的值),并将特定值输出到每个门512,使得使用所确定的映射。例如,每次值ai被加载到权重寄存器中时,值可以被存储在控制寄存器514中。该值可以在每次使用新的权重时更新。控制寄存器514到门512的输出可以基于存储在控制寄存器514中的值。基于到门512的输入(例如,控制寄存器514的输出和输入510),门512将生成有符号字节表示的字节(例如,具有高位字节516和低位字节518的有符号字节对)。
然而,记住,每个xi的值可以被映射到不相等于原始输入xi的值,当跨越具有权重(例如,A的有符号字节对表示的位)的DSP块26流送有符号字节对时,由DSP块26确定的值可以被给出为(S1<<16)+(S2<<8)+S3+K,其中,当A的有符号字节对表示的位被加载到权重寄存器中时,可以确定K的值。K的值可以使用以下的等式13来确定:
K=∑ih(Ai)
等式13
其中:Ai是向量A的第i个要素在转换为有符号字节对之前的值;当y小于215-27时,h(y)=128*y;并且当y不小于215-27时,h(y)=-129*y。
暂时回到图35,后处理电路310考虑包括值K的DSP块26的输出。例如,图37是后处理电路310的实施例的块图,其从DSP块26接收S1、S2和S3作为输入,并使用移位电路542(其考虑具有不同基点的S1、S2和S3)和加法器544来确定S1、S2和S3的和540。更具体地,每次将权重加载到权重寄存器中时,可以将值(例如,“K调整因子”)存储在调整寄存器546中。K调整因子与S1、S2和S3求和以考虑包括K的DSP块26的输出。
再次回到图35,应当注意,可以提供附加的数据路径。例如,也可以包括用于更新映射电路502中的控制寄存器514的数据路径、K调整寄存器546中的K调整因子以及DSP块26中的ai系数。还应当注意,可以通过将若干DSP块26链接在一起并且通过将来自DSP块26的值级联到链中的后续DSP块26来确定更大的标量积。此外,应当注意,图35中所示的DSP块26的输入可以是用于跨越DSP块26流送数据的输入或不同于用于跨越DSP块流送数据26的输入的输入。例如,当利用级联权重加载或端口权重加载时,DSP块26可以经由与用于加载X向量的输入不同的单独的输入接收A向量(例如,作为输入500)。更具体地,可以经由用于并行加载的DSP块26的输入(例如,用于加载要与作为权重而存储的值相乘的数据的相同输入)来接收预处理电路300的输出。因此,通过利用不同的输入,例如,在级联权重加载和端口权重加载中利用的输入,DSP块26接收要作为权重(例如,A向量)存储的值,而无需由预处理电路300处理该值。换句话说,当利用级联权重加载和端口权重加载时,当加载权重时,可以绕过预处理电路300。
可以以若干不同的方式执行并行权重加载。例如,控制寄存器514可以暂时禁用映射电路502,使得权重的值将不会被映射电路502修改。在另一实施例中,集成电路器件12可以包括附加电路以考虑待由映射电路502修改的值。换句话说,加载到DSP块26中的权重可以被进一步预处理以修改权重,使得映射电路502的输出是正确的。例如,如图38所示,预处理电路300可以包括将所接收的值选择性路由到映射电路502或预映射电路564(例如,基于存储在通信地耦合到解多路复用器560的权重控制寄存器562中的一个或多个值)的解多路复用器560。当输入500是权重(例如,向量A)时,解多路复用器560将输入500的值路由到预映射电路564,其输出由映射电路502修改的调整值以产生输入500的原始值。然后,DSP块26接收这些值,并将其存储在权重寄存器172中。当输入500对应于将乘以权重的值(例如,将乘以向量A的向量X)时,解多路复用器560可以将输入的值直接路由到映射电路502,借此绕过预映射电路564。
在其他实施例中,预处理电路300可以包括其他路由电路(例如,解多路复用器),其可以用于绕过映射电路502、预映射电路564和解多路复用器560。例如,当执行十五位值(例如,上述值{a,b})的乘法时,图35的映射电路502以及图38的解多路复用器560、预映射电路564和映射电路502可以被绕过,使得值的分量(例如,a和b)可以被存储在权重寄存器172中而不被修改。
集成电路12可以包括AI专家DSP块26,其可以具有用以连接到其他集成电路器件的接口。另外,集成电路器件12可以是数据处理系统或包括在数据处理系统中的部件。例如,集成电路器件12可以是图39所示的数据处理系统570的部件。数据处理系统570可以包括主机处理器572(例如,中央处理单元(CPU))、存储器和/或存储电路574、以及网络接口576。数据处理系统570可以包括更多或更少的部件(例如,电子显示器、用户接口结构、专用集成电路(ASIC))。主机处理器572可以包括任何合适的处理器,例如
Figure BDA0002700828930000341
处理器或精简指令处理器(例如精简指令集计算机(RISC)、高级RISC机器(ARM)处理器),其可以管理对数据处理系统570的数据处理请求(例如,以执行加密、解密、机器学习、视频处理、语音识别、图像识别、数据压缩、数据库搜索排名、生物信息学、网络安全模式识别、空间导航等)。存储器和/或存储电路574可以包括随机存取存储器(RAM)、只读存储器(ROM)、一个或多个硬盘驱动器、闪存存储器等。存储器和/或存储电路574可以保存将由数据处理系统570处理的数据。在一些情况下,存储器和/或存储电路574还可以存储用于对集成电路器件12进行编程的配置程序(位流)。网络接口576可以允许数据处理系统570与其他电子设备通信。数据处理系统570可以包括若干不同的封装,或者可以包含在单个封装衬底上的单个封装内。例如,数据处理系统570的部件可以位于一个位置(例如,数据中心)或多个位置处的若干不同的封装上。例如,数据处理系统570的部件可以位于诸如城市、州或国家的单独的地理位置或区域中。
在一个示例中,数据处理系统570可以是处理各种不同请求的数据中心的一部分。例如,数据处理系统570可以经由网络接口576接收数据处理请求以执行加密、解密、机器学习、视频处理、语音识别、图像识别、数据压缩、数据库搜索排名、生物信息学、网络安全模式识别、空间导航、数字信号处理或一些其他专门任务。
此外,在一些实施例中,DSP块26和数据处理系统570可以被虚拟化。也就是说,可以利用一个或多个虚拟机来实施DSP块26和数据处理系统570的基于软件的表示,其仿真本文描述的DSP块26和数据处理系统570的功能。例如,系统(例如,包括一个或多个计算设备)可以包括管理程序,该管理程序管理与一个或多个虚拟机相关联的资源,并且可以分配仿真DSP块26或数据处理系统570的一个或多个虚拟机,以执行乘法操作和本文描述的其他操作。
因此,本文描述的技术使得能够使用DSP块26实行特定应用。例如,DSP块26增强了集成电路器件(例如,可编程逻辑器件(例如,FPGA))在仍然适合数字信号处理应用的同时用于人工智能应用的能力。
虽然在本公开中阐述的实施例可以容许各种修改和替代形式,但是已经在附图中以示例的方式示出了具体实施例并且已经在本文中详细描述了具体实施例。然而,应当理解,本公开不旨在限于所公开的特定形式。本公开将覆盖落入由所附权利要求限定的本公开的精神和范围内的所有修改、等同物和替代物。
本文所呈现和要求保护的技术被引用和应用于可证明地改进本技术领域的实际性质的实物和具体示例,并且因此不是抽象的、无形的或纯粹理论的。此外,如果本说明书末尾所附的任何权利要求包含一个或多个指定为“用于[执行][功能]…的装置”或“用于[执行][功能]…的步骤”的元件,则这些元件旨在根据35U.S.C.112(f)来解释。然而,对于包含以任何其他方式指定的元件的任何权利要求,旨在使这样的元件不根据35U.S.C.112(f)来解释。
本公开的示例性实施例
以下编号的条款限定本公开的某些示例性实施例。
条款1。
一种集成电路器件,包括:
数字信号处理(DSP)块,所述数字信号处理(DSP)块包括:
多列权重寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列权重寄存器中,其中,第一多个输入、第二多个输入或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
条款2。
根据条款1所述的集成电路器件,其中,所述较高精度值是十五位整数或十六位整数。
条款3。
根据条款1所述的集成电路器件,其中,所述第一多个值包括有符号值,并且所述第二多个值包括无符号值。
条款4。
根据条款1所述的集成电路器件,其中,所述第一多个值和所述第二多个值包括无符号值。
条款5。
根据条款1所述的集成电路器件,其中,所述乘法器被配置为执行有符号乘法。
条款6。
根据条款1所述的集成电路器件,包括:被配置为从所述DSP块接收数据的第二DSP块。
条款7。
根据条款1所述的集成电路器件,包括:
预处理电路,所述预处理电路被配置为将所述第一多个值和所述第二多个值提供给所述DSP块;以及
后处理电路,所述后处理电路被配置为从所述DSP块接收一个或多个值,并且基于所述一个或多个值确定一个或多个和。
条款8。
一种集成电路器件,包括:
多个数字信号处理(DSP)块,其中,所述多个DSP块中的每个DSP块包括:
多列寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列寄存器中,其中,第一多个输入、第二多个输入或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
条款9。
根据条款8所述的集成电路器件,包括后处理电路,所述后处理电路被配置为从多个DSP块接收第三多个值并且确定所述第三多个值的和。
条款10。
根据条款9所述的集成电路器件,包括预处理电路,所述预处理电路被配置为:
接收第四多个值;并且
通过根据一个或多个映射修改所述第四多个值来生成所述第二多个值。
条款11。
根据条款10所述的集成电路器件,其中:
所述一个或多个映射包括至少两个映射;并且
所述预处理电路被配置为基于所述第一多个值中的值是否超过阈值来确定当修改所述第四多个值中的值时要利用所述至少两个映射中的哪一个。
条款12。
根据条款11所述的集成电路器件,其中,所述后处理电路被配置为当确定所述第三多个值的所述和时考虑所述第四多个值中的所述值的所述修改。
条款13。
根据条款8所述的集成电路器件,包括预处理电路,所述预处理电路被配置为将所述较高精度值转换为有符号字节元组。
条款14。
根据条款13所述的集成电路器件,其中:
所述较高精度值包括十六位整数;并且
所述第二多个值中的所述值是八位整数。
条款15。
根据条款8所述的集成电路器件,其中,所述多个DSP块被配置为仿真被配置为执行乘法操作的一个或多个乘法器,所述乘法操作涉及相对于所述第一多个值或所述第二多个值的数据类型的较高精度数据类型。
条款16。
根据条款8所述的集成电路器件,包括现场可编程门阵列,所述现场可编程门阵列包括所述多个DSP块。
条款17。
一种系统,包括:
集成电路器件;以及
可编程逻辑器件,所述可编程逻辑器件通信地耦合到所述集成电路器件,其中,所述可编程逻辑器件包括多个数字信号处理(DSP)块,其中,所述多个DSP块中的每一个包括:
多列权重寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列权重寄存器中,其中,第一多个输入、第二多个输入或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
条款18。
根据条款17所述的系统,其中,所述乘法器被配置为将具有多达八位宽的值相乘。
条款19。
根据条款18所述的系统,其中,所述多个DSP块中的每一个被配置为确定具有十五位或十六位的定点值的乘积。
条款20。
根据条款17所述的系统,其中:
所述可编程逻辑器件包括现场可编程门阵列(FPGA);并且
所述集成电路器件包括中央处理单元(CPU)。

Claims (20)

1.一种集成电路器件,包括:
数字信号处理(DSP)块,所述数字信号处理(DSP)块包括:
多列权重寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列权重寄存器中,其中,所述第一多个值、所述第二多个值或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
2.根据权利要求1所述的集成电路器件,其中,所述较高精度值是十五位整数或十六位整数。
3.根据权利要求1所述的集成电路器件,其中,所述第一多个值包括有符号值,并且所述第二多个值包括无符号值。
4.根据权利要求1所述的集成电路器件,其中,所述第一多个值和所述第二多个值包括无符号值。
5.根据权利要求1-4中任一项所述的集成电路器件,其中,所述多个乘法器被配置为执行有符号乘法。
6.根据权利要求1-4中任一项所述的集成电路器件,包括第二DSP块,所述第二DSP块具有与所述DSP块相同的结构并且被配置为从所述DSP块接收数据。
7.根据权利要求1-4中任一项所述的集成电路器件,包括:
预处理电路,所述预处理电路被配置为将所述第一多个值和所述第二多个值提供给所述DSP块;以及
后处理电路,所述后处理电路被配置为从所述DSP块接收一个或多个值,并且基于所述一个或多个值确定一个或多个和。
8.一种集成电路器件,包括:
多个数字信号处理(DSP)块,其中,所述多个DSP块中的每个DSP块包括:
多列寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列寄存器中,其中,所述第一多个值、所述第二多个值或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
9.根据权利要求8所述的集成电路器件,包括后处理电路,所述后处理电路被配置为从多个DSP块接收第三多个值并且确定所述第三多个值的和。
10.根据权利要求9所述的集成电路器件,包括预处理电路,所述预处理电路被配置为:
接收第四多个值;并且
通过根据一个或多个映射修改所述第四多个值来生成所述第二多个值。
11.根据权利要求10所述的集成电路器件,其中:
所述一个或多个映射包括至少两个映射;并且
所述预处理电路被配置为基于所述第一多个值中的值是否超过阈值来确定当修改所述第四多个值中的值时要利用所述至少两个映射中的哪一个。
12.根据权利要求11所述的集成电路器件,其中,所述后处理电路被配置为当确定所述第三多个值的所述和时考虑所述第四多个值中的所述值的所述修改。
13.根据权利要求8-12中任一项所述的集成电路器件,包括预处理电路,所述预处理电路被配置为将所述较高精度值转换为有符号字节元组。
14.根据权利要求8-12中任一项所述的集成电路器件,其中,所述多个DSP块被配置为仿真被配置为执行乘法操作的一个或多个乘法器,所述乘法操作涉及相对于所述第一多个值或所述第二多个值的数据类型的较高精度数据类型。
15.根据权利要求8-12中任一项所述的集成电路器件,包括现场可编程门阵列,所述现场可编程门阵列包括所述多个DSP块。
16.一种系统,包括:
集成电路器件;以及
可编程逻辑器件,所述可编程逻辑器件通信地耦合到所述集成电路器件,其中,所述可编程逻辑器件包括多个数字信号处理(DSP)块,其中,所述多个DSP块中的每个DSP块包括:
多列权重寄存器;
多个输入,所述多个输入被配置为接收第一多个值和第二多个值,其中,所述第一多个值在被接收之后存储在所述多列权重寄存器中,其中,所述第一多个值、所述第二多个值或两者是从较高精度值得出的;以及
多个乘法器,所述多个乘法器被配置为将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值。
17.根据权利要求16所述的系统,其中,所述多个乘法器被配置为将具有多达八位宽的值相乘。
18.根据权利要求17所述的系统,其中,所述多个DSP块中的每个DSP块被配置为确定具有十五位或十六位的定点值的乘积。
19.根据权利要求18所述的系统,其中:
所述可编程逻辑器件包括现场可编程门阵列(FPGA);并且
所述集成电路器件包括中央处理单元(CPU)。
20.一种可编程逻辑器件,包括:
可编程逻辑电路;以及
多个数字信号处理块,分别包括:
用于在多个列中存储权重的模块;
用于接收第一多个值和第二多个值的模块,其中所述第一多个值在被接收之后存储在所述多个列中,并且其中,所述第一多个值、所述第二多个值或两者是从较高精度值得出的;以及
用于将所述第一多个值中的每个值同时乘以所述第二多个值中的每个值的模块。
CN202011021655.9A 2019-12-13 2020-09-25 用于将权重加载到张量处理块中的系统和方法 Pending CN112988656A (zh)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201962948124P 2019-12-13 2019-12-13
US201962948114P 2019-12-13 2019-12-13
US201962948110P 2019-12-13 2019-12-13
US62/948,114 2019-12-13
US62/948,124 2019-12-13
US62/948,110 2019-12-13
US16/914,018 2020-06-26
US16/914,018 US11809798B2 (en) 2019-12-13 2020-06-26 Implementing large multipliers in tensor arrays

Publications (1)

Publication Number Publication Date
CN112988656A true CN112988656A (zh) 2021-06-18

Family

ID=72560391

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011021655.9A Pending CN112988656A (zh) 2019-12-13 2020-09-25 用于将权重加载到张量处理块中的系统和方法

Country Status (3)

Country Link
US (1) US11809798B2 (zh)
EP (1) EP3835940A1 (zh)
CN (1) CN112988656A (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11494625B2 (en) * 2018-10-03 2022-11-08 Maxim Integrated Products, Inc. Systems and methods for energy-efficient analog matrix multiplication for machine learning processes
US11809798B2 (en) 2019-12-13 2023-11-07 Intel Corporation Implementing large multipliers in tensor arrays
US11656872B2 (en) * 2019-12-13 2023-05-23 Intel Corporation Systems and methods for loading weights into a tensor processing block
US11501151B2 (en) * 2020-05-28 2022-11-15 Arm Limited Pipelined accumulator
US20210326111A1 (en) * 2021-06-25 2021-10-21 Intel Corporation FPGA Processing Block for Machine Learning or Digital Signal Processing Operations

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3869005A (en) 1974-04-17 1975-03-04 Reliance Electric Co Value computing scale
SG52303A1 (en) 1993-12-20 1998-09-28 Motorola Inc Arithmetic engine
US5935197A (en) 1997-03-21 1999-08-10 Arm Limited Data processing circuit and method of operation performing arithmetic processing on data signals
US6446195B1 (en) 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
US6883084B1 (en) 2001-07-25 2005-04-19 University Of New Mexico Reconfigurable data path processor
US7437401B2 (en) 2004-02-20 2008-10-14 Altera Corporation Multiplier-accumulator block mode splitting
US8521800B1 (en) 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
US7868806B2 (en) 2008-03-07 2011-01-11 Qualcomm Incorporated Apparatus and method for dynamic circuit element selection in an digital-to-analog converter
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
US9685957B2 (en) * 2014-04-09 2017-06-20 Altera Corporation System reset controller replacing individual asynchronous resets
US10489116B1 (en) 2014-07-09 2019-11-26 Altera Corporation Programmable integrated circuits with multiplexer and register pipelining circuitry
CA2990709C (en) * 2016-05-26 2018-09-04 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
US10089078B2 (en) 2016-09-23 2018-10-02 Stmicroelectronics S.R.L. Circuit for performing a multiply-and-accumulate operation
US10521390B2 (en) 2016-11-17 2019-12-31 The United States Of America As Represented By The Secretary Of The Air Force Systems and method for mapping FIFOs to processor address space
US10423876B2 (en) 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
BR112019022916A2 (pt) 2017-05-17 2020-05-26 Google Llc Unidade de multiplicação de matrizes de baixa latência
US10879904B1 (en) 2017-07-21 2020-12-29 X Development Llc Application specific integrated circuit accelerators
US10509846B2 (en) 2017-12-13 2019-12-17 Intel Corporation Accelerator for processing data
US10725741B2 (en) 2018-09-21 2020-07-28 Groq, Inc. Digital circuit with compressed carry
US11216532B2 (en) 2018-09-26 2022-01-04 Intel Corporation Circuitry for high-bandwidth, low-latency machine learning
US20200401414A1 (en) 2019-06-21 2020-12-24 Flex Logix Technologies, Inc. Multiplier-Accumulator Circuitry and Pipeline using Floating Point Data, and Methods of using Same
US11656872B2 (en) 2019-12-13 2023-05-23 Intel Corporation Systems and methods for loading weights into a tensor processing block
US11809798B2 (en) 2019-12-13 2023-11-07 Intel Corporation Implementing large multipliers in tensor arrays

Also Published As

Publication number Publication date
EP3835940A1 (en) 2021-06-16
US11809798B2 (en) 2023-11-07
US20210182465A1 (en) 2021-06-17

Similar Documents

Publication Publication Date Title
US11494186B2 (en) FPGA specialist processing block for machine learning
US11809798B2 (en) Implementing large multipliers in tensor arrays
US11294626B2 (en) Floating-point dynamic range expansion
Mallasén et al. PERCIVAL: Open-source posit RISC-V core with quire capability
CN114402289A (zh) 多模式运算电路
US20210326111A1 (en) FPGA Processing Block for Machine Learning or Digital Signal Processing Operations
CN110955861A (zh) 用于高带宽、低延迟机器学习的电路
US20190042939A1 (en) Circuitry for low-precision deep learning
US20240126507A1 (en) Apparatus and method for processing floating-point numbers
US20230221924A1 (en) Apparatus and Method for Processing Floating-Point Numbers
US20220230057A1 (en) Hyperbolic functions for machine learning acceleration
US11163530B2 (en) Programmable-logic-directed multiplier mapping
US20200097253A1 (en) Digital Circuit With Compressed Carry
EP4155901A1 (en) Systems and methods for sparsity operations in a specialized processing block
EP4109235A1 (en) High precision decomposable dsp entity
US20210117157A1 (en) Systems and Methods for Low Latency Modular Multiplication
US20220113940A1 (en) Systems and Methods for Structured Mixed-Precision in a Specialized Processing Block

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