CN108269226B - 用于处理稀疏数据的装置和方法 - Google Patents

用于处理稀疏数据的装置和方法 Download PDF

Info

Publication number
CN108269226B
CN108269226B CN201711479748.4A CN201711479748A CN108269226B CN 108269226 B CN108269226 B CN 108269226B CN 201711479748 A CN201711479748 A CN 201711479748A CN 108269226 B CN108269226 B CN 108269226B
Authority
CN
China
Prior art keywords
accelerator
field
instruction
processor
vector
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.)
Active
Application number
CN201711479748.4A
Other languages
English (en)
Other versions
CN108269226A (zh
Inventor
E.努尔维塔希
Y.王
D.T.马尔
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 CN108269226A publication Critical patent/CN108269226A/zh
Application granted granted Critical
Publication of CN108269226B publication Critical patent/CN108269226B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2111/00Details relating to CAD techniques
    • G06F2111/06Multi-objective optimisation, e.g. Pareto optimisation using simulated annealing [SA], ant colony algorithms or genetic algorithms [GA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

本申请涉及用于处理稀疏数据的加速器的装置和方法。例如,一个实施例包括在其上存储有程序代码的机器可读介质,所述程序代码当由处理器执行时使处理器执行以下的操作:鉴于加速器架构模板来分析与目标加速器相关联的输入图形程序代码和参数;响应性地将参数映射到架构模板上,以实现对加速器架构模板的定制;和基于应用于加速器架构模板的参数的所确定映射来生成目标加速器的硬件描述表示。

Description

用于处理稀疏数据的装置和方法
技术领域
本发明大体上涉及计算机处理器和加速器的领域。更具体地说,本发明涉及用于处理稀疏数据的装置和方法。
背景技术
图形分析依赖于图形算法来提取关于表示为图形的数据之间的关系的知识。图形数据(来自诸如社交媒体之类的源)的激增导致了对图形分析的强烈需求和广泛使用。因此,能够尽可能高效地进行图形分析是至关重要的。
存在现有的图形分析框架,但它们主要是软件框架(即,在GPGPU的CPU上运行)。对于将图形算法映射到定制硬件的有限图形框架,其目标硬件加速器架构不是基于广义稀疏矩阵向量乘的。存在现有的稀疏矩阵乘法硬件加速器,但它们不支持可定制性以允许图形算法的映射。
附图说明
可以结合以下附图从下面的详细描述中获得对本发明更好的理解,其中:
图1A和1B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图;
图2A-D是图示根据本发明的实施例的示例性特定向量友好指令格式的框图;
图3是根据本发明的一个实施例的寄存器架构的框图;和
图4A是图示根据本发明的实施例的示例性有序取出、解码、收回(retire)流水线以及示例性寄存器重命名、无序发布/执行流水线两者的框图;
图4B是图示根据本发明的实施例的要在处理器中包括的有序取出、解码、收回核和示例性寄存器重命名、无序发布/执行架构核两者的框图;
图5A是单个处理器核连同其到管芯上互连网络的连接的框图;
图5B图示了根据本发明的实施例的图5A中的处理器核的部分的扩展视图;
图6是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图;
图7图示了根据本发明的一个实施例的系统的框图;
图8图示了根据本发明的实施例的第二系统的框图;
图9图示了根据本发明的实施例的第三系统的框图;
图10图示了根据本发明的实施例的片上系统(SoC)的框图;
图11图示了根据本发明的实施例的对比将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;
图12图示了可以在其上实现本发明的实施例的架构;
图13图示了用于处理稀疏数据的架构的一个实施例;
图14图示了在一个实施例中采用的不同的稀疏数据操作;
图15a-c图示了一个实施例中的用于矩阵数据的格式;
图16a-c图示了用于在一个实施例中执行的操作的伪代码;
图17图示了一个实施例中的处理器元件架构;
图18a-b图示了根据一个实施例的数据流;
图19a-e图示了根据一个实施例的绘图数据和程序代码;
图20图示了在一个实施例中采用的模板映射、验证和自动调整;
图21图示了数据管理单元和处理器元件架构的一个实施例;
图22图示了根据本发明的一个实施例的方法;
图23a-b图示了不同的类别和调整考虑;和
图24图示了根据本发明的一个实施例的方法的一个实施例。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员清楚明白的是,可以在没有这些具体细节中的一些的情况下实践本发明的实施例。在其他实例中,以框图形式示出了公知的结构和设备,以避免模糊本发明的实施例的基本原理。
示例性处理器架构和数据类型
指令集包括一个或多个指令格式。给定指令格式还限定了各种字段(位数、位的位置),用以除其他事物之外尤其指定要执行的操作(操作码)和要在其上执行该操作的(多个)操作数。一些指令格式通过指令模板(或子格式)的限定进一步分解。例如,给定指令格式的指令模板可以被限定为具有指令格式的字段的不同子集(所包括的字段通常采用相同的次序,但是至少一些具有不同的位位置,因为存在较少的所包括的字段)和/或被限定为具有不同解释的给定字段。因此,ISA的每个指令使用给定指令格式(以及如果限定,则在该指令格式的指令模板中的给定一个中)来表达,并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定的操作码和指令格式,指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段;并且在指令流中的该ADD指令的出现将在选择特定操作数的操作数字段中具有特定的内容。已经发行和/或公布了一组SIMD扩展,称为高级向量扩展(AVX)(AVX1和AVX2)并使用向量扩展(VEX)编码方案(例如,参见Intel®64和IA-32架构软件开发人员手册,2011年10月;并参见Intel®高级向量扩展编程参考,2011年6月)。
示例性指令格式
本文描述的(多个)指令的实施例可以以不同的格式来体现。此外,下面详述了示例性系统、架构和流水线。(多个)指令的实施例可以在这样的系统、架构和流水线上执行,但不限于那些详述的。
A.通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作这二者的实施例,但是替代实施例仅使用向量操作向量友好指令格式。
图1A-1B是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图1A是图示根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框图;而图1B是图示根据本发明的实施例的通用向量友好指令格式和其B类指令模板的框图。具体而言,针对其限定了A类和B类指令模板的通用向量友好指令格式100,A类和B类两者都包括无存储器访问105指令模板和存储器访问120指令模板。在向量友好指令格式的上下文中的术语“通用”指的是指令格式不绑定到任何特定指令集。
虽然将描述其中向量友好指令格式支持以下内容的本发明的实施例:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(并且因此,64字节向量由16个双字大小元素构成,或者替代地由8个四字大小元素构成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节向量操作数长度(或大小);和具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节向量操作数长度(或大小);但是替代实施例可以支持具有更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同向量操作数大小(例如,256字节向量操作数)。
图1A中的A类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问全部舍入(round)控制类型操作110指令模板和无存储器访问数据变换类型操作115指令模板;和2)在存储器访问120指令模板内,示出了存储器访问临时125指令模板和存储器访问非临时130指令模板。图1B中的B类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问写入掩码控制部分舍入控制类型操作112指令模板和无存储器访问写入掩码控制vsize类型操作117指令模板;和2)在存储器访问120指令模板内,示出了存储器访问写入掩码控制127指令模板。
通用向量友好指令格式100包括下面以图1A-1B所示的次序列出的以下字段。
格式字段140——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式和因此在指令流中的向量友好指令格式中的指令的出现。因此,该字段在其对于仅具有通用向量友好指令格式的指令集不需要的意义上是可选的。
基本操作字段142——其内容区分不同的基本操作。
寄存器索引字段144——其内容直接地或通过地址生成来指定源和目的地操作数的位置,无论它们是在寄存器中还是在存储器中。这些包括足够数量的位以从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择N个寄存器。虽然在一个实施例中,N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个还充当目的地;可以支持多达三个源,其中这些源中的一个还充当目的地;可以支持多达两个源和一个目的地)。
修改符(modifier)字段146——其内容区分通用向量指令格式中的指定存储器访问的指令的出现与不进行此的那些指令的出现;即在无存储器访问105指令模板和存储器访问120指令模板之间。存储器访问操作向存储器分层读取和/或写入(在一些情况下使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不进行此(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段还在三种不同的方式之间进行选择以执行存储器地址计算,但是替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
扩充操作字段150——其内容区分除了基本操作之外还要执行各种不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类字段168、ɑ字段152和β字段154。扩充操作字段150允许在单个指令而不是2、3、或4个指令中执行共同操作组。
缩放字段160——其内容允许对用于存储器地址生成(例如,用于使用2缩放*索引+基础的地址生成)的索引字段的内容的缩放。
移位字段162A——其内容被用作存储器地址生成(例如,用于使用2缩放*索引+基础+移位的地址生成)的部分。
移位因数字段162B(注意,移位字段162A直接在移位因数字段162B之上的并置指示使用一个或另一个)——其内容被用作地址生成的部分;其指定了将要通过存储器访问的大小(N)来缩放的移位因数——其中N是存储器访问中的字节数(例如,用于使用2缩放*索引+基础+缩放的移位的地址生成)。冗余低阶位被忽略,并且因此,移位因数字段的内容乘以存储器操作数总大小(N),以便生成要在计算有效地址中使用的最终移位。N的值由处理器硬件在运行时基于完整操作码字段174(稍后在本文描述)和数据操纵字段154C来确定。移位字段162A和移位因数字段162B在它们不被用于无存储器访问105指令模板的意义上是可选的,和/或不同实施例可以实现这两个中的仅一个或不实现这两个。
数据元素宽度字段164——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其他实施例中仅针对一些指令)。该字段在如果支持仅一个数据元素宽度和/或使用操作码的某个方面支持多个数据元素宽度则该字段不需要的意义上是可选的。
写入掩码字段170——其内容在每个数据元素位置基础上控制目的地向量操作数中的数据元素位置是否反映基本操作和扩充操作的结果。A类指令模板支持合并-写入掩蔽,而B类指令模板支持合并-以及归零-写入掩蔽这二者。当合并时,向量掩码允许在任何操作(由基本操作和扩充操作所指定)的执行期间保护目的地中的任何元素集免于更新;在另一个实施例中,在其中对应的掩码位具有0的情况下,保留目的地的每个元素的旧值。作为对比,当归零时,向量掩码允许在任何操作(由基本操作和扩充操作所指定)的执行期间归零目的地中的任何元素集;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置为0。该功能的子集是控制正在执行的操作的向量长度(即被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不必要一定是连续的。因此,写入掩码字段170允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了其中写入掩码字段170的内容选择包含要使用的写入掩码的多个写入掩码寄存器中的一个(并且因此写入掩码字段170的内容间接地标识将要执行的那个掩蔽)的本发明的实施例,但作为代替或另外的替代实施例允许掩码写入字段170的内容直接指定要执行的掩蔽。
立即字段172——其内容允许立即的指定。该字段在其不存在于不支持立即的通用向量友好格式的实现中并且其不存在于不使用立即的指令中的意义上是可选的。
类字段168——其内容在不同指令类之间进行区分。参考图1A-B,该字段的内容在A类和B类指令之间选择。在图1A-B中,圆角方形用于指示在字段中存在特定值(例如,图1A-B中分别用于类字段168的A类168A和B类168B)。
A类的指令模板
在A类的非存储器访问105指令模板的情况下,ɑ字段152被解释为RS字段152A,其内容区分要执行不同的扩充操作类型中的哪一个(例如,舍入152A.1和数据变换152A.2分别被指定用于无存储器访问舍入类型操作110和无存储器访问数据变换类型操作115指令模板),而β字段154区分指定类型的哪个操作将要被执行。在无存储器访问105指令模板中,缩放字段160、移位字段162A和移位缩放字段162B不存在。
无存储器访问指令模板——全部舍入控制类型操作
在无存储器访问全部舍入控制类型操作110指令模板中,β字段154被解释为其(多个)内容提供静态舍入的舍入控制字段154A。虽然在本发明的所描述实施例中,舍入控制字段154A包括抑制所有浮点异常(SAE)字段156和舍入操作控制字段158,但是替代实施例可以支持可以将这两个概念编码到相同的字段中或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有舍入操作控制字段158)。
SAE字段156——其内容区分是否禁用异常事件报告;当SAE字段156的内容指示抑制被启用时,给定指令不报告任何种类的浮点异常标志,并且不引起任何浮点异常处理程序。
舍入操作控制字段158——其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和舍入到最近( Round-to-nearest))。因此,舍入操作控制字段158允许在每个指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段150的内容覆写寄存器值。
无存储器访问指令模板——数据变换类型操作
在无存储器访问数据变换类型操作115指令模板中,β字段154被解释为数据变换字段154B,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、调配(swizzle)、广播)。
在A类的存储器访问120指令模板的情况下,α字段152被解释为逐出提示字段152B,其内容区分要使用逐出提示中的哪一个(在图1A中,临时152B.1和非临时152B.2分别被指定用于存储器访问临时125指令模板和存储器访问非临时130指令模板),而β字段154被解释为数据操纵字段154C,其内容区分要执行多个数据操纵操作(也称为基元)中的哪一个(例如,无操纵;广播;对源的上转换;以及对目的地的下转换)。存储器访问120指令模板包括缩放字段160以及可选地包括移位字段162A或移位缩放字段162B。
向量存储器指令利用转换支持来执行从存储器的向量加载和向存储器的向量储存。与常规向量指令一样,向量存储器指令以逐数据元素的方式将数据从/向存储器传送,其中实际传送的元素由选择为写入掩码的向量掩码的内容规定。
存储器访问指令模板——临时
临时数据是可能被重新使用快到足以受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略提示。
存储器访问指令模板——非临时
非临时数据是不太可能被重新使用快到足以受益于在第一级高速缓存中高速缓存的数据,并且应当被给予用于逐出的优先级。然而,这是提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略提示。
B类的指令模板
在B类的指令模板的情况下,ɑ字段152被解释为写入掩码控制(Z)字段152C,其内容区分由写入掩码字段170控制的写入掩蔽应当是合并还是归零。
在B类的非存储器访问105指令模板的情况下,β字段154的一部分被解释为RL字段157A,其内容区分要执行不同扩充操作类型中的哪一个(例如,舍入157A.1和向量长度(VSIZE)157A.2分别被指定用于无存储器访问写入掩码控制部分舍入控制类型操作112指令模板和无存储器访问写入掩码控制VSIZE类型操作117指令模板),而β字段154的其余部分区分要执行指定类型的操作的哪一个。在无存储器访问105指令模板中,缩放字段160、移位字段162A和移位缩放字段162B不存在。
在无存储器访问写入掩码控制部分舍入控制类型操作110指令模板中,β字段154的其余部分被解释为舍入操作字段159A,并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引起任何浮点异常处理程序)。
舍入操作控制字段159A——正如舍入操作控制字段158,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和舍入到最近)。因此,舍入操作控制字段159A允许在每个指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段150的内容覆写寄存器值。
在无存储器访问写入掩码控制VSIZE类型操作117指令模板中,β字段154的其余部分被解释为向量长度字段159B,其内容区分要在多个数据向量长度中的哪一个(例如,128、256或512字节)上执行。
在B类的存储器访问120指令模板的情况下,β字段154的一部分被解释为广播字段157B,其内容区分是否要执行广播类型数据操纵操作,而β字段154的其余部分被解释为向量长度字段159B。存储器访问120指令模板包括缩放字段160并且可选地包括移位字段162A或移位缩放字段162B。
关于通用向量友好指令格式100,完整操作码字段174被示出为包括格式字段140、基本操作字段142和数据元素宽度字段164。虽然示出了其中完整操作码字段174包括所有这些字段的一个实施例,但是完整操作码字段174在不支持所有这些字段的实施例中包括少于所有这些字段。完整操作码字段174提供操作代码(操作码)。
扩充操作字段150、数据元素宽度字段164和写入掩码字段170允许在每个指令的基础上以通用向量友好指令格式指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建类型化的指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在A类和B类内所见的各种指令模板在不同的情况下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可以支持仅A类、仅B类或这两类。例如,意图用于通用计算的高性能通用无序核可以支持仅B类,主要意图用于图形和/或科学(吞吐量)计算的核可以支持仅A类,并且意图用于两者的核可以支持两者(当然,具有来自两个类的模板和指令的某个混合但是并非来自两个类的所有模板和指令的核在本发明的范围内)。此外,单个处理器可以包括多个核,其所有都支持相同的类,或者其中不同的核支持不同的类。例如,在具有分开的图形和通用核的处理器中,主要意图用于图形和/或科学计算的图形核中的一个可以支持仅A类,而通用核中的一个或多个可以是高性能通用核,其中无序执行和寄存器重命名意图用于仅支持B类的通用计算。不具有分开的图形核的另一个处理器可以再包括一个通用有序或无序核,其支持A类和B类两者。当然,在本发明的不同实施例中,来自一个类的特征也可以在另一个类中实现。以高级语言编写的程序将被放置(例如,恰好以时间编译或静态编译)为各种不同的可执行形式,包括:1)仅具有由目标处理器支持以用于执行的(多个)类的指令的形式;或2)具有替代例程并且具有控制流代码的形式,替代例程使用所有类的指令的不同组合来编写,控制流代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。
B.示例性特定向量友好指令格式
图2是图示根据本发明的实施例的示例性特定向量友好指令格式的框图。图2示出了特定向量友好指令格式200,其在其指定了字段的位置、大小、解释和次序以及用于那些字段中的一些的值的意义上是特定的。特定向量友好指令格式200可以用于扩展x86指令集,并且因此一些字段与现有的x86指令集及其扩展(例如,AVX)中使用的那些字段类似或相同。该格式与现有x86指令集以及扩展的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、移位字段和立即字段保持一致。图示了来自图2的字段映射到其中的来自图1的字段。
应当理解的是,虽然为了说明的目的,在通用向量友好指令格式100的上下文中参考特定向量友好指令格式200描述了本发明的实施例,但是本发明不限于特定向量友好指令格式200,声明之处则除外。例如,通用向量友好指令格式100考虑用于各种字段的各种可能的大小,而特定向量友好指令格式200被示出为具有特定大小的字段。以具体示例的方式,虽然数据元素宽度字段164被图示为特定向量友好指令格式200中的一位字段,但是本发明不受此限制(即,通用向量友好指令格式100考虑数据元素宽度字段164的其他大小)。
通用向量友好指令格式100包括下面以图2A中图示的次序列出的以下字段。
EVEX前缀(字节0-3)202——以四字节形式编码。
格式字段140(EVEX字节0,位[7:0])——第一字节(EVEX字节0)是格式字段140,并且其包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
第二-第四字节(EVEX字节1-3)包括提供特定能力的多个位字段。
REX字段205(EVEX字节1,位[7-5])——包括EVEX.R位字段(EVEX字节1,位[7]-R)、EVEX.X位字段(EVEX字节1,位[6]-X)和157BEX字节1,位[5]-B)。EVEX.R、EVEX.X和EVEX.B位字段与对应的VEX位字段提供相同的功能,并且使用1的补码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对寄存器索引的较低三位进行编码,如本领域中已知的(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb可以通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX'字段110——这是REX'字段110的第一部分并且是用于对扩展的32个寄存器组中较上的16个或较下的16个进行编码的EVEX.R'位字段(EVEX字节1,位[4]-R')。在本发明的一个实施例中,该位以及如下所指示的其他位以位反转的格式存储,以(在公知的x8632位模式下)与BOUND指令区分,其实际操作码字节为62,但是在MOD R/M字段(下述)中不接受MOD字段中的值11;本发明的替代实施例不以反转的格式存储其以及下面其他指示的位。值1用于编码较下的16个寄存器。换句话说,R'Rrrr通过组合EVEX.R'、EVEX.R和来自其他字段的其他RRR来形成。
操作码映射字段215(EVEX字节1,位[3:0]-mmmm)——其内容编码隐式前导操作码字节(0F、0F38或0F3)。
数据元素宽度字段164(EVEX字节2,位[7]-W)——由记号EVEX.W表示。EVEX.W用于限定数据类型的粒度(大小)(32位数据元素或64位数据元素)。
EVEX.vvvv 220(EVEX字节2,位[6:3]-vvvv)——EVEX.vvvv的作用可以包括以下:1)EVEX.vvvv编码第一源寄存器操作数,其以反转的(1的补码)形式指定,并且对于具有2个或更多个源操作数的指令是有效的;2)EVEX.vvvv编码目的地寄存器操作数,其针对某些向量位移以1的补码形式指定;或3)EVEX.vvvv不编码任何操作数,该字段是预留的,并且应包含1111b。因此,EVEX.vvvv字段220编码以反转的(1的补码)形式存储的第一源寄存器指定符的4个低阶位。取决于指令,使用额外的不同的EVEX位字段来将指定符大小扩展到32个寄存器。
EVEX.U 168类字段(EVEX字节2,位[2]-U)——如果EVEX.U=0,则其指示A类或EVEX.U0;如果EVEX.U=1,则其指示B类或EVEX.U1。
前缀编码字段225(EVEX字节2,位[1:0]-pp)——提供用于基本操作字段的附加位。除了以EVEX前缀格式提供对传统SSE指令的支持之外,这还具有压缩SIMD前缀的益处(而不需要一个字节来表达SIMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持以传统格式和以EVEX前缀格式两者使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时在被提供给解码器的PLA之前被扩展到传统SIMD前缀中(因此PLA可以在没有修改的情况下执行这些传统指令的传统和EVEX格式两者)。虽然较新的指令可以直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性而以类似的方式扩展,但是允许由这些传统的SIMD前缀指定不同的含义。替代实施例可以重新设计PLA以支持2位SIMD前缀编码,并且因此不需要扩展。
ɑ字段152(EVEX字节3,位[7]-EH;也被称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制和EVEX.N;也用α图示)——如前所述,该字段是上下文特定的。
β字段154(EVEX字节3,位[6:4]-SSS,也被称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ图示)——如前所述,该字段是上下文特定的。
REX'字段110——这是REX'字段的剩余部分,并且是EVEX.V'位字段(EVEX字节3,位[3]-V'),其可以用于编码扩展的32个寄存器组中的较上16个或较下16个。该位以位反转的格式存储。值1用于编码较下的16个寄存器。换句话说,V'VVVV通过组合EVEX.V'、EVEX.vvvv来形成。
写入掩码字段170(EVEX字节3,位[2:0]-kkk)——其内容如前所述那样指定写入掩码寄存器中的寄存器的索引。在本发明的一个实施例中,具体值EVEX.kkk=000具有特殊的行为,其暗示没有写入掩码被用于特定的指令(这可以以各种方式来实现,各种方式包括使用硬连线到所有一或绕过掩蔽硬件的硬件的写入掩码)。
真实操作码字段230(字节4)也被称为操作码字节。操作码的一部分在该字段中指定。
MOD R/M字段240(字节5)包括MOD字段242、Reg字段244和R/M字段246。如前所述,MOD字段242的内容在存储器访问和非存储器访问操作之间区分。Reg字段244的作用可以总结为两种情况:编码目的地寄存器操作数或源寄存器操作数,或者被视为操作码扩展并且不用于编码任何指令操作数。R/M字段246的作用可以包括以下:编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
缩放、索引、基础(SIB)字节(字节6)——如前所述,缩放字段150的内容被用于存储器地址生成。SIB.xxx 254和SIB.bbb 256——这些字段的内容先前已经就寄存器索引Xxxx和Bbbb被引用。
移位字段162A(字节7-10)——当MOD字段242包含10时,字节7-10是移位字段162A,并且其工作为与传统32位移位(disp32)相同并且以字节粒度工作。
移位因数字段162B(字节7)——当MOD字段242包含01时,字节7是移位因数字段162B。该字段的位置与传统x86指令集8位移位(disp8)的位置相同,其以字节粒度工作。由于disp8是有符号扩展的,所以它只能寻址-128到127字节偏移量之间;按照64字节高速缓存行,disp8使用8位,其可以设置为只有四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32需要4字节。与disp8和disp32形成对照,移位因数字段162B是disp8的重新解释;当使用移位因数字段162B时,实际移位通过移位因数字段的内容乘以存储器操作数访问的大小(N)来确定。这种类型的移位被称为disp8*N。这减少了平均指令长度(用于移位的单个字节,但具有大得多的范围)。这样的压缩移位基于有效移位是存储器访问的粒度的倍数并且因此地址偏移量的冗余低阶位不需要被编码的假设。换句话说,移位因数字段162B代替传统x86指令集8位移位。因此,移位因数字段162B以与x86指令集8位移位相同的方式编码(因此在ModRM/SIB编码规则上没有变化),其中仅有的例外是disp8被过载到disp8*N。换句话说,在编码规则或编码长度方面没有变化,而是仅在硬件对移位值的解释方面存在变化(所述硬件需要按存储器操作数的大小来缩放移位以获得逐字节的地址偏移量)。
立即字段172如前所述那样操作。
完整操作码字段
图2B是图示根据本发明的一个实施例的构成完整操作码字段174的特定向量友好指令格式200的字段的框图。具体地,完整操作码字段174包括格式字段140、基本操作字段142和数据元素宽度(W)字段164。基本操作字段142包括前缀编码字段225、操作码映射字段215和真实操作码字段230。
寄存器索引字段
图2C是图示根据本发明的一个实施例的构成寄存器索引字段144的特定向量友好指令格式200的字段的框图。具体地,寄存器索引字段144包括REX字段205、REX'字段210、MODR/M.reg字段244、MODR/M.r/m字段246、VVVV字段220、xxx字段254、以及bbb字段256。
扩充操作字段
图2D是图示根据本发明的一个实施例的构成扩充操作字段150的特定向量友好指令格式200的字段的框图。当类(U)字段168包含0时,它表示EVEX.U0(A类168A);当它包含1时,它表示EVEX.U1(B类168B)。当U=0并且MOD字段242包含11(表示无存储器访问操作)时,ɑ字段152(EVEX字节3,位[7]-EH)被解释为rs字段152A。当rs字段152A包含1(舍入152A.1)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为舍入控制字段154A。舍入控制字段154A包括一位SAE字段156和两位舍入操作字段158。当rs字段152A包含0(数据变换152A.2)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为三位数据变换字段154B。当U=0并且MOD字段242包含00、01或10(表示存储器访问操作)时,ɑ字段152(EVEX字节3,位[7]-EH)被解释为逐出提示(EH)字段152B并且β字段154(EVEX字节3,位[6:4]-SSS)被解释为三位数据操纵字段154C。
当U=1时,ɑ字段152(EVEX字节3,位[7]-EH)被解释为写入掩码控制(Z)字段152C。当U=1并且MOD字段242包含11(表示无存储器访问操作)时,β字段154的一部分(EVEX字节3,位[4]-S0)被解释为RL字段157A;当其包含1(舍入157A.1)时,β字段154的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为舍入操作字段159A,而当RL字段157A包含0(VSIZE 157.A2)时,β字段154的其余部分(EVEX字节3,位[6-5]-S2-1)被解释为向量长度字段159B(EVEX字节3,位[6-5]-L1-0)。当U=1并且MOD字段242包含00、01或10(表示存储器访问操作)时,β字段154(EVEX字节3,位[6:4]-SSS)被解释为向量长度字段159B(EVEX字节3,位[6-5]-L1-0)和广播字段157B(EVEX字节3,位[4]-B)。
C.示例性寄存器架构
图3是根据本发明的一个实施例的寄存器架构300的框图。在所图示的实施例中,存在32个向量寄存器310,其是512位宽;这些寄存器被称为zmm0到zmm31。较低16个zmm寄存器的较低阶256位被叠加在寄存器ymm0-16上。较低16个zmm寄存器的较低阶128位(ymm寄存器的较低阶128个位)被叠加在寄存器xmm0-15上。特定向量友好指令格式200在这些叠加的寄存器堆上操作,如下表所图示。
换句话说,向量长度字段159B在最大长度与一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半;并且没有向量长度字段159B的指令模板在最大向量长度上操作。此外,在一个实施例中,特定向量友好指令格式200的B类指令模板在拼装的或标量单/双精度浮点数据和拼装的或标量整数数据上操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;较高阶数据元素位置与它们在指令之前保持相同或者取决于实施例归零。
写入掩码寄存器315——在所图示的实施例中,存在8个写入掩码寄存器(k0至k7),每个大小为64位。在替代实施例中,写入掩码寄存器315大小是16位。如前所述,在本发明的一个实施例中,向量掩码寄存器k0不能用作写入掩码;当通常将指示k0的编码被用于写入掩码时,它选择0xFFFF的硬连线写入掩码,从而有效地针对该指令禁用写入掩蔽。
通用寄存器325——在所图示的实施例中,存在十六个64位通用寄存器,其与现有x86寻址模式一起使用以寻址存储器操作数。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15引用。
标量浮点堆叠寄存器堆(x87堆叠)345,在其上MMX拼装的整数平面寄存器堆350被混叠——在所图示的实施例中,x87堆叠是用于使用x87指令集扩展对32/64/80位浮点数据执行标量浮点运算的八元素堆叠;而MMX寄存器用于对64位拼装的整数数据执行操作,以及用于保持用于在MMX和XMM寄存器之间执行的一些操作的操作数。
本发明的替代实施例可以使用更宽或更窄的寄存器。此外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
D.示例性核架构、处理器和计算机架构
处理器核可以以不同的方式、出于不同的目的以及在不同的处理器中实现。例如,这种核的实现可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)主要意图用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包括:1)包括意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核的CPU;和2)包括主要意图用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这种不同的处理器导致不同的计算机系统架构,其可以包括:1)与CPU在分离的芯片上的协处理器;2)与CPU在相同的封装中的分离的管芯上的协处理器;3)与CPU在相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或称为专用核);以及4)片上系统,其可以在相同的管芯上包括所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、上述协处理器以及附加功能。接下来描述示例性核架构,其后跟着示例性处理器和计算机架构的描述。
图4A是图示根据本发明的实施例的示例性有序流水线和示例性寄存器重命名无序发布/执行流水线两者的框图。图4B是图示根据本发明的实施例的要在处理器中包括的示例性寄存器重命名无序发布/执行架构核与有序架构核的示例性实施例两者的框图。图4A-B中的实线框图示有序流水线和有序核,而虚线框的可选添加图示寄存器重命名无序发布/执行流水线和核。假定有序方面是无序方面的子集,则将描述无序方面。
在图4A中,处理器流水线400包括取出阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也被称为调遣或发布)阶段412、寄存器读取/存储器读取阶段414、执行阶段416、写回/存储器写入阶段418、异常处理阶段422和提交阶段424。
图4B示出处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且两者都耦合到存储器单元470。核490可以为精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或替代核类型。作为又另一个选项,核490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核等。
前端单元430包括耦合到指令高速缓存单元434的分支预测单元432,所述指令高速缓存单元434耦合到指令翻译后备缓冲器(TLB)436,所述指令翻译后备缓冲器(TLB)436耦合到指令取出单元438,所述指令取出单元438耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且生成一个或多个微操作、微码入口点、微指令、其他指令或其他控制信号作为输出,它们被从原始指令解码或者以其他方式反映原始指令或被从原始指令导出。解码单元440可以使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核490包括微码ROM或包括(例如,在解码单元440中或以其他方式在前端单元430内)存储用于某些宏指令的微码的其他介质。解码单元440耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦合到收回单元454和一组一个或多个调度器单元456的重命名/分配器单元452。(多个)调度器单元456表示任何数量的不同的调度器,包括预留站、中央指令窗口等。(多个)调度器单元456耦合到(多个)物理寄存器堆(多个)单元458。(多个)物理寄存器堆单元458中的每一个表示一个或多个物理寄存器堆,其中的不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、拼装整数、拼装浮点、向量整数、向量浮点、状态(例如,指令指针,其是要执行的下一个指令的地址)等。在一个实施例中,(多个)物理寄存器堆单元458包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆(多个)单元458被收回单元454重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(多个)重新排序缓冲器和(多个)收回寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)收回寄存器堆;使用寄存器映射和寄存器池等)。收回单元454和(多个)物理寄存器堆(多个)单元458耦合到(多个)执行集群460。(多个)执行集群460包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以执行各种操作(例如,位移、加法、减法、乘法)以及在各种类型的数据(例如,标量浮点、拼装整数、拼装浮点、向量整数、向量浮点)上执行。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或者所有都执行所有功能的多个执行单元。(多个)调度器单元456、(多个)物理寄存器堆(多个)单元458和(多个)执行集群460被示出为可能是多个,因为某些实施例创建用于某些类型的数据/操作的分开的流水线(例如,标量整数流水线、标量浮点/拼装整数/拼装浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其每个均具有其自身的调度器单元、(多个)物理寄存器堆单元、和/或执行集群——并且在分开的存储器访问流水线的情况下,实现了其中仅该流水线的执行集群具有(多个)存储器访问单元464的某些实施例。还应当理解的是,在使用分开的流水线的情况下,这些流水线中的一个或多个可能是无序发布/执行,并且其余部分是有序的。
该组存储器访问单元464耦合到存储器单元470,所述存储器单元470包括数据TLB单元472,数据TLB单元472耦合到数据高速缓存单元474,数据高速缓存单元474耦合到级别2(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元和存储数据单元,其每个都耦合到存储器单元470中的数据TLB单元472。指令高速缓存单元434还耦合到存储器单元470中的级别2(L2)高速缓存单元476。L2高速缓存单元476耦合到一个或多个其他级别的高速缓存并且最终耦合到主存储器。
以示例的方式,示例性寄存器重命名无序发布/执行核架构可以如下那样实现流水线400:1)指令取出438执行取出和长度解码阶段402和404;2)解码单元440执行解码阶段406;3)重命名/分配器单元452执行分配阶段408和重命名阶段410;4)(多个)调度器单元456执行调度阶段412;5)(多个)(多个)物理寄存器堆(多个)单元458和存储器单元470执行寄存器读取/存储器读取阶段414;执行集群460执行执行阶段416;6)存储器单元470和(多个)物理寄存器堆(多个)单元458执行写回/存储器写入阶段418;7)各种单元可以涉及异常处理阶段422;以及8)收回单元454和(多个)物理寄存器堆(多个)单元458执行提交阶段424。
核490可以支持一个或多个指令集(例如,x86指令集(具有已经添加有较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS 科技公司的MIPS指令集;加利福尼亚州桑尼维尔的ARM 控股公司的ARM指令集(具有可选的附加扩展,诸如NEON),包括本文描述的(多个)指令。在一个实施例中,核490包括支持拼装数据指令集扩展(例如,AVX1,AVX2)的逻辑,由此允许使用拼装数据来执行由许多多媒体应用所使用的操作。
应当理解,核可以支持多线程(执行两组或更多组并行的操作或线程),并且可以以各种方式来这样做,包括时间分片多线程、同时多线程(其中单个物理核提供用于物理核同时进行多线程的每个线程的逻辑核)或其组合(例如,时间分片取出和解码以及之后的同时多线程,诸如在Intel®超线程技术中)。
虽然寄存器重命名在无序执行的上下文中描述,但是应当理解,寄存器重命名可以在有序架构中使用。虽然处理器的所图示实施例还包括分开的指令和数据高速缓存单元434/474和共享L2高速缓存单元476,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如级别1(L1)内部高速缓存、或者多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。替代地,所有的高速缓存可以在核和/或处理器外部。
图5A-B图示更具体的示例性有序核架构的框图,所述核将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核)中的一个。取决于应用,逻辑块通过具有一些固定功能逻辑、存储器I/O接口以及其他必要I/O逻辑的高带宽互连网络(例如,环形网络)进行通信。
图5A是根据本发明的实施例的单个处理器核以及其到管芯上的互连网络502的连接及其级别2(L2)高速缓存的局部子集504的框图。在一个实施例中,指令解码器500支持具有拼装数据指令集扩展的x86指令集。L1高速缓存506允许低延时访问以将存储器高速缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元508和向量单元510使用分开的寄存器组(分别是标量寄存器512和向量寄存器514),并且在它们之间传送的数据被写入到存储器,然后从级别1(L1)高速缓存506中读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器组或包括允许数据在不被写入和读回的情况下在两个寄存器堆之间传送的通信路径)。
L2高速缓存的局部子集504是全局L2高速缓存的一部分,全局L2高速缓存被划分为分开的局部子集,每个处理器核一个。每个处理器核具有到其自身的L2高速缓存的局部子集504的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集504中,并且可以与访问其自身的局部L2高速缓存子集的其他处理器核并行地快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集504中,并且从其他子集冲洗(flush),如果必要的话。环形网络确保对共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径按每个方向是1012位宽的。
图5B是根据本发明的实施例的图5A中的处理器核的一部分的扩展视图。图5B包括L1高速缓存504的L1数据高速缓存506A部分以及关于向量单元510和向量寄存器514的更多细节。特别地来讲,向量单元510是16宽的向量处理单元(VPU)(参见16宽的ALU 528),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元520调配寄存器输入,利用数字转换单元522A-B进行数字转换,以及利用复制单元524在存储器输入上进行复制。写入掩码寄存器526允许预测结果向量写入。
图6是根据本发明的实施例的处理器600的框图,所述处理器600可以具有多于一个核,可以具有集成存储器控制器,并且可以具有集成图形。图6中的实线框图示了具有单个核602A、系统代理610、一组一个或多个总线控制器单元616的处理器600,而虚线框的可选添加图示了具有多个核602A-N、系统代理单元610中的一组一个或多个集成存储器控制器单元614以及专用逻辑608的替代处理器600。
因此,处理器600的不同实现可以包括:1)CPU,CPU具有的专用逻辑608是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且CPU具有的核602A-N是一个或多个通用核(例如,通用有序核、通用无序核、两者的组合);2)协处理器,协处理器据具有的核602A-N是主要意图用于图形和/或科学(吞吐量)的大量专用核;以及3)具有的核602A-N是大量通用有序核的协处理器。因此,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协处理器(包括30个或更多个核)、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器600可以是使用诸如例如BiCMOS、CMOS或NMOS之类的多种工艺技术中的任何一种的一个或多个衬底的一部分和/或可以被实现在所述一个或多个衬底上。
存储器层级包括核内的一个或多个级别的高速缓存、一组或一个或多个共享高速缓存单元606、以及耦合到该组集成存储器控制器单元614的外部存储器(未示出)。该组共享高速缓存单元606可以包括一个或多个中间级别高速缓存(诸如级别2(L2)、级别3(L3)、级别4(L4)或其他级别的高速缓存)、最后级别高速缓存(LLC)和/或其组合。虽然在一个实施例中,基于环形的互连单元612互连集成图形逻辑608、该组共享高速缓存单元606和系统代理单元610/(多个)集成存储器控制器单元614,但是替代实施例可以使用任何数量的公知的用于互连这样的单元的技术。在一个实施例中,在一个或多个高速缓存单元606和核602-A-N之间维持一致性。
在一些实施例中,一个或多个核602A-N能够进行多线程。系统代理610包括协调和操作核602A-N的那些组件。系统代理单元610可以包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调节核602A-N和集成图形逻辑608的功率状态所需的逻辑和组件。显示单元是用于驱动一个或多个外部连接的显示器。
核602A-N就架构指令集而言可以是同构的或异构的;也就是说,核602A-N中的两个或更多个可以能够执行相同的指令集,而其他可以能够仅执行该指令集的子集或不同的指令集。
图7-10是示例性计算机架构的框图。用于膝上型电脑、台式电脑、手持式PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备以及各种其他电子设备的现有技术中已知的其他系统设计和配置也是合适的。通常,能够并入如本文所公开的处理器和/或其他执行逻辑的种类巨多的系统或电子设备通常是合适的。
现在参考图7,示出了根据本发明的一个实施例的系统700的框图。系统700可以包括耦合到控制器中枢720的一个或多个处理器710、715。在一个实施例中,控制器中枢720包括图形存储器控制器中枢(GMCH)790和输入/输出中枢(IOH)750(其可能在分离的芯片上);GMCH 790包括存储器740和协处理器745耦合到其的存储器和图形控制器;IOH 750将输入/输出(I/O)设备760耦合到GMCH 790。替代地,存储器和图形控制器中的一者或两者集成在处理器内(如本文所述),存储器740和协处理器745直接耦合到处理器710和直接耦合到与IOH 750一起在单个芯片中的控制器中枢720。
附加处理器715的可选性质在图7中用虚线表示。每个处理器710、715可以包括本文描述的一个或多个处理核,并且可以是处理器600的某个版本。
存储器740可以是例如动态随机访问存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器中枢720经由诸如前端总线(FSB)之类的多点分支总线、诸如快速通道互连(QPI)之类的点到点接口、或类似的连接795与(多个)处理器710、715进行通信。
在一个实施例中,协处理器745是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。在一个实施例中,控制器中枢720可以包括集成图形加速器。
在物理资源710、715之间在包括架构、微架构、热、功耗特性等的优点的一系列度量方面可以存在各种差异。
在一个实施例中,处理器710执行控制一般类型的数据处理操作的指令。嵌入在指令中的可以是协处理器指令。处理器710将这些协处理器指令识别为应当由所附接的协处理器745执行的类型。因此,处理器710在协处理器总线或其他互连上向协处理器745发布这些协处理器指令(或表示协处理器指令的控制信号)。(多个)协处理器745接受并执行所接收的协处理器指令。
现在参考图8,示出了根据本发明的实施例的第一更具体示例性系统800的框图。如图8所示,多处理器系统800是点到点互连系统,并且包括经由点到点互连850耦合的第一处理器870和第二处理器880。处理器870和880中的每个可以是处理器600的某个版本。在本发明的一个实施例中,处理器870和880分别是处理器710和715,而协处理器838是协处理器745。在另一个实施例中,处理器870和880分别是处理器710协处理器745。
处理器870和880分别被示出为包括集成存储器控制器(IMC)单元872和882。处理器870还包括点到点(P-P)接口876和878作为其总线控制器单元的一部分;类似地,第二处理器880包括P-P接口886和888。处理器870、880可以使用P-P接口电路878、888经由点到点(P-P)接口850交换信息。如图8所示,IMC 872和882将处理器耦合到相应的存储器,即存储器832和存储器834,其可以是本地附接到相应处理器的主存储器的部分。
处理器870、880均可以使用点到点接口电路876、894、886、898经由单独的P-P接口852、854与芯片组890交换信息。芯片组890可以可选地经由高性能接口839与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在处理器中或者在两个处理器之外,又经由P-P互连与处理器连接,在处理器被置于低功率模式的情况下,使得处理器中的任一者或者两者的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组890可以经由接口896耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线或诸如PCI快速总线或另一个第三代I/O互连总线的总线,不过本发明的范围不受这样的限制。
如图8中所示,各种I/O设备814可以连同总线桥818一起耦合到第一总线816,总线桥818将第一总线816耦合到第二总线820。在一个实施例中,一个或多个附加处理器815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚计数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线820,包括例如键盘和/或鼠标822、通信设备827和存储单元828,诸如磁盘驱动器或可以包括指令/代码和数据830的其他大容量存储设备。此外,音频I/O 824可以耦合到第二总线820。注意,其他架构是可能的。例如,代替图8的点到点架构,系统可以实现多点分支总线或其他这样的架构。
现在参考图9,示出了根据本发明的实施例的第二更具体示例性系统900的框图。图8和9中的相似元件带有相似的附图标记,并且图8的某些方面从图9中省略,以便避免模糊图9的其他方面。
图9图示了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。因此,CL 872、882包括集成存储器控制器单元并且包括I/O控制逻辑。图9图示了不仅存储器832、834耦合到CL 872、882,而且I/O设备914也耦合到控制逻辑872、882。传统I/O设备915耦合到芯片组890。
现在参考图10,示出了根据本发明的实施例的SoC 1000的框图。图6中的相似元件带有相似的附图标记。此外,虚线框是更高级的SoC上的可选特征。在图10中,(多个)互连单元1002耦合到:应用处理器1010,其包括一组一个或多个核202A-N和(多个)共享高速缓存单元606;系统代理单元610;(多个)总线控制器单元616;(多个)集成存储器控制器单元614;一组或一个或多个协处理器1020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(SRAM)单元1030;直接存储器访问(DMA)单元1032;以及用于耦合到一个或多个外部显示器的显示单元1040。在一个实施例中,(多个)协处理器1020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的机制的实施例可以以硬件、软件、固件或这样的实现方法的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
诸如图8所示的代码830之类的程序代码可以被应用于输入指令以执行本文所描述的功能并且生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以以高级过程或面向对象编程语言来实现,以与处理系统进行通信。如果需要,程序代码也可以以汇编或机器语言来实现。实际上,本文描述的机制在范围方面不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释的语言。
至少一个实施例的一个或多个方面可以通过表示处理器内的各种逻辑的存储在机器可读介质上的代表性指令来实现,所述指令在由机器读取时使机器制造逻辑以执行本文所描述的技术。被称为“IP核”的这种表示可以被存储在有形机器可读介质上,并被供应给各种客户或制造设施以加载到实际制作逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非暂时性有形布置,包括存储介质,诸如硬盘、任何其他类型的盘(包括软盘、光盘、压缩盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)和磁光盘)、半导体设备(诸如只读存储器(ROM)、诸如动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)的随机访问存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM))、磁卡或光卡、或者适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂时性有形机器可读介质,非暂时性有形机器可读介质包含指令或包含设计数据(诸如硬件描述语言(HDL),其限定本文描述的结构、电路、装置、处理器和/或系统特征)的。这样的实施例也可以被称为程序产品。
在一些情况下,可以使用指令转换器来将来自源指令集的指令转换为目标指令集。例如,指令转换器可以翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形(morph)、模拟或以其他方式将指令转换为要由核处理的一个或多个其他指令。指令转换器可以以软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图11是根据本发明的实施例的对比将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所图示的实施例中,指令转换器是软件指令转换器,虽然替代地指令转换器可以以软件、固件、硬件或其各种组合来实现。图11示出了采用高级语言1102的程序可以使用x86编译器1104编译以生成x86二进制代码1106,其可以由具有至少一个x86指令集核的处理器1116本机地执行。具有至少一个x86指令集核的处理器1116表示可以通过兼容地执行或以其他方式处理如下内容来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能的任何处理器:(1)Intel x86指令集核的指令集的大量部分或(2)应用或其他软件的目标代码版本,其目标是在具有至少一个x86指令集核的Intel处理器上运行,以便得到与具有至少一个x86指令集核的Intel处理器基本上相同的结果。x86编译器1104表示编译器,该编译器可操作以生成x86二进制代码1106(例如,目标代码),其可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核的处理器1116上执行。类似地,图11示出了采用高级语言1102的程序可以使用替代指令集编译器1108编译以生成替代指令集二进制代码1110,其可以由不具有至少一个x86指令集核的处理器1114(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集的核的处理器)本机地执行。指令转换器1112被用于将x86二进制代码1106转换为可以由不具有x86指令集核的处理器1114本机地执行的代码。该转换后的代码不可能与替代指令集二进制代码1110相同,因为很难制作能够做到这一点的指令转换器;然而,转换后的代码将完成一般操作,并由来自替代指令集的指令构成。因此,指令转换器1112表示软件、固件、硬件或其组合,其通过模拟、仿真或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1106。
用于处理稀疏数据的装置和方法
概述
在一些实现中,加速器耦合到处理器核或其他处理元件以加速某些类型的操作,诸如图形操作、机器学习操作、模式分析操作和(如以下详细描述的)稀疏矩阵乘法运算,仅举几例。加速器可以通过总线或其他互连(例如,点到点互连)通信地耦合到处理器/核,或者可以与处理器集成在相同的芯片上并且通过内部处理器总线/互连通信地耦合到核。无论加速器被连接的方式如何,处理器核都可以(例如,以指令或微操作的序列的形式)将某些处理任务分配给加速器,其包括用于高效地处理这些任务的专用电路/逻辑。
用于稀疏矩阵和向量操作的加速器架构
图12图示了其中加速器1200通过高速缓存一致接口1230通信地耦合到多个核1210-1211的示例性实现。核1210-1211中的每个包括用于存储虚拟到物理地址翻译的翻译后备缓冲器1212-1213以及用于高速缓存数据和指令的一个或多个高速缓存1214-1215(例如,L1高速缓存、L2高速缓存等)。存储器管理单元1220管理由核1210-1211对系统存储器1250的访问,所述系统存储器1250可以是动态随机访问存储器DRAM。诸如L3高速缓存的共享高速缓存1226可以在处理器核1210-1211之间共享并且经由高速缓存一致接口1230与加速器1200共享。在一个实现中,核ATA1010T-1011、MMU 1220和高速缓存一致接口1230被集成在单个处理器芯片上。
所图示的加速器1200包括数据管理单元1205,数据管理单元1205具有高速缓存1207和调度器1206,其用于调度对多个处理元件1201-1202,N的操作。在所图示的实现中,每个处理元件具有其自身的本地存储器1203-1204,N。如下面详细描述的,每个本地存储器1203-1204,N可以被实现为堆叠DRAM或高带宽存储器(HBM)。
在一个实现中,高速缓存一致接口1230在核1210-1211和加速器1200之间提供高速缓存一致连接,实际上将加速器视为核1210-1211的对等体。例如,高速缓存一致接口1230可以实现高速缓存一致性协议,以确保由加速器1200访问/修改并存储在加速器高速缓存1207和/或本地存储器1203-1204,N中的数据与存储在核高速缓存1210-1211、共享高速缓存1226和系统存储器1250中的数据一致。例如,高速缓存一致接口1230可以参与由核1210-1211和MMU 1220用来检测共享高速缓存1226和本地高速缓存1214-1215内的高速缓存行的状态的探听机制,并且可以充当代理,从而响应于由处理元件1201-1202,N对高速缓存行的访问和尝试的修改而提供探听更新。此外,当高速缓存行被处理元件1201-1202,N修改时,高速缓存一致接口1230可以更新高速缓存行的状态,如果它们存储在共享高速缓存1226或本地高速缓存1214-1215内的话。
此外,为了减少核1210-1211和加速器1200之间的数据业务,一个实施例利用加速器偏置或处理器偏置来标记数据,诸如通过以存储器页面的粒度设置偏置表内的位而进行。具有加速器偏置的存储器页面可以由加速器1200在不完全实现高速缓存一致性协议的情况下处理。然后核1210-1211将制止修改具有加速器偏置的页面,而不用首先通知加速器1200。
在一个实现中,数据管理单元1005包括提供对系统存储器1250和共享高速缓存1226的加速器1200访问的存储器管理电路。此外,数据管理单元1205可以将更新提供给高速缓存一致接口1230并且根据需要从高速缓存一致接口1230接收更新(例如,以确定对高速缓存行的状态改变)。在所图示的实现中,数据管理单元1205包括用于调度要由处理元件1201-1202,N执行的指令/操作的调度器1205。为了执行其调度操作,调度器1206可以评估指令/操作之间的依赖性以确保指令/操作以一致的次序执行(例如,以确保第一指令在取决于来自第一指令的结果的第二指令之前执行)。不相互依赖的指令/操作可以在处理元件1201-1202,N上并行地执行。
图13图示了包括数据管理单元1205、多个处理元件1201-N和快速片上存储1300(例如,在一个实现中是使用堆叠的本地DRAM实现的)的先前描述的加速器1200和其他组件的另一个视图。在一个实现中,加速器1200是硬件加速器架构,并且处理元件1201-N包括用于执行矩阵*向量和向量*向量运算(包括用于稀疏/密集矩阵的运算)的电路。特别地,处理元件1201-N可以包括用于列和行取向的矩阵处理的硬件支持,并且可以包括对“缩放和更新”运算(诸如在机器学习(ML)算法中所使用的那个)的微架构支持。
所描述的实现执行矩阵/向量运算,矩阵/向量运算被优化,优化是通过在快速片上存储1300中保持频繁使用的、随机访问的、潜在稀疏(例如,聚集/分散)的向量数据以及将大的、不频繁使用的矩阵数据维持在片外存储器(例如,系统存储器1250)(每当可能时其被以流式方式访问)中,并且暴露矩阵块内/间的并行性以进行扩大。
处理元件1201-N的实现处理稀疏矩阵、密集矩阵、稀疏向量和密集向量的不同组合。如本文所使用的,“稀疏”矩阵或向量是其中大多数元素为零的矩阵或向量。相比而言,“密集”矩阵或向量是其中大多数元素是非零的矩阵或向量。矩阵/向量的“稀疏度”可以基于零值元素的数量除以元素的总数量(例如,对于m×n矩阵为m×n)来限定。在一个实现中,如果矩阵/向量的稀疏度如果在指定的阈值以上,则矩阵/向量被认为是“稀疏的”。
由处理元件1201-N所执行的一组示例性操作在图14中的表中图示。特别地,操作类型包括使用稀疏矩阵的第一乘法1400、使用密集矩阵的第二乘法1401、缩放和更新操作1402m和点积运算1403。为第一输入操作数1410和第二输入操作数1411(其每个都可能包括稀疏或密集矩阵/向量)提供列;输出格式1413(例如密集向量或标量);矩阵数据格式(例如,压缩稀疏行、压缩稀疏列、行取向等);和操作标识符1414。
在一些当前工作负载中所见到的运行时占主导的计算模式包括以行取向和列取向的方式针对向量的矩阵乘法的变化。它们在公知的矩阵格式上工作,公知的矩阵格式是:压缩的稀疏行(CSR)和压缩的稀疏列(CSC)。图15a描绘了稀疏矩阵A对向量x之间的乘法以产生向量y的示例。图15b图示了矩阵A的CSR表示,其中每个值被存储为(值,行索引)对。例如,针对行0的(3,2)指示在针对行0的元素位置2中存储值3。图15c图示了使用(值,列索引)对的矩阵A的CSC表示。
图16a、图16b和图16c图示了每个计算模式的伪代码,其在下面详细描述。特别地,图16a图示了行取向的稀疏矩阵密集向量乘(spMdV_csr);图16b图示了列取向的稀疏矩阵稀疏向量乘(spMspC_csc);并且图16c图示了缩放和更新操作(scale_update)。
A.行取向的稀疏矩阵密集向量乘法(spMdV_csr)
这是公知的计算模式,其在诸如高性能计算之类的许多应用域中是重要的。本文,针对矩阵A的每一行,执行该行针对向量x的点积,并将结果存储在由行索引指向的y向量元素中。该计算被用在机器学习(ML)算法中,该算法跨一组样本(即矩阵的行)执行分析。它可以被用在诸如“微型批量”之类的技术中。还存在这样的情况,其中诸如在学习算法的随机变型中,ML算法仅执行稀疏向量针对密集向量的点积(即,spMdV_csr循环的迭代)。
可能影响这个计算上的性能的已知因素是需要随机访问点积计算中的稀疏x向量元素。对于常规的服务器系统,当x向量很大时,这将导致向存储器或最后一级高速缓存的不规则访问(聚集)。
为了解决此,处理元件的一个实现将矩阵A划分成列块,并将x向量划分成多个子集(每个对应于A矩阵列块)。可以选择块大小,使得x向量子集可以在芯片上适合。因此,对它的随机访问可以在芯片上本地化。
B.列取向的稀疏矩阵稀疏向量乘法(spMspV_csc)
将稀疏矩阵针对稀疏向量相乘的该模式并不如spMdV_csr那样公知。然而,它在一些ML算法中是重要的。当算法在一组特征上工作时使用它,所述特征在数据集中表示为矩阵列(因此需要列取向的矩阵访问)。
在该计算模式中,矩阵A的每列被读取并且针对向量x的对应非零元素相乘。结果用于更新保持在y向量处的部分点积。在与非零x向量元素相关联的所有列都被处理之后,y向量将包含最终点积。
虽然对矩阵A的访问是规则的(即,A的列中的流),但是用于更新部分点积的对y向量的访问是不规则的。要访问的y元素取决于正在处理的A向量元素的行索引。为了解决此,矩阵A可以划分成行块。因此,向量y可以被划分成与这些块对应的子集。这样,当处理矩阵行块时,它只需要不规则地访问(聚集/分散)它的y向量子集。通过适当地选择块大小,y向量子集可以保持在芯片上。
C.缩放和更新(scale_update)
该模式通常由ML算法用来将缩放因数应用于矩阵中的每个样本,并将其缩减为一组权重,每个对应于特征(即,A中的列)。本文,x向量包含缩放因数。对于(采用CSR格式的)矩阵A的每一行,用于该行的缩放因数从x向量读取,然后应用于A在该行中的每个元素。结果用于更新y向量的元素。在所有的行都已经被处理之后,y向量包含缩减的权重。
与先前的计算模式类似,当y很大时,对y向量的不规则访问可能影响性能。将矩阵A划分成列块并将y向量划分成与这些块对应的多个子集可以帮助使得每个y子集内的不规则访问局部化。
用于稀疏矩阵和向量运算的处理器元件架构
图17图示了可以高效地执行上文讨论的计算模式的硬件加速器1200的一个实现。加速器1200可以是可以与通用处理器集成的硬件IP模块,类似于在现有的基于加速器的解决方案中所见的那些。在一个实现中,加速器1200通过与处理器共享的互连独立地访问存储器1250以执行计算模式。它支持驻留在片外存储器中的任何任意大的矩阵数据集。
图17图示了用于数据管理单元1205和处理元件1201-1202的一个实现的架构和处理流。在该实现中,数据管理单元1205包括处理元件调度器1701、读取缓冲器1702、写入缓冲器1703和缩减单元1704。每个PE 1201-1202包括输入缓冲器1705-1706、乘法器1707-1708、加法器1709-1710、本地RAM 1721-1722、和寄存器1711-1712、以及输出缓冲器1713-1714。
加速器支持以上讨论的矩阵分块方案(即,行和列分块)以支持任何任意大的矩阵数据。加速器被设计为处理矩阵数据的块。每个块被进一步划分成由PE 1201-1202并行处理的子块。
在操作中,数据管理单元1205将来自存储器子系统的矩阵行或列读取到它的读取缓冲器1702中,矩阵行或列然后由PE调度器1701跨PE 1201-1202动态地分布以用于处理。它也将结果从它的写入缓冲器1703写入到存储器。
每个PE 1201-1202负责处理矩阵子块。PE包含片上RAM 1721-1722以存储需要随机访问的向量(即,如上所述的x或y向量的子集)。它还包含包括乘法器1707-1708和加法器1709-1710的浮点乘-累加(FMA)单元、和用于从输入数据中提取矩阵元素的输入缓冲器1705-1706内的解拼逻辑、以及用于保持累加的FMA结果的和寄存器1711-1712。
加速器1200的一个实现方式实现了极高的效率,因为(1)它在片上PE RAM 1721-1722中放置稀疏的、不规则访问(聚集/分散)数据,(2)它利用硬件PE调度器1701来确保良好地利用PE,以及(3)与使用通用处理器不同,加速器仅包括对于稀疏矩阵运算必需的硬件资源。总体而言,加速器将提供给它的可用存储器带宽高效地转换成性能。
性能的缩放可以通过在加速器块中采用更多的PE来并行处理多个矩阵子块和/或采用更多的加速器块(每个具有一组PE)来并行处理多个矩阵块而完成。下面考虑这些选项的组合。应当调整PE和/或加速器块的数量以匹配存储器带宽。
加速器1200的一个实现可以通过软件库(类似于Intel®数学核心库)来编程。这样的库准备存储器中的矩阵数据,利用关于计算的信息(例如,计算类型、向矩阵数据的存储器指针)来设置加速器1200中的控制寄存器,并启动加速器。然后,加速器独立地访问存储器中的矩阵数据,执行计算,并将结果写回到存储器以供软件使用。
如图18A-B所描绘的,加速器通过将其PE设置为适当的数据路径配置来处理不同的计算模式。特别地,图18a突显了用于spMspV_csc和scale_update操作的路径(使用虚线),并且图18b图示了用于spMdV_csr操作的路径。下面详述执行每个计算模式的加速器操作。
对于spMspV_csc,初始的y向量子集由DMU 1205加载到PE的RAM 1721中。然后它从存储器读取x个向量元素。对于每个x元素,DMU 1205从存储器流传送对应矩阵列的元素,并将它们供应给PE 1201。每个矩阵元素包含值(A.val)和指向y元素以从PE的RAM 1721读取的索引(A.idx)。DMU 1005还提供由乘-累加(FMA)单元乘以A.val的x向量元素(x.val)。结果用于更新由A.idx指向的PE的RAM中的y元素。注意,即使我们的工作负载没有使用,加速器也通过处理所有矩阵列而不是仅子集(因为x很密集)而支持针对密集x向量(spMdV_csc)的逐列乘法。
scale_update操作类似于spMspV_csc,除了DMU 1205读取以CSR格式而不是CSC格式表示的A矩阵的行之外。对于spMdV_csr,x向量子集被加载到PE的RAM 1721中。DMU1205从存储器流传入矩阵行元素(即,{A.val,A.idx}对)。A.idx用于从RAM 1721读取适当的x向量元素,其由FMA乘以A.val。结果被累加到和寄存器1712中。每当PE看到由DMU 1205供应的指示行的结束的标记时,和寄存器被写入到输出缓冲器。以这种方式,每个PE产生它所负责的行子块的和。为了产生该行的最终和,由所有PE产生的子块和由DMU中的缩减单元1704(参见图17)相加在一起。最终和被写入到输出缓冲器1713-1714,然后DMU 1005将其写入到存储器。
图形数据处理
在一个实现中,本文描述的加速器架构被配置为处理图形数据。图形分析依赖于图形算法来提取关于表示为图形的数据之间的关系的知识。图形数据(来自诸如社交媒体之类的源)的激增已经导致了对图形分析的强烈需求和广泛使用。因此,能够尽可能高效地进行图形分析是至关重要的。
为了解决该需要,一个实现自动将用户限定的图形算法映射到针对给定的输入图形算法定制的硬件加速器架构“模板”。加速器可以包括上述架构并且可以被实现为FPGA/ASIC,其可以以极高的效率执行。总之,一个实现包括:
(1)基于广义稀疏矩阵向量乘(GSPMV)加速器的硬件加速器架构模板。它支持任意图形算法,因为已经表明图形算法可以被公式化为矩阵运算。
(2)将广泛使用的“以顶点为中心”的图形编程抽象映射和调整到架构模板的自动方法。
存在现有的稀疏矩阵乘法硬件加速器,但是它们不支持可定制性以允许图形算法的映射。
设计框架的一个实现如下那样操作。
(1)用户按照以顶点为中心的图形编程抽象将图形算法指定为“顶点程序”。该抽象由于其受欢迎性而在本文被选择为示例。顶点程序不暴露硬件细节,因此没有硬件专业知识的用户(例如数据科学家)可以创建它。
(2)与(1)中的图形算法一起,框架的一个实现接受以下输入:
a.要生成的目标硬件加速器的参数(例如,片上RAM的最大量)。这些参数可以由用户提供,或者在目标针对现有系统(例如,特定的FPGA板)时这些参数可以从现有的已知参数库中获得。
b.设计优化目标(例如,最大性能、最小面积)
c.目标图形数据的属性(例如图形的类型)或图形数据自身。这是可选的,并且用于协助自动调整。
(3)给定以上输入,框架的一个实现执行自动调整以确定应用于硬件模板的一组定制,以针对输入图形算法进行优化,将这些参数映射到架构模板上以在可合成的RTL中产生加速器实例,并针对从输入图形算法规范导出的功能和性能软件模型进行所生成的RTL的功能和性能验证。
在一个实现中,上述加速器架构被扩展为通过以下内容来支持顶点程序的执行:(1)使其成为可定制的硬件模板;以及(2)支持由顶点程序所需的功能。基于该模板,设计框架被描述为将用户供应的顶点程序映射到硬件模板,以产生针对顶点程序优化的可合成RTL(例如,Verilog)实现实例。框架还执行自动验证和调整,以确保所产生的RTL是正确和优化的。存在针对该框架的多个用例。例如,所产生的可合成RTL可以被部署在FPGA平台(例如,Xeon-FPGA)中以高效地执行给定的顶点程序。或者,它可以进一步改善以产生ASIC实现。
已经表明:图形可以被表示为邻接矩阵,并且图形处理可以被公式化为稀疏矩阵运算。图19a-b示出了将图形表示为邻接矩阵的示例。矩阵中的每个非零表示图形中的两个节点之间的边。例如,行0列2中的1表示从节点A到C的边。
用于描述图形数据上的计算的最流行的模型之一是顶点编程模型。一个实现支持来自Graphmat软件框架的顶点编程模型变型,其将顶点程序公式化为广义稀疏矩阵向量乘(GSPMV)。如图19c所示,顶点程序包括与图形中的边/顶点相关联的数据(edata/vdata)、跨图形中的顶点发送的消息(mdata)和临时数据(tdata)的类型(程序代码的顶部中图示);以及使用读取和更新图形数据的预限定API的无状态用户限定的计算函数(如程序代码的底部中图示)。
图19d图示了用于执行顶点程序的示例性程序代码。边数据表示为邻接矩阵A(如图19b中),顶点数据表示为向量y,并且消息表示为稀疏向量x。图19e示出了GSPMV公式化,其中SPMV中的multiply()和add()运算通过用户限定的PROCESS_MSG()和REDUCE()一般化。
本文的一个观察是执行顶点程序所需的GSPMV变型执行针对稀疏向量x(即,消息)的稀疏矩阵A(即,邻接矩阵)的列取向乘法以产生输出向量y(即,顶点数据)。该操作被称为col_spMspV(先前关于上述加速器描述的)。
设计框架。框架的一个实现在图20中示出,其包括模板映射组件2011、验证组件2012和自动调整组件2013。其输入是用户指定的顶点程序2001、设计优化目标2003(例如,最大性能、最小面积)和目标硬件设计约束2002(例如,片上RAM的最大量、存储器接口宽度)。作为辅助自动调整的可选输入,框架还接受图形数据属性2004(例如,类型=自然图形)或样本图形数据。
给定这些输入,框架的模板映射组件2011将输入顶点程序映射到硬件加速器架构模板,并且产生为了执行顶点程序2001而优化的加速器实例的RTL实现2005。自动调整组件2013在满足硬件设计约束的同时,执行自动调整2013以针对给定设计目标而优化所生成的RTL。此外,验证组件2012自动地针对从输入导出的功能和性能模型验证所生成的RTL。验证测试台(bench)2006和调整报告2007与RTL一起产生。
广义稀疏矩阵向量乘(GSPMV)硬件架构模板
在图21中示出了用于GSPMV的架构模板的一个实现,其基于上述加速器架构(参见例如图17和相关联的文本)。图21中所图示的许多组件是可定制的(如用灰线突显的)。在一个实现中,支持顶点程序的执行的架构已经如下那样扩展。
在每个PE内提供可定制逻辑块以支持由顶点程序所需的PROCESS_MSG()1910、REDUCE()2111、APPLY 2112和SEND_MSG()2113。此外,一个实现提供可定制片上存储结构和拼装/解拼逻辑2105以支持用户限定的图形数据(即,vdata、edata、mdata、tdata)。图21中所图示的数据管理单元1205包括PE调度器1701(用于调度PE,如上所述)、用于存储有效列、x数据)的辅助缓冲器2101、读取缓冲器1702、用于控制对系统存储器的访问的存储器控制器2103、以及写入缓冲器1704。此外,在图21所示的实现中,旧的和新的vdata和tdata被存储在本地PE存储器1721内。可以修改各种控制状态机以支持执行顶点程序,从而遵守由图19d和19e中的算法所指定的功能。
在图22中总结每个加速器拼块(tile)的操作。在2201处,将y向量(vdata)加载到PE RAM 1721。在2202处,将x向量和列指针加载到辅助缓冲器2101。在2203处,针对每个x向量元素,A列被流传入(edata),并且PE执行PROC_MSG()2110和REDUCE()2111。在2204处,PE执行APPLY()2112。在2205处,PE执行SEND_MSG()2113,从而产生消息,并且数据管理单元1205将它们作为x向量写入在存储器中。在2206处,数据管理单元1205将存储在PE RAM1721中的经更新的y向量(vdata)写回到存储器。上述技术符合图19d和19e所示的顶点程序执行算法。为了扩大性能,架构允许增加拼块中的PE的数量和/或设计中的拼块的数量。这样,架构可以利用图形中的多个级别的并行性(即跨子图(跨邻接矩阵的块)或在每个子图内)。图23a中的表总结了模板的一个实现的可定制参数。也可以跨拼块分配不对称参数以用于优化(例如,一个拼块具有比另一个拼块更多的PE)。
自动映射、验证和调整
调整。基于输入,框架的一个实现执行自动调整以确定用于定制硬件架构模板的最佳设计参数,以便针对输入顶点程序和(可选地)图形数据优化它。存在许多调整考虑,其在图23b的表中总结。如所图示的,这些包括数据的局部性、图形数据大小、图形计算功能、图形数据结构、图形数据访问属性、图形数据类型和图形数据模式。
模板映射。在该阶段中,框架采用由调整阶段所确定的模板参数,并通过在模板的可定制部分中“填充”来产生加速器实例。用户限定的计算函数(例如,图19c)可以使用现有的高级合成(HLS)工具从输入规范映射到适当的PE计算块。存储结构(例如,RAM、缓冲器、高速缓存)和存储器接口使用其对应的设计参数来实例化。拼装/解拼逻辑可以从数据类型规范自动地生成(例如,图19a)。控制有限状态机(FSM)的部分也基于所提供的设计参数(例如,PE调度方案)而生成。
验证。在一个实现中,由模板映射所产生的加速器架构实例(可合成RTL)然后被自动验证。为了进行这一点,框架的一个实现导出了顶点程序的功能模型,以用作“黄金”参考。生成测试台以将该黄金参考的执行针对架构实例的RTL实现的仿真进行比较。框架还通过将RTL仿真针对分析性能模型和周期准确的软件仿真器进行比较来执行性能验证。它报告运行时崩溃并精确指明影响性能的设计的瓶颈。
图24中图示了方法的一个实施例。该方法可以在上述处理器和系统架构上实现,但不限于任何特定架构。
在2401处,接收与目标加速器相关联的输入图形程序代码和参数(例如,片上存储器的量等)。此外,在该阶段处,也可以接收设计优化目标,诸如用于目标加速器的最大性能级别和/或最小硅面积。在2402处,鉴于加速器架构模板来分析输入图形程序代码和参数。例如,加速器架构模板可以包括可用于生成硬件描述表示的可定制逻辑块(例如,限定片上存储结构的逻辑块以及支持用户限定的图形数据的拼装/解拼逻辑)。在2403处,将参数映射到架构模板上以实现定制。定制也可以使用基于设计优化目标的参数来应用。如上文所讨论的,参数的映射根据实现特定的要求来修改架构模板。如图21中所图示的,可以将参数映射到包括数据管理单元1205、处理元件和片上存储器1721内的加速器架构模板内的各种组件(如通过对角线突显的)。在2404处,基于定制加速器架构模板的参数的映射针对目标加速器生成硬件描述表示。例如,在一个实施例中,硬件描述表示包括如上文所讨论的RTL代码。
本发明的实施例可以包括上面已经描述的各种步骤。这些步骤可以体现在可以用于使通用或专用处理器执行这些步骤的机器可执行指令中。替代地,这些步骤可以由包含用于执行这些步骤的硬连线逻辑的具体硬件组件执行,或者由经编程的计算机组件和定制硬件组件的任何组合执行。
在前面的说明书中,已经参考本发明的具体示例性实施例描述了本发明的实施例。然而,将显而易见的是,可以对其进行各种修改和改变,而不脱离如所附权利要求中所阐述的本发明的更宽泛的精神和范围。因此,说明书和附图要在说明性而不是限制性意义上考虑。
如本文所述,指令可以指代被配置为执行某些操作或者具有预定功能的诸如专用集成电路(ASIC)的硬件的具体配置或者可以指代存储在体现在非暂时性计算机可读介质中的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如终端站、网络元件等)上存储和执行的代码和数据来实现图中所示的技术。这样的电子设备使用计算机机器可读介质来存储代码和数据和(在内部和/或通过网络与其他电子设备)传送代码和数据,所述计算机机器可读介质诸如非暂时性计算机机器可读存储介质(例如,磁盘;光盘;随机访问存储器;只读存储器;闪速存储器设备;相变存储器)和暂时性计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如载波、红外信号、数字信号等。)。此外,这样的电子设备通常包括耦合到一个或多个其他组件的一组一个或多个处理器,所述其他组件诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。该组处理器和其他组件的耦合通常是通过一个或多个总线和桥(也称为总线控制器)。承载网络业务的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储用于在该电子设备的该组一个或多个处理器上执行的代码和/或数据。当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实现。遍及该详述的描述,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明。在某些实例中,未以详尽的细节描述公知的结构和功能,以免模糊本发明的主题。因此,本发明的范围和精神应当按照随后的权利要求来判断。

