CN109947473A - 用于利用旋转和减半来使打包数据元素相加的设备和方法 - Google Patents

用于利用旋转和减半来使打包数据元素相加的设备和方法 Download PDF

Info

Publication number
CN109947473A
CN109947473A CN201811390772.5A CN201811390772A CN109947473A CN 109947473 A CN109947473 A CN 109947473A CN 201811390772 A CN201811390772 A CN 201811390772A CN 109947473 A CN109947473 A CN 109947473A
Authority
CN
China
Prior art keywords
tape symbol
word
instruction
source register
register
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
CN201811390772.5A
Other languages
English (en)
Inventor
E.奥尔德-艾哈迈德-瓦尔
R.瓦伦丁
M.查尼
J.科巴尔
V.马杜里
B.杨
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 CN109947473A publication Critical patent/CN109947473A/zh
Pending legal-status Critical Current

Links

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/50Adding; Subtracting
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • 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/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

使用旋转和减半实施带符号打包数据值的相加的设备和方法。处理器包括:解码器,解码指令生成经解码指令,指令包括操作码、立即数以及操作数;第一源寄存器,存储第一多个打包带符号字;第二源寄存器,存储第二多个打包带符号字;执行电路,执行经解码指令,包括:加法器电路,将来自第一源寄存器每个打包带符号字与来自第二源寄存器经选择打包带符号字相加,生成多个带符号字结果,加法器电路根据指令的立即数中的旋转值从第二源寄存器中选择每个打包带符号字,旋转值指示加法器电路实施相加之前要应用于第二源寄存器中打包带符号字的旋转量;和目的地寄存器,将多个带符号字结果存储在目的地寄存器的指定数据元素位置中。

Description

