CN109564509A - 外积引擎 - Google Patents

外积引擎 Download PDF

Info

Publication number
CN109564509A
CN109564509A CN201780047342.0A CN201780047342A CN109564509A CN 109564509 A CN109564509 A CN 109564509A CN 201780047342 A CN201780047342 A CN 201780047342A CN 109564509 A CN109564509 A CN 109564509A
Authority
CN
China
Prior art keywords
apposition
engine
vector
instruction
memory
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
CN201780047342.0A
Other languages
English (en)
Inventor
A·萨泽加丽
E·班维尔
J·E·高宁恩
G·R·威廉姆斯三世
A·J·保蒙-史密斯
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.)
Apple Inc
Original Assignee
Apple Computer Inc
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 Apple Computer Inc filed Critical Apple Computer Inc
Publication of CN109564509A publication Critical patent/CN109564509A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30101Special purpose registers
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Peptides Or Proteins (AREA)
  • Medicines Containing Material From Animals Or Micro-Organisms (AREA)

Abstract

在一个实施方案中,外积引擎被配置为执行外积运算。外积引擎可并行对输入矢量执行多次乘法运算,在一个实施方案中,生成所得外积矩阵。在一个实施方案中,外积引擎可被配置为在结果矩阵中累积结果,执行混合乘加(FMA)运算以产生外积元素(乘),并将外积元素与来自结果矩阵存储器的先前元素一起累积(加)。处理器可获取外积指令,并且当指令在实施方案中变为非推测性时,可将指令传输到外积引擎。处理器可被配置为响应于将外积指令传输到外积引擎而退出外积指令。

Description