Claims (23)

1.一种在其上存储有程序代码的机器可读介质,所述程序代码当由处理器执行时使所述处理器执行以下的操作:
鉴于加速器架构模板来分析与目标加速器相关联的输入图形程序代码和参数;
响应性地将参数映射到架构模板上,以实现对加速器架构模板的定制;和
基于应用于加速器架构模板的参数的所确定映射来生成目标加速器的硬件描述表示。
2.根据权利要求1所述的机器可读介质,其中硬件描述表示包括可合成寄存器传送级(RTL)代码。
3.根据权利要求1或2所述的机器可读介质,其中所述参数中的至少一个包括用于目标加速器的片上存储器的最大量。
4.根据权利要求1或3所述的机器可读介质,还包括使所述机器执行以下的操作的程序代码:
分析与目标加速器相关联的设计优化目标,以及部分地基于设计优化目标来确定定制。
5.根据权利要求4所述的机器可读介质,其中设计优化目标包括用于目标加速器的最大性能级别和/或最小硅面积。
6.根据权利要求1所述的机器可读介质,其中输入图形程序代码包括以顶点为中心的图形编程抽象。
7.根据权利要求1、4或6所述的机器可读介质,其中所述程序代码要使所述机器执行以下的附加操作:
验证所生成的硬件描述表示的功能和性能。
8.根据权利要求1或4所述的机器可读介质,其中所述程序代码要使所述机器执行以下的附加操作:
基于设计优化目标来执行自动调整以优化所生成的硬件描述表示。
9.根据权利要求8所述的机器可读介质,其中基于包括数据的局部性、图形数据大小、图形计算功能、图形数据结构、图形数据访问属性、图形数据类型和/或图形数据模式的调整考虑来执行自动调整。
10.根据权利要求1或9所述的机器可读介质,其中加速器架构模板包括可用于生成硬件描述表示的可定制逻辑块。
11.根据权利要求10所述的机器可读介质,其中可定制逻辑块限定目标加速器的多个处理元件内的功能单元。
12.根据权利要求11所述的机器可读介质,其中功能单元包括用于接收到其他处理元件的消息的第一功能单元、用于支持缩减操作的第二功能单元、用于对数据执行指定的一系列操作的第三功能单元、以及用于将消息发送到其他处理元件的第四功能单元。
13.根据权利要求11所述的机器可读介质,其中可定制逻辑块限定片上存储结构和拼装/解拼逻辑以支持用户限定的图形数据。
14.一种装置,包括:
第一电路和/或逻辑,鉴于加速器架构模板来分析与目标加速器相关联的输入图形程序代码和参数;
第二电路和/或逻辑,响应性地将参数映射到架构模板上,以实现对加速器架构模板的定制;和
第三电路和/或逻辑,基于应用于加速器架构模板的参数的所确定映射来生成目标加速器的硬件描述表示。
15.根据权利要求14所述的装置,其中硬件描述表示包括可合成寄存器传送级(RTL)代码。
16.根据权利要求14或15所述的装置,其中所述参数中的至少一个包括用于目标加速器的片上存储器的最大量。
17.根据权利要求14或16所述的装置,还包括:
第四电路和/或逻辑,分析与目标加速器相关联的设计优化目标,以及部分地基于设计优化目标来确定定制。
18.根据权利要求17所述的装置,其中设计优化目标包括用于目标加速器的最大性能级别和/或最小硅面积。
19.根据权利要求14所述的装置,其中输入图形程序代码包括以顶点为中心的图形编程抽象。
20.根据权利要求14、17或19所述的装置,还包括:
第四电路和/或逻辑,验证所生成的硬件描述表示的功能和性能。
21.根据权利要求14或17所述的装置,还包括:
第五电路和/或逻辑,基于设计优化目标来执行自动调整以优化所生成的硬件描述表示。
22.一种装置,包括:
用于鉴于加速器架构模板来分析与目标加速器相关联的输入图形程序代码和参数的部件;
用于响应性地将参数映射到架构模板上以实现对加速器架构模板的定制的部件;和
用于基于所确定的定制集合和参数到加速器架构模板的映射来生成目标加速器的硬件描述表示的部件。
23.根据权利要求22所述的装置,其中硬件描述表示包括可合成寄存器传送级(RTL)代码。
CN201711479748.4A 2016-12-30 2017-12-29 用于处理稀疏数据的装置和方法 Active CN108269226B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/394,968 US10437562B2 (en) 2016-12-30 2016-12-30 Apparatus and method for processing sparse data
US15/394968 2016-12-30

