CN109947474A - 用于有符号字的向量乘法、舍入和饱和的装置和方法 - Google Patents
用于有符号字的向量乘法、舍入和饱和的装置和方法 Download PDFInfo
- Publication number
- CN109947474A CN109947474A CN201811392383.6A CN201811392383A CN109947474A CN 109947474 A CN109947474 A CN 109947474A CN 201811392383 A CN201811392383 A CN 201811392383A CN 109947474 A CN109947474 A CN 109947474A
- Authority
- CN
- China
- Prior art keywords
- symbol
- data element
- word
- instruction
- rounding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 239000013598 vector Substances 0.000 title abstract description 76
- 238000012856 packing Methods 0.000 claims abstract description 43
- 238000006243 chemical reaction Methods 0.000 claims abstract description 18
- 238000003860 storage Methods 0.000 claims description 32
- 229920006395 saturated elastomer Polymers 0.000 claims description 13
- 235000013399 edible fruits Nutrition 0.000 claims description 4
- 230000005611 electricity Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 36
- 238000006073 displacement reaction Methods 0.000 description 23
- 238000012545 processing Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 11
- 210000004027 cell Anatomy 0.000 description 10
- 230000004069 differentiation Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000007792 addition Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 7
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 6
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 description 6
- 230000003321 amplification Effects 0.000 description 6
- 230000001186 cumulative effect Effects 0.000 description 6
- 230000000873 masking effect Effects 0.000 description 6
- 238000003199 nucleic acid amplification method Methods 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 description 4
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 description 4
- 230000006399 behavior Effects 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 210000004940 nucleus Anatomy 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000003756 stirring Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 102000004866 Microtubule-associated protein 1B Human genes 0.000 description 1
- 108090001040 Microtubule-associated protein 1B Proteins 0.000 description 1
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000003416 augmentation Effects 0.000 description 1
- 238000010009 beating Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000002401 inhibitory effect Effects 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Abstract
本发明涉及用于有符号字的向量乘法、舍入和饱和的装置和方法。方法包括:解码指令;执行所述指令以实行以下操作:同时将存储在第一源寄存器中的第一多个打包的有符号字数据元素中的多个打包的有符号字数据元素中的每个与存储在第二源寄存器中的第二多个打包的有符号字数据元素中的对应打包的有符号字数据元素相乘,以生成多个有符号双字乘积;将所述多个有符号双字乘积转换为多个分数有符号字,其中转换包括根据由存储在控制寄存器中的舍入控制值指示的舍入模式对有符号双字乘积进行舍入以生成所述多个分数有符号字;以及将所述多个分数有符号字作为打包的有符号字分数数据元素存储在目的地寄存器内的指定数据元素位置中。
Description
技术领域
本发明的实施例一般地涉及计算机处理器领域。更具体地,各实施例涉及用于实行有符号字的向量乘法、舍入和饱和的装置和方法。
背景技术
指令集或指令集架构(ISA)是与编程有关的计算机架构的一部分,包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。应当注意,术语“指令”在本文中一般指代宏指令——其是提供给处理器用于执行的指令——与微指令或微操作相对——其是处理器的解码器解码宏指令的结果。微指令或微操作可以被配置成命令处理器上的执行单元实行操作以实现与宏指令相关联的逻辑。
ISA区别于微架构,微架构是用于实现指令集的处理器设计技术的集合。具有不同微架构的处理器可以共享公用的指令集。例如,Intel®奔腾4处理器、Intel®Core™处理器和来自加利福尼亚州森尼韦尔的超威半导体(Advanced Micro Devices)公司的处理器实现x86指令集的几乎相同的版本(具有与较新的版本添加在一起的一些扩展),但是具有不同的内部设计。例如,ISA的相同寄存器架构可以使用公知的技术(包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)和引退寄存器文件)的一个或多个动态分配的物理寄存器)在不同的微架构中以不同的方式实现。除非另外指定,否则短语寄存器架构、寄存器文件和寄存器在本文中用于指代对软件/编程者可见的寄存器架构、寄存器文件和寄存器以及指令指定寄存器的方式。在需要区别的情况下,形容词“逻辑的”、“架构的”或“软件可见的”将用于指示寄存器架构中的寄存器/文件,而不同的形容词将用于指明在给定微架构中的寄存器(例如,物理寄存器、重排序缓冲器、引退寄存器、寄存器池)。
乘法累加是常见的数字信号处理操作,其计算两个数的乘积并将该乘积加到累加值。现有的单指令多数据(SIMD)微架构通过执行一系列指令来实现乘法累加操作。例如,可以利用如下方式实行乘法累加:乘法指令,然后是4路加法,并且然后是与目的地四字(quadword)数据的累加以生成两个64位饱和结果。
附图说明
根据结合以下附图的以下详细描述,可以获得对本发明的更好理解,在附图中:
图1A和1B是图示根据本发明实施例的通用向量友好指令格式及其指令模板的框图;
图2A-C是图示根据本发明实施例的示例性VEX指令格式的框图;
图3是根据本发明一个实施例的寄存器架构的框图;以及
图4A是图示根据本发明实施例的示例性有序取出、解码、引退流水线和示例性寄存器重命名、无序发布/执行流水线二者的框图;
图4B是图示根据本发明实施例的要包括在处理器中的有序取出、解码、引退核心的示例性实施例和示例性寄存器重命名、无序发布/执行架构核心二者的框图;
图5A是单个处理器核心连同它到管芯上互连网络的连接的框图;
图5B图示了根据本发明实施例的图5A中的处理器核心的一部分的展开图;
图6是根据本发明实施例的单核处理器和具有集成存储器控制器和图形元件(graphics)的多核处理器的框图;
图7图示了根据本发明一个实施例的系统的框图;
图8图示了根据本发明实施例的第二系统的框图;
图9图示了根据本发明实施例的第三系统的框图;
图10图示了根据本发明实施例的片上系统(SoC)的框图;
图11图示了根据本发明实施例的对比将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;
图12图示了可以在其上实现本发明实施例的处理器架构;
图13图示了根据一个实施例的包含实值和复值的多个打包数据元素;
图14A-B图示打包数据处理架构的实施例;以及
图15图示了根据本发明的一个实施例的方法。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员而言将显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明的实施例。在其他实例中,以框图形式示出了公知的结构和设备,以避免模糊本发明实施例的基本原理。
示例性处理器架构、指令格式和数据类型
指令集包括一个或多个指令格式。给定的指令格式定义了各种字段(位的数目、位的位置),以便除其他之外还指定要实行的操作(操作码)和要对其实行该操作的(一个或多个)操作数。一些指令格式被通过指令模板(或子格式)的定义进一步分解。例如,给定的指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常采用相同的次序,但是至少一些因为有较少字段被包括而具有不同的位位置)和/或定义为具有被不同地解释的给定字段。因此,ISA的每个指令被使用给定的指令格式表示(并且,如果被定义,则采用该指令格式的指令模板中的给定一个)并且包括用于指定操作和操作数的字段。例如,示例性加法(ADD)指令具有特定操作码和指令格式,该指令格式包括用来指定该操作码的操作码字段和用来选择操作数的操作数字段(源1/目的地和源2);并且该加法指令在指令流中的出现将使操作数字段中具有选择特定操作数的特定内容。
本文中描述的(一个或多个)指令的实施例可以以不同格式体现。另外,以下详述示例性系统、架构和流水线。所述(一个或多个)指令的实施例可以在这样的系统、架构和流水线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作二者的实施例,但是替代实施例仅使用向量友好指令格式的向量操作。
图1A-1B是图示根据本发明实施例的通用向量友好指令格式及其指令模板的框图。图1A是图示根据本发明实施例的通用向量友好指令格式及其A类指令模板的框图;而图1B是图示根据本发明实施例的通用向量友好指令格式及其B类指令模板的框图。具体地,针对通用向量友好指令格式100定义A类和B类指令模板,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指令模板内,示出了存储器访问、临时(temporal)125指令模板和存储器访问、非临时130指令模板。图1B中的B类指令模板包括:1)在无存储器访问105指令模板内,示出了无存储器访问、写掩码(write mask)控制、部分舍入控制类型操作112指令模板和无存储器访问、写掩码控制、vsize类型操作117指令模板;以及2)在存储器访问120指令模板内,示出了存储器访问、写掩码控制127指令模板。
通用向量友好指令格式100包括在下面以图1A-1B中图示的次序列出的以下字段。
格式字段140——该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,并因此标识以向量友好指令格式的指令在指令流中的出现。照此,在仅具有通用向量友好指令格式的指令集不需要该字段的意义上,该字段是可选的。
基础操作(base operation)字段142——其内容区分不同的基础操作。
寄存器索引字段144——其内容直接地或通过地址生成来指定源和目的地操作数的位置,无论它们在寄存器中还是在存储器中。这些包括足够数目的位以从P×Q(例如32×512、16×128、32×1024、64×1024)的寄存器文件中选择N个寄存器。虽然在一个实施例中,N可以多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个也充当目的地,可以支持多达三个源,其中这些源中的一个也充当目的地,可以支持多达两个源和一个目的地)。
修饰符(modifier)字段146——其内容将指定存储器访问的以通用向量指令格式的指令的出现与不指定存储器访问的指令的出现区分开;即,区分无存储器访问105指令模板和存储器访问120指令模板。存储器访问操作进行读和/或写到存储器层级(在一些情况下使用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不进行读和/或写到存储器层级(例如,源和目的地是寄存器)。虽然,在一个实施例中,该字段还在三个不同方式之间进行选择以实行存储器地址计算,但是替代实施例可以支持更多、更少或不同的方式来实行存储器地址计算。
扩增(augmentation)操作字段150——其内容区分除了基础操作之外还要实行多种不同操作中的哪一个。该字段是情境特定的。在本发明的一个实施例中,该字段被划分成类字段168、阿尔法字段152和贝塔字段154。扩增操作字段150允许在单个指令中而不是2、3或4个指令中实行公用操作组。
比例(scale)字段160——其内容允许用于存储器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的内容的缩放。
位移字段162A——其内容用作存储器地址生成(例如,用于使用2比例 * 索引+基址+位移的地址生成)的一部分。
位移因数字段162B(注意,位移字段162A直接在位移因数字段162B上的并置指示一个或另一个被使用)——其内容用作地址生成的一部分;其指定要按照存储器访问的尺寸(N)缩放的位移因数——其中N是存储器访问中的字节数(例如,用于使用2比例 * 索引+基址+经缩放的位移的地址生成)。忽略冗余的低阶位,并且因此,使位移因数字段的内容乘以存储器操作数总尺寸(N),以便生成要在计算有效地址中使用的最终位移。N的值由处理器硬件在运行时基于全操作码字段174(本文中稍后描述)和数据操纵字段154C来确定。在位移字段162A和位移因数字段162B不用于无存储器访问105指令模板和/或不同实施例可以仅实现这两个中的一个或这两个都不实现的意义上,位移字段162A和位移因数字段162B是可选的。
数据元素宽度字段164——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中用于所有指令;在其他实施例中仅用于一些指令)。在如果仅支持一个数据元素宽度和/或使用操作码的某一方面支持多个数据元素宽度则不需要该字段的的意义上,该字段是可选的。
写掩码字段170——其内容基于每个数据元素位置来控制目的地向量操作数中的该数据元素位置是否反映了基础操作和扩增操作的结果。A类指令模板支持合并-写掩蔽(writemasking),而B类指令模板支持合并-写掩蔽和归零-写掩蔽二者。在合并时,向量掩码允许保护目的地中的任何元素集免于在执行(由基础操作和扩增操作指定的)任何操作期间更新;在另一个实施例中,保留目的地的每个元素的旧值,其中对应掩码位具有0。相比之下,在归零时,向量掩码允许在执行(由基础操作和扩增操作指定的)任何操作期间将目的地中的任何元素集归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置为0。该功能性的子集是控制正在实行的操作的向量长度(即,从第一个到最后一个正在被修改的元素的跨度)的能力;然而,被修改的元素不必是连续的。因此,写掩码字段170允许部分向量操作,其包括加载、存储、算术、逻辑等。虽然描述了其中写掩码字段170的内容选择多个写掩码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且因此写掩码字段170的内容间接标识要实行的所述掩蔽)的本发明实施例,但是代替或者附加的替代实施例允许掩码写字段170的内容直接指定要实行的掩蔽。
立即数字段172——其内容允许对立即数的指定(specification)。在该字段不存在于不支持立即数的通用向量友好格式的实现中并且它不存在于不使用立即数的指令中的意义上,该字段是可选的。
类字段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。
向量存储器指令在转换支持的情况下实行从存储器的向量加载和向存储器的向量存储。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中实际传送的元素由被选择作为写掩码的向量掩码的内容指示。
存储器访问指令模板——临时的
临时数据是可能被足够快地重新使用来受益于进行高速缓存的数据。然而,这是一个提示,并且不同处理器可以以不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板——非临时的
非临时数据是不太可能被足够快地重新使用来受益于在第1级高速缓存中进行高速缓存并且应当被给予用于驱逐的优先权的数据。然而,这是一个提示,并且不同的处理器可以以不同的方式实现它,包括完全忽略该提示。
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)具有使用所有类的指令的不同组合编写的替代例程且具有控制流程代码的形式,所述控制流程代码基于由当前正执行该代码的处理器支持的指令来选择要执行的例程。
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.vvvv 220(VEX字节2,位[6:3]——vvvv)的作用可以包括以下:1)VEX.vvvv对以反转(1补码)形式指定的第一源寄存器操作数进行编码,并且对于具有2个或更多源操作数的指令有效;2)VEX.vvvv针对某些向量移位对以1补码形式指定的目的地寄存器操作数进行编码;或者3)VEX.vvvv不对任何操作数进行编码,该字段被保留并且应当包含1111b。如果VEX.L 268尺寸字段(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)的内容包括SS 252(位[7-6]),其用于存储器地址生成。先前已经关于寄存器索引Xxxx和Bbbb提到了SIB.xxx 254(位[5-3])和SIB.bbb 256(位[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,并且这两个单元都被耦合到存储器单元470。核心490可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或替代核心类型。作为又一选项,核心490可以是专用核心,诸如例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元430包括分支预测单元432,其被耦合到指令高速缓存单元434,该指令高速缓存单元434被耦合到指令转译后备缓冲器(TLB)436,该指令转译后备缓冲器(TLB)436被耦合到指令取出单元438,该指令取出单元438被耦合到解码单元440。解码单元440(或解码器)可以解码指令,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,其解码自原始指令、或以其他方式反映原始指令、或导出自原始指令。可以使用各种不同机制来实现解码单元440。合适机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核心490包括微代码ROM或存储用于(例如,在解码单元440中或否则在前端单元430内的)某些宏指令的微代码的其他介质。解码单元440被耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括重命名/分配器单元452,其被耦合到引退单元454和一组一个或多个调度器单元456。(一个或多个)调度器单元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高速缓存的本地子集504的直接访问路径。由处理器核心读的数据被存储在其L2高速缓存子集504中并且可以被快速地、与其他处理器核心访问它们自己的本地L2高速缓存子集同时访问。由处理器核心写的数据被存储在其自己的L2高速缓存子集504中并且被从其他子集中清除,如果必要的话。环形网络确保了共享数据的一致性。该环形网络是双向的以允许诸如处理器核心、L2高速缓存以及其他逻辑块之类的代理在芯片内与彼此通信。在一些实施例中,每个环形数据路径每个方向都是1024位宽。
图5B是根据本发明实施例的图5A中的处理器核心的一部分的展开图。图5B包括L1高速缓存504的L1数据高速缓存506A部分以及关于向量单元510和向量寄存器514的更多细节。具体地,向量单元510是16宽向量处理单元(VPU)(参见16宽ALU 528),其执行整数指令、单精度浮点指令以及双精度浮点指令中的一个或多个。VPU支持利用拌和单元520拌和寄存器输入、利用数值转换单元522A-B进行的数值转换以及利用复制单元524对存储器输入的复制。
具有集成存储器控制器和图形元件的处理器
图6是根据本发明实施例的可以具有不止一个核心、可以具有集成存储器控制器并且可以具有集成图形元件的处理器600的框图。图6中的实线框图示了具有单个核心602A、系统代理610、一组一个或多个总线控制器单元616的处理器600,而虚线框的可选附加图示了具有多个核心602A-N、系统代理单元610中的一组一个或多个集成存储器控制器单元614以及专用逻辑608的替代处理器600。
因此,处理器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和核心602A-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,其被耦合到控制器中枢720。在一个实施例中,控制器中枢720包括图形存储器控制器中枢(GMCH)790以及输入/输出中枢(IOH)750(其可以在分离的芯片上);GMCH 790包括存储器740和协处理器745所耦合到的存储器和图形控制器;IOH 750将输入/输出(I/O)设备760耦合到GMCH 790。替代地,存储器和图形控制器中的一个或二者被集成在(如本文中描述的)处理器内,存储器740和协处理器745被直接耦合到处理器710和在具有IOH 750的单个芯片中的控制器中枢720。
在图7中用虚线表示附加处理器715的可选性质。每个处理器710、715可以包括本文中描述的处理核心中的一个或多个并且可以是处理器600的某一版本。
存储器740可以例如是动态随机存取存储器(DRAM)、相变存储器(PCM)或这两个的组合。针对至少一个实施例,控制器中枢720经由多点(multi-drop)总线(诸如前侧总线(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被示出分别包括集成存储器控制器(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、878、886、888经由单独的P-P接口852、854与芯片组890交换信息。芯片组890可以可选地经由高性能接口892与协处理器838交换信息。在一个实施例中,协处理器838是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。
共享高速缓存(未示出)可以被包括在任一处理器中或者在两个处理器外部,但经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中则任一或两个处理器的本地高速缓存信息可以被存储在共享高速缓存中。
芯片组890可以经由接口896耦合到第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线,或者诸如PCI快速总线或另一I/O互连总线之类的总线,但是本发明的范围不被如此限制。
如图8中所示,各种I/O设备814可以被耦合到第一总线816连同总线桥818,该总线桥818将第一总线816耦合到第二总线820。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器之类的一个或多个附加处理器815被耦合到第一总线816。在一个实施例中,第二总线820可以是低引脚计数(LPC)总线。各种设备可以被耦合到第二总线820,包括例如键盘和/或鼠标822、通信设备827以及诸如盘驱动器或其他大容量存储设备之类的存储单元828,其在一个实施例中可以包括指令/代码和数据830。进一步地,音频I/O 824可以被耦合到第二总线816。注意,其他架构是可能的。例如,作为图8的点到点架构的替代,系统可以实现多点总线或其他这样的架构。
现在参考图9,示出了根据本发明实施例的第二较具体的示例性系统900的框图。图8和9中的相似元件具有相似的参考数字,并且已经从图9中省略了图8的某些方面以便避免使图9的其他方面模糊。
图9图示了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)972和982。因此,CL 972、982包括集成存储器控制器单元并且包括I/O控制逻辑。图9图示了不仅存储器832、834被耦合到CL 972、982,而且I/O设备914也被耦合到控制逻辑972、982。传统I/O设备915被耦合到芯片组890。
现在参考图10,示出了根据本发明实施例的SoC 1000的框图。图6中的类似元件具有相似的参考数字。并且,虚线框是更高级的SoC上的可选特征。在图10中,(一个或多个)互连单元1002被耦合到:应用处理器1010,其包括一组一个或多个核心602A-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(例如,目标代码)的编译器,该二进制代码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内的SIMD寄存器和/或图3中的向量寄存器310。下面描述的乘法电路、加法器电路、累加电路和其他电路可以被集成在上面描述的架构的执行组件(作为示例并且不限制地包括图4B中的(一个或多个)执行单元462)内。然而,应当注意,本发明的基本原理不限于这些特定架构。
本发明的一个实施例包括用于处理数字信号处理(DSP)指令的电路和/或逻辑。特别地,一个实施例包括具有八个16×16位乘法器和两个64位累加器的乘法累加(MAC)架构。下面描述的指令集架构(ISA)可以处理128位打包(8位、16位或32位数据元素)整数、定点和复杂的(complex)数据类型上的各种乘法和MAC操作。此外,通过移位、舍入和饱和操作,某些指令直接支持高效快速傅里叶变换(FFT)和有限脉冲响应(FIR)滤波以及对累加数据的后处理。
新DSP指令的一个实施例使用基于VEX.128前缀的操作码编码,并且与DSP ISA一起使用处置数据的后处理的几个SSE/SSE2/AVX指令。具有存储器操作数的VEX编码的128位DSP指令可能具有放宽的存储器对齐要求。
在一个实施例中,指令还支持多种整数和定点数据类型,其包括:
1)Q31数据类型,用于需要具有大于16位的模数转换(ADC)和数模转换(DAC)的信号;
2)在DSP算法中常见的Q15数据类型;
3)复杂的16位数据类型;以及
4)复杂的32位数据类型。
本文中描述的指令集架构将宽范围的标准DSP(例如FFT、滤波、模式匹配、相关、多项式评估等)和统计操作(例如均值、移动平均(moving average)、方差等)作为目标。
本发明的实施例的目标应用包括用于计算机视觉和语音识别的传感器、音频、分类任务。本文中描述的DSP ISA包括适用于深度神经网络(DNN)、自动语音识别(ASR)、利用卡尔曼滤波的传感器融合、其他主要DSP应用等的宽范围的指令。给定权重序列{ w1,w2……wk }和输入序列{ x1,x2,x3……xn },许多图像处理、机器学习任务需要计算由yi = w1xi+w2xi+1+ …………….. + wk xi+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包括用于对存储在向量寄存器1206中的值实行位掩蔽操作的八个64位操作数掩码寄存器(例如,被实现为本文中描述的掩码寄存器k0-k7)。然而,本发明的基本原理不限于任何特定的掩码寄存器尺寸/类型。
每个核心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指令解码成微操作或“uop”,并且执行单元1240包括用于执行DSP指令的DSP指令执行电路/逻辑1241。写回/引退单元1250引退执行的指令并写回结果。
用于实行有符号字的向量分数(fractional)乘法的实施例
本发明的一个实施例包括用于实行xmm2和xmm3/m128中的有符号字的打包分数乘法、舍入、饱和以及将结果的高16位存储到xmm1中的指令。在一个实施例中,控制寄存器MXCSR用舍入控制值指定要实行的舍入类型。具体地,一个实施例定义了四个舍入模式:舍入到最近、向上舍入、向下舍入和朝零舍入。在一个实施例中,舍入到最近意味着舍入结果最接近无限精确结果。如果两个值同等接近,则结果是偶数值(具有零最低有效位的那个)。在一个实施例中,默认的舍入模式是舍入到最近,因为该模式提供真实结果的最准确且统计上无偏差的估计并且适合于大多数应用。向上舍入意味着舍入结果最接近但不大于无限精确结果,向下舍入意味着舍入结果最接近但不小于无限精确结果,并且朝零舍入意味着舍入结果最接近但在绝对值方面不大于无限精确结果。然而,应当注意,本发明的基本原理不限于任何特定类型的舍入。
在一个实施例中,如果舍入控制值指示舍入模式是舍入到最近,则舍入电路确定有符号双字乘积与有符号双字乘积的至少两个最接近的分数有符号字表示之间的距离并选择最接近有符号双字乘积的有符号字表示。如果舍入控制值指示舍入模式是向上舍入,则舍入电路确定有符号双字乘积与有符号双字乘积的至少两个最接近的分数有符号字表示之间的距离,并选择最接近该有符号双字乘积当不大于该有符号双字乘积的有符号字表示。如果舍入控制值指示舍入模式是向下舍入,则舍入电路将确定有符号双字乘积与有符号双字乘积的至少两个最接近的分数有符号字表示之间的距离,并选择最接近该有符号双字乘积但不小于该有符号双字乘积的有符号字表示。最后,如果舍入控制值指示舍入模式是朝零舍入,则舍入电路将确定有符号双字乘积与有符号双字乘积的至少两个最接近的分数有符号字表示之间的距离,并选择最接近有符号双字乘积但绝对值不大于有符号双字乘积的第一有符号字表示。。
在一个实施例中,控制寄存器(例如,MXCSR)中的两位舍入控制字段在执行指令时指定上面描述的舍入模式中的一个。例如,MXCSR的位[0:1]的不同组合可以指定上面描述的四个舍入模式中的每一种。
在一个实施例中,指令的执行将存储在xmm2中的多个打包的有符号字与存储在xmm3(或存储器位置)中的对应的多个打包的有符号字相乘。即,编码在xmm2中的位[15:0]中的字乘以编码在xmm3中的位[15:0]中的字,编码在xmm2的位[31:16]中的字乘以编码在xmm3的位[31:16]中的字,依这样的推。在一个实施例中,xmm3和xmm2均为128位寄存器,并且每个有符号字乘法并行执行以生成8个32位结果。
乘法的32位结果可以最初被存储在八个32位临时存储位置中(例如,存储在寄存器或存储器中)。然后可以基于指定的舍入模式(例如,如上所述由控制寄存器内的位指定)对八个结果中的每个进行舍入。在一个实施例中,如果需要,经舍入的结果然后从32位转换为16位格式并且被饱和。截尾可以用于丢弃经舍入的32位结果的16个最低有效位并保留经舍入的32位结果的16个最高有效位。在一个实施例中,32位值被转换为Q15分数值。Q15分数具有15个分数位。在一个实施例中,第16位用于指示结果的符号。
一种实现利用如上关于图1A-B和图2A-C描述的VEX指令格式。具体地,在该实现中,用于实行打包分数乘法的指令表示为:VEX.NDS.128.F2.MAP5.W1 C0/r。编码VEX.NDS指示VEX.vvvv对第一源寄存器进行编码,并且128指示该指令是128位SIMD整数指令。另外,F2指示对应的VEX.pp值按照与SIMD前缀(66H,F2H或F3H)对随后的操作码字节所作的相同的方式影响“操作码”字节。因此,VEX.pp的非零编码可以被认为是隐含的66H/F2H/F3H前缀。最后,W1指示VEX.W=1并且必须使用VEX前缀的3字节形式编码操作码。C0/r指示基于指令的一个或多个结果更新条件代码C0。例如,在一个实施例中,如果一个或多个数据元素如下所述那样被饱和,则设置C0。
图13图示了示例性源寄存器和/或目的地寄存器的示例性数据元素和位分布。如所示的,数据元素可以作为打包字节1301(8位)、字1302(16位)、双字1303(32位)和/或四字1304(64位)被打包到源寄存器和/或目的地寄存器中。在处理复数的一些实施例中,实分量和虚分量可以存储在相邻的数据元素位置中。例如,可以将实部存储为数据元素A,并且可以将对应的虚部存储为数据元素B。然而,在本文中描述的其他实施例中(例如,用于利用舍入、饱和等实行有符号字的打包分数乘法的指令),打包数据元素A-H不表示复数。
图14A图示了用于执行指令的示例性架构,该指令用于实行xmm2和xmm3/m128中的有符号字的打包分数乘法、舍入、饱和以及将结果的高16位存储到xmm1中。如所描述的,该指令的一个实施例使用存储在寄存器SRC1 1401和SRC2 1402中的两个打包源数据操作数(如所图示的)以及使用源/目的地寄存器SRC3/DEST 1460用于存储打包累加值。并行乘法电路1405通过将SRC1 1401中的每个打包的有符号字乘以SRC2 1402中的对应打包的有符号字来生成多个暂时性双字乘积1480。累加和分数舍入/饱和电路1485然后将每个暂时性双字乘积与来自目的地寄存器1460(或另一个源寄存器)的打包字相加,对所得到的总和进行舍入和饱和,并保留16个最高有效位,该16个最高有效位作为有符号分数字数据元素1490(例如,格式化为Q15值)被存储回目的地寄存器1460中的对应位置。
如上所述,在一个实施例中,可以根据存储在控制寄存器1461中的舍入控制值来使用不同类型的舍入。在一个实现中,舍入控制值可以指定可以由累加和分数舍入/饱和电路1485实现的四个不同的舍入模式:舍入到最近、向上舍入、向下舍入和朝零舍入(如上所述)。
虽然被示为单个集成组件,但是累加和分数舍入/饱和电路1485可以包括独立累加电路(用于将目的地值加到临时乘积)以及独立舍入/饱和电路(用于实行舍入/饱和,如本文中所述的)。
图14B图示用于实行xmm2和xmm3/m128中的有符号字的打包分数乘法、舍入、饱和以及将结果的高16位存储到xmm1中的另一示例性实现。如所描述的,该指令的一个实施例使用存储在寄存器SRC1 1401和SRC2 1402中的两个打包源数据操作数以及使用源/目的地寄存器SRC3/DEST 1460用于存储打包累加值。在所示实施例中,SRC1 1401存储有符号字数据元素S1A-S1H,SRC2 1402存储有符号字数据元素S2A-S2H,并且SRC3/DEST 1460存储有符号字数据元素S3A-S3H(其中S1表示SRC1,S2表示SRC2,并且S3表示SRC3 /DEST)。
注意,图14B中所示的某些组件(诸如加法器网络1410-1411)可以不用于执行有符号字的打包分数字乘法。这是因为以下事实:所示架构可用于执行各种不同指令,其中一些指令使用加法器网络1410-1411,而一些指令(如此处描述的指令)不使用。在所描述的实现中,数据简单地从乘法器1405传递到累加器1410-1411而不被修改。
在一个实施例中,输入多路复用器1403将存储在SRC1中的有符号字数据元素A-H和存储在SRC1中的有符号字数据元素A-H路由到乘法器1405,乘法器1405并行实行两个字的八次乘法。例如,在所示的实现中,乘法器1405实行以下乘法:S1A * S2A,S1B * S2B,S1C* S2C,S1D * S2D,S1E * S2E,S1F * S2F,S1G * S2G和S1H * S2H(其中S1表示SRC1并且S2表示SRC2)。八个32位乘积中的每个都存储在暂时性寄存器/存储器位置(未示出)中。
一个或多个累加器1420-1421将八个32位乘积加到存储在第三源/目的地寄存器1460中的对应字值,并且舍入/饱和电路1440-1441随后实行舍入和饱和(如果需要的话)并保留结果的16个最高有效位。输出多路复用器1450将16个最高有效位存储在目的地寄存器SRC1/DEST 1460的每个数据元素位置A-H中。
虽然上面描述的实施例在舍入/饱和之前实行累加,但是替代实施例对32位乘积进行舍入/饱和以生成16位临时值。然后,累加器1420-1421将16位临时值加到来自第三源/目的地寄存器1460的对应字值。
在一个实施例中,响应于该指令而实行的操作是根据以下代码序列来定义的:
。
在上面的代码表示中,八个有符号字乘法的32位结果最初存储在TEMP0到TEMP7中。然后将这些值转换为分数有符号结果,该分数有符号结果被存储到目的地寄存器内的所指示的数据元素位置。如所描述的,在一个实施例中使用Q15分数数据格式。例如,DEST[15:0]←Q15FractionalRoundSaturateToSignedWord(TEMP0 [31:0],MXCSR.IRM [1:0],DEST [15:0])指示利用舍入、饱和(如果需要的话)和/或截尾(例如,经舍入的结果的最低有效16位的截尾)将TEMP0中的32位值转换为有符号Q15格式,并且最终有符号小数结果被存储在DEST的位[15:0]处的字数据元素位置中。
图15中图示了根据本发明的一个实施例的流程图。该方法可以在上面描述的处理器和系统架构的情境中实现,但不限于任何特定的系统架构。
在1501处,取出指令,该指令具有用于操作码和第一和第二打包字源操作数以及打包字目的地操作数的字段。在1502处,对指令进行解码以生成第一解码指令(例如,解码成多个微操作)。在1503处,(例如,从存储器,数据高速缓存等)取回第一和第二操作数的打包的有符号字值并将其分别存储在第一和第二源寄存器中。如上所述,在一个实施例中,源操作数存储在具有打包的有符号字数据元素(即32位元素)的128位打包数据寄存器中。
在1504处,执行经解码的指令以同时将第一源寄存器中的每个有符号字数据元素与第二源寄存器中的对应有符号字数据元素相乘,以生成八个有符号双字乘积。如上所述,八个双字乘积可以存储在32位临时存储位置(例如,寄存器或存储器位置)中。然后将八个双字值转换为有符号分数16位格式,诸如Q15格式。这可以如上所述通过根据指定的舍入模式进行舍入、饱和和/或对16位有符号分数字值截断来实现。
在1505处,最终有符号分数字值随后被存储在目的地寄存器中的指定字数据元素位置中。
在前述说明书中,参考其具体示例性实施例描述了本发明的实施例。然而,将明显的是,可以在不脱离如在所附权利要求书中阐述的本发明的较广泛的精神和范围的情况下对其进行各种修改和改变。因此,将在说明性而不是限制性的意义上看待说明书和附图。
本发明的实施例可以包括上面描述的各种步骤。所述步骤可以体现在可以用于使通用或专用处理器实行所述步骤的机器可执行指令中。替代地,可以通过包含用于实行所述步骤的硬接线逻辑的特定硬件组件或通过经编程的计算机组件和自定义硬件组件的任何组合来实行这些步骤。
如本文中描述的,指令可以指代诸如专用集成电路(ASIC)之类的被配置成实行某些操作或具有预定功能性的硬件的特定配置或者被存储在以非暂时性计算机可读介质来体现的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如,终端站、网络元件等)上存储和执行的代码和数据来实现附图中所示的技术。这样的电子设备使用计算机机器可读介质来存储代码和数据以及(内部地和/或与网络上的其他电子设备)传送代码和数据,所述计算机机器可读介质诸如是非暂时性计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)以及暂时性计算机机器可读通信介质(例如,电、光、声或其他形式的传播信号——诸如载波、红外信号、数字信号等)。另外,这样的电子设备通常包括一组一个或多个处理器,其被耦合到一个或多个其他组件,诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器),以及网络连接。该组处理器与其他组件的耦合通常通过一个或多个总线和桥(也称为总线控制器)。存储设备和承载网络业务的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定的电子设备的存储设备通常存储代码和/或数据以用于在该电子设备的该组一个或多个处理器上执行。
当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。遍及本详细描述,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员而言将显而易见的是,可以在没有这些具体细节中的一些的情况下实践本发明。在某些实例中,没有详尽地描述公知的结构和功能,以便避免使本发明的主题模糊。因此,应根据接着的权利要求书来评判本发明的范围和精神。
Claims (25)
1.一种处理器,包括:
解码器,用来解码指令;
第一源寄存器,用来存储第一多个打包的有符号字数据元素;
第二源寄存器,用来存储第二多个打包的有符号字数据元素;
控制寄存器,用来存储用来指示舍入模式的舍入控制值;
执行电路,用来执行经解码的指令,所述执行电路包括:
乘法器电路,用来同时将第一多个打包的有符号字数据元素中的每个打包的有符号字数据元素与第二多个打包的有符号字数据元素中的对应打包的有符号字数据元素相乘,以生成多个有符号双字乘积;
转换电路,用来将所述多个有符号双字乘积转换为多个分数有符号字,所述转换电路包括舍入电路,所述舍入电路用来根据由舍入控制值指示的舍入模式对有符号双字乘积进行舍入以生成所述多个分数有符号字;以及
目的地寄存器,用来将所述多个分数有符号字作为打包的有符号字分数数据元素存储在目的地寄存器内的指定数据元素位置中。
2.根据权利要求1所述的处理器,其中指定的舍入模式包括以下中的一个:
舍入到最近、向上舍入、向下舍入和朝零舍入。
3.根据权利要求2所述的处理器,其中舍入到最近意味着舍入结果最接近无限精确结果,向上舍入意味着舍入结果最接近但不大于无限精确结果,向下舍入意味着舍入结果最接近但不小于无限精确结果,并且朝零舍入意味着舍入结果最接近但在绝对值方面不大于无限精确结果。
4.根据权利要求2所述的处理器,其中舍入控制值指示舍入到最近,第二控制值指示向上舍入,第三舍入控制值指示向下舍入,并且第四舍入控制值指示朝零舍入。
5.根据权利要求1或4所述的处理器,其中所述转换电路进一步包括饱和电路,用来使有符号字分数数据元素饱和。
6.根据权利要求1或4所述的处理器,其中所述转换电路进一步包括截尾电路,用来截断每个有符号双字乘积的16位最低有效部分以生成有符号字分数数据元素。
7.根据权利要求1或6所述的处理器,其中第一和第二多个打包的有符号字数据元素每个包括八个打包的有符号字数据元素,其中所述多个有符号双字乘积包括八个有符号双字乘积,并且其中所述多个打包的有符号字分数数据元素包括八个打包的有符号字分数数据元素。
8.根据权利要求1或4所述的处理器,其中第一和第二多个打包的有符号字数据元素和分数有符号字包括Q15分数值。
9.一种方法,包括:
解码指令;
执行所述指令以实行以下操作:
同时将存储在第一源寄存器中的第一多个打包的有符号字数据元素中的多个打包的有符号字数据元素中的每个与存储在第二源寄存器中的第二多个打包的有符号字数据元素中的对应打包的有符号字数据元素相乘,以生成多个有符号双字乘积;
将所述多个有符号双字乘积转换为多个分数有符号字,其中转换包括根据由存储在控制寄存器中的舍入控制值指示的舍入模式对有符号双字乘积进行舍入以生成所述多个分数有符号字;以及
将所述多个分数有符号字作为打包的有符号字分数数据元素存储在目的地寄存器内的指定数据元素位置中。
10.根据权利要求9所述的方法,其中指定的舍入模式包括以下中的一个:
舍入到最近、向上舍入、向下舍入和朝零舍入。
11.根据权利要求10所述的方法,其中舍入到最近意味着舍入结果最接近无限精确结果,向上舍入意味着舍入结果最接近但不大于无限精确结果,向下舍入意味着舍入结果最接近但不小于无限精确结果,并且朝零舍入意味着舍入结果最接近但在绝对值方面不大于无限精确结果。
12.根据权利要求10所述的方法,其中舍入控制值指示舍入到最近,第二控制值指示向上舍入,第三舍入控制值指示向下舍入,并且第四舍入控制值指示朝零舍入。
13.根据权利要求9或12所述的方法,其中所述转换电路进一步包括饱和电路,用来使有符号字分数数据元素饱和。
14.根据权利要求9或12所述的方法,其中所述转换电路进一步包括截尾电路,用来截断每个有符号双字乘积的16位最低有效部分以生成有符号字分数数据元素。
15.根据权利要求9或12所述的方法,其中第一和第二多个打包的有符号字数据元素每个包括八个打包的有符号字数据元素,其中所述多个有符号双字乘积包括八个有符号双字乘积,并且其中所述多个打包的有符号字分数数据元素包括八个打包的有符号字分数数据元素。
16.根据权利要求9或12所述的方法,其中第一和第二多个打包的有符号字数据元素和分数有符号字包括Q15分数值。
17.一种机器可读介质,其上存储有程序代码,所述程序代码当由机器执行时使得所述机器实行以下操作:
解码指令;
执行所述指令以实行以下操作:
同时将存储在第一源寄存器中的第一多个打包的有符号字数据元素中的多个打包的有符号字数据元素中的每个与存储在第二源寄存器中的第二多个打包的有符号字数据元素中的对应打包的有符号字数据元素相乘,以生成多个有符号双字乘积;
将所述多个有符号双字乘积转换为多个分数有符号字,其中转换包括根据由存储在控制寄存器中的舍入控制值指示的舍入模式对有符号双字乘积进行舍入以生成所述多个分数有符号字;以及
将所述多个分数有符号字作为打包的有符号字分数数据元素存储在目的地寄存器内的指定数据元素位置中。
18.根据权利要求17所述的机器可读介质,指定的舍入模式包括以下中的一个:
舍入到最近、向上舍入、向下舍入和朝零舍入。
19.根据权利要求18所述的机器可读介质,其中舍入到最近意味着舍入结果最接近无限精确结果,向上舍入意味着舍入结果最接近但不大于无限精确结果,向下舍入意味着舍入结果最接近但不小于无限精确结果,并且朝零舍入意味着舍入结果最接近但在绝对值方面不大于无限精确结果。
20.根据权利要求18所述的机器可读介质,其中舍入控制值指示舍入到最近,第二控制值指示向上舍入,第三舍入控制值指示向下舍入,并且第四舍入控制值指示朝零舍入。
21.根据权利要求17或20所述的机器可读介质,其中所述转换电路进一步包括饱和电路,用来使有符号字分数数据元素饱和。
22.根据权利要求17或20所述的机器可读介质,其中所述转换电路进一步包括截尾电路,用来截断每个有符号双字乘积的16位最低有效部分,以生成有符号字分数数据元素。
23.根据权利要求17或20所述的机器可读介质,其中第一和第二多个打包的有符号字数据元素每个包括八个打包的有符号字数据元素,其中所述多个有符号双字乘积包括八个有符号双字乘积,并且其中所述多个打包的有符号字分数数据元素包括八个打包的有符号字分数数据元素。
24.根据权利要求17或20所述的机器可读介质,其中第一和第二多个打包的有符号字数据元素和分数有符号字包括Q15分数值。
25.一种装置,包括:
用于解码指令的部件;
用于执行所述指令以实行以下操作的部件:
用于同时将存储在第一源寄存器中的第一多个打包的有符号字数据元素中的多个打包的有符号字数据元素中的每个与存储在第二源寄存器中的第二多个打包的有符号字数据元素中的对应打包的有符号字数据元素相乘以生成多个有符号双字乘积的部件;
用于将所述多个有符号双字乘积转换为多个分数有符号字的部件,其中转换包括根据由存储在控制寄存器中的舍入控制值指示的舍入模式对有符号双字乘积进行舍入以生成所述多个分数有符号字;以及
用于将所述多个分数有符号字作为打包的有符号字分数数据元素存储在目的地寄存器内的指定数据元素位置中的部件。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/850248 | 2017-12-21 | ||
US15/850,248 US20190196828A1 (en) | 2017-12-21 | 2017-12-21 | Apparatus and method for vector multiply of signed words, rounding, and saturation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109947474A true CN109947474A (zh) | 2019-06-28 |
Family
ID=66767953
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811392383.6A Pending CN109947474A (zh) | 2017-12-21 | 2018-11-21 | 用于有符号字的向量乘法、舍入和饱和的装置和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20190196828A1 (zh) |
CN (1) | CN109947474A (zh) |
DE (1) | DE102018128939A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181355A (zh) * | 2020-10-12 | 2021-01-05 | 上海芯旺微电子技术有限公司 | 一种移位饱和处理方法及其应用 |
CN113570392A (zh) * | 2020-04-29 | 2021-10-29 | 中移动信息技术有限公司 | 用户分群方法、装置、电子设备及计算机存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019005132A1 (en) * | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES |
WO2019005115A1 (en) | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES |
US20230004393A1 (en) * | 2021-06-26 | 2023-01-05 | Intel Corporation | Apparatus and method for vector packed signed/unsigned shift, round, and saturate |
US20230004387A1 (en) * | 2021-06-26 | 2023-01-05 | Intel Corporation | Apparatus and method for vector packed multiply of signed and unsigned words |
-
2017
- 2017-12-21 US US15/850,248 patent/US20190196828A1/en not_active Abandoned
-
2018
- 2018-11-19 DE DE102018128939.1A patent/DE102018128939A1/de active Pending
- 2018-11-21 CN CN201811392383.6A patent/CN109947474A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113570392A (zh) * | 2020-04-29 | 2021-10-29 | 中移动信息技术有限公司 | 用户分群方法、装置、电子设备及计算机存储介质 |
CN113570392B (zh) * | 2020-04-29 | 2024-04-09 | 中移动信息技术有限公司 | 用户分群方法、装置、电子设备及计算机存储介质 |
CN112181355A (zh) * | 2020-10-12 | 2021-01-05 | 上海芯旺微电子技术有限公司 | 一种移位饱和处理方法及其应用 |
Also Published As
Publication number | Publication date |
---|---|
US20190196828A1 (en) | 2019-06-27 |
DE102018128939A1 (de) | 2019-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321525A (zh) | 用于稀疏-密集矩阵乘法的加速器 | |
CN109947474A (zh) | 用于有符号字的向量乘法、舍入和饱和的装置和方法 | |
CN109582281A (zh) | 用于复数与复数之间共轭乘法的设备和方法 | |
CN104350492B (zh) | 在大寄存器空间中利用累加的向量乘法 | |
CN104011665B (zh) | 超级乘加(超级madd)指令 | |
CN106293640A (zh) | 用于紧密耦合的异构计算的硬件处理器和方法 | |
CN107003843A (zh) | 用于对向量元素集合执行约减操作的方法和设备 | |
CN109840068A (zh) | 用于复数乘法的装置和方法 | |
CN107003846A (zh) | 用于向量索引加载和存储的方法和装置 | |
CN110321157A (zh) | 用于具有可变精度输入操作数的融合乘-加操作的指令 | |
CN109947471A (zh) | 用于将多组紧缩字节相乘、求和以及累加的装置和方法 | |
CN109582356A (zh) | 用于紧缩数据元素的乘、加/减和累加的装置和方法 | |
CN109947478A (zh) | 用于有符号双字的向量乘法和累加的装置和方法 | |
CN109947481A (zh) | 用于处理分数倒数操作的装置和方法 | |
CN108292220A (zh) | 用于加速图形分析的装置和方法 | |
CN110069282A (zh) | 用于紧缩字的向量乘法和累加的装置和方法 | |
CN109683961A (zh) | 用于复紧缩数据元素和实紧缩数据元素的乘法和累加的装置和方法 | |
CN107003845A (zh) | 用于在掩码寄存器和向量寄存器之间可变地扩展的方法和装置 | |
CN107145335A (zh) | 用于大整数运算的向量指令的装置和方法 | |
CN109643234A (zh) | 用于合并数据元素并生成索引更新的处理器、方法、系统和指令 | |
CN107111486A (zh) | 用于计算z序曲线中的下一点的坐标的向量指令 | |
CN109992305A (zh) | 用于将片寄存器对归零的系统和方法 | |
CN110321165A (zh) | 复数向量融合乘加和复数向量乘法的高效实现 | |
CN109582282A (zh) | 用于向量紧缩有符号值的乘法和累加的系统、装置和方法 | |
CN108351782A (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 |