外积引擎
背景技术
技术领域
本文所述的实施方案涉及在基于处理器的系统中执行外积运算的电路。
相关技术描述
在现代计算系统中执行的各种工作负载依赖于大量的矩阵乘法,尤其是外积运算。外积运算是两个输入矢量(X和Y)的矩阵结果,其中矩阵的每个元素(i,j)是矢量X的元素i和矢量Y的元素j之积:Mij=XiYj。外积运算涉及许多类型的工作负载:神经网络、其他机器学习算法、离散余弦变换(DCT)、各种类型的卷积(一维、二维、多层二维等)等。此类运算在通用中央处理单元(CPU),即使是具有矢量指令的CPU上也性能很低;而功耗却很高。低性能高功率工作负载对任何计算系统都是问题,但对于电池供电系统尤其是个问题。
发明内容
在一个实施方案中,外积引擎被配置为执行外积运算。在一个实施方案中,外积引擎可并行执行多次乘法运算。更具体地讲,外积引擎可被配置为对输入矢量并行地执行多次乘法运算,生成所得外积矩阵。在一个实施方案中,外积引擎可被配置为在结果矩阵中累积结果,执行混合乘加(FMA)运算以产生外积元素(乘),并将外积元素与来自结果矩阵存储器的先前元素一起累积(加)。其他指令可将累积执行为减法。在一个实施方案中,外积引擎可能既有高性能又有功率效率。
处理器可获取外积指令,并且当指令在实施方案中变为非推测性时,可将指令传输到外积引擎。处理器可被配置为响应于将外积指令传输到外积引擎而退出外积指令。在一个实施方案中,外积引擎中的操作数存储器可超过处理器中寄存器文件的容量。例如,外积引擎中的操作数存储装置可超过处理器中寄存器文件的容量一个或多个数量级。
附图说明
下面的详细描述参照附图,现在对这些附图进行简要说明。
图1是处理器、外积引擎和低级高速缓存的一个实施方案的框图。
图2是示出了用于图1中所示的外积引擎的X、Y和Z存储器的一个实施方案的框图。
图3是示出了用于使用不同大小操作数的图1中所示的外积引擎的X、Y和Z存储器的一个实施方案的框图。
图4是示出了针对一个实施方案向外积引擎发出混合乘加外积运算的时序图。
图5是示出了针对一个实施方案向外积引擎发出加载/存储操作的时序图。
图6是可用于处理器和外积引擎的一个实施方案的指令表。
图7是系统的一个实施方案的框图。
图8是计算机可访问存储介质的一个实施方案的框图。
尽管本公开中所述的实施方案可受各种修改形式和另选形式的影响,但其具体实施方案在附图中以举例的方式示出并将在本文中详细描述。然而,应当理解,附图和对其的详细描述不旨在将实施方案限制为所公开的特定形式,而相反,本发明旨在涵盖落入所附权利要求书的实质和范围内的所有修改、等同物和另选方案。本文所使用的标题仅用于组织目的,并不旨在用于限制说明书的范围。如在整个本申请中所使用的那样,以允许的意义(即,意味着具有可能性)而非强制的意义(即,意味着必须)使用“可能”一词。类似地,字词“包括”(include、including、includes)是指包括但不限于。
在本公开内,不同实体(其可被不同地称为“单元”、“电路”、其他部件等等)可被描述或声称成“被配置为”执行一个或多个任务或操作。这个表达方式—被配置为[执行一个或多个任务]的[实体]—在本文中用于指代结构(即物理的事物,诸如电子电路)。更具体地,这个表达方式用于指示该结构被布置成在操作期间执行所述一个或多个任务。结构可被描述成“被配置为”执行某个任务,即使该结构当前并非正被操作亦如此。“被配置为生成输出时钟信号的时钟电路”旨在涵盖例如在操作期间执行该功能的电路,即使所涉及的电路当前并非正被使用(例如该电路并未连接到电源)。因此,被描述或表述成“被配置为”执行某个任务的实体是指物理的事物,诸如设备、电路、存储可执行以实施该任务的程序指令的存储器等。该短语在本文中不被用于指代无形的事物。通常,形成与“被配置为”对应的结构的电路可包括硬件电路。硬件电路可包括以下项的任意组合:组合式逻辑电路、时钟存储设备(诸如触发器、寄存器、锁存器等)、有限状态机、存储器(诸如静态随机存取存储器或嵌入式动态随机存取存储器)、定制设计电路、模拟电路、可编程逻辑阵列等。类似地,为了描述方便,可将各种单元/电路/部件描述为执行一个或多个任务。此类描述应当被解释为包括短语“被配置为”。
术语“被配置为”并不旨在表示“可被配置为”。例如,未经编程的FPGA不会被认为是“被配置为”执行某个特定功能,虽然其可能“可被配置为”执行该功能。在适当编程之后,FPGA继而可被配置为执行该功能。
所附权利要求书中表述被配置为执行一个或多个任务的单元/电路/部件或其他结构明确地旨在对该项权利要求不援引35U.S.C.§112(f)的解释。因此,所提交的本申请中没有任何权利要求是旨在要被解释为具有装置+功能的要素。如果申请人在申请过程中想要援引112(f)部分,则其将利用“用于”[执行功能]“的装置”结构来表述权利要求的要素。
在一个实施方案中,可通过以硬件描述语言(HDL)诸如Verilog或VHDL对电路的描述进行编码来实现根据本公开的硬件电路。可针对为给定集成电路制造技术设计的单元库来合成HDL描述,并可出于定时、功率和其他原因而被修改,以获取可被传输到工厂以生成掩模并最终产生集成电路的最终的设计数据库。一些硬件电路或其部分也可在示意图编辑器中被定制设计并与合成电路一起被捕获到集成电路设计中。该集成电路可包括晶体管并还可包括其他电路元件(例如,无源元件,诸如电容器、电阻器、电感器等),以及晶体管和电路元件之间的互连件。一些实施方案可实现耦接在一起的多个集成电路,以实现硬件电路,和/或可在一些实施方案中使用离散元件。另选地,HDL设计可被合成为可编程逻辑阵列诸如现场可编程门阵列(FPGA)并且可在FPGA中实现。
如本文所用,术语“基于”或“取决于”用于描述影响确定的一个或多个因素。该术语不排除可能有附加因素可影响确定。即,确定可仅基于所指定的因素或基于所指定的因素及其他未指定的因素。考虑短语“基于B确定A”。这个短语指定B是用于确定A的因素或者其影响A的确定。这个短语并不排除A的确定也可能基于某个其他因素诸如C。这个短语还旨在涵盖A仅基于B来确定的实施方案。如本文所用,短语“基于”与短语“至少部分地基于”是同义的。
本说明书包括对各种实施方案的参考,以指示本公开并非旨在提及一个具体实施,而是提及落入本公开的实质内的一系列实施方案,包括所附权利要求书。特定特征、结构或特性可以与本公开一致的任何合适的方式被组合。
具体实施方式
现在转向图1,示出了包括处理器12、外积引擎10和低级高速缓存14的装置的一个实施方案的框图。在例示的实施方案中,处理器12耦接到低级高速缓存14和外积引擎10。在一些实施方案中,外积引擎10也可耦接到低级高速缓存14,和/或可耦接到处理器12中的数据高速缓存(DCache)16。处理器12还可包括指令高速缓存(ICache)18、一个或多个流水线级20A-20N。流水线级20A-20N可以串行耦接。外积引擎10可包括彼此耦接的指令缓冲器22、X存储器24、Y存储器26、Z存储器28和混合乘加(FMA)电路30。在一些实施方案中,外积引擎10可包括高速缓存32。
外积引擎10可被配置为执行外积运算。具体地讲,可将输入矢量加载到X存储器24和Y存储器26中,并且外积指令可被处理器12传输到外积引擎10。响应于外积指令,外积引擎10可执行外积运算并将所得的外积矩阵写入Z存储器28。如果加载到X存储器24中的矢量(“X矢量”)具有第一数量的矢量元素,并且加载到Y存储器26中的矢量(“Y矢量”)具有第二数量的矢量元素,所得矩阵为[第一数量]x[第二数量]矩阵,其中矩阵(元素i,j)中的每一项(或元素)为对应矢量元素X(i)和Y(j)之积。在一个实施方案中,第一数量和第二数量相等并且矩阵为正方形矩阵。其他实施方案可以实施非正方形矩阵,或不同的外积运算可基于输入矢量元素产生正方形或非正方形结果。
在一个实施方案中,外积引擎10可以执行外积运算,同时在Z存储器28中将所得矩阵与先前结果一起累积(其中累积可以是加法或减法)。即,外积指令可以是混合乘加(FMA)运算或者混合乘减(FMS)运算,混合乘加运算被定义为将X矢量的元素乘以Y矢量的元素并将积加到Z矩阵的对应元素,混合乘减运算被定义为将X矢量的元素乘以Y矢量的元素并从Z矩阵的对应元素减去该积。另选地,FMS运算可包括从积中减去Z矩阵的对应元素。本公开的其余部分将一般性地描述FMA运算,但也可以通过类似方式支持FMS运算。
外积引擎10包括FMA电路30以执行FMA运算。在一个实施方案中,FMA电路30可以是被配置为并行对矢量/矩阵元素进行运算的FMA电路的阵列。在一个具体实施中,FMA电路可包括足够独立的FMA电路以并行处理所有X矢量元素和Y矢量元素。在另一个具体实施中,FMA电路可足以并行地对矢量元素的一部分执行FMA运算,并可以使用若干运算周期来完成外积指令。如果需要,可以在多个周期内将阵列中给定FMA电路布置成流水线,或者可以在一个周期中完成FMA运算。需注意,FMA电路30还可通过对FMS的减数取负来执行FMS运算。
外积引擎10可从处理器12减轻计算密集型外积运算的负担,该处理器可为例如通用CPU。与通用CPU相比,外积引擎10可更有效地执行外积运算,并且性能也可以比通用CPU更高。通用CPU通常是针对标量整数和/或标量浮点性能进行优化的。在一些实施方案中,一些CPU也可实施矢量整数和/或矢量浮点运算,但存储器24、26和28以及外积指令可被定义为对比通用CPU中的寄存器/寄存器文件大得多的操作数进行运算。例如,针对CPU的矢量指令集可以被定义为对大约4或8个元素的矢量进行运算,并可以包括大约32个矢量寄存器。另一方面,外积指令可被定义为对具有一个或多个数量级的多个元素的矢量进行运算,Z存储器28也可以具有一个或多个数量级的结果位置。例如,在各种实施方案中,可支持高达总共128、256或512比特的矢量,用于外积指令。该矢量可包括,例如,给定矢量中包括的比特中的16、32或64个矢量元素。在一个实施方案中,矢量元素可以是浮点数,尽管也可以使用采用整数矢量元素的实施方案。可支持更大或更小大小的矢量和/或每矢量更大或更小数量的矢量元素。结果矩阵可具有等于矢量元素数量平方的若干矩阵元素。例如,如果使用16元素的矢量,Z存储器28中的所得矩阵可以具有16×16个结果元素(或256个结果元素)。其他数量的矢量元素可导致Z存储器28中更大或更小数量的结果元素。通常,给定运算的结果矩阵中元素的数量可以是输入矢量中矢量元素数量之积。
在一个实施方案中,外积引擎可支持矢量元素和外积结果元素的多个大小。矢量元素的最大数量可对应于受支持矢量元素大小的最小大小,用于其他大小的矢量元素的数量可以是最大数量乘以最小大小与该其他大小之比。当使用更大大小的矢量元素时,可产生更少的积,因为X存储器24和Y存储器26中存在更少的矢量元素。Z存储器28可被布置成在存储器的特定行中写入元素,保留其他行未用。例如,如果矢量元素是最小大小元素的两倍大,则Z存储器28中每隔一行都可以未使用。如果矢量元素是最小大小元素的4倍大,则可以每四行使用,等等。
在一个实施方案中,由外积引擎10执行的外积指令还可包括存储器指令(例如,加载/存储指令)。加载指令可将矢量从系统存储器(未示出)传送到X存储器24和Y存储器26,或将矩阵元素传送到Z存储器28中。存储指令可将矩阵元素从Z存储器28写入系统存储器。其他实施方案还可包括将元素从X存储器和Y存储器24和26写入系统存储器的存储指令。该系统存储器可以是在包括高速缓存14、16和18的高速缓存分级结构的底部存取的存储器。系统存储器可由随机存取存储器(RAM)形成,诸如各种类型的动态RAM(DRAM)或静态RAM(SRAM)。可包括存储器控制器以接口连接到系统存储器。在一个实施方案中,外积引擎10可以是与处理器12一致的高速缓存。在一个实施方案中,外积引擎10可有权访问数据高速缓存16以读/写数据。另选地,外积引擎10转而可有权访问低级高速缓存14,低级高速缓存14可确保高速缓存与数据高速缓存16的一致性。在另一个另选方案中,外积引擎10可有权访问存储器系统,存储器系统中的一致点可确保访问的一致性。在另一个另选方案中,外积引擎10可有权访问高速缓存14和16。
在一些实施方案中,外积引擎10可包括高速缓存32,以存储最近由外积引擎10访问的数据。选择是否包括高速缓存32可基于外积10所经受的有效延迟以及外积引擎10期望的性能水平。高速缓存32可具有任何容量、高速缓存行大小和配置(例如,设定关联、直接映射等)。
在例示的实施方案中,处理器12负责获取外积指令(例如,FMA指令、存储器指令等)并将外积指令传输至外积引擎10以供执行。处理器12对外积指令进行获取、解码等的“前端”开销可以在外积引擎10执行的外积运算上被分摊。在一个实施方案中,处理器12可以被配置为将外积指令沿流水线(图1中一般性地示为级20A-20N)向下传播到外积指令变为非推测性的点。在图1中,级20M示出了流水线的非推测性级。从非推测级,指令可被传输到外积引擎10。然后处理器12可退出指令(级20N)。具体地讲,处理器12可在外积引擎10完成外积运算之前(或如果外积指令在队列中排在指令缓冲器22中其他指令之后,甚至在开始外积运算之前)退出指令。
通常,如果知道指令要完成执行而没有异常/中断,则指令可以是非推测性的。因此,一旦前面的指令(按程序顺序)已经被处理到已知先前指令不会导致处理器12中的异常/推测性刷新且还知道指令自身不会导致异常/推测性刷新,则指令就可以是非推测性的。基于处理器12实施的指令集架构,可能已知一些指令不会导致异常,并且也不会导致推测性刷新。一旦已经确定其他先前指令无异常且无刷新,此类指令就也是无异常且无刷新的。
对于要传输到外积引擎10的存储器指令而言,处理器12中的处理可包括将存储器操作的虚拟地址转换为物理地址(包括执行任何保护检查和确保存储器指令具有有效转换)。
图1示出了处理器12(具体地讲,非推测性级20M)和外积引擎10之间的通信路径。例如,如果外积引擎10在物理上靠近处理器12,该路径可以是专用通信路径。该通信路径可以与其他通信共享,例如,基于分组的通信系统可被用来向系统存储器传输存储器请求并向外积引擎10传输指令。该通信路径也可通过系统存储器,例如,外积引擎可具有指向处理器12可将外积指令写入其中的存储器区域的指针。
可提供指令缓冲器22以允许外积引擎10在执行其他指令时对指令排队。在一个实施方案中,指令缓冲器22可为先进先出缓冲器(FIFO)。即,可按照程序顺序处理外积指令。其他实施方案可实施其他类型的缓冲器。
X存储器24和Y存储器26可各自被配置为存储至少一个如针对外积指令所定义的矢量(例如,最小矢量元素大小下的16、32、64等个元素)。类似地,Z存储器28可被配置为存储至少一个外积结果矩阵。在一些实施方案中,X存储器24和Y存储器26可被配置为存储多个矢量和/或Z存储器28可被配置为存储多个结果矩阵。每个矢量/矩阵可被存储在存储器中不同的存储体中,并且用于给定指令的操作数可由存储体编号来标识。
处理器12从指令高速缓存(ICache)18获取指令并通过各流水线级20A-20N处理指令。该流水线是一般化的,并可在各种实施方案中包括任何级别的复杂度以及性能增强特征。例如,处理器12可能是超标量的,并且一个或多个流水线级可被配置为一次处理多个指令。流水线可针对不同类型的指令而有长度变化(例如,ALU指令可具有调度、执行和回写级,而存储器指令可具有调度、地址生成、转换/高速缓存存取、数据转发和错过处理级)。级可包括分支预测、寄存器重命名、预先获取等。
一般来讲,在处理每条指令期间可能存在指令变为非推测性的点。流水线级20M可表示针对外积指令的这个级,外积指令被从非推测性级传输到外积引擎10。退出级20N可表示将给定指令结果移交到架构状态并不再能通过刷新指令或重新发出指令而“撤销”的状态。该指令本身相对于当前执行的指令(例如,指令仍可存储于指令高速缓存中)而言在退出级处退出处理器。因此,在例示的实施方案中,在已经成功将指令传输到外积引擎10时,发生外积指令的退出。
指令高速缓存18和数据高速缓存(DCache)16可各自为具有任何所需容量、高速缓存行大小和配置的高速缓存。类似地,低级高速缓存14可以是任何容量、高速缓存行大小和配置。低级高速缓存14可以是高速缓存分级结构中的任何级别(例如,对于处理器12而言的最后一级高速缓存(LLC),或任何中间高速缓存级别)。
图2是示出了矢量X和Y(附图标记40和42)和结果矩阵44的框图。X元素被标记为X0到Xn,并且Y元素被标记为Y0到Yn。矩阵元素被标记为Z00至Znn,其中第一位数是积中包括的元素的X元素编号,并且第二位数是积中包括的元素的Y元素编号。因此,图2中矩阵44的每一行对应于特定Y矢量元素。当已执行FMA外积指令时,可利用元素填充矩阵44中的每一项,如图所示对该项中前面的值与矢量元素的积求和(例如Z00+=X0Y0)。
图3示出了X矢量和Y矢量40和42以及结果矩阵44的两个示例。在第一示例中,X矢量和Y矢量40a和42a具有元素0到N,其可以是矢量元素大小的最小受支持大小。因此,类似于图2的例示,填入结果作为Z00到Znn。在第二示例中,X矢量和Y矢量40b和42b具有两倍于最小受支持元素大小的元素。因此,X矢量和Y矢量具有矢量元素0到m,其中m是n/2加1的整数部分,如图3底部所示。结果矩阵44b具有更少的值,因为积更少。在一个实施方案中,在矢量元素是最小受支持大小的两倍时,不使用结果矩阵44b中的每隔一行。对于四倍最小值的矢量元素会使用更少的行,随着大小继续增大,行数更少。
图4是示出了外积FMA指令被处理器12和外积(OP)引擎10处理的一个实施方案的操作的时序图。在图4中,时间向右以任意单位增加图4中所示的每个操作可在处理器12和/或外积引擎10中的一个或多个时钟周期内执行,并且图4中的不同操作可在不同数量的时钟周期内执行。
处理器12可获取FMA指令(附图标记50)并在处理器的流水线中处理指令,直到指令变为非推测性的(附图标记52)。处理器12可将非推测性FMA指令传输到外积引擎10,该外积引擎可在指令缓冲器22中对指令排队(箭头56和附图标记58)。处理器12可退出指令(附图标记54)。如前所述,处理器12可在外积引擎10中执行指令之前退出指令。
外积引擎10可从指令缓冲器22发出FMA指令以供执行(附图标记60)。FMA电路30可执行FMA运算,并且可将数据写入Z存储器28,并且退出指令(附图标记62和64)。尽管在指令缓冲器22中对指令排队和发出指令之间示出了空间(附图标记58和60),示出了时间的流逝,但在一些情况下,可以响应于被排队而发出指令(例如,如果缓冲器为空)。一些实施方案可支持绕过缓冲器22,如果其为空。
图5是示出了外积存储器指令(加载/存储)被处理器12和外积(OP)引擎10处理的一个实施方案的操作的时序图。在图5中,时间向右以任意单位增加图5中所示的每个操作可在处理器12和/或外积引擎10中的一个或多个时钟周期内执行,并且图5中的不同操作可在不同数量的时钟周期内执行。
类似于图4的时序图,处理器12可获取FMA指令(附图标记70)并在处理器的流水线中处理指令,直到指令变为非推测性的(附图标记74)。对于存储器操作而言,处理器12执行的操作之一可以是转换存储器操作存取的虚拟地址(附图标记72)。例如,如果没有指向物理地址的映射,或者如果转换的保护属性不许可存储器操作(诸如存储到只读页面),转换可能会失败,导致异常。假设未发生异常且存储器操作变成非推测性的,处理器12可将指令传输到外积引擎10,该外积引擎可在指令缓冲器22中对指令排队(箭头78和附图标记80)。处理器12可退出指令(附图标记76)。如前所述,处理器12可在外积引擎10中执行指令之前退出指令。
外积引擎10可从指令缓冲器22发出存储器指令以供执行(附图标记82)。外积引擎10可执行存储器操作,访问高速缓存以发现对应数据。高速缓存或被访问的高速缓存在不同实施方案中可以不同,如上文结合图1所述(附图标记84)。在图5所示的情况下,操作可能会发生高速缓存遗漏。在经历延迟以填充高速缓存(图5中的中断所示,因为与指令执行时间相比延迟通常很大)之后,可以将数据填入高速缓存中,对于加载而言,将数据写入X存储器24、Y存储器26或Z存储器28(附图标记86)。对于存储的情况而言,可以将数据从Z存储器28写入高速缓存。因此,在高速缓存遗漏的情况下,延迟可由外积引擎10承担,而处理器12可继续向前执行指令。一旦数据已被填充/转发/写入(附图标记88),外积引擎10就可退出指令。高速缓存命中可以是类似的,不同的是执行和数据之间过去的时间量(附图标记84和86)可能更短(例如,短到零,或者它们可以并行发生)。
图6是示出了针对外积引擎10的一个实施方案的示例性指令集的表90。其他实施方案可实施任何指令集,包括所示的指令集的子集、其他指令、子集和其他指令的组合等。
存储器操作可包括加载和存储指令。具体地讲,在例示的实施方案中,对于X、Y和Z存储器分别有加载和存储指令。在Z存储器28的情况下,大小参数可指示正在使用哪个矢量元素大小,从而将Z存储器的哪行写入存储器(例如,每隔一行,每四行等)。在一个实施方案中,X存储器和Y存储器可具有用于存储不同矢量的多个存储体。在此类实施方案中,可存在多个读/写不同存储体的指令,或者可以有操作数指定受加载/存储X/Y指令影响的存储体。在每种情况下,X存储体都可存储指向要从/向其执行加载/存储的存储器的指针。该指针可以是虚拟的,并且可以如上所述由处理器12转换。另选地,指针可以是物理的,并且可由处理器12在转换后提供。
FMA和FMS指令可对X矢量和Y矢量执行外积运算,并且可以将所得元素与Z存储器28的对应元素求和(FMA)或从Z存储器28的对应元素减去结果元素(FMS)。大小操作数可指定矢量元素的大小,并且这可以暗中指定更新哪些位置。每个指令的当前字段可指定影响X、Y和Z存储器的哪个部分(存储体)。
在一个实施方案中,可提供清空指令以清空(清零)Z存储器,并且存储器阻隔(MBAR)指令可提供存储器阻隔操作。在一个实施方案中,可使用MBAR指令来确保后续的处理器存储器操作(在程序顺序中在MBAR指令之后)发生在更早的外积引擎存储器操作之后。外积引擎10可将存储器阻隔作为完全阻隔来处理。在MBAR之前完成先前的外积引擎存储器操作(按程序顺序),并且不执行后续外积引擎存储器操作,直到MBAR指令完成。处理器12可将MBAR指令视为采集阻隔。来自处理器的后续(按程序顺序在MBAR指令之后)存储器操作一直等到MBAR完成。与外积引擎10执行的其他指令不同,MBAR指令可不被处理器12退出,直到外积引擎10发出完成信号为止。
图7是系统150的一个实施方案的框图。在例示的实施方案中,系统150包括耦接到一个或多个外围设备154和外部存储器158的集成电路(IC)152的至少一个实例。提供了电源156,其向IC 152供应供电电压以及向存储器158和/或外围设备154供应一个或多个供电电压。IC 152可包括处理器12的一个或多个实例以及外积引擎10的一个或多个实例。在其他实施方案中,可提供多个IC,在它们上有处理器12和/或外积引擎10的实例。
根据系统150的类型,外围设备154可包括任何期望的电路。例如,在一个实施方案中,系统150可以是计算设备(例如,个人计算机、膝上型计算机等)、移动设备(例如,个人数字助理(PDA)、智能电话、平板电脑等)或能够从外积引擎10受益的专用计算设备(例如,神经网络、卷积神经网络(CNN)、包括实施机器学习的设备的其他机器学习引擎等)。在系统150的各种实施方案中,外围设备154可包括用于各种无线通信的设备,诸如WiFi、蓝牙、蜂窝、全球定位系统等。外围设备154还可以包括额外的存储装置,包括RAM存储装置、固态存储装置或磁盘存储装置。外围设备154可包括用户界面设备,诸如显示屏,其包括触摸显示屏或多触摸显示屏、键盘或其他输入设备、麦克风、扬声器等。在其他实施方案中,系统150可为任何类型的计算系统(例如,台式个人计算机、膝上型电脑、工作站、网络机顶盒等)。
外部存储器158可包括任何类型的存储器。例如,外部存储器158可为SRAM、动态RAM(DRAM)(诸如同步DRAM(SDRAM))、双倍数据速率(DDR、DDR2、DDR3等)SDRAM、RAMBUSDRAM、低功率版本的DDR DRAM(例如LPDDR、mDDR等)等等。外部存储器158可包括存储器设备可被安装到的一个或多个存储器模块,诸如单列直插内存模块(SIMM)、双列直插内存模块(DIMM)等。另选地,外部存储器158可包括以芯片上芯片或封装上封装具体实施被安装在IC152上的一个或多个存储器设备。
图8是示出了计算机可访问存储介质160的一个实施方案的框图,该介质存储IC152的电子描述(附图标记162)。更具体地讲,该描述可包括至少外积引擎10和处理器12。一般来讲,计算机可访问存储介质可包括在使用期间可被计算机访问以向计算机提供指令和/或数据的任何存储介质。例如,计算机可访问存储介质可包括诸如磁性或光学介质的存储介质,例如,盘(固定或可拆卸)、带、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或蓝光。存储介质还可包括易失性或非易失性存储器介质,诸如RAM(例如,同步动态RAM(SDRAM)、Rambus DRAM(RDRAM)、静态RAM(SRAM)等)、ROM或闪存存储器。存储介质可被物理地包括在存储介质将指令/数据提供至其的计算机中。另选地,存储介质可连接至计算机。例如,存储介质可通过网络或无线链路诸如网络附接存储装置而被连接至计算机。存储介质可通过外围接口诸如通用串行总线(USB)而被连接。通常,计算机可访问存储介质160可以非暂态方式存储数据,其中非暂态在该上下文中可指不通过信号传输指令/数据。例如,非暂态存储装置可为易失性的(并且响应于断电而可能会丢失所存储的指令/数据)或非易失性的。
通常,计算机可访问存储介质160上存储的IC 152的电子描述162可以是数据库,该数据库可以由程序读取并直接或间接用于制造包括IC 152的硬件。例如,该描述可以是诸如Verilog或VHDL的高级设计语言(HDL)中硬件功能的行为级别的描述或寄存器传输级别(RTL)的描述。可通过合成工具读取该描述,合成工具可合成该描述以产生包括来自合成库的门电路列表的网表。网表包括一组门电路,其还表示包括IC 152的硬件的功能。然后可放置并路由网表,以产生用于描述要应用到掩模的几何形状的数据集。然后可以在各种半导体制造步骤中使用掩模以产生对应于IC 152的半导体电路。另选地,计算机可访问存储介质300上的描述162可以是期望的网表(具有或没有合成库)或数据集。
尽管计算机可访问存储介质160存储IC 152的描述162,但其他实施方案可根据需要存储IC 152的任何部分(例如,如上所述,外积引擎10和/或处理器12)的描述162。
一旦充分了解了上面的公开,许多变型和修改对于本领域的技术人员而言将变得显而易见。本发明旨在使以下权利要求书被阐释为包含所有此类变型和修改。