Publications (2)

Publication Number Publication Date
CN108269226A CN108269226A (zh) 2018-07-10
CN108269226B true CN108269226B (zh) 2023-11-28

Family

ID=60953620

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711479748.4A Active CN108269226B (zh) 2016-12-30 2017-12-29 用于处理稀疏数据的装置和方法

Country Status (3)

Country Link
US (1) US10437562B2 (zh)
EP (1) EP3343359A1 (zh)
CN (1) CN108269226B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11714875B2 (en) * 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
EP4091049A4 (en) 2020-01-13 2023-01-18 Telefonaktiebolaget LM Ericsson (publ) PROGRAMMABLE CONTROL
US11416581B2 (en) 2020-03-09 2022-08-16 International Business Machines Corporation Multiplication of a matrix with an input vector
US11868283B2 (en) * 2020-07-17 2024-01-09 The Regents Of The University Of Michigan Hybrid on/off-chip memory architecture for graph analytics
WO2023107119A1 (en) * 2021-12-10 2023-06-15 Google Llc Scalable hardware architecture template for processing streaming input data

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104813281A (zh) * 2012-12-28 2015-07-29 英特尔公司 用于指令的快速失败处理的装置和方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7200703B2 (en) * 2004-06-08 2007-04-03 Valmiki Ramanujan K Configurable components for embedded system design
US7926046B2 (en) * 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
US9841997B2 (en) 2015-06-25 2017-12-12 Intel Corporation Method and apparatus for execution mode selection
US11216722B2 (en) * 2016-12-31 2022-01-04 Intel Corporation Hardware accelerator template and design framework for implementing recurrent neural networks

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104813281A (zh) * 2012-12-28 2015-07-29 英特尔公司 用于指令的快速失败处理的装置和方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
GraphGen:An FPGA Framework for Vertex-Centric;Gabriel Weisz;《http://www.gabeweisz.com/graphgen一ccm_ 2014.pdf》;20141231;第1-8页 *
基于GPU的稀疏矩阵向量乘优化;白洪涛等;《计算机科学》;20100815(第08期);全文 *