用于利用旋转和减半来使打包数据元素相加的设备和方法
背景。
技术领域
本发明的实施例一般地涉及计算机处理器领域。更具体地,各实施例涉及用于利用旋转和减半来使打包数据元素相加的设备和方法。
相关技术的描述
指令集或指令集架构(ISA)是与编程有关的计算机架构的一部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,术语“指令”在本文中通常指代宏指令-其是提供给处理器用于执行的指令-与微指令或微操作相对-其是处理器的解码器解码宏指令的结果。微指令或微操作可以被配置为指令处理器上的执行单元实施操作以实现与宏指令相关联的逻辑。
ISA与微架构不同,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享共同的指令集。例如,Intel®奔腾4处理器、Intel®Core™处理器和来自加利福尼亚州的桑尼维尔的超微半导体(Advanced Micro Devices)公司的处理器实现了几乎相同版本的x86指令集(其中一些扩展已被添加有更新的版本),但是具有不同的内部设计。例如,ISA的相同寄存器架构可以使用公知的技术(包括专用物理寄存器、使用寄存器重命名机制的一个或多个动态分配的物理寄存器(例如,使用寄存器别名表(RAT),重新排序缓冲器(ROB)和退出寄存器堆(register file)))以不同的方式在不同的微架构中实现。除非另有说明,否则短语“寄存器架构”、“寄存器堆”和“寄存器”在本文中用于指代软件/程序员可见的内容以及指令指定寄存器的方式。在需要区分的情况下,形容词“逻辑”、“架构”或“软件可见”将用于指示寄存器架构中的寄存器/堆,而不同的形容词将用于指明给定微架构中的寄存器(例如,物理寄存器、重新排序缓冲器、退出寄存器、寄存器池)。
乘法累加是常见的数字信号处理操作,该操作计算两个数的乘积并将该乘积加到累加值。现有的单指令多数据(SIMD)微架构通过执行一系列指令来实现乘法累加操作。例如,乘法累加可以利用如下方式实施:乘法指令,然后是4路加法,并且然后是目标四字数据的累加以生成两个64位饱和结果。
附图说明
根据以下结合附图的详细描述,可以获得对本发明的更好理解,其中:
图1A和1B是图示根据本发明实施例的通用矢量友好指令格式及其指令模板的框图;
图2A-C是图示根据本发明实施例的示例性VEX指令格式的框图;
图3是根据本发明一个实施例的寄存器架构的框图;和
图4A是图示根据本发明实施例的示例性有序提取、解码、退出管线和示例性寄存器重命名、无序发布/执行管线二者的框图;
图4B是图示根据本发明实施例的要包括在处理器中的有序提取、解码、退出核心和示例性寄存器重命名、无序发布/执行架构核心二者的示例性实施例的框图;
图5A是单个处理器核心以及它与管芯上互连网络的连接的框图;
图5B图示了根据本发明实施例的图5A中的处理器核心的一部分的展开视图;
图6是根据本发明实施例的单核处理器和具有集成存储器控制器和图形元件的多核处理器的框图;
图7图示了根据本发明一个实施例的系统的框图;
图8图示了根据本发明实施例的第二系统的框图;
图9图示了根据本发明实施例的第三系统的框图;
图10图示了根据本发明实施例的片上系统(SoC)的框图;
图11图示了根据本发明实施例的对比使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图;
图12图示了可以在其上实现本发明实施例的处理器架构;
图13图示了根据一个实施例的包含实数和复数值的多个打包数据元素;
图14图示了打包数据处理架构的实施例;和
图15图示了根据本发明的一个实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对下面描述的本发明实施例的透彻理解。然而,对于本领域技术人员来说将显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明的实施例。在其他实例中,以框图形式示出了公知的结构和装置,以避免模糊本发明实施例的基本原理。
示例性处理器架构,指令格式和数据类型
指令集包括一个或多个指令格式。给定的指令格式定义了各种字段(位数,位的位置),以便除其他之外尤其指定要实施的操作(操作码)和要对其实施该操作的(一个或多个)操作数。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的次序,但是至少一些具有不同的位位置,因为其包括的字段较少)和/或定义为具有以不同方式解释的给定字段。因此,ISA的每个指令使用给定指令格式表示(并且,如果定义,则在该指令格式的给定的一个指令模板中)并且包括用于指定操作和操作数的字段。例如,示例性ADD指令具有特定操作码和指令格式,该指令格式包括用于指定所述操作码的操作码字段和用于选择操作数的操作数字段(source1/destination和source2)(源1/目的地和源2);并且该ADD指令在指令流中的出现将在操作数字段中具有选择特定操作数的特定内容。
本文描述的(一个或多个)指令的实施例可以以不同格式体现。另外,以下详述示例性系统、架构和管线。所述(一个或多个)指令的实施例可以在这样的系统、架构和管线上执行,但不限于详细说明的那些。
通用矢量友好指令格式
矢量友好指令格式是适合于矢量指令的指令格式(例如,存在专用于矢量操作的某些字段)。虽然描述了通过矢量友好指令格式支持矢量和标量操作二者的实施例,但是替代实施例仅使用矢量友好指令格式的矢量操作。
图1A-1B是图示根据本发明实施例的通用矢量友好指令格式及其指令模板的框图。图1A是图示根据本发明实施例的通用矢量友好指令格式及其A类指令模板的框图;而图1B是图示根据本发明实施例的通用矢量友好指令格式及其B类指令模板的框图。具体来说,针对通用矢量友好指令格式100定义A类和B类指令模板,A类和B类指令模板二者都不包括存储器访问105指令模板和存储器访问120指令模板。在矢量友好指令格式的情境中术语“通用”指代不与任何特定指令集绑定的指令格式。
同时将描述其中的矢量友好指令格式支持以下内容的本发明的实施例:64字节矢量操作数长度(或者尺寸)与32位(4字节)或64位(8字节)数据元素宽度(或尺寸)(并且因此,64字节矢量由16个双字尺寸的元素组成,或者替代地由8个四字尺寸的元素组成);64字节矢量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸);32字节矢量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸);以及16字节矢量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或尺寸);替代实施例可以支持更多、更少和/或不同的矢量操作数尺寸(例如,256字节矢量操作数)与更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)。
图1A中的A类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问、全舍入控制类型操作110指令模板和无存储器访问、数据变换类型操作115指令模板;以及2)在存储器访问120指令模板内,示出了存储器访问、临时性125指令模板和存储器访问、非临时性130指令模板。图1B中的B类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问、写掩蔽控制、部分舍入控制类型操作112指令模板和无存储器访问、写掩蔽控制、VSIZE类型操作117指令模板;以及2)在存储器访问120指令模板内,示出了存储器访问、写掩蔽控制127指令模板。
通用矢量友好指令格式100包括按照图1A-1B中所示的次序在下面列出的以下字段。
格式字段140-该字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,并因此指令以矢量友好指令格式在指令流中出现。因此,该字段是可选的,因为对于仅具有通用矢量友好指令格式的指令集来说它是不被需要的。
基本操作字段142-其内容区分不同的基本操作。
寄存器索引字段144-其内容直接或通过地址生成来指定源和目标操作数的位置,无论它们在寄存器中还是在存储器中。这些包括足够数量的位以从P×Q(例如32×512,16×128,32×1024,64×1024)的寄存器堆中选择N个寄存器。虽然在一个实施例中,N可以是多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个也充当目的地,可以支持多达三个源,其中这些源中的一个也充当目的地,可以支持多达两个源和一个目的地)。
修改符字段146-其内容区分通用矢量指令格式中指定存储器访问的指令的出现与不指定存储器访问的指令的出现;也就是说,在无存储器访问105指令模板和存储器访问120指令模板之间进行区分。存储器访问操作读取和/或写入到存储器层级(在一些情况下使用寄存器中的值指定源和/或目的地地址),而无存储器访问操作不读取和/或写入到存储器层级(例如,源和目的地是寄存器)。虽然,在一个实施例中,该字段还在三个不同方式之间进行选择以实施存储器地址计算,但是替代实施例可以支持更多,更少或不同的方式来实施存储器地址计算。
扩充操作字段150-其内容区分除了基本操作之外还要实施各种不同操作中的哪一个。该字段是专用于情境的。在本发明的一个实施例中,该字段被划分成类字段168、α字段152和β字段154。扩充操作字段150允许在单个指令中而不是2、3或4个指令中实施共同操作组。
缩放字段160-其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2scale*索引(2缩放*索引)+基本的地址生成)。
位移字段162A-其内容用作存储器地址生成的一部分(例如,用于使用2scale*索引+基本+位移的地址生成)。
位移因数字段162B(注意,位移字段162A直接在位移因数字段162B上的并置指示使用一个或另一个)-其内容用作地址生成的一部分;它指定位移因数,该位移因数按照存储器访问的尺寸(N)被缩放-其中N是存储器访问中的字节数(例如,用于使用2scale*索引+基本+经缩放的位移的地址生成)。忽略冗余的低次序位,并且因此,位移因数字段的内容乘以存储器操作数总尺寸(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-其内容区分要实施一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段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,完整操作码字段174包括格式字段140、基本操作字段142和数据元素宽度字段164。尽管示出了其中完整操作码字段174包括所有这些字段的一个实施例,但在不支持所有这些字段的实施例中,完整操作码字段174包括非全部这些字段。完整操作码字段174提供操作代码(操作码)。
扩充操作字段150、数据元素宽度字段164和写掩蔽字段170允许在通用矢量友好指令格式中基于每个指令指定这些特征。
写掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同数据元素宽度来应用掩蔽。
在A类和B类内找到的各种指令模板在不同情况下是有益的。在本发明的一些实施例中,处理器内的不同处理器或不同核心可以仅支持A类,仅支持B类或支持这两类。例如,预期用于通用计算的高性能通用无序核心可能仅支持B类,主要预期用于图形和/或科学(吞吐量)计算的核心可能仅支持A类,并且预期用于这两者的核心可以支持这两者(当然,具有来自两个类的一些模板和指令但不是来自这两个类的所有模板和指令的某种混合的核心在本发明的范围内)。此外,单个处理器可以包括多个核心,所有核心都支持相同的类,或者其中不同的核心支持不同的类。例如,在具有分离的图形和通用核心的处理器中,预期主要用于图形和/或科学计算的图形核心之一可以仅支持A类,而一个或多个通用核心可以是仅支持B类的高性能通用核心,具有预期用于通用计算的无序执行和寄存器重命名。不具有分离图形核心的另一个处理器可以包括再一个通用有序或无序核心,该通用有序或无序核心支持A类和B类二者。当然,在本发明的不同实施例中,来自一个类的特征也可以在另一类中实现。用高级语言编写的程序将被形成为(例如,仅被及时编译或静态编译)各种不同的可执行形式,包括:1)仅具有由用于执行的目标处理器支持的(一个或多个)类的指令的形式;或者2)具有使用所有类的指令的不同组合编写的替代例程的并且具有控制流程代码的形式,该控制流程代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。
VEX指令格式
VEX编码允许指令具有多于两个操作数,并且允许SIMD矢量寄存器长于28位。VEX前缀的使用提供三操作数(或更多操作数)语法。例如,先前的双操作数指令实施诸如A=A+B的操作,这覆盖源操作数。VEX前缀的使用使操作数能够实施非破坏性操作,诸如A=B+C。
图2A图示了示例性AVX指令格式,AVX指令格式包括VEX前缀202、实数操作码字段230、Mod R/M字节240、SIB字节250、位移字段262和IMM8 272。图2B图示了来自图2A的哪些字段构成完整操作码字段274和基本操作字段241。图2C图示了来自图2A的哪些字段构成寄存器索引字段244。
VEX前缀(字节0-2)202以三字节形式编码。第一字节是格式字段290(VEX字节0,位[7:0]),其包含显式C4字节值(用于区分C4指令格式的唯一值)。第二至第三字节(VEX字节1-2)包括提供特定能力的多个位字段。具体来说,REX字段205(VEX字节1,位[7-5])由VEX.R位字段(VEX字节1,位[7]-R)、VEX.X位字段(VEX字节1,位[6]-X)]和VEX.B位字段(VEX字节1,位[5]-B)组成。如本领域中已知的那样,指令的其他字段对寄存器索引的较低三位进行编码(rrr、xxx和bbb),以便可以通过添加VEX.R、VEX.X和VEX.B来形成Rrrr、Xxxx和Bbbb。操作码映射字段215(VEX字节1,位[4:0]-mmmmm)包括用于编码隐含的前导操作码字节的内容。W字段264(VEX字节2,位[7]-W)由符号VEX.W表示,并根据指令提供不同的功能。VEX.vvvv220(VEX字节2,位[6:3]-vvvv)的作用可以包括以下各项:1)VEX.vvvv对以反转(1s补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多源操作数的指令有效;2)VEX.vvvv针对某些矢量位移对以1s补码形式指定的目的地寄存器操作数进行编码;或者3)VEX.vvvv不对任何操作数进行编码,该字段被保留,并且应该包含1111b。如果VEX.L268尺寸字段(VEX字节2,位[2]-L)=0,则它指示28位矢量;如果VEX.L=1,则它指示256位矢量。前缀编码字段225(VEX字节2,位[1:0]-pp)为基本操作字段241提供附加位。
实数操作码字段230(字节3)也称为操作码字节。部分操作码在此字段中被指定。
MOD R/M字段240(字节4)包括MOD字段242(位[7-6])、Reg字段244(位[5-3])和R/M字段246(位[2-0])。Reg字段244的作用可以包括以下内容:编码目的地寄存器操作数或源寄存器操作数(Rrrr的rrr),或者可以被视为操作码扩展并且不用于编码任何指令操作数。R/M字段246的作用可以包括以下内容:对引用存储器地址的指令操作数进行编码,或者对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基本(SIB)-缩放字段250(字节5)的内容包括SS252(位[7-6]),其用于存储器地址生成。先前已经关于寄存器索引Xxxx和Bbbb提到了SIB.xxx254(位[5-3])和SIB.bbb256(位[2-0])的内容。
位移字段262和立即数字段(IMM8)272包含数据。
示例性寄存器架构
图3是根据本发明一个实施例的寄存器架构300的框图。在所示的实施例中,存在32个宽度为512位的矢量寄存器310;这些寄存器被称为为zmm0到zmm31。较低6个zmm寄存器的较低次序256位在寄存器ymm0-15上重叠。较低6个zmm寄存器的较低次序128位(ymm寄存器的较低次序128位)在寄存器xmm0-15上重叠。
通用寄存器325-在所示实施例中,存在16个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寄存器之间实施的一些操作保持操作数。
本发明的替代实施例可以使用更宽或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。
示例性核心架构、处理器和计算机架构
处理器核心可以以不同方式实现,可以被实现用于不同的目的,并且可以在不同的处理器中实现。例如,这种核心的实现可以包括: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,并且前端单元430和执行引擎单元450两者都耦合到存储器单元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包括重命名/分配器单元452,重命名/分配器单元452耦合到退出单元454和由一个或多个调度器单元456构成的集合。(一个或多个)调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗等。(一个或多个)调度器单元456耦合到(一个或多个)物理寄存器堆单元458。(一个或多个)物理寄存器堆单元458中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、矢量整数、矢量浮点、状态(例如,作为待执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元458包括矢量寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一个或多个)物理寄存器堆单元458被退出单元454覆盖,以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)退出寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲器和(一个或多个)退出寄存器堆;使用寄存器映射和寄存器池;等等)。退出单元454和(一个或多个)物理寄存器堆单元458耦合到(一个或多个)执行集群460。(一个或多个)执行集群460包括由一个或多个执行单元462构成的集合和由一个或多个存储器访问单元464构成的集合。执行单元462可以实施各种操作(例如,移位、加法、减法、乘法)和各种类型的数据(例如,标量浮点、打包整数、打包浮点、矢量整数、矢量浮点)。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或全都执行所有功能的多个执行单元。(一个或多个)调度器单元456、(一个或多个)物理寄存器堆单元458和(一个或多个)执行集群460被示为可能是多个,因为某些实施例针对某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/打包整数/打包浮点/矢量整数/矢量浮点管线、和/或存储器访问管线,存储器访问管线均具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群-并且在单独的存储器访问管线的情况下,实现某些实施例,在这些实施例中仅该管线的执行集群具有(一个或多个)存储器访问单元464)。还应该理解,在使用单独的管线的情况下,这些管线中的一个或多个可以是无序发布/执行而其余的是有序发布/执行。
存储器访问单元464的集合耦合到存储器单元470,存储器单元470包括耦合到数据高速缓存单元474的数据TLB单元472,数据高速缓存单元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中,并且视需要从其他子集冲刷掉。环形网络确保共享数据的相关性。环形网络是双向的,以允许诸如处理器核心、L2高速缓存器和其他逻辑块之类的代理在芯片内彼此通信。在一些实施例中,每个环形数据路径在每个方向上是1024位宽。
图5B是根据本发明实施例的图5A中的处理器核心的一部分的展开视图。图5B包括L1高速缓存器504的L1数据高速缓存器506A部分,以及关于矢量单元510和矢量寄存器514的更多细节。具体地,矢量单元510是6宽度矢量处理单元(VPU)(参见16宽度ALU528),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用混合单元520对寄存器输入进行混合,利用数值转换单元522A-B进行数值转换,以及利用复制单元524对存储器输入进行复制。
具有集成存储器控制器和图形元件的处理器
图6是根据本发明实施例的处理器600的框图,处理器600可以具有多于一个核心,可以具有集成存储器控制器,并且可以具有集成图形元件。图6中的实线框图示了处理器600,处理器600具有单个核心602A、系统代理610、由一个或多个总线控制器单元616构成的集合,而可选添加的虚线框图示了替代处理器600,该替代处理器600具有多个核心602A-N、系统代理单元610中的由一个或多个集成存储器控制器单元614构成的集合以及专用逻辑608。
因此,不同实现的处理器600可以包括:1)具有专用逻辑608以及核心602A-N的CPU,专用逻辑608是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核心),核心602A-N是一个或多个通用核心(例如,通用有序核心、通用无序核心、两者的组合);2)具有核心602A-N的协处理器,核心602A-N是预期主要用于图形和/或科学(吞吐量)的大量专用核心;以及3)具有核心602A-N的协处理器,核心602A-N是大量通用有序核心。因此,处理器600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量多集成核心(MIC)协处理器(包括30个或更多核心)、嵌入式处理器等。该处理器可以实现在一个或多个芯片上。处理器600可以使用多种工艺技术中的任何工艺技术(诸如例如BiCMOS、CMOS或NMOS)在一个或多个衬底上实现和/或可以是所述衬底的一部分。
存储器层级包括核心604A-N内一个或多个级别的高速缓存器、由一个或多个共享高速缓存单元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可以包括一个或多个处理器710、715,处理器710、715耦合到控制器集线器720。在一个实施例中,控制器集线器720包括图形存储器控制器集线器(GMCH)790和输入/输出集线器(IOH)750(其可以在分离的芯片上);GMCH790包括耦合到存储器740和协处理器745的存储器和图形控制器;IOH750将输入/输出(I/O)装置760耦合到GMCH790。替代地,存储器和图形控制器之一或二者都集成在处理器内(如本文所述),存储器740和协处理器745直接耦合到处理器710,并且控制器集线器720与IOH750在单个芯片中。
图7中用虚线表示附加处理器715的可选性质。每个处理器710、715可以包括本文描述的一个或多个处理核心,并且可以是处理器600的某个版本。
存储器740可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或两者的组合。对于至少一个实施例,控制器集线器720经由多点总线(诸如前端总线(FSB)、点对点接口或类似连接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,处理器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中所示,IMC872和882把处理器耦合到相应存储器,即存储器832和存储器834,它们可以是本地附接到相应处理器的主存储器的各部分。
处理器870、880可以各自使用点对点接口电路876、894、886、898经由个体P-P接口852、854与芯片组890交换信息。芯片组890可以可选地经由高性能接口892与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存器(未示出)可以被包括在处理器中或处于两个处理器外部,但是经由P-P互连件与处理器连接,使得在处理器处于低功率模式情况下处理器中任一个或全部二者的本地高速缓存信息可以存储在共享高速缓存器中。
芯片组890可以经由接口896耦合到第一总线816。在一个实施例中,第一总线816可以是外围部件互连(PCI)总线,或者是诸如PCI Express总线或其他I/O互连总线之类的总线,但本发明的范围不限于此。
如图8中所示,各种I/O装置814以及总线桥818可以耦合到第一总线816,总线桥818将第一总线816耦合到第二总线820。在一个实施例中,一个或多个附加处理器815(诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器)耦合到第一总线。在一个实施例中,第二总线820可以是低引脚数(LPC)总线。在一个实施例中,各种装置可以耦合到第二总线820,包括例如键盘和/或鼠标822、通信装置827和可以包括指令/代码和数据830的存储单元828,诸如磁盘驱动器或其他大容量存储装置。此外,音频I/O 824可以耦合到第二总线816。注意,其他架构是可能的。例如,代替图8的点对点架构,系统可以实现多点总线或其他这样的架构。
现在参考图9,所示出的是根据本发明的实施例的更具体的第二示例性系统900的框图。图8和9中的相似元件具有相似的附图标记,并且图8的某些方面已从图9中省略,以避免模糊图9的其他方面。
图9图示了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)972和982。因此,CL972、982包括集成存储器控制器单元并包括I/O控制逻辑。图9图示了不仅存储器832、834耦合到CL872、882,而且I/O装置914也耦合到控制逻辑872、882。传统I/O装置915耦合到芯片组890。
现在参考图10,示出了根据本发明实施例的SoC 1000的框图。图6中的类似元件具有相似的附图标记。此外,虚线框是更高级SoC上的可选特征。在图10中,(一个或多个)互连单元1002耦合到:应用处理器1010,包括由一个或多个核心102A-N构成的集合、高速缓存单元604A-N和(一个或多个)共享高速缓存单元606;系统代理单元610;(一个或多个)总线控制器单元616;(一个或多个)集成存储器控制器单元614;由一个或多个协处理器1020构成的集合,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1030;直接存储器存取(DMA)单元1032;以及显示单元1040,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器1020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等。
本文公开的机制的实施例可以以硬件、软件、固件或这些实现方法的组合来实现。本发明的实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置。
程序代码(诸如图8中所示的代码830)可以应用于输入指令以实施本文描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出装置。出于本申请的目的,处理系统包括具有处理器(诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器)的任何系统。
程序代码可以用高级过程编程语言或面向对象的编程语言来实现以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言实现。事实上,本文描述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是被编译或被解释的语言。
可以通过存储在机器可读介质上的代表性指令来实现至少一个实施例的一个或多个方面,该指令表示处理器内的各种逻辑,当该指令由机器读取时使得机器制造逻辑以实施所描述的技术。称为“IP核心”的这种表示可以存储在有形的机器可读介质上,并供应给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以包括但不限于由机器或装置制造或形成的物品的非暂态有形装置,包括:存储介质,诸如硬盘;包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、紧凑盘可重写(CD-RW)和磁光盘的任何其他类型的盘;半导体装置,诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡或适用于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(HDL),其定义本文描述的结构、电路、设备、处理器和/或系统特征)的非暂态有形机器可读介质。这些实施例也可以称为程序产品。
仿真(包括二进制转变、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转变(例如,使用静态二进制转变,包括动态编译的动态二进制转变)、变形、仿真或以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、离开处理器或者部分在处理器上和部分离开处理器。
图11是根据本发明的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但是替代地,指令转换器可以用软件、固件、硬件或其各种组合来实现。图11示出了可以使用第一编译器1104编译采用高级语言1102的程序以生成第一二进制代码(例如,x86)1106,第一二进制代码1106可以由具有至少一个第一指令集核心1116的处理器本机执行。在一些实施例中,具有至少一个第一指令集核心1116的处理器表示能够通过如下方式实施与具有至少一个x86指令集核心的英特尔处理器基本相同功能的任何处理器:兼容地执行或以其他方式处理(1)英特尔x86指令集核心的大部分指令集或(2)目标是在具有至少一个x86指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,以便实现与具有至少一个x86指令集核心的英特尔处理器基本相同的结果。第一编译器1104表示可操作为生成第一指令集1106的二进制代码(例如,目标代码)的编译器,该二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个第一指令集核心1116的处理器上执行。类似地,图11示出了采用高级语言1102的程序可以使用替代指令集编译器1108来编译以生成替代指令集二进制代码1110,替代指令集二进制代码1110可以由不具有至少一个第一指令集核心1114的处理器本机执行(例如,具有执行如下指令集的核心的处理器:执行加利福尼亚州桑尼维尔的MIPS技术的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集。)指令转换器1112用于将第一二进制代码1106转换为可由不具有第一指令集核心1114的处理器本机执行的代码。该经转换的代码不太可能与替代指令集二进制代码1110相同,因为能够做到这一点的指令转换器难以制造;但是,经转换的代码将完成一般操作,并由所述替代指令集中的指令构成。因此,指令转换器1112表示软件、固件、硬件或其组合,通过仿真、模拟或任何其他过程,这允许不具有第一指令集处理器或核心的处理器或其他电子装置执行第一二进制代码1106。
用于数字信号处理指令的设备和方法
下面描述数字信号处理(DSP)指令。在一个实施例中,实施DSP操作的电路和逻辑集成在图4B中所示的执行引擎单元450内,在上述各种核心(参见例如图6和10中的核心602A-N)内和/或在图5A中所示的矢量单元510内。例如,各种源和目的地寄存器可以是图4B中的(一个或多个)物理寄存器堆单元458和/或图3中的矢量寄存器310内的SIMD寄存器。以下描述的乘法电路、加法器电路、累加电路和其他电路可以集成在上述架构的执行部件(包括作为示例但不限于图4B中的(一个或多个)执行单元462)内。然而,应该注意,本发明的基本原理不限于这些特定架构。
本发明的一个实施例包括用于处理数字信号处理(DSP)指令的电路和/或逻辑。具体地,一个实施例包括乘法累加(MAC)架构,乘法累加(MAC)架构具有八个16×16位乘法器和两个64位累加器。下面描述的指令集架构(ISA)可以处理128位打包(8位、16位或32位数据元素)整数、定点和复数数据类型的各种乘法和MAC操作。此外,通过移位,舍入和饱和操作,某些指令直接支持高效快速傅里叶变换(FFT)和有限脉冲响应(FIR)滤波以及对累加数据的后处理。
新DSP指令的一个实施例使用基于VEX.128前缀的操作码编码,并且处置数据的后处理的几个SSE/SSE2/AVX指令与DSP ISA一起使用。具有存储器操作数的VEX编码的128位DSP指令可能具有放宽的存储器对齐要求。
在一个实施例中,指令还支持各种整数和定点数据类型,包括:
1)Q31数据类型,用于需要具有大于16位的模数转换(ADC)和数模转换(DAC)的信号;
2)在DSP算法中常见的Q15数据类型;
3)复数16位数据类型;和
4)复数32位数据类型。
本文描述的指令集架构目标是宽范围的标准DSP(例如FFT、滤波、模式匹配、相关、多项式评估等)和统计操作(例如均值、移动平均、方差等)。
本发明的实施例的目标应用包括用于计算机视觉的传感器、音频、分类任务和语音识别。本文描述的DSP ISA包括适用于如下各项的广泛的指令:深度神经网络(DNN)、自动语音识别(ASR)、卡尔曼滤波情况下的传感器融合、其他主要DSP应用等。给定权重序列{w1,w2,……wk}和输入序列{x1,x2,x3,……xn},许多图像处理、机器学习任务需要计算由yi=w1xi+w2xi+1+.................+wkxi+k-1定义的结果序列{y1,y2,y3,……yn+1-k}。
图12图示了可以在其上实现本发明的实施例的示例性处理器1255,示例性处理器1255包括用于同时执行多个指令线程的多个核心0-N。所示的实施例包括解码器1230内的DSP指令解码电路/逻辑1231和执行单元1240内的DSP指令执行电路/逻辑1341。这些管线部件可响应于DSP指令的解码和执行而实施本文所述的操作。虽然图12中仅示出了单个核心(核心0)的细节,但是将理解的是,处理器1255的每个其他核心可以包括类似的部件。
在描述本发明的实施例的具体细节之前,下面直接提供示例性处理器1255的各个部件的描述。多个核心0-N每个均可以包括:用于实施存储器操作(例如,诸如加载/存储操作)的存储器管理单元1290、一组通用寄存器(GPR)1205、一组矢量寄存器1206以及一组掩蔽寄存器1207。在一个实施例中,多个矢量数据元素被打包到每个矢量寄存器1206中,每个矢量寄存器1206可以具有512位宽度用于存储两个256位值,四个128位值,八个64位值,十六个32位值,等等。然而,本发明的基本原理不限于任何特定尺寸/类型的矢量数据。在一个实施例中,掩蔽寄存器1207包括八个64位操作数掩蔽寄存器(例如,实现为本文描述的掩蔽寄存器k0-k7),用于对存储在矢量寄存器1206中的值实施位掩蔽操作。然而,本发明的基本原理不限于任何特定的掩蔽寄存器尺寸/类型。
每个核心0-N可以包括专用级别1(L1)高速缓存器1212和级别2(L2)高速缓存器1211,用于根据指定的高速缓存管理策略来高速缓存指令和数据。L1高速缓存器1212包括用于存储指令的单独指令高速缓存器1220和用于存储数据的单独数据高速缓存器1221。存储在各种处理器高速缓存器中的指令和数据以高速缓存行的粒度被管理,高速缓存行可以是固定尺寸(例如,长度为64、128、512字节)。该示例性实施例的每个核心具有指令提取单元1210,用于从主存储器1200和/或共享的级别3(L3)高速缓存器1216提取指令。指令提取单元1210包括各种公知的部件,包括:下一指令指针1203,用于存储要从存储器1200(或高速缓存器之一)提取的下一指令的地址;指令转变后备缓冲器(ITLB)1204,用于存储最近使用的虚拟到物理指令地址的映射,以提高地址转变的速度;分支预测单元1202,用于推测性地预测指令分支地址;以及分支目标缓冲器(BTB)1201,用于存储分支地址和目标地址。
如所述的,解码单元1230包括DSP指令解码电路/逻辑1231,用于将本文描述的DSP指令解码成微操作或“uops”,并且执行单元1240包括用于执行DSP指令的DSP指令执行电路/逻辑1241。回写/退出单元1250退出执行的指令并回写结果。
用于利用旋转和减半来使打包数据元素相加的实施例
本发明的一个实施例包括用于利用旋转和可选的减半来实施打包字(16位数据元素)的矢量带符号相加的指令。具体地,一个实施例包括利用由立即数中的位指定的第二源寄存器中的数据元素的旋转(例如,由imm8[1:0] 指示的0°、90°、180°或270°)的两个打包数据寄存器的每一个中的字的矢量带符号ADD。如本文所使用的,ADD操作指的是两个正数的加法或减法,其中负打包数据值被加到正值。根据实现,结果可以基于附加的立即数位而被减半(例如,如果设置了imm8[2],则减半)并且结果被写入打包目的地寄存器中的对应字位置,诸如xmm1。该指令的一个特定实现在本文称为VPCADDROTSRAWxmm1、xmm2、xmm3/m128、imm8。
在一个实施例中,xmm1、xmm2和xmm3寄存器是128位打包数据寄存器,其存储双四字值,四个双字值或八个字值,并且xmm3/m128指示对应的128位源值可以从存储器或寄存器(xmm3)取回。虽然本文描述的某些实施例对复数字值进行操作,但是本发明的基本原理可以用复数和非复数值以及其他打包数据尺寸(包括例如四字、双字或字节)来实现。本文描述的复数加法运算可以用于各种类型的操作,包括但不限于Q15基数4快速傅立叶变换(FFT)计算。
图13图示了示例性源寄存器和/或目的地寄存器(SRCx/DESTx)的示例性数据元素和位分布。如所图示的,数据元素可以以字(16位)、双字(32位)和/或四字(64位)被打包到源寄存器和/或目的地寄存器中。在处理复数的一些实施例中,实部和虚部可以存储在相邻的数据元素位置中。例如,可以将实部存储为数据元素A,并且可以将对应的虚部存储为数据元素B。然而,在本文描述的一些实施例中,打包数据元素A-H可以表示所有复数或所有实数。
图14图示了用于利用旋转和(可选的)减半来实施打包复数字的相加的指令的示例性架构。复数字可以存储在源寄存器SRC1 1401和SRC2 1402中,示为打包数据元素A-H。在一个实施例中,加法器网络1410-1411实施八个并发ADD操作,将从SRC1 1401选择的字值加到从SRC2 1402选择的字值。不同的打包数据值可以由输入多路复用器1403路由到适当的加法器电路。
在一个实施例中,指令的立即数包括由一个或多个控制位构成的第一集合,用于从每个源寄存器1401-1402选择要相加的数据元素。例如,立即数的两位字段(例如,imm8[1:0])可以指定要被加到第一源寄存器1401中的每个打包复数字/从第一源寄存器1401中的每个打包复数字减去的第二源寄存器1402中的每个打包复数字。在一个实现中,指令的立即数包括由一个或多个控制位构成的第二集合,用于指示每个加法/减法操作的结果是否减半(例如,如果imm8[2]=1,则将结果减半)。然后将结果存储在SRC3/DEST寄存器1460中的打包数据元素位置中,该打包数据元素位置对应于第一源寄存器的源打包数据元素位置。
本发明的一个实施例根据以下代码序列操作:
因此,如果立即数位的第一集合指定第一值(例如,imm8[1:0]==2'b00),则第一源寄存器1401中的每个带符号打包字被加到第二源寄存器1402中的对应的带符号打包字中。如本文所使用的,“对应”表示相同的打包数据元素位置(例如,SRC2[15:0]中的打包数据元素对应于SRC1[15:0]中的打包数据元素)。因此,第一立即数值的ADD操作包括:S1A+S2A,S1B+S2B,S1C+S2C,S1D+S2D,S1E+S2E,S1F+S2F,S1G+S2G和S1H+S2H。
如果立即数位的第一集合指定不同值,则来自第二源寄存器的带符号打包字被加到除了对应的数据元素之外的第二模式中的带符号打包字。在一个实施例中,第二源寄存器中的带符号打包字根据立即数位被旋转指定量。这在不同实施例情况下可以以不同的方式实现。
在一个实施例中,第二源寄存器中的值在第二源寄存器内被物理地旋转指定量,并且由此产生的经旋转的值与第一源寄存器中的对应数据元素位置正确地匹配。也就是说,在旋转之后,第一源寄存器中的带符号打包字被简单地加到第二源寄存器中的对应数据元素位置中的经旋转的打包带符号字(例如,第一源中的[15:0]处的字被加到第二源中[15:0]处的经旋转的字)。
在替代实现中,本文中所描述的“旋转”是逻辑旋转,意味着在ADD操作之前数据元素未在第二源寄存器中物理旋转。而是,第二源寄存器中的打包带符号字被选择用于ADD操作,就像它们在第二源寄存器内已被物理旋转一样。在由执行电路实施的任何操作之前,上面的代码序列使用该表示法来基于打包字的原始位置指示第二源寄存器中的打包字。
简而言之,本发明的基本原理不限于本文描述的指令的任何特定物理实现。因此,虽然下面的讨论将第二源寄存器中的打包字描述为在ADD操作之前被旋转,但是旋转可以是如上所讨论的物理旋转或逻辑旋转。
在一个实施例中,第二值(例如,imm8[1:0]==2'b01),然后在实施加/减操作之前将第二源寄存器1402中的带符号打包字旋转90°。如上面的代码序列所指示的,在加/减之前在第二源寄存器中将值旋转90°导致如下操作:S1A-S2B,S1B+S2A,S1C-S2D,S1D+S2C,S1E-S2F,S1F+S2E,S1G-S2H和S1H+S2G。因此,对于该立即数值,替代在第一和第二源寄存器中使对应的数据元素相加,本实施例改变第二源寄存器中从元素B开始的每隔一个数据元素的符号(即,改变元素B,D,F和H的符号),并且然后将第一源寄存器1401中的每个数据元素与第二源寄存器1402中相邻位置中的数据元素相加(产生为SRC1401和SRC1402中的每对数据元素确定的和以及差)。
如果立即数位的第一集合指定第三值(例如,imm8[1:0]==2'b10),则在实施加/减操作之前,第二源寄存器1402中的带符号打包字旋转180°。如上面的代码序列所指示的,在相加之前,在第二源寄存器中将值旋转180°导致如下操作:S1A-S2B,S1B-S2A,S1C-S2D,S1D-S2C,S1E-S2F,S1F-S2E,S1G-S2H和S1H-S2G。因此,该实施例改变第二源寄存器中每个数据元素(即元素A-G)的符号,并且然后将第一源寄存器1401中的每个数据元素与第二源寄存器1402中的对应数据元素相加。
如果立即数位的第一集合指定第四值(例如,imm8[1:0]==2'b11),则在实施相加操作之前,第二源寄存器1402中的带符号打包字被旋转270°。如上所指示的,在相加之前在第二源寄存器1402中将值旋转270°导致如下操作:S1A+S2B,S1B-S2A,S1C+S2D,S1D-S2C,S1E+S2F,S1F-S2E,S1G+S2H和S1H-S2G。因此,该实施例改变在第二源寄存器中从元素A开始的每隔一个值(即,元素A,C,E和G)的符号,并且然后将第一源寄存器1401中的每个数据元素与第二源寄存器1402中的相邻位置中的数据元素相加。
如上所述,立即数位可以指示作为上述ADD操作的结果而生成的数据元素在被存储在目的地寄存器1460中之前是否应该减半。例如,在一个实施例中,如果imm8[2]=1,则由ADD操作产生的每个打包数据值向右移1位,导致使用二进制算术将该值除以2。
然后将移位结果或非移位结果由输出多路复用器1450路由而存储在目的地打包数据寄存器1460的打包数据元素位置中。在一个实施例中,目的地中的位置被选择为对应于第一源寄存器1401中的数据元素位置。例如,对于涉及SRC1 1401中的数据元素A的ADD操作,结果存储在目的地寄存器1460中的数据元素A位置。
注意,图14中所示的某些部件(诸如乘法器1405,累加电路1420-1421和饱和电路1440-1441)对于执行所描述的操作不是必需的。在这种情况下,假设数据在不经修改的情况下通过或绕过这些电路。
图15中图示了根据本发明的一个实施例的方法。该方法可以在上述处理器和系统架构的情境中实现,但不限于任何特定的系统架构。
在1501处,提取指令,该指令具有用于如下各项的字段:操作码和指示打包带符号字的第一和第二源操作数和目的地操作数,以及立即数。在1502处,对指令进行解码以生成第一经解码指令(例如,成为实施本文所述的旋转、移位和ADD操作的多个微操作)。在1503处,针对第一和第二操作数取回(例如,从存储器、数据高速缓存器等)打包带符号字值,并且把打包带符号字值分别存储在第一和第二源寄存器中。如所述,在一个实施例中,带符号字值存储在128位打包数据源寄存器中。
在1504处,执行经解码指令(或者更确切地说,执行通过解码生成的微操作)以识别第二源寄存器中的要被加到第二源寄存器中的打包带符号字的打包带符号字。可以通过评估立即数的某些位(例如,如前所述的imm8[1:0])来选择来自第二源寄存器的打包带符号字值。例如,如果立即数位指定第一值,则第一源寄存器中的每个打包带符号字值被加到第二源寄存器中对应位置中的打包带符号字值。如果立即数位指定第二值,则在实施相加操作之前,第二源寄存器中的打包带符号字被旋转90°;如果立即数位指定第三值,则在实施相加操作之前,第二源寄存器中的打包带符号字被旋转180°;以及如果立即数位指定第四值,则在实施相加操作之前,第二源寄存器中的打包带符号字被旋转270°。如上所述,旋转可能需要改变数据元素的符号和/或位置。
在1505处,评估立即数的不同部分(例如,诸如imm8[2]之类的特定位)以确定每个ADD操作的结果是否将被减半。如果立即数的该部分具有第一值(例如,imm8[2]=1),则结果在1506处被减半以生成第二结果。如上所述,将结果减半可以包括将每个结果向右移1位。在1507处,将第一或第二结果作为带符号打包字数据元素存储在目的地寄存器中。
在前述说明书中,已经参考本发明的特定示例性实施例描述了本发明的实施例。然而,将显而易见的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图应被视为说明性的而非限制性的。
本发明的实施例可包括上面已描述的各种步骤。这些步骤可以体现在机器可执行指令中,该机器可执行指令可以用于使通用或专用处理器实施这些步骤。替代地,这些步骤可以由包含用于实施这些步骤的硬连线逻辑的特定硬件部件来实施,或者由编程计算机部件和定制硬件部件的任何组合来实施。
如本文所述,指令可以指代硬件的特定配置(诸如被配置为实施某些操作或具有预定功能的专用集成电路(ASIC))或存储在非暂态计算机可读介质中体现的存储器中的软件指令。因此,可以使用在一个或多个电子装置(例如,终端站、网络元件等)上存储和执行的代码和数据来实现图中所示的技术。这种电子装置使用计算机机器可读介质(诸如非暂态计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪存装置;相变存储器)和暂态计算机机器可读通信介质(例如,电,光,声或其他形式的传播信号-诸如载波,红外信号,数字信号等等))存储和传送(通过网络在内部和/或与其他电子装置)代码和数据。此外,这种电子装置通常包括由耦合到一个或多个其他部件的一个或多个处理器构成的集合,所述一个或多个其他部件诸如是一个或多个存储装置(非暂态机器可读存储介质)、用户输入/输出装置(例如,键盘、触摸屏和/或显示器)和网络连接。处理器的集合和其他部件的耦合通常通过一个或多个总线和桥(也称为总线控制器)。存储装置和承载网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子装置的存储装置通常存储用于在由该电子装置的一个或多个处理器构成的集合上执行的代码和/或数据。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。在该整个详细描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明。在某些情况下,没有详细描述公知的结构和功能,以避免模糊本发明的主题。因此,本发明的范围和精神应根据下面的权利要求来判断。

Claims (25)

1.一种处理器,包括:
解码器,用于解码指令以生成经解码指令,所述指令包括操作码、立即数以及识别多个打包数据源寄存器和打包数据目的地寄存器的操作数;
第一源寄存器,用于存储第一多个打包带符号字;
第二源寄存器,用于存储第二多个打包带符号字;
执行电路,用于执行所述经解码指令,所述执行电路包括:
加法器电路,用于将来自第一源寄存器的每个打包带符号字与来自第二源寄存器的经选择的打包带符号字相加,以生成多个带符号字结果,
所述加法器电路用于根据所述指令的立即数中的旋转值从第二源寄存器中选择每个打包带符号字,所述旋转值用于指示在所述加法器电路实施相加之前要应用于第二源寄存器中的打包带符号字的旋转量;和
目的地寄存器,用于将所述多个带符号字结果存储在所述目的地寄存器的指定数据元素位置中。
2.如权利要求1所述的处理器,还包括:
减半电路,用于:如果所述立即数的指定位具有第一值,则将每个带符号字结果划分成一半以生成减半结果,其中所述减半结果而不是所述多个带符号字结果将被存储在目的地寄存器中。
3.如权利要求2所述的处理器,其中,所述减半电路包括移位电路,所述移位电路用于将所述带符号字结果右移一位,以生成所述减半结果。
4.如权利要求1或3所述的处理器,其中来自第一和第二源寄存器的打包带符号字包括复数值,并且其中旋转包括改变一个或多个带符号字的符号。
5.如权利要求1或4所述的处理器,其中所述旋转值包括指示0°旋转的第一值,指示90°旋转的第二值,指示180°旋转的第三值,或指示270°旋转的第四值。
6.如权利要求5所述的处理器,其中如果旋转值包括第一值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的对应数据元素位置的打包带符号字。
7.如权利要求6所述的处理器,其中如果旋转值包括第二值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的相邻数据元素位置的打包带符号字,并且其中第二源寄存器中一半打包带符号字的符号被更改。
8.如权利要求7所述的处理器,其中如果旋转值包括第三值,则来自第二源寄存器的每个打包带符号字的每个符号被改变,并且来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的对应数据元素位置的具有已改变的符号的打包带符号字。
9.如权利要求8所述的处理器,其中如果旋转值包括第四值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的相邻数据元素位置的打包带符号字,并且其中第二源寄存器中打包带符号字的不同一半的符号被改变。
10.一种方法,包括:
解码指令以生成经解码指令,所述指令包括操作码、立即数以及识别多个打包数据源寄存器和打包数据目的地寄存器的操作数;
将第一多个打包带符号字存储在第一源寄存器中;
将第二多个打包带符号字存储在第二源寄存器中;
将来自第一源寄存器的每个打包带符号字与来自第二源寄存器的经选择的打包带符号字相加,以生成多个带符号字结果,
根据所述指令的立即数中的旋转值从第二源寄存器中选择用于相加的每个打包带符号字,所述旋转值用于指示在加法器电路实施相加之前要应用于第二源寄存器中的打包带符号字的旋转量;和
将所述多个带符号字结果存储在目的地寄存器的指定数据元素位置中。
11.如权利要求10所述的方法,还包括:
如果所述立即数的指定位具有第一值,则将每个带符号字结果划分成一半以生成减半结果,其中所述减半结果而不是所述多个带符号字结果将被存储在目的地寄存器中。
12.如权利要求11所述的方法,其中,划分包括将所述带符号字结果右移1位以生成所述减半结果。
13.如权利要求10或12所述的方法,其中来自第一和第二源寄存器的打包带符号字包括复数值,并且其中旋转包括改变一个或多个带符号字的符号。
14.根据权利要求10或13所述的方法,其中,所述旋转值包括指示0°旋转的第一值,指示90°旋转的第二值,指示180°旋转的第三值,或指示270°旋转的第四值。
15.如权利要求14所述的方法,其中如果旋转值包括第一值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的对应数据元素位置的打包带符号字。
16.如权利要求15所述的方法,其中如果旋转值包括第二值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的相邻数据元素位置的打包带符号字,并且其中第二源寄存器中一半打包带符号字的符号被更改。
17.如权利要求16所述的方法,其中如果旋转值包括第三值,则来自第二源寄存器的每个打包带符号字的每个符号被改变,并且来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的对应数据元素位置的具有已改变的符号的打包带符号字。
18.如权利要求17所述的方法,其中如果旋转值包括第四值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的相邻数据元素位置的打包带符号字,并且其中第二源寄存器中打包带符号字的不同一半的符号被改变。
19.一种机器可读介质,具有存储在其上的程序代码,所述程序代码当由机器执行时,使得所述机器实施以下操作:
解码指令以生成经解码指令,所述指令包括操作码、立即数以及识别多个打包数据源寄存器和打包数据目的地寄存器的操作数;
将第一多个打包带符号字存储在第一源寄存器中;
将第二多个打包带符号字存储在第二源寄存器中;
将来自第一源寄存器的每个打包带符号字与来自第二源寄存器的经选择的打包带符号字相加,以生成多个带符号字结果,
根据所述指令的立即数中的旋转值从第二源寄存器中选择用于相加的每个打包带符号字,所述旋转值用于指示在加法器电路实施相加之前要应用于第二源寄存器中的打包带符号字的旋转量;和
将所述多个带符号字结果存储在目的地寄存器的指定数据元素位置中。
20.如权利要求19所述的机器可读介质,还包括用于使所述处理器实施以下操作的程序代码:
如果所述立即数的指定位具有第一值,则将每个带符号字结果划分成一半以生成减半结果,其中所述减半结果而不是所述多个带符号字结果将被存储在目的地寄存器中。
21.如权利要求20所述的机器可读介质,其中,划分包括将所述带符号字结果右移1位以生成所述减半结果。
22.如权利要求19所述的机器可读介质,其中来自第一和第二源寄存器的打包带符号字包括复数值,并且其中旋转包括改变一个或多个带符号字的符号。
23.如权利要求19或22所述的机器可读介质,其中所述旋转值包括指示0°旋转的第一值,指示90°旋转的第二值,指示180°旋转的第三值,或指示270°旋转的第四值。
24.如权利要求23所述的机器可读介质,其中如果旋转值包括第一值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的对应数据元素位置的打包带符号字。
25.如权利要求24所述的机器可读介质,其中如果旋转值包括第二值,则来自第一源寄存器的每个打包带符号字将被加到来自第二源寄存器中的相邻数据元素位置的打包带符号字,并且其中第二源寄存器中一半打包带符号字的符号被更改。
CN201811390772.5A 2017-12-21 2018-11-21 用于利用旋转和减半来使打包数据元素相加的设备和方法 Pending CN109947473A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/850,071 US10496407B2 (en) 2017-12-21 2017-12-21 Apparatus and method for adding packed data elements with rotation and halving
US15/850071 2017-12-21

Publications (1)

Publication Number Publication Date
CN109947473A true CN109947473A (zh) 2019-06-28

Family

ID=66767949

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811390772.5A Pending CN109947473A (zh) 2017-12-21 2018-11-21 用于利用旋转和减半来使打包数据元素相加的设备和方法

Country Status (3)

Country Link
US (1) US10496407B2 (zh)
CN (1) CN109947473A (zh)
DE (1) DE102018129291A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112711441A (zh) * 2019-10-25 2021-04-27 安徽寒武纪信息科技有限公司 用于转换数据类型的转换器、芯片、电子设备及其方法
US20240004661A1 (en) * 2022-07-02 2024-01-04 Intel Corporation Add with rotation instruction and support

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5509129A (en) * 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations

Also Published As

Publication number Publication date
US10496407B2 (en) 2019-12-03
DE102018129291A1 (de) 2019-06-27
US20190196826A1 (en) 2019-06-27

Similar Documents

Publication Publication Date Title
CN104350492B (zh) 在大寄存器空间中利用累加的向量乘法
CN104838357B (zh) 向量化方法、系统及处理器
CN104040488B (zh) 用于给出相应复数的复共轭的矢量指令
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN109582281A (zh) 用于复数与复数之间共轭乘法的设备和方法
CN104081337B (zh) 用于响应于单个指令来执行横向部分求和的系统、装置和方法
CN104137053B (zh) 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法
CN104126170B (zh) 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令
CN109840068A (zh) 用于复数乘法的装置和方法
CN104350461B (zh) 具有不同的读和写掩码的多元素指令
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN109947474A (zh) 用于有符号字的向量乘法、舍入和饱和的装置和方法
CN109582356A (zh) 用于紧缩数据元素的乘、加/减和累加的装置和方法
CN109947481A (zh) 用于处理分数倒数操作的装置和方法
CN109947478A (zh) 用于有符号双字的向量乘法和累加的装置和方法
CN109947471A (zh) 用于将多组紧缩字节相乘、求和以及累加的装置和方法
CN109683961A (zh) 用于复紧缩数据元素和实紧缩数据元素的乘法和累加的装置和方法
CN108268244A (zh) 用于算术递归的系统、装置和方法
CN110069282A (zh) 用于紧缩字的向量乘法和累加的装置和方法
CN107145335A (zh) 用于大整数运算的向量指令的装置和方法
CN107003849A (zh) 用于执行冲突检测的方法和装置
CN110007963A (zh) 用于无符号双字的矢量乘法和累加的设备和方法
CN109582282A (zh) 用于向量紧缩有符号值的乘法和累加的系统、装置和方法
CN108351782A (zh) 用于跨步访问的系统、装置和方法
CN109582365A (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