Claims (15)

1.一种外积引擎,包括:
电路,所述电路被配置为执行由外积指令指定的外积运算;
至少两个输入存储器,所述至少两个输入存储器耦接到所述电路并且被配置为存储用于所述外积运算的输入矢量;和
输出存储器,所述输出存储器耦接到所述电路并且被配置为累积外积结果;其中
所述电路被配置为读取所述输出存储器的元素,并且响应于所述外积指令在所述输出存储器中将所述外积运算的对应元素与现有数据一起累积。
2.根据权利要求1所述的外积引擎,其中所述累积为加法。
3.根据权利要求1所述的外积引擎,其中所述累积为减法。
4.根据权利要求1至3中任一项所述的外积引擎,其中:
所述电路被配置为对第一矢量操作数和第二矢量操作数执行所述外积运算,产生所得外积矩阵;
设定所述至少两个输入存储器的第一操作数存储器的大小以在第一元素大小下存储第一数量的所述第一矢量操作数的元素,并在第二元素大小下存储第二数量的所述第一矢量操作数的元素,其中所述第二元素大小大于所述第一元素大小;
设定所述至少两个输入存储器的第二操作数存储器的大小以在所述第一元素大小下存储第三数量的所述第二矢量操作数的元素,并在所述第二元素大小下存储第四数量的所述第二矢量操作数的元素;
设定所述输出存储器的大小以存储对所述第一元素大小执行的所述外积运算的所述所得外积矩阵,并且其中所述输出存储器的一部分未用于在所述第二元素大小下执行的所述外积运算。
5.根据权利要求4所述的外积引擎,其中所述电路是混合乘加阵列,其中所述混合乘加阵列的乘法部分被配置为对所述第一矢量操作数和所述第二矢量操作数的相应元素执行多次乘法运算。
6.根据权利要求5所述的外积引擎,其中所述混合乘加阵列的加法部分被进一步配置为将所述多次乘法运算的积加到从所述输出存储器读取的相应数据,并将所述加法的结果写入到所述输出存储器。
7.根据权利要求5所述的外积引擎,其中所述乘加阵列被进一步配置为从读取自所述输出存储器的相应数据减去多次乘法运算的积,并将所述减法的结果写入到所述输出存储器。
8.根据权利要求1至7中任一项所述的外积引擎,还包括耦接所述电路并且被配置为存储从处理器接收的一个或多个外积运算的指令缓冲器。
9.根据权利要求8所述的外积引擎,其中所述指令缓冲器被进一步配置为存储加载/存储操作以从所述第一矢量存储器、所述第二矢量存储器和所述输出存储器读取数据并将数据写入到所述第一矢量存储器、所述第二矢量存储器和所述输出存储器。
10.一种装置,包括:
处理器,所述处理器被配置为取回外积指令;和
根据权利要求1至9中任一项所述的外积引擎,所述外积引擎耦接到所述处理器,其中:
所述处理器被配置为响应于向所述外积引擎传输所述外积运算并在所述外积引擎完成所述外积运算之前退出所述外积指令;并且
每个输入存储器的大小超过所述处理器中的矢量寄存器的大小。
11.根据权利要求10所述的装置,其中所述处理器被配置为响应于所述外积指令在所述处理器中变为非推测性的而向所述外积引擎传输所述外积运算。
12.根据权利要求10或11所述的装置,其中所述外积指令包括加载/存储操作,并且其中所述处理器被配置为在向所述外积引擎传输所述外积运算之前将所述加载/存储操作的虚拟地址转换成物理地址。
13.根据权利要求12所述的装置,其中如果在所述外积引擎有权访问的一个或多个高速缓存中所述加载/存储操作未命中,则在所述处理器已退出所述外积指令之后,在所述外积引擎中经历所述高速缓存未命中的延迟。
14.一种方法,包括:
由处理器取回外积指令;
向耦接到所述处理器的外积引擎传输对应于所述外积指令的外积运算,其中所述外积引擎包括:
至少两个输入存储器,所述至少两个输入存储器耦接到所述电路并且被配置为存储用于所述外积运算的输入矢量;和
输出存储器,所述输出存储器耦接到所述电路并且被配置为累积外积结果;以及
在所述外积引擎中执行所述外积运算,所述执行包括:
读取所述输出存储器的元素;以及
响应于所述外积指令在所述输出存储器中将所述外积运算的对应元素与现有数据一起累积。
15.根据权利要求14所述的方法,其中所述外积引擎被配置为对第一矢量操作数和第二矢量操作数执行所述外积运算,产生所得外积矩阵,并且其中设定所述至少两个输入存储器的第一操作数存储器的大小以在第一元素大小下存储第一数量的所述第一矢量操作数的元素,并在第二元素大小下存储第二数量的所述第一矢量操作数的元素,其中所述第二元素大小大于所述第一元素大小,并且其中设定所述至少两个输入存储器的第二操作数存储器的大小以在所述第一元素大小下存储第三数量的所述第二矢量操作数的元素,并在所述第二元素大小下存储第四数量的所述第二矢量操作数的元素,并且其中设定所述输出存储器的大小以存储对所述第一元素大小执行的所述外积运算的所述所得外积矩阵,并且其中所述输出存储器的一部分未用于在所述第二元素大小下执行的所述外积运算。
CN201780047342.0A 2016-09-13 2017-08-24 外积引擎 Pending CN109564509A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/264,002 2016-09-13
US15/264,002 US20180074824A1 (en) 2016-09-13 2016-09-13 Outer Product Engine
PCT/US2017/048453 WO2018052684A1 (en) 2016-09-13 2017-08-24 Outer product engine