Also Published As

Publication number Publication date
CN108269226A (zh) 2018-07-10
US20180189032A1 (en) 2018-07-05
US10437562B2 (en) 2019-10-08
EP3343359A1 (en) 2018-07-04

Similar Documents

Publication Publication Date Title
CN109478139B (zh) 用于共享存储器中的访问同步的装置、方法和系统
CN109791488B (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN107077334B (zh) 从多维阵列预取多维元素块的硬件装置和方法
CN108269226B (zh) 用于处理稀疏数据的装置和方法
CN109313549B (zh) 用于向量的元素排序的装置、方法和系统
CN117349584A (zh) 实行16位浮点矩阵点积指令的系统和方法
CN112861073B (zh) 用于执行16位浮点向量点积指令的系统和方法
CN107153524B (zh) 用于给出相应复数的复共轭的计算设备和计算机可读介质
TWI617978B (zh) 用於向量索引載入和儲存之方法和設備
CN117724766A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN114153498A (zh) 用于加载片寄存器对的系统和方法
CN112527396A (zh) 用于执行指令以转换成16位浮点格式的系统和方法
JP2019197531A (ja) 連鎖タイル演算を実施するためのシステムおよび方法
CN110909883A (zh) 用于执行指定三元片逻辑操作的指令的系统和方法
CN108780394B (zh) 用于转换编码格式的硬件装置和方法
CN107391086B (zh) 改进置换指令的装置和方法
KR20150112779A (ko) 복수의 곱셈 연산들을 수행하는 방법 및 장치
CN110909882A (zh) 用于执行水平铺块操作的系统和方法
CN108351782B (zh) 用于跨步访问的系统、装置和方法
CN113849224A (zh) 用于移动数据的指令的装置、方法和系统
CN113885942A (zh) 用于将片寄存器对归零的系统和方法
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN114327362A (zh) 大规模矩阵重构和矩阵-标量操作

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
GR01 Patent grant
GR01 Patent grant