Publications (1)

Publication Number Publication Date
CN109564509A true CN109564509A (zh) 2019-04-02

Family

ID=59772807

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780047342.0A Pending CN109564509A (zh) 2016-09-13 2017-08-24 外积引擎

Country Status (4)

Country Link
US (1) US20180074824A1 (zh)
CN (1) CN109564509A (zh)
GB (1) GB2567372A (zh)
WO (1) WO2018052684A1 (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
CN108388446A (zh) 2018-02-05 2018-08-10 上海寒武纪信息科技有限公司 运算模块以及方法
US10970078B2 (en) 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
US10831488B1 (en) * 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US20210200549A1 (en) * 2019-12-27 2021-07-01 Intel Corporation Systems, apparatuses, and methods for 512-bit operations
US11755333B2 (en) * 2021-09-23 2023-09-12 Apple Inc. Coprocessor prefetcher

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04259064A (ja) * 1991-02-14 1992-09-14 Fujitsu Ltd ベクトル計算機による行列積計算方法
US20110040821A1 (en) * 2009-08-17 2011-02-17 International Business Machines Corporation Matrix Multiplication Operations with Data Pre-Conditioning in a High Performance Computing Architecture
US20110040822A1 (en) * 2009-08-17 2011-02-17 International Business Machines Corporation Complex Matrix Multiplication Operations with Data Pre-Conditioning in a High Performance Computing Architecture

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5099447A (en) * 1990-01-22 1992-03-24 Alliant Computer Systems Corporation Blocked matrix multiplication for computers with hierarchical memory
EP1365319B1 (en) * 2002-04-01 2017-07-05 QUALCOMM Incorporated Risc processor supporting one or more uninterruptible co-processors
US8458442B2 (en) * 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04259064A (ja) * 1991-02-14 1992-09-14 Fujitsu Ltd ベクトル計算機による行列積計算方法
US20110040821A1 (en) * 2009-08-17 2011-02-17 International Business Machines Corporation Matrix Multiplication Operations with Data Pre-Conditioning in a High Performance Computing Architecture
US20110040822A1 (en) * 2009-08-17 2011-02-17 International Business Machines Corporation Complex Matrix Multiplication Operations with Data Pre-Conditioning in a High Performance Computing Architecture

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SHAOLI LIU等: "Cambricon: An Instruction Set Architecture for Neural Networks", 《2016 ACM/IEEE 43RD ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE》 *

Also Published As

Publication number Publication date
GB2567372A (en) 2019-04-10
WO2018052684A1 (en) 2018-03-22
GB201901910D0 (en) 2019-04-03
US20180074824A1 (en) 2018-03-15

Similar Documents

Publication Publication Date Title
CN109564509A (zh) 外积引擎
US11042373B2 (en) Computation engine that operates in matrix and vector modes
US10877754B2 (en) Matrix computation engine
Nurvitadhi et al. Accelerating binarized neural networks: Comparison of FPGA, CPU, GPU, and ASIC
US20220350776A1 (en) Coprocessors with Bypass Optimization, Variable Grid Architecture, and Fused Vector Operations
JPH05502125A (ja) 後入れ先出しスタックを備えるマイクロプロセッサ、マイクロプロセッサシステム、及び後入れ先出しスタックの動作方法
US20210181974A1 (en) Systems and methods for low-latency memory device
Lee et al. ComPEND: Computation pruning through early negative detection for ReLU in a deep neural network accelerator
Kim et al. Silent-PIM: Realizing the processing-in-memory computing with standard memory requests
CN114341802A (zh) 用于执行存储器内处理操作的方法及相关存储器装置和系统
Lee et al. Design of processing-“inside”-memory optimized for dram behaviors
Lee et al. Buffered compares: Excavating the hidden parallelism inside DRAM architectures with lightweight logic
US10846091B2 (en) Coprocessor with distributed register
Hazarika et al. Survey on memory management techniques in heterogeneous computing systems
US10990401B2 (en) Computation engine with strided dot product
Paik et al. Achieving the performance of all-bank in-DRAM PIM with standard memory interface: Memory-computation decoupling
US10831488B1 (en) Computation engine with extract instructions to minimize memory access
US10970078B2 (en) Computation engine with upsize/interleave and downsize/deinterleave options
Kah et al. High performance linear equation solver using nvidia gpus
US10969858B2 (en) Operation processing controlled according to difference in current consumption
Yu Heterogeneous Monolithic 3D and FinFET Architectures for Energy-efficient Computing
Jin Memory Interface Synthesis for FPGA-Based Computing

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
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20190402

WD01 Invention patent application deemed withdrawn after publication