CN108351780A - 邻接数据元素成对交换处理器、方法、***和指令 - Google Patents
邻接数据元素成对交换处理器、方法、***和指令 Download PDFInfo
- Publication number
- CN108351780A CN108351780A CN201680068241.7A CN201680068241A CN108351780A CN 108351780 A CN108351780 A CN 108351780A CN 201680068241 A CN201680068241 A CN 201680068241A CN 108351780 A CN108351780 A CN 108351780A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- data element
- contiguous
- packaged
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims description 48
- 238000003860 storage Methods 0.000 claims abstract description 85
- 230000004044 response Effects 0.000 claims abstract description 25
- 238000007667 floating Methods 0.000 claims description 13
- 238000006073 displacement reaction Methods 0.000 claims description 9
- 235000013399 edible fruits Nutrition 0.000 claims description 6
- 230000015654 memory Effects 0.000 description 101
- 238000010586 diagram Methods 0.000 description 41
- 239000013598 vector Substances 0.000 description 35
- 238000012545 processing Methods 0.000 description 16
- 238000012856 packing Methods 0.000 description 15
- 230000008878 coupling Effects 0.000 description 12
- 238000010168 coupling process Methods 0.000 description 12
- 238000005859 coupling reaction Methods 0.000 description 12
- 210000004027 cell Anatomy 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000001052 transient effect Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 238000013500 data storage Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000006243 chemical reaction Methods 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
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 210000004940 nucleus Anatomy 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000011022 operating instruction Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001737 promoting effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 206010038743 Restlessness Diseases 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 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
- 230000006911 nucleation Effects 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 239000011232 storage material Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- 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
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- 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/30018—Bit or string instructions
-
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30163—Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
一种处理器包括对邻接数据元素成对交换指令进行解码的解码单元。该指令要指示要包括邻接数据元素对的源打包数据,并且要指示目的地存储位置。运行单元与打包数据寄存器和解码单元耦合。运行单元响应于指令而要将结果打包数据存储在目的地存储位置中,结果打包数据要包括邻接数据元素对。结果打包数据的邻接数据元素的每个对对应于源打包数据的邻接数据元素的不同对。结果打包数据的每个对中的邻接数据元素已经在相对于源打包数据的每个对应对中的邻接数据元素的位置中交换。
Description
技术领域
本文所述的实施例一般涉及处理器。具体来说,本文所述的实施例一般涉及响应于指令而对打包数据进行操作的处理器。
背景技术
许多处理器具有单指令多数据(SIMD)架构。在SIMD架构中,多个数据元素可作为打包数据或矢量数据来打包在一个寄存器或存储器位置内。在打包或矢量数据中,寄存器或存储器位置的比特可逻辑地分为数据元素序列。例如,128比特宽打包数据寄存器可具有两个64比特数据元素、四个32比特数据元素、八个16比特数据元素或十六个8比特数据元素。数据元素的每个可表示独立数据片(例如像素颜色分量、浮点数等),其可与其它数据片分开地操作和/或独立于其它数据片操作。
在此类SIMD架构中,打包数据指令、矢量指令或SIMD指令可用来同时和/或并行地对此类打包数据或矢量操作数的多个数据元素或者两个此类打包数据或矢量操作数的多对数据元素进行操作。处理器可具有响应于同时和/或并行地对数据进行操作的指令的并行运行硬件。
附图说明
通过参考用来示出实施例的以下描述和附图,可以最好地了解本发明。在附图中:
图1是可操作以执行邻接数据元素成对交换指令的实施例的处理器的实施例的框图。
图2是执行邻接数据元素成对交换指令的实施例的方法的实施例的框流程图。
图3是示出邻接数据元素成对交换操作的示例实施例的框图。
图4是示出掩码邻接数据元素成对交换操作的第一示例实施例的框图。
图5是示出掩码邻接数据元素成对交换操作的第二示例实施例的框图。
图6是示出用来交换复数的实分量和虚分量的掩码邻接数据元素成对交换操作的更具体示例实施例的框图。
图7是邻接数据元素成对交换指令的示例实施例的框图。
图8是打包数据寄存器的适当集合的示例实施例的框图。
图9是打包数据操作掩码寄存器的适当集合的示例实施例的框图。
图10A-10C是示出根据本发明的实施例的通用矢量友好指令格式及其指令模板的框图。
图11是寄存器架构的实施例的框图。
图12A是示出有序流水线的实施例和寄存器重命名乱序发布/运行流水线的实施例的框图。
图12B是包括耦合到运行引擎单元并且均耦合到存储器单元的前端单元的处理器核的实施例的框图。
图13A是单个处理器核连同与它的到管芯上互连网络的连接以及连同它的等级2(L2)高速缓冲存储器的本地子集的实施例的框图。
图13B是图13A的处理器核的部分的展开图的实施例的框图。
图14是可具有多于一个核、可具有集成存储器控制器并且可具有集成图形的处理器的实施例的框图。
图15是计算机架构的第一实施例的框图。
图16是计算机架构的第二实施例的框图。
图17是计算机架构的第三实施例的框图。
图18是计算机架构的第四实施例的框图。
图19是根据本发明的实施例的、使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文所公开的是邻接数据元素成对交换指令、运行指令的处理器、由处理器在处理或运行指令时执行的方法、结合一个或多个处理器以处理或运行指令的***以及具有指令的程序或机器可读存储介质。在以下描述中,提出许多具体细节(例如具体指令操作、数据格式、数据类型、处理器配置、微架构细节、操作序列等)。然而,在没有这些具体细节的情况下也可实践实施例。在其它实例中,公知的电路、结构或技术尚未被详细地示出以避免使本描述的理解模糊。
图1是可操作以执行邻接数据元素成对交换指令102的实施例的处理器100的实施例的框图。在一些实施例中,处理器可以是通用处理器(例如用在桌上型、膝上型或其它计算机中的类型的通用微处理器或中央处理单元(CPU))。备选地,处理器可以是专用处理器。适合的专用处理器的示例包括但不限于:网络处理器、通信处理器、加密处理器、图形处理器、协同处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如微控制器)。处理器可具有以下架构中的任何,各种复杂指令集计算(CISC)架构、简化指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其它类型的架构,或具有不同架构的组合(例如,不同核可具有不同架构)。
在操作期间,处理器100可接收邻接数据元素成对交换指令102。例如,指令可在互连上从存储器接收。指令可表示宏指令、汇编语言指令、机器代码指令或者处理器的指令集的其它指令或控制信号。在一些实施例中,邻接数据元素成对交换指令可显式指定(例如通过一个或多个字段或者比特的集合)或者以其它方式指示(例如隐式指示)要存储源打包数据112的源存储位置(例如源打包数据寄存器110),并且可指定或者以其它方式指示目的地存储位置114,其中要响应于指令而存储结果打包数据116。在一些实施例中,指令可以仅指定或指示单个源打包数据(例如仅指示单个源打包数据寄存器110),而不是具有两个或更多源打包数据。
在所示示例中,第一打包数据寄存器110用于源打包数据操作数112,以及第二打包数据寄存器114用于结果打包数据操作数116,尽管这不被要求。在其它实施例中,存储器位置或其它存储位置改为可选地可用于这些操作数的一个或多个。指令可具有源和/或目的地操作数指定字段,以指定打包数据寄存器(例如寄存器110、114)或存储器位置或者用于此类操作数的其它存储位置。备选地,这些存储位置的一个或多个可选地可对指令是隐式的(例如对指令的操作码是隐式的),而不是显式指定的。此外,在一些实施例中,打包数据寄存器或者用于源打包数据的其它存储位置可选地可隐式再用作结果打包数据的目的地存储位置,并且仅指定一次。在一个方面,源/目的地打包数据寄存器可隐式或隐含地理解为用于源操作数和结果操作数两者。
再次参考图1,处理器包括解码单元或解码器104。解码单元可对邻接数据元素成对交换指令进行接收和解码。解码单元可输出一个或多个相对较低级别指令或控制信号(例如一个或多个微指令、微操作、微代码入口点、解码指令或控制信号等),其反映、表示相对较高级别邻接数据元素成对交换指令和/或从其中得出。在一些实施例中,解码单元可包括接收邻接数据元素成对交换指令的一个或多个输入结构(例如端口、互连、接口)、与其耦合以对邻接数据元素成对交换指令进行识别和解码的指令识别和解码逻辑以及与其耦合以输出低级别指令或控制信号的一个或多个输出结构(例如端口、互连、接口)。解码单元可使用各种不同机制来实现,包括但不限于微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)以及适合实现解码单元的其它机制。在一些实施例中,解码单元可包括在处理器的管芯上。
在一些实施例中,邻接数据元素成对交换指令不是直接被提供给解码单元,而是可选地可使用指令仿真器、翻译器、变形器、解释器或其它指令转换模块。各种类型的指令转换模块可采用软件、硬件、固件或其组合来实现。在一些实施例中,指令转换模块可位于处理器外部,诸如例如独立管芯上和/或存储器(例如作为静态、动态或运行时间仿真模块)中。通过示例方式,指令转换模块可接收可属于第一指令集的邻接数据元素成对交换指令,并且可对邻接数据元素成对交换指令进行仿真、翻译、变形、解释或者以其它方式将邻接数据元素成对交换指令转换为一个或多个对应中间指令或控制信号,其可属于第二不同指令集。第二指令集的一个或多个中间指令或控制信号可提供给解码单元(例如解码单元104),其可将它们解码为由处理器的本地硬件(例如一个或多个运行单元)可执行的一个或多个较低级别指令或控制信号。
再次参考图1,处理器100还包括打包数据寄存器集合108。打包数据寄存器的每个可表示管芯上存储位置,其可操作以存储打包数据、矢量数据或SIMD数据。打包数据寄存器可表示架构上可见或架构寄存器,其是软件和/或编程器可见的,和/或是通过识别操作数的处理器的指令集的指令所指示的寄存器。这些架构寄存器与给定微架构中的其它非架构寄存器(例如暂时寄存器、重排序缓冲器、引退寄存器等)形成对照。打包数据寄存器可在不同微架构中采用不同方式来实现,并且不局限于任何特定类型的设计。适合类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。
再次参考图1,运行单元106与解码单元104和打包数据寄存器108耦合。运行单元可通过其它中间组件(未示出)与这些组件耦合。在一些实施例中,运行单元可与解码单元是管芯上(on-die)的。运行单元可接收一个或多个解码或者以其它方式转换的指令或控制信号,其表示邻接数据元素成对交换指令和/或从其中得出。运行单元还可接收源打包数据112。在一些实施例中,源打包数据112可包括至少两对(或者在一些情况下至少四对或者至少八对或更多对)邻接数据元素。邻接数据元素意思是每对数据元素可以是毗连和/或相接的,和/或在每对数据元素之间可以不存在额外中间数据元素或者比特。例如,每对中的更低有效数据元素的最高有效比特可比每对中的更高有效数据元素的最低有效比特低一比特。在一些实施例中,数据元素可选地可以是8比特字节数据元素。在其它实施例中,数据元素可选地可以是多字节数据元素,其各自包括两个或更多8比特字节,尽管这不被要求。例如,数据元素可选地可以是16比特数据元素、32比特数据元素或64比特数据元素。数据元素可以是整数、固定点或浮点。在一些实施例中,数据元素可选地可以是浮点数据元素,诸如例如32比特单精度浮点数据元素或64比特双精度浮点数据元素,尽管本发明的范围并不局限于此。
运行单元可响应于和/或由于邻接数据元素成对交换指令(例如响应于从指令所解码的一个或多个指令或控制信号)而可操作以将结果打包数据116存储在由指令所指示的目的地存储位置(例如目的地打包数据寄存器114)中。在一些实施例中,结果打包数据116可包括至少两对邻接数据元素(例如与源打包数据112中相同的对的数量)。结果打包数据的邻接数据元素的每个对可对应于源打包数据的邻接数据元素的不同对。例如,结果打包数据的邻接数据元素的每个对可对应于相同相对比特位置中和/或打包数据内的相同相对位置中的源打包数据的一对邻接数据元素。在一些实施例中,结果打包数据的每个对中的邻接数据元素可在相对于源打包数据的每个对应对中的邻接数据元素的数据元素位置中交换。例如,源打包数据中的每个对可包括更低有效数据元素和更高有效数据元素,以及源打包数据中的该对的更低有效数据元素可存储到结果打包数据中的对应对的最高有效数据元素位置中,并且源打包数据中的该对的更高有效数据元素可存储到结果打包数据中的对应对的更低有效数据元素位置中。在一些实施例中,结果可以是对图3-6所示和所述的那些中的任何,尽管本发明的范围并不局限于此。
在一些实施例中,相对于源打包数据的对应对中的邻接数据元素交换结果打包数据对中的邻接数据元素的位置的方面可对邻接数据元素成对交换指令是隐式和/或固定的(例如对指令的操作码是隐式和/或固定的),而不是灵活的和/或显式指定的(例如通过指令的附加灵活非操作码控制比特)。备选可能途径将是使用灵活混洗或置换指令连同表示非操作码交换控制比特的非操作码混洗或置换控制比特。混洗或置换指令可用来根据被混洗或置换的每个数据元素的对应混洗或置换控制比特把来自一个或多个源打包数据的数据元素混洗或置换到结果打包数据中的不同数据元素位置。例如,混洗或置换控制比特的这些集合可在指令的立即数(immediate)中或者在一般存储于寄存器的另一个源操作数中提供。
然而,至少对某些应用,对于使用此类灵活混洗或置换指令的此类备选途径存在潜在缺点。一方面它一般花费额外时间和/或努力来生成混洗或置换控制比特的集合。例如,编程器可需要显式生成这些,或者编译器可需要通过编译器上的附加工作负荷来生成它们。另外,将混洗或置换控制比特存储在寄存器中可占用寄存器,并且阻止它用于另一个目的。此外,当指令具有指定存储混洗或置换控制比特的寄存器的附加字段时,或者当混洗或置换控制比特通过指令的立即数来提供时,指令的长度可增加。这可趋向于减少能够在指令束中取的指令的数量和/或增加对指令进行解码的复杂度和/或对指令进行解码所需的时间,这可趋向于降低前端吞吐量。这还可趋向于增加代码大小。另外,在立即数的情况下,一般只有一定数量的控制比特能够适合立即数,这可限制能够被混洗或置换的数据元素的数量。
然而,在一些实施例中,当邻接数据元素成对交换操作或方面对邻接数据元素成对交换指令为隐式和/或固定(例如对指令的操作码为隐式和/或固定)、而不是灵活的和/或显式指定的(例如通过指令的附加灵活非操作码交换控制比特)时,一般可避免此类缺点。在此类实施例中,不需要指令具有或使用此类灵活非操作码交换控制比特(例如混洗或置换控制比特的集合)。而是处理器可以主要或潜在地仅基于操作码而不是基于任何此类非操作码附加灵活交换控制比特来理解或识别要执行邻接数据元素成对交换操作。这可帮助避免需要生成此类灵活非操作码交换控制比特,这可帮助简化编程或编译。也不需要消耗寄存器来将灵活非操作码交换控制比特存储在寄存器中,这可将它释放以用于其它目的。此外,不需要指令具有附加字段来指定存储灵活非操作码交换控制比特的此类寄存器,或者具有立即数来提供灵活非操作码交换控制比特,这可帮助减少指令的长度。这又可趋向于减少代码大小。另外,这可趋向于通过增加能够在指令束中取的指令的数量来增加前端吞吐量,和/或减少对指令进行解码的复杂度和/或对指令进行解码所需的时间。
运行单元和/或处理器可包括特定或具体逻辑(例如晶体管、集成电路或者潜在地与固件(例如非易失性存储器中存储的指令)和/或软件相组合的其它硬件),其可操作以执行邻接数据元素成对交换指令,和/或响应于和/或由于邻接数据元素成对交换指令(例如响应于从邻接数据元素成对交换指令所解码的一个或多个指令或控制信号)而存储结果打包数据。通过示例方式,运行单元可包括算术逻辑单元、逻辑单元或者执行逻辑或数据移动操作的数字电路等。在一些实施例中,运行单元可包括接收源操作数的一个或多个输入结构(例如端口、互连、接口)、与其耦合以接收和交换数据元素位置的逻辑以及与其耦合以向结果操作数输出交换数据元素的一个或多个输出结构(例如端口、互连、接口)。
在一些实施例中,与可用来执行灵活混洗或置换指令的运行单元相比,执行邻接数据元素成对交换指令的运行单元可选地可包括相对没那么灵活和/或相对没那么复杂和/或相对更快的逻辑。一般来说,执行此类灵活混洗或置换指令所需的逻辑的量趋向于相当大。这部分由于操纵、解释和使用混洗或置换控制比特的集合以选择要存储到对应结果数据元素的源数据元素所需的逻辑。此类逻辑采用管芯上的额外空间,并且还趋向于消耗附加功率。此外,与操纵、解释和使用混洗或置换控制比特的多个集合以灵活选择源数据元素关联的额外操作还一般趋向于在要执行的处理器时钟周期方面花费附加时间。然而,由于对邻接数据元素成对交换指令所执行的操作可基本上固定(例如交换邻接数据元素的相对位置)或者至少远不如混洗或置换指令那么灵活,所以与可用来执行灵活混洗或置换指令的逻辑相比,可能地使用相对没那么灵活和/或相对较少量和/或相对没那么复杂和/或相对更快的逻辑。例如,可使用相对更简单的逻辑,其专门定制以执行数据元素相对位置交换操作而无需适应使用混洗或置换控制比特从多于两个数据元素之中的灵活选择。通过示例方式,潜在地可使用固定硬连线数据元素路由或交换电路或路径而不是通过混洗/置换控制比特所控制的复用器或者其它此类灵活和一般更慢的选择电路。可选地可省略每元素交换控制比特和关联每元素交换控制比特控制选择逻辑。一般来说,与执行灵活混洗或置换指令所需的时钟周期的数量相比,邻接数据元素成对交换指令可在要少至少一个时钟周期(或者也许要少两个或更多时钟周期)中执行。
然而,邻接数据元素成对交换指令确实执行比上述混洗和置换指令更少灵活和更特定操作。在一些实施例中,指令集(例如包括解码单元能够解码的指令)可包括一个或多个邻接数据元素成对交换指令以及一个或多个灵活混洗或置换指令两者。这可允许编程器或编译器使用邻接数据元素成对交换指令来改进性能(例如通过对较短指令长度进行解码和/或使用更快执行逻辑),和/或当期望执行邻接数据元素成对交换操作时降低功率,或者当期望执行更灵活数据操纵操作时使用一般更慢(例如由于对更长指令长度进行解码并且使用更慢执行逻辑)和一般更高功耗的灵活混洗或置换指令。
为了避免模糊本描述,已经示出和描述相对简单的处理器100。然而,处理器可选地可包括其它处理器组件。例如,各种不同实施例可包括对图11-14的任一个所示和所述的组件的各种不同组合和配置。通过示例方式,考虑图12B,指令取单元1238可取指令,解码单元1240可对指令进行解码,调度器单元1256可调度关联操作,引退单元1254可引退指令,等等。处理器的全部组件可耦合在一起,以允许它们按计划操作。
图2是执行邻接数据元素成对交换指令的实施例的方法226的实施例的框流程图。在各种实施例中,该方法可由处理器、指令处理设备、集成电路或数字逻辑装置来执行。在一些实施例中,图2的方法可由图1的处理器来执行和/或在其中执行。本文对图1的处理器和/或指令102所述的组件、特征和具体可选细节可选地也适用于图2的方法,其可选地可由处理器来执行和/或利用指令102来执行。备选地,图2的方法可由类似或不同的处理器或设备来执行和/或在其中执行。此外,图1的处理器可执行与图2的那些方法相同、相似或者不同的方法。
该方法包括在框227接收邻接数据元素成对交换指令。在各种方面,指令可在处理器或者其一部分(例如指令取单元、解码单元、总线接口单元等)来接收。在各种方面,指令可从处理器外和/或管芯外源(例如从存储器、互连等)或者从处理器上和/或管芯上源(例如从指令高速缓冲存储器、指令队列等)来接收。邻接数据元素成对交换指令可指定或者以其它方式指示源打包数据,并且可指定或者以其它方式指示要存储结果打包数据的目的地存储位置。在一些实施例中,源打包数据可包括至少两对邻接(例如毗连或相接)数据元素。在一些实施例中,指令可以仅具有单个源打包数据,而不是两个或更多源打包数据或者立即数。在一些实施例中,源打包数据的数据元素可选地可以是多字节数据元素,其各自包括两个或更多8比特字节,尽管这不被要求。例如,数据元素可选地可以是16比特数据元素、32比特数据元素或64比特数据元素。在一些实施例中,数据元素可选地可以是浮点数据元素,诸如例如32比特单精度浮点数据元素或64比特双精度浮点数据元素,尽管本发明的范围并不局限于此。
在框228,结果打包数据可响应于和/或由于邻接数据元素成对交换指令而存储在所指示的目的地存储位置中。在一些实施例中,结果打包数据可包括至少两对邻接数据元素。结果打包数据的邻接数据元素的每个对可对应于(例如在相同比特位置中和/或打包数据内的相同相对位置中的)源打包数据的邻接数据元素的不同对。在一些实施例中,结果打包数据的邻接数据元素的每个对中的邻接数据元素可在相对于源打包数据的邻接数据元素的每个对应对中的邻接数据元素的位置中交换。例如,源打包数据中的每个对可包括更低有效数据元素和更高有效数据元素,以及源打包数据中的该对的更低有效数据元素可存储到结果打包数据中的对应对的最高有效数据元素位置中,并且源打包数据中的该对的更高有效数据元素可存储到结果打包数据中的对应对的更低有效数据元素位置中。在一些实施例中,执行此类邻接数据元素成对交换操作可对邻接数据元素成对交换指令的操作码是隐式和/或固定的。在一些实施例中,指令可以不指定或者以其它方式指示任何非操作码交换控制比特(例如,如可在灵活置换或混洗指令的立即数或附加源打包数据中提供),和/或结果打包数据可无需使用任何此类非操作码交换控制比特来生成。
所示方法涉及架构操作(例如从软件角度可见的那些操作)。在其它实施例中,该方法可选地可包括一个或多个微架构操作。通过示例方式,可对指令进行取、解码、无序调度,可访问源打包数据,运行单元可执行微架构操作以实现指令,等等。
图3是示出可响应于邻接数据元素成对交换指令的实施例而执行的邻接数据元素成对交换操作330的实施例的框图。指令可指定或者以其它方式指示源打包数据312,其要具有至少两对邻接数据元素。在所示示例实施例中,源打包数据包括至少邻接数据元素A0和A1的第一最低有效对以及邻接数据元素A2和A3的第二更高有效对,并且可选地可包括邻接数据元素的零个或更多其它对。
通常,每个源打包数据操作数中的数据元素的数量可等于源打包数据操作数的比特大小除以单个数据元素的比特大小。在各种实施例中,源打包数据操作数的每个的宽度可以是64比特、128比特、256比特、512比特或1024比特,尽管本发明的范围并不局限于此。在各种实施例中,每个数据元素的大小可以是8比特、16比特、32比特或64比特,尽管本发明的范围并不局限于此。其它打包数据操作数大小和数据元素宽度也是适合的。在各种实施例中,在源打包数据操作数的每个中可存在至少2个、至少4个、至少8个、至少16个、至少32个或者多于32个数据元素(例如至少64个)。
在邻接数据元素成对交换操作期间,源打包数据312可被提供给运行单元306。运行单元可响应于指令和/或操作而生成并且存储结果打包数据316。在一些实施例中,结果打包数据可存储在目的地打包数据寄存器或者通过指令所指定或者以其它方式所指示的其它目的地存储位置中。在一些实施例中,结果打包数据可包括至少两对邻接数据元素。在一些实施例中,结果打包数据可包括与源打包数据中相同的邻接数据元素的对的数数量。结果打包数据的邻接数据元素的每个对可对应于(例如在相同相对比特位置中或者以其它方式在打包数据的相同相对位置中的)源打包数据的邻接数据元素的不同对。例如,在所示示例实施例中,结果打包数据包括至少邻接数据元素A1和A0的第一最低有效(如所观看的最左边)对(例如,其可对应于源打包数据的邻接数据元素A0和A1的最低有效(如所观看的最左边)对)以及邻接数据元素A3和A2的第二更高有效(如所观看的最右边)对(例如,其可对应于源打包数据的邻接数据元素A2和A3的更高有效(如所观看的最右边)对),并且可选地可包括邻接数据元素的零个或更多其它对。如通过箭头332一般所示,在一些实施例中,结果打包数据的邻接数据元素的每个对中的邻接数据元素可已经在相对于源打包数据的邻接数据元素的每个对应对中的邻接数据元素的位置中交换。
例如,源打包数据中的邻接数据元素的最低有效对的最低有效数据元素A0可作为结果打包数据中的邻接数据元素的对应最低有效对的数据元素A0来存储到更高有效数据元素位置中。再者,源打包数据中的邻接数据元素的最低有效对的更高有效数据元素A1可作为结果打包数据中的邻接数据元素的对应最低有效对的数据元素A1来存储到最低有效数据元素位置中。此外,源打包数据中的邻接数据元素的次最低有效对的更低有效数据元素A2可作为结果打包数据中的邻接数据元素的对应次最低有效对的数据元素A2来存储到更高有效数据元素位置中。再者,源打包数据中的邻接数据元素的次最低有效对的更高有效数据元素A3可作为结果打包数据中的邻接数据元素的对应次最低有效对的数据元素A3来存储到更低有效数据元素位置中。邻接数据元素的任何其它可选对可在位置中类似地交换。
图4是示出可响应于掩码邻接数据元素成对交换指令的实施例而执行的掩码邻接数据元素成对交换操作430的实施例的框图。图4的掩码操作与图3的未掩码操作具有某些相似性。为了避免模糊本描述,将主要描述图4的掩码操作的不同和/或附加特性,而没有重复相对于图3的未掩码操作的所有可选相似或共同特性和细节。然而要意识到,图3的未掩码操作的先前所述特性和细节可选地也可适用于图4的掩码操作,除非另加说明或者是以其它方式显而易见的(例如,如果它们涉及因掩码引起的差异)。
掩码指令可指定或者以其它方式指示源打包数据412,其要具有至少两对邻接数据元素。源打包数据412可与先前所述源打包数据312相似或相同,并且可具有相同变型和备选。在所示示例实施例中,源打包数据包括至少邻接数据元素A0和A1的第一最低有效对以及邻接数据元素A2和A3的第二更高有效对,并且可选地可包括邻接数据元素的零个或更多其它对。源打包数据的大小、数据元素的大小和数据元素的数量可与先前所述源打包数据312相似或相同,并且可具有相同变型和备选。
掩码指令可选地另外地可指定(例如显式指定)或者以其它方式指示(例如隐式指示)源打包数据操作掩码420。源打包数据操作掩码在本文中又可简单地称作操作掩码、断言(predicate)掩码或掩码。通过示例方式,源打包数据操作掩码可存储在架构打包数据操作掩码寄存器的集合的打包数据操作掩码寄存器、通用寄存器、打包数据寄存器(例如,每个数据元素位置的最高有效比特、最低有效比特或其它单个比特可用作掩码元素)或者其它寄存器或存储位置中。
掩码可表示断言操作数或条件控制操作数,其用来断言、条件控制或掩码是否执行对应操作和/或存储对应结果。在一些实施例中,掩码或断言可以按每数据元素粒度,使得对不同数据元素的操作可相互分开和/或独立地断言或条件控制。掩码可包括多个掩码元素、断言元素或条件控制元素。在一个方面,掩码元素可包括在与对应源数据元素和/或对应结果数据元素的一一对应中。掩码对源打包数据中的每个数据元素和/或结果打包数据中的每个结果数据元素可具有不同对应掩码元素。对于对应数据元素和掩码元素处于操作数内的对应相对位置常常是便利的,尽管这不被严格要求,并且可选地如果需要的话可使用对应性的其它规定。通过示例方式,掩码中的每个掩码元素可对应于相应操作数内的相同相对位置中的源打包数据中的不同数据元素。例如,最低有效掩码比特可对应于最低有效数据元素,最低有效(如所观看的最左边)掩码比特或元素可对应于最低有效(如所观看的最左边)数据元素,依此类推。在所示示例中,对应掩码元素和数据元素垂直对齐地示出。如所示,在一些实施例中,每个掩码元素可选地可以是单个掩码比特。备选地,两个或更多比特可选地可用于每个掩码元素(例如,每个掩码元素可具有与每个对应数据元素相同的比特数,并且数据元素的一个或多个比特可提供掩码或者未掩码值)。
每个掩码元素的值可控制是否要执行对应操作和/或要存储对应结果数据元素。每个掩码元素可具有允许操作被执行并且允许对应结果数据元素被存储在结果打包数据中的第一值,或者可具有不允许操作被执行和/或不允许对应结果数据元素被存储在结果打包数据中的第二不同值。根据一个可能规定,如图示所示,被清除为二进制零(即,0)的掩码比特可表示掩码或掩蔽出(masked out)操作,其中操作结果将不存储在结果打包数据中,而设置为二进制一(即,1)的掩码比特可表示未掩码操作,其中操作结果将存储在结果打包数据中。相反规定也是可能的。在所示示例中,两个最低有效(如所观看的最左边)掩码元素被掩码,而两个更高有效(如所观看的最右边)掩码元素未掩码。
在掩码邻接数据元素成对交换操作430期间,源打包数据412和源打包数据操作掩码420各自可被提供给运行单元406。运行单元可响应于指令和/或操作而执行掩码邻接数据元素成对交换操作,以生成并且存储结果打包数据416。掩码操作可服从源打包数据操作掩码的掩码、断言或条件控制来执行。在一些实施例中,结果打包数据可存储在目的地打包数据寄存器或者通过指令所指定或者以其它方式所指示的其它目的地存储位置中。
在一些实施例中,结果打包数据可包括至少两对邻接数据元素。在一些实施例中,结果打包数据可包括与源打包数据中相同的邻接数据元素的对的数量。结果打包数据的邻接数据元素的每个对可对应于(例如在相同相对比特位置中或者以其它方式在打包数据内的相同相对位置中的)源打包数据的邻接数据元素的不同对。例如,在所示示例实施例中,结果打包数据包括至少邻接数据元素的第一最低有效(如所观看的最左边)对(例如,其可对应于源打包数据的邻接数据元素A0和A1的最低有效(如所观看的最左边)对)以及邻接数据元素的第二更高有效(如所观看的最右边)对(例如,其可对应于源打包数据的邻接数据元素A2和A3的更高有效(如所观看的最右边)对),并且可选地可包括邻接数据元素的零个或更多其它对。
在一些实施例中,结果打包数据416的邻接数据元素的每个对中的邻接数据元素,其对应于掩码420的未掩码的掩码元素,可已经在相对于源打包数据412的邻接数据元素的每个对应对中的邻接数据元素的位置中交换。在所示示例中,源打包数据412中的邻接数据元素A2和A3的次最低有效(如所观看的最右边)对对应于未掩码的掩码元素。对于这个示例,源打包数据412中的邻接数据元素的次最低有效(如所观看的最右边)对的更低有效数据元素A2可作为结果打包数据416中的邻接数据元素的对应次最低有效(如所观看的最右边)对的数据元素A2来存储到更高有效数据元素位置中。再者,源打包数据412中的邻接数据元素的次最低有效(如所观看的最右边)对的更高有效数据元素A3可作为结果打包数据416中的邻接数据元素的对应次最低有效(如所观看的最右边)对的数据元素A3来存储到更低有效数据元素位置中。邻接数据元素的附加未掩码对(如果有的话,未示出)可在位置中类似地交换。
相反,在一些实施例中,结果打包数据416的邻接数据元素的每个对中的邻接数据元素,其对应于掩码420的掩码或掩蔽出的掩码元素,改为可具有不取决于对源打包数据中的对应邻接数据元素所执行的邻接数据元素成对交换操作的值。在一些实施例中,与掩蔽出的掩码元素对应的结果数据元素可具有固定或预定值。例如,无需执行对应邻接数据元素成对交换操作,或者如果执行对应邻接数据元素成对交换操作,则对应结果元素无需存储在结果打包数据中。固定或预定值而是可存储在对应结果数据元素中。特定固定或预定值可取决于用于特定实现的掩码的类型。在一些实施例中,可使用调零掩码。在调零掩码中,掩蔽出的结果数据元素可归零(例如被迫使具有零值)。例如,16比特结果数据元素可具有16个调零比特值。在其它实施例中,可使用合并掩码。在合并掩码中,掩蔽出的结果数据元素可具有对应源数据元素的值(例如,打包数据内的相同相对位置中的对应源数据元素可合并或者传递到对应掩蔽出的结果数据元素)。在所示示例中,源打包数据412中的邻接数据元素A0和A1的最低有效(如所观看的最左边)对对应于掩码或掩蔽出的掩码元素。如所示示例所示,结果打包数据416中的邻接数据元素的最低有效(如所观看的最左边)对可具有归零值(例如示为0)或者合并的A0和A1值,其尚未在相对于源打包数据的A0和A1值的位置中交换)。
图5是示出可响应于第二掩码邻接数据元素成对交换指令的实施例而执行的掩码邻接数据元素成对交换操作530的第二实施例的框图。图5的操作与图4的操作具有某些相似性。为了避免模糊本描述,将主要描述图5的操作的不同和/或附加特性,而没有重复相对于图4的操作的所有可选相似或共同特性和细节。然而要意识到,图4的操作的先前所述特性和细节可选地也可适用于图5的操作,除非另加说明或者是以其它方式显而易见的。
掩码指令可指定或者以其它方式指示源打包数据512。源打包数据412及其数据元素可与先前所述源打包数据312和/或412相似或相同,并且可具有相同变型和备选。
掩码指令可选地可另外地指定(例如显式指定)或者以其它方式指示(例如隐式指示)源打包数据操作掩码520。除了以下所述差别之外,源打包数据操作掩码520及其掩码元素可与先前所述源打包数据操作掩码420相似或相同,并且可具有相同变型和备选。
在这个所示实施例中,源打包数据操作掩码的每个掩码元素可包括在与邻接数据元素的对应对和/或邻接结果数据元素的对应对的一一对应中,而不是包括在与单个/单独源数据元素和/或单个单独结果数据元素的一一对应中。例如,最低有效(如所观看的最左边)掩码元素可对应于源数据元素A0和A1的最低有效(如所观看的最左边)邻接对和/或结果数据元素的最低有效(如所观看的最左边)邻接对。同样,次最低有效(如所观看的最右边)掩码元素可对应于源数据元素A0和A1的次最低有效(如所观看的最右边)邻接对和/或结果数据元素A3和A2的次最低有效(如所观看的最右边)邻接对。每个掩码元素的值可控制是否要执行对应邻接数据元素成对交换操作和/或要存储邻接结果数据元素的对应位置交换对。
在掩码邻接数据元素成对交换操作530期间,源打包数据512和源打包数据操作掩码520各自可被提供给运行单元506。运行单元可响应于指令和/或操作而执行掩码邻接数据元素成对交换操作,以生成并且存储结果打包数据516。结果打包数据及其结果数据元素可与先前所述源打包数据416相似或相同,并且可具有相同变型和备选。
如本文所公开的邻接数据元素成对交换指令和/或操作的一个必然用途但非唯一用途是处理原始成对或元组类型的数据。此类原始成对或元组类型的数据的一个示例是复数。复数广泛用于多个应用中,诸如例如量子色动力学、分子动力学和各种其它高性能计算应用,这里列举几个示例。复数包括实数或分量和虚数或分量。这些实或虚数或分量共同表示复数,并且常常在对复数的算术运算(诸如例如加法、减法、乘法等)期间共同处理。因此,实和虚数或分量常常例如在邻接的两个数据元素结构、元组或对的阵列中共同存储和处理。这些复数的矢量或阵列常常作为两个数据元素结构的阵列来相乘、相加、相减等。
为了有效地对复数执行某些此类算术运算,常常有益的是能够有效地交换实和虚数或分量的相对位置。作为一个示例,在复数乘法情况中可以是这样。第一复数(a+bi)和第二复数(c+di)的乘法可表示为等式1:
(a+bi)(c+di) = (ac-bd) + (bc+ad)i 等式1
如所示,此类复数的乘法涉及将实分量与实分量相乘(例如以生成乘积ac)以及虚分量与虚分量相乘(例如以生成乘积bd),以及将实分量与虚分量相乘(例如以生成乘积ad和乘积bc)。相应地,从算术角度来看,如果要执行打包数据乘法或SIMD乘法,则在一个点,每个复数的实分量应当处于相同SIMD位置或者所谓的垂直SIMD对齐,而在其它时间,实分量和虚分量应当处于相同SIMD位置或者垂直SIMD对齐。在一些实施例中,如本文所公开的邻接数据元素成对交换指令和/或操作可用来执行复数的实和虚数或分量的相对位置的此类交换,其常常具有与在使用灵活混洗或置换指令的情况下相比的改进性能和/或更低功率消耗。另外,可对其它类型的成对或元组数据使用此类指令/操作。然而,本发明的范围并不局限于操作原始成对或元组类型的数据。本文所公开的指令和/或操作而是通用的,并且可用来对任何期望类型的数据进行操作,而无需对邻接数据元素之间的关系的任何要求。
为了进一步示出某些概念,将描述对复数进行操作的更具体示例实施例。图6是示出可响应于掩码邻接数据元素成对交换指令的实施例而执行的掩码邻接数据元素成对交换操作630的更具体示例实施例的框图。图6的操作与图3和/或图4的操作具有某些相似性。为了避免模糊本描述,将主要描述图6的操作的不同和/或附加特性,而没有重复相对于图3和/或图4的操作的所有可选相似或共同特性和细节。然而要意识到,图3和/或图4的操作的先前所述特性和细节可选地也可适用于图6的操作,除非另加说明或者是以其它方式显而易见的。
指令可指定或者以其它方式指示源打包数据612。在这个示例中,源打包数据为512比特宽,尽管可选地可改为使用更宽或更窄的宽度。在该情况下,源打包数据具有四个复数。在其它实施例中,可包括更少或更多。每个复数包括实数或数据元素(r)和虚数或数据元素(i)的邻接对。例如,第一复数可具有实和虚分量r0和i0,第二复数可具有实和虚分量r1和i1,依此类推。按常规,复数常常存储在存储器中,其中实数存储在相对低有效比特位置,并且对应虚数存储在邻接的相对高有效比特位置,尽管这不被要求。相应地,在所示示例中,源打包数据中的每个复数的实数存储在更低有效位置,而虚数存储在相对更高有效位置。在所示示例中,实和虚数的每个包括在64比特数据元素(例如64比特双精度浮点数据元素)中,尽管在其它实施例中,可选地可使用其它大小的数据元素(例如32比特单精度浮点或16比特半精度浮点)。
指令可选地可另外地指定(例如显式指定)或者以其它方式指示(例如隐式指示)源打包数据操作掩码620,尽管这不被要求。备选类似操作可以是在没有此类源打包数据操作掩码的情况下执行的未掩码操作。源打包数据操作掩码可存储在源打包数据操作掩码寄存器618中。在此类情况下,源打包数据操作掩码是8比特掩码,以及源打包数据操作掩码寄存器是64比特寄存器,尽管可选地可改为使用更宽或更窄的掩码和掩码寄存器。源打包数据操作掩码包括源打包数据中的每个数据元素的不同掩码比特。在所示示例中,对应数据元素和掩码比特处于操作数内的相同相对位置,并且在图示中采用垂直对齐示出。在所示示例中,仅掩蔽出掩码的比特[3:2]中的掩码比特,而比特[1:0]和[7:4]中的掩码比特未掩码。这只是一个示例。
在掩码邻接数据元素成对交换操作630期间,源打包数据612和源打包数据操作掩码620各自可被提供给运行单元606。运行单元可响应于指令和/或操作而执行掩码邻接数据元素成对交换操作,以生成并且存储结果打包数据616。在一些实施例中,结果打包数据可存储在目的地打包数据寄存器或者通过指令所指定或者以其它方式所指示的其它目的地存储位置中。
如这个示例所示,结果打包数据616的每个复数的邻接实数和虚数(其对应于掩码620的未掩码的掩码元素)可已经在相对于源打包数据612的每个复数的邻接实数和虚数的位置中交换。相反,在掩码操作的情况下,结果打包数据616的每个复数的邻接实数和虚数(其对应于掩码620的掩码或掩码出的掩码元素)改为可具有不取决于对源打包数据612的每个复数的对应邻接实数和虚数所执行的邻接数据元素成对交换操作的值。例如,源打包数据的实数和虚数r1和i1(其对应于比特位置[3:2]中的掩蔽出的掩码比特)可选地可合并为结果打包数据的相同非交换位置。备选地,这些结果数据元素可选地可归零。
如先前所述,掩码620可存储在掩码寄存器618中。在一些实施例中,掩码寄存器可具有比用作实际用于断言的掩码620的活动比特要多的比特。例如,64比特掩码寄存器可用来存储8比特掩码、16比特掩码或32比特掩码。作为另一个示例,32比特掩码寄存器可用来存储8比特掩码或16比特掩码。在一些实施例中,掩码寄存器中的这些额外非活动比特可以不用于掩码,并且例如可被忽略和/或可以不影响操作。
已经针对图3-6示出和描述了适合邻接数据元素成对交换操作的几个示例,尽管也考虑其它示例。例如,在其它实施例中,可对两个或更多源打包数据寄存器中存储的两个或更多源打包数据来执行操作,以生成两个或更多结果打包数据操作数,以便存储在两个或更多目的地打包数据寄存器中。例如,指令可指定一个源寄存器和一个目的地寄存器,并且使用下一个顺序寄存器作为另一个源寄存器和另一个目的地寄存器可以是隐式的。其它实施例可改变操作数中的数据元素的数量和大小。
图7是邻接数据元素成对交换指令702的示例实施例的框图。指令包括操作代码或操作码740。操作码可表示多个比特或者一个或多个字段,其可操作以识别要执行的指令和/或操作(例如邻接数据元素成对交换操作)。在一些实施例中,操作码可隐式地指示要执行邻接数据元素成对交换和/或对于操作码要执行邻接数据元素成对交换可以是固定的。
指令还包括源打包数据指定符742(例如字段和/或一个或多个不一定毗连的比特),以指定打包数据寄存器、存储器位置或者源打包数据的其它存储位置。在一些实施例中,指令可以仅具有单个源打包数据指定符而不是两个或更多。指令还包括可选目的地存储位置指定符744(例如字段和/或一个或多个不一定毗连的比特),以指定目的地打包数据寄存器、存储器位置或者要存储结果打包数据的其它存储位置。备选地,这些存储位置的一个或多个可选地对指令(例如操作码)可以是隐式的或固有的,而不是被指定,在该情况下,可选地可省略关联指定符。例如,指令可具有作为源和/或目的地操作数的存储位置的隐式固定寄存器。作为另一个示例,在一些实施例中,代替目的地指定符,用于源打包数据的存储位置可选地可隐式地再用于目的地打包数据。例如,源/目的地寄存器最初可具有源打包数据,以及随后结果打包数据可改写源/目的地寄存器中的源打包数据。
在一些实施例中,指令可选地还可具有源打包数据操作掩码指定符746(例如字段和/或一个或多个不一定毗连的比特),以指定打包数据掩码寄存器、通用寄存器、打包数据寄存器或者要存储打包数据操作掩码的其它存储位置。备选地,代替显式源打包数据操作掩码指定符,源打包数据操作掩码的存储位置可选地可以是隐式的。此外,掩码是可选的而不是要求的,以及当不使用掩码时,源打包数据操作掩码指定符可省略。
在一些实施例中,指令可选地可包括掩码类型指定符748,以指定掩码操作的类型,尽管这不被要求。通过示例方式,掩码类型指定符可包括一个或多个比特,其可具有指定要使用第一类型的掩码(合并掩码)的第一值或者指定要使用第二类型的掩码(例如调零掩码)的第二值。备选地,掩码操作的类型可选地可隐式指示(例如在隐式控制寄存器中)或者通过操作码隐式指示。作为另一个选项,可选地可至少对操作码仅使用单个类型的掩码,使得可以不需要掩码类型指定符。
在一些实施例中,指令可选地可具有数据元素大小指定符750(例如一个或多个不一定毗连的比特),以指定数据元素大小。作为一个说明性示例,2比特字段可具有四个不同值,以指示数据元素的四个不同大小(例如,00用于8比特、01用于16比特、10用于32比特以及11用于64比特)。这只是一个说明性示例。备选地,大小可选地可对指令(例如操作码)是固定的。
如在752所示,可不需要指令具有附加非操作码交换控制比特。例如,可不存在提供混洗或置换控制比特(其可用作交换控制比特)的指令的立即数。作为另一个示例,可不存在指示寄存器或其它存储位置以提供此类混洗或置换控制比特(其可用作交换控制比特)的指令的附加比特或字段。
图示示出可包括在邻接数据元素成对交换指令的实施例中的字段的类型的示例。备选实施例可包括所示字段的子集,和/或可添加附加字段。字段的所示布置不被要求,更确切地可采用各种方式重新布置字段。此外,字段的每个可由比特的毗连集合来组成,或者可包括非毗连或独立比特,其逻辑地表示字段。在一些实施例中,指令可具有如以下进一步描述的指令格式,尽管这不被要求。
图8是打包数据寄存器808的适合集合的示例实施例的框图。打包数据寄存器包括32个512比特打包数据寄存器,标记为ZMM0至ZMM31。在所示实施例中,较低的16个寄存器(即ZMM0-ZMM15)的低位256比特混叠或覆盖于相应256比特打包数据寄存器(标记为YMM0-YMM15),尽管这不被要求。同样,在所示实施例中,寄存器YMM0-YMM15的低位128比特混叠或覆盖于相应128比特打包数据寄存器(标记为XMM0-XMM15),尽管这也不被要求。512比特寄存器ZMM0至ZMM31可操作以保持512比特打包数据、256比特打包数据或128比特打包数据。256比特寄存器YMM0-YMM15可操作以保持256比特打包数据或128比特打包数据。128比特寄存器XMM0-XMM15可操作以保持128比特打包数据。在一些实施例中,寄存器的每个可用来存储打包浮点数据或打包整数数据。支持不同的数据元素大小,包括至少8比特字节数据、16比特字数据、32比特双字、32比特单精度浮点数据、64比特四字和64比特双精度浮点数据。在备选实施例中,可使用不同数量的寄存器和/或不同大小的寄存器。又在其它实施例中,寄存器可以或者可以不使用较大寄存器对较小寄存器的混叠,和/或可以或者可以不用来存储浮点数据。
图9是打包数据操作掩码寄存器918的适当集合的示例实施例的框图。在所示实施例中,集合包括标记为k0至k7的八个寄存器。备选实施例可包括少于八个寄存器(例如二、四、六个等)或者多于八个寄存器(例如十六、三十二个等)。这些寄存器的每个可用来存储打包数据操作掩码。在所示实施例中,寄存器的每个为64比特。在备选实施例中,寄存器的宽度可宽于64比特(例如80比特、128比特等)或者窄于64比特(例如8比特、16比特、32比特等)。寄存器可采用不同方式来实现,而并不局限于任何特定类型的电路或设计。适合的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配物理寄存器及其组合。
在一些实施例中,打包数据操作掩码寄存器918可以是架构寄存器的独立专用集合。在一些实施例中,指令可编码或指定与用来编码或指定其它类型的寄存器(例如打包数据寄存器)的那些所不同的指令格式的不同比特或一个或多个不同字段中的打包数据操作掩码寄存器。通过示例方式,指令可使用三比特(例如3比特字段)来编码或指定八个打包数据操作掩码寄存器k0至k7的任一个。在备选实施例中,当存在更少或更多打包数据操作掩码寄存器时,可分别使用更少或更多比特。在一个具体实现中,只有打包数据操作掩码寄存器k1至k7(但不是k0)可被定义为断言操作数,以断言掩码打包数据操作。寄存器k0可用作常规源或目的地,但是不可编码为断言操作数(例如,如果指定k0,则它具有“无掩码”编码),尽管这不被要求。
在上述实施例中指令已经示为仅具有单个源打包数据(例如单个源打包数据寄存器)和单个结果打包数据(例如单个目的地寄存器),尽管在其它实施例中,指令可选地可具有各自包括邻接数据元素对(其使它们的相对位置被交换并且存储到两个或更多结果打包数据(例如两个或更多目的地寄存器)中)的两个或更多源打包数据(例如两个或更多源打包数据寄存器)。
指令集包括一个或多个指令格式。给定的指令格式定义各种字段(比特数量、比特位置)以在其它事物中指定要被执行的操作(操作码)和操作数(在其上要执行操作)。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义以具有指令格式的字段的不同子集(包括的字段典型地采用相同顺序,但至少一些具有不同比特位置,因为包括有较少字段)和/或被定义以具有不同地解释的给定字段。因此,ISA的每个指令使用给定的指令格式来表示(并且如果被定义,则采用该指令格式的指令模板中的给定一个)并且包括用于指定操作和操作数的字段。例如,示范性ADD指令具有特定操作码和指令格式,其包括用于指定那个操作码的操作码字段和用于选择操作数的操作数字段(源1/目的地和源2));以及指令流中的该ADD指令的出现将具有选择特定操作数的操作数字段中的特定内容。SIMD扩展的集合(涉及高级矢量扩展(AVX)(AVX1和AVX2)以及使用矢量扩展(VEX)编码方案)已被发布和/或公布(例如见Intel 64和IA-32Architectures Software Developers Manual,2011年10月;以及见Intel AdvancedVector Extensions Programming Reference,2011年6月)。
示范性指令格式
本文描述的指令的实施例可以采用不同格式实施。此外,示范性***、架构和流水线在下文被详述。指令的实施例可在这样的***、架构和流水线上执行,但不限于详述的那些。
VEX指令格式
VEX编码允许指令具有多于两个操作数,并且允许SIMD矢量寄存器要长于128比特。VEX前缀的使用提供三操作数(或更多)语法。例如,之前二操作数指令执行了操作(诸如A=A+B),其改写了源操作数。VEX前缀的使用使操作数能够执行无损操作(诸如A=B+C)。
图10A示出示范性AVX指令格式,其包括VEX前缀1002、真操作码字段1030、Mod R/M字节1040、SIB字节1050、位移字段1062和IMM8 1072。图10B示出来自图10A的哪些字段构成完整操作码字段1074和基础操作字段1042。图10C示出来自图10A的哪些字段构成寄存器索引字段1044。
VEX前缀(字节0-2)1002以三字节形式编码。第一字节是格式字段1040(VEX字节0,比特[7:0]),其含有显式的C4字节值(用于识别C4指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供特定能力的多个比特字段。具体地,REX字段1005(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),使得Rrrr、Xxxx、和Bbbb可通过添加VEX.R、VEX.X和VEX.B来形成。操作码映射字段1015(VEX字节1,比特[4:0] - mmmmm)包括内容以编码所暗示的前导操作码字节。W字段1064(VEX字节2,比特[7] - W)由符号VEX.W来表示并且取决于指令来提供不同功能。VEX.vvvv 1020(VEX字节2,比特[6:3]-vvvv)的角色可包括以下项:1)VEX.vvvv编码第一源寄存器操作数,以倒置(1s补码)的形式指定并对于具有2个或更多源操作数的指令有效;2)VEX.vvvv编码目的地寄存器操作数,对于某些矢量移位以1s补码形式指定;或者3)VEX.vvvv不编码任何操作数,字段被预留并应含有1111b。如果VEX.L1068大小字段(VEX字节2,比特[2]-L)=0,则它指示128比特矢量;如果VEX.L=1,则它指示256比特矢量。前缀编码字段1025(VEX字节2,比特[1:0]-pp)为基础操作字段提供附加的比特。
真操作码字段1030(字节3)还被称为操作码字节。操作码的部分在此字段中被指定。
MOD R/M字段1040(字节4)包括MOD字段1042(比特[7-6])、Reg字段1044(比特[5-3])和R/M字段1046(比特[2-0])。Reg字段1044的角色可包括以下:编码目的地寄存器操作数或源寄存器操作数(Rrrr的rrr),或作为操作码扩展被对待并且不被用于编码任何指令操作数。R/M字段1046的角色可包括以下:编码参考存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
缩放、索引、基址(SIB) - 缩放字段1050(字节5)的内容包括SS1052(比特[7-6]),其被用于存储器地址生成。SIB.xxx 1054(比特[5-3])和SIB.bbb 1056(比特[2-0])的内容之前已关于寄存器索引Xxxx和Bbbb而被提到。
位移字段1062和立即数字段(IMM8)1072含有地址数据。
示范性寄存器架构
图11是根据本发明的一个实施例的寄存器架构1100的框图。在所示出的实施例中,存在512比特宽的32个矢量寄存器1110;这些寄存器被引用为zmm0直到zmm31。较低的16个zmm寄存器的较低顺序256比特被覆盖在寄存器ymm0-16上。较低的16个zmm寄存器的较低顺序128比特(ymm寄存器的较低顺序128比特)被覆盖在寄存器xmm0-15上。
写掩码寄存器1115-在所示出的实施例中,存在8个写掩码寄存器(k0直到k7),每个的大小是64比特。在备选实施例中,写掩码寄存器1115的大小是16比特。如之前所描述的,在本发明的一个实施例中,矢量掩码寄存器k0不能作为写掩码被使用;在将通常指示k0的编码被用于写掩码时,它选择0xFFFF的硬连线写掩码,对于那个指令有效地禁用写掩码。
通用寄存器1125-在所示出的实施例中,存在连同现存x86寻址模式被用于寻址存储器操作数的十六个64比特通用寄存器。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、和R8直到R15来引用。
标量浮点栈寄存器堆(x87栈)1145,在其上MMX打包整数平面寄存器堆(flatregister file)1150被混叠-在所示出的实施例中,x87栈是用于使用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素栈;而MMX寄存器被用于在64比特打包整数数据上执行操作,还被用于为在MMX和XMM寄存器之间所执行的一些操作来保存操作数。
本发明的备选实施例可使用更宽或更窄的寄存器。另外,本发明的备选实施例可使用更多、更少、或不同寄存器堆和寄存器。
示范性核架构、处理器、和计算机架构
处理器核可以不同方式、为了不同目的、以及在不同处理器中被实现。例如,此类核的实现可包括:1)打算用于通用计算的通用有序核;2)打算用于通用计算的高性能通用乱序核;3)打算主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括打算用于通用计算的一个或多个通用有序核和/或打算用于通用计算的一个或多个通用乱序核的CPU;以及2)包括打算主要用于图形和/或科学(吞吐量)的一个或多个专用核的协同处理器。此类不同处理器导致不同计算机***架构,其可包括:1)在与所述CPU单独的芯片上的协同处理器;2)在与CPU相同的封装中单独管芯上的协同处理器;3)在与CPU相同的管芯上的协同处理器(在该情况中,此类协同处理器有时被称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或被称为专用核);以及4)在可在相同管芯上包括所描述的CPU(有时被称为应用核或应用处理器)、以上所描述的协同处理器、和附加功能性的片上***。示范性核架构接下来被描述,继之以示范性处理器和计算机架构的描述。
示范性核架构
有序与乱序核框图
图12A是框图,其示出根据本发明的实施例的示范性有序流水线和示范性寄存器重命名、乱序发布/运行流水线两者。图12B是框图,其示出根据本发明的实施例的要被包括在处理器中的有序架构核的示范性实施例和示范性寄存器重命名、乱序发布/运行架构核两者。图12A-B中的实线框示出有序流水线和有序核,而虚线框的可选附加示出寄存器重命名、乱序发布/运行流水线和核。给定有序方面是乱序方面的子集,乱序方面将被描述。
在图12A中,处理器流水线1200包括取阶段1202、长度解码阶段1204、解码阶段1206、分配阶段1208、重命名阶段1210、调度(还已知为分派或发布)阶段1212、寄存器读/存储器读阶段1214、运行阶段1216、写回/存储器写阶段1218、异常处置阶段1222、和提交阶段1224。
图12B示出处理器核1290,其包括耦合到运行引擎单元1250的前端单元1230,并且两者被耦合到存储器单元1270。核1290可以是简化指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或备选核类型。如仍有的另一个选项,核1290可以是专用核,诸如例如网络或通信核、压缩引擎、协同处理器核、通用计算图形处理单元(GPGPU)核、图形核等等。
前端单元1230包括耦合到指令高速缓冲存储器单元1234的分支预测单元1232,所述指令高速缓冲存储器单元1234被耦合到指令翻译旁视(lookaside)缓冲器(TLB)1236,其被耦合到指令取单元1238,所述指令取单元1238被耦合到解码单元1240。解码单元1240(或解码器)可解码指令,并生成为输出一个或多个微操作、微代码条目点、微指令、其它指令、或其它控制信号,其被解码自、或其以其它方式反映、或被推导自原始指令。使用各种不同机制,解码单元1240可被实现。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)、等等。在一个实施例中,核1290包括存储用于某些宏指令的微代码的微代码ROM或其它介质(例如,在解码单元1240中或以别的方式在前端单元1230内)。解码单元1240被耦合到运行引擎单元1250中的重命名/分配器单元1252。
运行引擎单元1250包括耦合到引退单元1254和一个或多个调度器单元1256的集合的重命名/分配器单元1252。调度器单元1256表示任何数量的不同调度器,包括保留站、中央指令窗口、等等。调度器单元1256被耦合到物理寄存器堆单元1258。物理寄存器堆单元1258中的每个表示一个或多个物理寄存器堆,其不同物理寄存器堆存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点、状态(例如,是要被运行的下一个指令的地址的指令指针)、等等。在一个实施例中,物理寄存器堆单元1258包括矢量寄存器单元、写掩码寄存器单元、和标量寄存器单元。这些寄存器单元可提供架构上的矢量寄存器、矢量掩码寄存器、和通用寄存器。物理寄存器堆单元1258通过引退单元1254来重叠以示出其中寄存器重命名和乱序运行可被实现的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用未来堆、历史缓冲器、和引退寄存器堆;使用寄存器映射和寄存器的池;等等)。引退单元1254和物理寄存器堆单元1258被耦合到运行集群1260。运行集群1260包括一个或多个运行单元1262的集合和一个或多个存储器访问单元1264的集合。运行单元1262可执行各种操作(例如,移位、加法、减法、乘法)以及在各种类型的数据(例如,标量浮点、打包的整数、打包的浮点、矢量整数、矢量浮点)上执行。虽然一些实施例可包括专用于特定功能或功能的集合的多个运行单元,其它实施例可包括都执行所有功能的多个运行单元或仅一个运行单元。调度器单元1256、物理寄存器堆单元1258、和运行集群1260被示出为可能是复数的,因为某些实施例对于某些类型的数据/操作来创建单独流水线(例如,标量整数流水线、标量浮点/打包的整数/打包的浮点/矢量整数/矢量浮点流水线、和/或存储器访问流水线,其各自具有它们自己的调度器单元、物理寄存器堆单元、和/或运行集群—并且在单独的存储器访问流水线的情况中,其中此流水线的仅运行集群具有存储器访问单元1264的某些实施例被实现)。还应被理解的是,在单独流水线被使用之处,这些流水线的一个或多个流水线可以是乱序发布/运行,并且剩余的是有序。
存储器访问单元1264的集合被耦合到存储器单元1270,存储器单元1270包括耦合到数据高速缓冲存储器单元1274的数据TLB单元1272,数据高速缓冲存储器单元1274耦合到等级2(L2)高速缓冲存储器单元1276。在一个示范性实施例中,存储器访问单元1264可包括加载单元、存储地址单元、和存储数据单元,其的每个被耦合到存储器单元1270中的数据TLB单元1272。指令高速缓冲存储器单元1234被进一步耦合到存储器单元1270中的等级2(L2)高速缓冲存储器单元1276。L2高速缓冲存储器单元1276被耦合到一个或多个其它等级的高速缓冲存储器并最终到主存储器。
通过示例的方式,示范性寄存器重命名、乱序发布/运行核架构可实现如下流水线1200:1)指令取1238执行取及长度解码阶段1202和1204;2)解码单元1240执行解码阶段1206;3)重命名/分配器单元1252执行分配阶段1208和重命名阶段1210;4)调度器单元1256执行调度阶段1212;5)物理寄存器堆单元1258和存储器单元1270执行寄存器读/存储器读阶段1214;运行集群1260执行运行阶段1216;6)存储器单元1270和物理寄存器堆单元1258执行写回/存储器写阶段1218;7)各种单元可在异常处置阶段1222中被涉及;以及8)引退单元1254和物理寄存器堆单元1258执行提交阶段1224。
核1290可支持一个或多个指令集(例如,x86指令集(具有已随较新版本被添加的一些扩展);MIPS Technologies of Sunnyvale,CA的MIPS指令集;ARM Holdings ofSunnyvale,CA的ARM指令集(具有诸如NEON的可选附加扩展)),包括本文中所描述的指令。在一个实施例中,核1290包括用于支持打包数据指令集扩展(例如,AVX1、AVX2)的逻辑,因此允许由许多多媒体应用来使用的操作使用打包的数据来执行。
应被理解的是,核可支持多线程(运行操作或线程的两个或更多并行集合),并可以多种方式来如此做,所述多种方式包括时间分段的多线程、同时多线程(在单个物理核为线程的每个提供逻辑核的情况中,那个物理核正进行同时多线程),或其组合(例如,诸如在Intel®超线程技术中的时间分段的取和解码以及其后的同时多线程)。
虽然寄存器重命名在乱序运行的上下文中被描述,但应理解的是,寄存器重命名可被用在有序架构中。虽然处理器的所示出实施例还包括单独的指令和数据高速缓冲存储器单元1234/1274以及共享的L2高速缓冲存储器单元1276,但备选实施例可具有用于指令和数据两者的单个内部高速缓冲存储器,诸如例如,等级1(L1)内部高速缓冲存储器、或多个等级的内部高速缓冲存储器。在一些实施例中,***可包括内部高速缓冲存储器及外部于核和/或处理器的外部高速缓冲存储器的组合。备选地,所有高速缓冲存储器可外部于核和/或处理器。
特定示范性有序核架构
图13A-B示出核将是芯片中若干逻辑块之一(包括相同类型和/或不同类型的其它核)的更特定示范性有序核架构的框图。逻辑块通过高带宽互连网络(例如,环网络)取决于应用而通信于一些固定的功能逻辑、存储器I/O接口、和其它必要I/O逻辑。
图13A是根据本发明的实施例的单个处理器核连同到管芯上互连网络1302的它的连接并连同等级2(L2)高速缓冲存储器1304的它的本地子集的框图。在一个实施例中,指令解码器1300支持具有打包的数据指令集扩展的x86指令集。L1高速缓冲存储器1306允许低等待时间访问以将存储器高速缓冲存储器到标量和矢量单元中。虽然在一个实施例中(为简化设计),标量单元1308和矢量单元1310使用单独的寄存器集合(相应地,是标量寄存器11312和矢量寄存器1314),并且在它们之间所转移的数据被写到存储器并然后从等级1(L1)高速缓冲存储器1306读回,但本发明的备选实施例可使用不同手段(例如,使用单个寄存器集合或包括允许数据在所述两个寄存器堆之间被转移而不被写和读回的通信路径)。
L2高速缓冲存储器1304的本地子集是全局L2高速缓冲存储器的部分,所述全局L2高速缓冲存储器被划分成单独的本地子集,每处理器核一个。每个处理器核具有到L2高速缓冲存储器1304的它自己的本地子集的直接访问路径。由处理器核所读的数据被存储在其L2高速缓冲存储器子集1304中并能被快速地访问,并行于其它处理器核访问它们自己的本地L2高速缓冲存储器子集。由处理器核所写的数据被存储在其自己的L2高速缓冲存储器子集1304中并且如果必要则从其它子集中被冲刷。环网络确保共享的数据的一致性。环网络是双向的以允许诸如处理器核、L2高速缓冲存储器、和其它逻辑块的代理在芯片内互相通信。每个环数据-路径每方向是1012比特宽。
图13B是根据本发明的实施例的图13A中的处理器核的部分的扩展的视图。图13B包括L1高速缓冲存储器1304的L1数据高速缓冲存储器1306A部分,以及关于矢量单元1310和矢量寄存器1314的更多细节。具体地,矢量单元1310是16-宽矢量处理单元(VPU)(见16-宽ALU 1328),其运行整数、单精度浮动、和双精度浮动指令的一个或多个。VPU支持在存储器输入上通过打乱单元1320来打乱寄存器输入、通过数值转换单元1322A-B来进行数值转换、以及通过复制单元1324来进行复制。写掩码寄存器1326允许预测结果的矢量写。
具有集成的存储器控制器和图形的处理器
图14是根据本发明的实施例的可具有多于一个核、可具有集成存储器控制器、并可具有集成图形的处理器1400的框图。图14中的实线框示出具有单个核1402A、***代理1410、一个或多个总线控制器单元1416的集合的处理器1400,而虚线框的可选附加示出具有多个核1402A-N、***代理单元1410中的一个或多个集成存储器控制器单元1414的集合、和专用逻辑1408的备选处理器1400。
因此,处理器1400的不同实现可包括:1)CPU,具有是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核)的专用逻辑1408、以及是一个或多个通用核(例如,通用有序核、通用乱序核、所述两个核的组合)的核1402A-N;2)具有是打算主要用于图形和/或科学(吞吐量)的大量的专用核的核1402A-N的协同处理器;以及3)具有是大量的通用有序核的核1402A-N的协同处理器。因此,处理器1400可以是通用处理器、协同处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量许多集成核(MIC)协同处理器(包括30或更多核)、嵌入式处理器等等。处理器可被实现在一个或多个芯片上。使用多个处理技术的任何处理技术(诸如例如,BiCMOS、CMOS、或NMOS),处理器1400可被实现在一个或多个衬底上和/或是其部分。
存储器层级包括核内高速缓冲存储器的一个或多个等级、共享的高速缓冲存储器单元1406的集合或一个或多个、和耦合到集成存储器控制器单元1414的集合的外部存储器(未示出)。共享的高速缓冲存储器单元1406的集合可包括一个或多个中等级高速缓冲存储器,诸如等级2(L2)、等级3(L3)、等级4(L4)、或其它等级的高速缓冲存储器、最后等级高速缓冲存储器(LLC)、和/或其组合。虽然在一个实施例中,基于环的互连单元1412将集成图形逻辑1408、共享的高速缓冲存储器单元1406的集合、以及***代理单元1410/集成存储器控制器单元1414互连,但备选实施例可使用用于互连此类单元的任何数量的公知技术。在一个实施例中,一个或多个高速缓冲存储器单元1406和核1402-A-N之间的一致性被维持。
在一些实施例中,核1402A-N的一个或多个核有多线程的能力。***代理1410包括协调和操作核1402A-N的那些组件。***代理单元1410可包括例如功率控制单元(PCU)和显示器单元。PCU可以是或包括为调节集成图形逻辑1408和核1402A-N的功率状态所需要的逻辑和组件。显示器单元用于驱动一个或多个外部连接的显示器。
核1402A-N可关于架构指令集是同质或异质的;那就是说,核1402A-N的两个或更多核可有运行相同指令集的能力,而其它的核可有运行不同指令集或那个指令集的仅子集的能力。
示范性计算机架构
图15-21是示范性计算机架构的框图。在对于膝上型计算机、桌上型计算机、手持型PC、个人数字助理、工程工作站、服务器、网络装置、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置、以及各种其它电子装置的领域中已知的其它***设计和配置也是适合的。一般来说,能够合并如本文中所公开的处理器和/或其它运行逻辑的极多种的***或电子装置一般是适合的。
现在参考图15,所示出的是根据本发明的一个实施例的***1500的框图。***1500可包括被耦合到控制器中枢1520的一个或多个处理器1510、1515。在一个实施例中,控制器中枢1520包括图形存储器控制器中枢(GMCH)1590和输入/输出中枢(IOH)1550(其可在单独的芯片上);GMCH 1590包括存储器1540和协同处理器1545被耦合到的存储器和图形控制器;IOH 1550将输入/输出(I/O)装置1560耦合到GMCH 1590。备选地,存储器和图形控制器之一或两者被集成在处理器(如本文中所描述的)内,存储器1540和协同处理器1545被直接耦合到处理器1510、和具有IOH 1550的单个芯片中的控制器中枢1520。
附加处理器1515的可选性质在图15中用断线来指代。每个处理器1510、1515可包括本文中所描述的处理核中的一个或多个,并可以是处理器1400的某版本。
存储器1540可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)、或所述两个存储器的组合。对于至少一个实施例,控制器中枢1520经由诸如前侧总线(FSB)的多点总线、诸如快速路径互连(QPI)的点对点接口、或类似连接1595来与处理器1510、1515通信。
在一个实施例中,协同处理器1545是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等。在一个实施例中,控制器中枢1520可包括集成图形加速器。
物理资源1510、1515之间关于包括架构上、微架构上、热、功率耗用特性、和诸如此类的指标的规格的谱能存在多种不同。
在一个实施例中,处理器1510运行控制一般类型的数据处理操作的指令。指令内所嵌入的可以是协同处理器指令。处理器1510将这些协同处理器指令识别为是应由附连的协同处理器1545来运行的类型。因此,处理器1510在协同处理器总线或其它互连上将这些协同处理器指令(或表示协同处理器指令的控制信号)发布到协同处理器1545。协同处理器1545接受并运行所接收的协同处理器指令。
现在参考图16,所示出的是根据本发明的实施例的第一更特定示范性***1600的框图。如图16中所示出的,多处理器***1600是点对点互连***,并包括经由点对点互连1650所耦合的第一处理器1670和第二处理器1680。处理器1670和1680中的每个可以是处理器1400的某版本。在本发明的一个实施例中,处理器1670和1680相应是处理器1510和1515,而协同处理器1638是协同处理器1545。在另一个实施例中,处理器1670和1680相应是处理器1510、协同处理器1545。
处理器1670和1680被示出相应包括集成存储器控制器(IMC)单元1672和1682。处理器1670还包括作为它的总线控制器单元的部分的点对点(P-P)接口1676和1678;类似地,第二处理器1680包括P-P接口1686和1688。使用P-P接口电路1678、1688,处理器1670、1680可经由点对点(P-P)接口1650来互换信息。如图16中所示出的,IMC 1672和1682将处理器耦合到相应存储器(就是存储器1632和存储器1634),其可以是本地附连到相应处理器的主存储器的部分。
使用点对点接口电路1676、1694、1686、1698,处理器1670、1680可各自经由各个P-P接口1652、1654与芯片集1690互换信息。芯片集1690可以可选地经由高性能接口1639与协同处理器1638互换信息。在一个实施例中,协同处理器1638是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等等
共享的高速缓冲存储器(未示出)可被包括在任一处理器中或在两个处理器之外,又经由P-P互连与处理器连接,使得如果处理器被置于低功率模式中,则任一或两个处理器的本地高速缓冲存储器信息可被存储在共享的高速缓冲存储器中。
芯片集1690可经由接口1696来耦合到第一总线1616。在一个实施例中,第一总线1616可以是***组件互连(PCI)总线、或诸如PCI高速总线或另一个第三代I/O互连总线的总线,尽管本发明的范围未被如此限制。
如图16中所示出的,各种I/O装置1614可连同总线桥1618被耦合到第一总线1616,总线桥1618将第一总线1616耦合到第二总线1620。在一个实施例中,诸如协同处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其它处理器的一个或多个附加处理器1615被耦合到第一总线1616。在一个实施例中,第二总线1620可以是低管脚计数(LPC)总线。各种装置可被耦合到第二总线1620,包括例如键盘和/或鼠标1622、通信装置1627和诸如硬盘驱动器或其它大容量存储装置的存储单元1628,其可包括指令/代码和数据1630(在一个实施例中)。进一步地,音频I/O1624可被耦合到第二总线1620。注意,其它架构是可能的。例如,替代图16的点对点架构,***可实现多点总线或其它此类架构。
现在参考图17,所示出的是根据本发明的实施例的第二更特定示范性***1700的框图。图16和17中的相似元件标有相似附图标记,并且图16的某些方面已从图17中被省略以便避免模糊图17的其它方面。
图17示出了处理器1670、1680可相应包括集成存储器以及I/O控制逻辑(“CL”)1672和1682。因此,CL 1672、1682包括集成存储器控制器单元并包括I/O控制逻辑。图17示出了不仅存储器1632、1634被耦合到CL 1672、1682,而且I/O装置1714也被耦合到控制逻辑1672、1682。遗留I/O装置1715被耦合到芯片集1690。
现在参考图18,所示出的是根据本发明的实施例的SoC 1800的框图。图14中的类似元件标有相似附图标记。同样,虚线框在更高级的SoC上是可选特征。在图18中,互连单元1802被耦合到:应用处理器1810,其包括一个或多个核172A-N的集合和共享的高速缓冲存储器单元1406;***代理单元1410;总线控制器单元1416;集成存储器控制器单元1414;协同处理器1820的集合或一个或多个,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(SRAM)单元1830;直接存储器访问(DMA)单元1832;以及用于耦合到一个或多个外部显示器的显示器单元1840。在一个实施例中,协同处理器1820包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器等等。
本文中所公开的机制的实施例可被实现在硬件、软件、固件、或此类实现手段的组合中。本发明的实施例可被实现为在可编程***上运行的程序代码或计算机程序,所述可编程***包括至少一个处理器、存储***(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、和至少一个输出装置。
诸如图16中所示出的代码1630的程序代码可被应用于输入指令以执行本文中所描述的功能并生成输出信息。输出信息可以已知方式被应用于一个或多个输出装置。为了此应用的目的,处理***包括具有处理器(诸如例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器)的任何***。
程序代码可被实现在高等级过程的或面向对象的编程语言中以与处理***通信。如果期望的话,则程序代码可还被实现在汇编或机器语言中。事实上,本文中所描述的机制不限于对任何具体编程语言的范围中。在任何情况中,语言可以是编译或解释的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其当由机器来读时促使该机器制作用于执行本文中所描述的技术的逻辑。此类表示(已知为“IP核”)可被存储在有形的、机器可读介质上并被供应给各种客户或制造设施以加载到实际做出逻辑或处理器的制作机器。
此类机器可读存储介质可包括由机器或装置所制造或形成的物品(article)的非暂态、有形的布置而没有限制,包括存储介质(诸如硬盘、包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)、和磁光盘的任何其它类型的盘)、半导体装置(诸如只读存储器(ROM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)的随机存取存储器(RAM),可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM)、磁或光卡、或适合于存储电子指令的任何其它类型的介质)。
因此,本发明的实施例还包括非暂态、有形的机器可读介质,所述介质含有指令或含有设计数据,诸如硬件描述语言(HDL),其定义本文中所描述的结构、电路、设备、处理器和/或***特征。此类实施例可还被称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情况中,指令转换器可被用于将指令从源指令集转换成目标指令集。例如,指令转换器可翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真、或以其它方式将指令转换成要由核来处理的一个或多个其它指令。指令转换器被实现在软件、硬件、固件、或其组合中。指令转换器可在处理器上、离开处理器、或部分在处理器上而部单独开处理器。
图19是框图,其对照根据本发明的实施例的使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令。在所示出的实施例中,指令转换器是软件指令转换器,尽管备选地指令转换器可被实现在软件、固件、硬件、或其各种组合中。图19示出使用x86编译器1904,用高等级语言1902的程序可被编译以生成x86二进制代码1906,其可由具有至少一个x86指令集核的处理器1916来原始运行。具有至少一个x86指令集核的处理器1916表示能如具有至少一个x86指令集核的Intel处理器一样大体上执行相同功能的任何处理器,这通过兼容地运行或以其它方式处理(1)Intel x86指令集核的指令集的实质部分,或(2)针对于在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的对象代码版本,以便取得大体上与具有至少一个x86指令集核的Intel处理器相同的结果。x86编译器1904表示可操作以生成x86二进制代码1906(例如,对象代码)的编译器,x86二进制代码1906能通过或不通过附加联接处理而在具有至少一个x86指令集核的处理器1916上被运行。类似地,图19示出了使用备选指令集编译器1908,用高等级语言1902的程序可被编译以生成备选指令集二进制代码1910,其可由不具有至少一个x86指令集核的处理器1914(例如,具有运行MIPS Technologies of Sunnyvale,CA的MIPS指令集和/或运行ARMHoldings of Sunnyvale,CA的ARM指令集的核的处理器)来原始运行。指令转换器1912被用于将x86二进制代码1906转换成可由不具有x86指令集核的处理器1914来原始运行的代码。此被转换的代码不可能与备选指令集二进制代码1910相同,因为能够这样做的指令转换器难以做出;然而,被转换的代码将完成一般操作并由来自备选指令集的指令构成。因此,指令转换器1912表示软件、固件、硬件、或其组合,其通过仿真、模拟或任何其它过程而允许不具有x86指令集处理器或核的处理器或另一电子装置运行x86二进制代码1906。
对图3-9中的任何图所述的组件、特征和细节可选地也可适用于图1-2中的任何图。此外,对设备中的任何设备所述的组件、特征和细节可选地也可适用于方法中的任何方法,其在实施例中可由和/或利用此类设备来执行。本文所述处理器中的任何处理器可包括在本文所公开的计算机***(例如图15-17)或SoC(例如图18)的任何中。本文所公开的指令可利用本文所示***中的任何***上的具有本文所示微架构中的任何微架构的本文所示处理器中的任何处理器来执行。本文所公开的指令可具有本文所示指令格式的特征的任何特征(例如图7和/或图10A-C中)。
在描述和权利要求中,术语“耦合”和/或“连接”连同它们的衍生可已经被使用。这些术语并不被意指为彼此的同义词。相反,在实施例中,“连接”可被用于指示两个或更多元件彼此直接物理和/或电接触。“耦合”可意味两个或更多元件彼此直接物理和/或电接触。然而,“耦合”还可意味两个或更多元件不彼此直接接触,但仍彼此合作或相互作用。例如,运行单元可通过一个或多个中间组件来与寄存器和/或解码单元耦合。在附图中,箭头被用于示出连接和耦合。
术语“和/或”可已经被使用。如本文中使用的,术语“和/或”意味一个或另一个或两者(例如A和/或B意味A或B或A和B两者)。
在上文描述中,已经陈述了特定细节以便提供实施例的全面理解。然而,可在没有这些特定细节中的某些的情况下实践其它实施例。本发明的范围将不由上文提供的特定示例来确定,但仅由下文权利要求来确定。在其它实例中,众所周知的电路、结构、装置和操作采用框图形式和/或在没有细节的情况下已经被示出,以便避免使本描述的理解模糊。在适当考虑处,附图标记或附图标记的终端部分已经在附图之中重复以指示对应的或类似的元件,其可以可选地具有相似或相同的特性,除非以其它方式被指定或是清楚明显的。
某些操作可由硬件组件执行,或在机器可运行或电路可运行的指令中来实施,该机器可运行或电路可运行的指令可被用于促使和/或引起利用指令来编程的机器、电路或硬件组件(例如处理器、处理器的部分、电路等)执行操作。操作还可以可选地由硬件和软件的组合来执行。处理器、机器、电路或硬件可包括特定或具体电路或其它逻辑(例如潜在地与固件和/或软件组合的硬件),其可操作以运行和/或处理指令并且响应于指令来存储结果。
一些实施例包括制品(例如计算机程序产品),其包括机器可读介质。介质可包括以由机器可读的形式提供(例如存储)信息的机制。机器可读介质可提供(或已在其上存储)指令或指令的序列,其如果和/或当由机器运行时可操作以促使机器执行和/或引起机器执行本文公开的一个或多个操作、方法或技术。
在一些实施例中,机器可读介质可包括非暂态机器可读存储介质。例如,非暂态机器可读存储介质可包括软盘、光存储介质、光盘、光数据存储装置、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除和可编程ROM(EPROM)、电可擦除和可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储装置、非暂态存储器、非暂态数据存储装置等等。非暂态机器可读存储介质不由暂态传播的信号组成。
合适的机器的示例包括但不限于通用处理器、专用处理器、数字逻辑电路、集成电路等等。合适的机器的另外其它示例包括计算机***或其它电子装置,其包括处理器、数字逻辑电路或集成电路。这样的计算机***或电子装置的示例包括但不限于桌上型计算机、膝上型计算机、笔记本计算机、平板式计算机、上网本、智能电话、蜂窝电话、服务器、网络装置(例如路由器和交换机)、移动互联网装置(MID)、媒体播放器、智能电视、桌面一体机(nettops)、机顶盒和视频游戏控制器。
遍及本说明书提到的例如“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”,指示具体特征可被包括在本发明的实践中,但不是必然要求的。类似地,在描述中,各种特征有时被集合在单个实施例、附图或其描述中,以用于简化本公开并帮助理解各种发明的方面的目的。然而,公开的此方法不被解释为反映本发明要求比在每个权利要求中清楚叙述的更多的特征的意图。相反,如下文权利要求所反映,发明的方面在于少于单个公开的实施例的所有特征。因此,在详细描述之后的权利要求由此清楚地合并到该详细描述中,其中每个权利要求独立作为本发明的单独实施例。
示例实施例
以下示例涉及另外实施例。示例中的具体细节可在一个或多个实施例中的任何地方使用。
示例1是一种处理器,其包括多个打包数据寄存器以及对邻接数据元素成对交换指令进行解码的解码单元。邻接数据元素成对交换指令要指示要包括多个邻接数据元素对的源打包数据,并且要指示目的地存储位置。处理器还包括与多个打包数据寄存器和解码单元耦合的运行单元。运行单元响应于邻接数据元素成对交换指令而要将结果打包数据存储在目的地存储位置中。结果打包数据要包括多个邻接数据元素对。结果打包数据的邻接数据元素的每个对要对应于源打包数据的邻接数据元素的不同对。结果打包数据的邻接数据元素的每个对中的邻接数据元素要已经在相对于源打包数据的邻接数据元素的每个对应对中的邻接数据元素的位置中交换。
示例2包括示例1的处理器,其中解码单元要对不指示要控制数据元素的位置的交换的任何非操作码交换控制比特的指令进行解码。
示例3包括示例1的处理器,其中在相对于源打包数据的每个对应对中的邻接数据元素的位置中交换的结果打包数据的每个对中的邻接数据元素要对指令的操作码是隐式的。
示例4包括示例1的处理器,其中在相对于源打包数据的每个对应对中的邻接数据元素的位置中交换的结果打包数据的每个对中的邻接数据元素要对于指令的操作码是固定的。
示例5包括示例1至4的任一个的处理器,其中解码单元要对要仅指示要作为源打包数据的单个源操作数的指令进行解码。
示例6包括示例1至5的任一个的处理器,其中解码单元要对要指示要包括要作为多字节数据元素的邻接数据元素对的源打包数据的指令进行解码。
示例7包括示例1至6的任一个的处理器,其中解码单元要对要指示要包括要作为浮点数据元素的邻接数据元素对的源打包数据的指令进行解码。
示例8包括示例1至7的任一个的处理器,其中解码单元要对要指示源打包数据操作掩码的指令进行解码。
示例9包括示例8的处理器,其中运行单元响应于指令而要存储要包括邻接数据元素的附加对的结果打包数据,所述邻接数据元素的附加对要对应于源打包数据的邻接数据元素的附加对,并且其要对应于源打包数据操作掩码的至少一个掩蔽出的掩码元素。结果打包数据的附加对中的邻接数据元素要还没有在相对于邻接数据元素的对应附加对中的邻接数据元素的位置中交换。
示例10包括示例9的处理器,其中至少一个掩蔽出的掩码元素要包括单个掩蔽出的掩码元素,其要对应于结果打包数据的邻接数据元素的附加对的数据元素两者。
示例11包括示例9的处理器,其中至少一个掩蔽出的掩码元素要包括一对掩蔽出的掩码元素,其各自要对应于结果打包数据的邻接数据元素的附加对的数据元素的不同一个数据元素。
示例12包括示例1至7的任一个的处理器,其中运行单元包括非控制交换逻辑,以在位置中相对于源打包数据的每个对应对中的邻接数据元素来交换结果打包数据的每个对中的邻接数据元素,而无需解释源打包数据的每个对的控制比特的一个或多个集合。
示例13包括示例1至7的任一个的处理器,其中解码单元还要对混洗指令和置换指令其中之一进行解码,其要属于与邻接数据元素成对交换指令相同的指令集。可选地,混洗和置换指令中的一个要具有比邻接数据元素成对交换指令更长的指令比特长度。
示例14包括示例1至7的任一个的处理器,其中解码单元还要对混洗指令和置换指令其中之一进行解码,其要属于与邻接数据元素成对交换指令相同的指令集。可选地,处理器要在比执行混洗和置换指令中的一个的时间量少至少一个时钟周期中执行邻接数据元素成对交换指令。
示例15是处理器中的方法,包括接收邻接数据元素成对交换指令。邻接数据元素成对交换指令指示包括多个邻接数据元素对的源打包数据,并且指示目的地存储位置。该方法还包括响应于邻接数据元素成对交换指令而将结果打包数据存储在目的地存储位置中,结果打包数据包括多个邻接数据元素对,结果打包数据的邻接数据元素的每个对对应于源打包数据的邻接数据元素的不同对,结果打包数据的邻接数据元素的每个对中的邻接数据元素在相对于源打包数据的邻接数据元素的每个对应对中的邻接数据元素的位置中交换。
示例16包括示例15的方法,其中接收包括接收不指示任何非操作码交换控制比特的指令。
示例17包括示例15至16的任一个的方法,其中在位置中相对于源打包数据的每个对应对中的邻接数据元素来交换结果打包数据的每个对中的邻接数据元素对于指令的操作码是隐式的和是固定的中的至少的一个。
示例18包括示例15至17的任一个的方法,其中接收包括接收指示作为单个源操作数的源打包数据的指令。
示例19包括示例15至18的任一个的方法,其中接收包括接收指示包括作为多字节浮点数据元素的邻接数据元素对的源打包数据的指令。
示例20包括示例15至19的任一个的方法,其中接收包括接收指示源打包数据操作掩码的指令。
示例21包括示例15至20的任一个的方法,其中接收包括接收指示包括邻接数据元素对的源打包数据的指令,所述邻接数据元素对各自包括复数,所述复数包括实数和虚数。同样,其中存储包括存储结果打包数据,其中结果打包数据的每个对中的实数和虚数已经在相对于源打包数据的每个对应对中的实数和虚数的位置中交换。
示例22是处理指令的***,其包括互连,以及与互连耦合的处理器。处理器要接收邻接数据元素成对交换指令,其要指示要包括多个邻接多字节数据元素对的源打包数据,并且要指示目的地打包数据寄存器。处理器响应于邻接数据元素成对交换指令而要将结果打包数据存储在目的地打包数据寄存器中。结果打包数据要包括多个邻接多字节数据元素对。结果打包数据的邻接多字节数据元素的每个对要对应于源打包数据的邻接多字节数据元素的不同对。结果打包数据的邻接多字节数据元素的每个对中的邻接多字节数据元素已经在相对于源打包数据的邻接多字节数据元素的每个对应对中的邻接多字节数据元素的位置中交换。***还包括与互连耦合的动态随机存取存储器(DRAM)。
示例23包括示例22的***,其中指令要不指示要控制数据元素的位置的交换的任何非操作码交换控制比特。
示例24是一种制品,其包括非暂时机器可读存储介质。非暂时机器可读存储介质存储邻接数据元素成对交换指令。邻接数据元素成对交换指令用来指示要包括多个邻接多字节数据元素对的源打包数据,并且指示目的地存储位置。邻接数据元素成对交换指令如果由机器运行,则要促使该机器执行操作,包括将结果打包数据存储在目的地存储位置中。结果打包数据包括多个邻接多字节数据元素对。结果打包数据的邻接多字节数据元素的每个对对应于源打包数据的邻接多字节数据元素的不同对。结果打包数据的邻接多字节数据元素的每个对中的邻接多字节数据元素已经在相对于源打包数据的邻接多字节数据元素的每个对应对中的邻接多字节数据元素的位置中交换。
示例25包括示例24的制品,其中机器要基于指令的操作码而不基于任何附加非操作码交换控制比特在位置中相对于源打包数据的每个对应对中的邻接数据元素来交换结果打包数据的每个对中的邻接数据元素。
示例26包括示例1至14的任一个的处理器,还包括预测分支的可选的分支预测单元以及与分支预测单元耦合的可选的指令预取单元,指令预取单元用来预取包括邻接数据元素成对交换指令的指令。处理器可选地还可包括与指令预取单元耦合的可选的等级1(L1)指令高速缓冲存储器、存储指令的L1指令高速缓冲存储器、存储数据的可选的L1数据高速缓冲存储器以及存储数据和指令的可选的等级2(L2)高速缓冲存储器。处理器可选地还可包括指令取单元,其与解码单元、L1指令高速缓冲存储器和L2高速缓冲存储器耦合,以在一些情况下从L1指令高速缓冲存储器和L2高速缓冲存储器之一中取邻接数据元素成对交换指令,并且向解码单元提供邻接数据元素成对交换指令。处理器可选地还可包括重命名寄存器的寄存器重命名单元、调度从邻接数据元素成对交换指令已经解码以供运行的一个或多个操作的可选的调度器。
示例27包括片上***,其包括至少一个互连、与至少一个互连耦合的示例1至14的任一个的处理器、与至少一个互连耦合的可选的图形处理单元(GPU)、与至少一个互连耦合的可选的数字信号处理器(DSP)、与至少一个互连耦合的可选显示控制器、与至少一个互连耦合的可选的存储器控制器、与至少一个互连耦合的可选的无线调制解调器、与至少一个互连耦合的可选的图像信号处理器、与至少一个互连耦合的可选的通用串行总线(USB)兼容控制器、与至少一个互连耦合的可选的Bluetooth兼容控制器以及与至少一个互连所耦合的可选的无线收发器控制器。
示例28是一种处理器或其它设备,其用来执行(例如可操作以执行)示例15至21的任一个的方法。
示例29是一种处理器或其它设备,其包括用于执行示例15至21的任一个的方法的部件。
示例30是一种处理器,其包括执行(例如可操作以执行)示例15至21的任一个的方法的逻辑。
示例31是一种包括可选的非暂时机器可读介质的制品,所述非暂时机器可读介质可选地存储或者以其它方式提供指令,所述指令如果和/或在由处理器、计算机***、电子装置或其它机器运行时可操作以促使机器执行示例15至21的任一个的方法。
示例32是基本上如本文所述的处理器或其它设备。
示例33是一种处理器或其它设备,其可操作以执行基本上如本文所述的任何方法。
示例34是一种处理器或其它设备,其执行(例如其具有逻辑以执行或者可操作以执行)基本上如本文所述的任何指令。
示例35是一种计算机***或其它电子装置,其包括具有对第一指令集的指令进行解码的解码单元的处理器。处理器还具有一个或多个运行单元。电子装置还包括与处理器耦合的存储装置。存储装置要存储第一指令,其可以是基本上如本文所公开的邻接数据元素成对交换指令的任何指令,并且其属于第二指令集。存储装置还要存储指令,以将第一指令转换为第一指令集的一个或多个指令。第一指令集的一个或多个指令在由处理器执行时要促使该处理器仿真第一指令。
Claims (25)
1.一种处理器,包括:
多个打包数据寄存器;
解码单元,可操作以对邻接数据元素成对交换指令进行解码,所述邻接数据元素成对交换指令用来指示要包括多个邻接数据元素对的源打包数据,并且指示目的地存储位置;以及
运行单元,与所述多个打包数据寄存器和所述解码单元耦合,所述运行单元响应于所述邻接数据元素成对交换指令而可操作以将结果打包数据存储在所述目的地存储位置中,所述结果打包数据包括多个邻接数据元素对,所述结果打包数据的邻接数据元素的每个对对应于所述源打包数据的邻接数据元素的不同对,所述结果打包数据的邻接数据元素的每个对中的所述邻接数据元素已经在相对于所述源打包数据的邻接数据元素的每个对应对中的所述邻接数据元素的位置中交换。
2.如权利要求1所述的处理器,其中,所述解码单元要对不指示要控制数据元素的位置的交换的任何非操作码交换控制比特的所述指令进行解码。
3.如权利要求1所述的处理器,其中,在相对于所述源打包数据的每个对应对中的所述邻接数据元素的位置中交换的所述结果打包数据的每个对中的所述邻接数据元素要对所述指令的操作码是隐式的。
4.如权利要求1所述的处理器,其中,在相对于所述源打包数据的每个对应对中的所述邻接数据元素的位置中交换的所述结果打包数据的每个对中的所述邻接数据元素要对于所述指令的操作码是固定的。
5.如权利要求1所述的处理器,其中,所述解码单元要对要仅指示要作为所述源打包数据的单个源操作数的所述指令进行解码。
6.如权利要求1所述的处理器,其中,所述解码单元要对要指示要包括要作为多字节数据元素的所述邻接数据元素对的所述源打包数据的所述指令进行解码。
7.如权利要求1所述的处理器,其中,所述解码单元要对要指示要包括要作为浮点数据元素的所述邻接数据元素对的所述源打包数据的所述指令进行解码。
8.如权利要求1至7中的任一项所述的处理器,其中,所述解码单元要对要指示源打包数据操作掩码的所述指令进行解码。
9.如权利要求8所述的处理器,其中,所述运行单元响应于所述指令而要存储要包括邻接数据元素的附加对的所述结果打包数据,所述邻接数据元素的附加对要对应于所述源打包数据的邻接数据元素的附加对,并且其要对应于所述源打包数据操作掩码的至少一个掩蔽出的掩码元素,并且其中所述结果打包数据的所述附加对中的所述邻接数据元素还没有在相对于邻接数据元素的所述对应附加对中的所述邻接数据元素的位置中交换。
10.如权利要求9所述的处理器,其中,所述至少一个掩蔽出的掩码元素要包括单个掩蔽出的掩码元素,其要对应于所述结果打包数据的邻接数据元素的所述附加对的数据元素两者。
11.如权利要求9所述的处理器,其中,所述至少一个掩蔽出的掩码元素要包括一对掩蔽出的掩码元素,其各自要对应于所述结果打包数据的邻接数据元素的所述附加对的所述数据元素的不同一个数据元素。
12.如权利要求1至7中的任一项所述的处理器,其中,所述运行单元包括非控制交换逻辑,以在位置中相对于所述源打包数据的每个对应对中的所述邻接数据元素来交换所述结果打包数据的每个对中的所述邻接数据元素,而无需解释所述源打包数据的每个对的控制比特的一个或多个集合。
13.如权利要求1至7中的任一项所述的处理器,其中,所述解码单元还要对混洗指令和置换指令其中之一进行解码,其要属于与所述邻接数据元素成对交换指令相同的指令集,并且其中所述混洗和置换指令中的所述一个要具有比所述邻接数据元素成对交换指令更长的指令比特长度。
14.如权利要求1至7中的任一项所述的处理器,其中,所述解码单元还要对混洗指令和置换指令其中之一进行解码,其要属于与所述邻接数据元素成对交换指令相同的指令集,并且其中所述处理器要在比执行所述混洗和置换指令中的所述一个的时间量少至少一个时钟周期中执行所述邻接数据元素成对交换指令。
15. 一种由处理器所执行的方法,所述方法包括:
接收邻接数据元素成对交换指令,所述邻接数据元素成对交换指令指示包括多个邻接数据元素对的源打包数据,并且指示目的地存储位置;以及
响应于所述邻接数据元素成对交换指令而将结果打包数据存储在所述目的地存储位置中,所述结果打包数据包括多个邻接数据元素对,所述结果打包数据的邻接数据元素的每个对对应于所述源打包数据的邻接数据元素的不同对,所述结果打包数据的邻接数据元素的每个对中的所述邻接数据元素在相对于所述源打包数据的邻接数据元素的每个对应对中的所述邻接数据元素的位置中交换。
16.如权利要求15所述的方法,其中,接收包括接收不指示任何非操作码交换控制比特的所述指令。
17.如权利要求15所述的方法,其中,在位置中相对于所述源打包数据的每个对应对中的所述邻接数据元素来交换所述结果打包数据的每个对中的所述邻接数据元素对于所述指令的操作码是隐式的和是固定的中的至少的一个。
18.如权利要求15所述的方法,其中,接收包括接收指示作为单个源操作数的所述源打包数据的所述指令。
19.如权利要求15所述的方法,其中,接收包括接收指示包括作为多字节浮点数据元素的所述邻接数据元素对的所述源打包数据的所述指令。
20.如权利要求15所述的方法,其中,接收包括接收指示源打包数据操作掩码的所述指令。
21.如权利要求15所述的方法,其中,接收包括接收指示包括所述邻接数据元素对的所述源打包数据的所述指令,所述邻接数据元素对各自包括复数,所述复数包括实数和虚数,并且其中存储包括存储所述结果打包数据,其中所述结果打包数据的每个对中的所述实数和虚数已经在相对于所述源打包数据的每个对应对中的所述实数和虚数的位置中交换。
22.一种包括用于执行如权利要求15至21中的任一项所述的方法的部件的设备。
23.一种制品,包括机器可读介质,其存储指令,所述指令如果由机器运行则可操作以促使所述机器执行如权利要求15至21中的任一项所述的方法。
24.一种电子装置,包括互联、与所述互连耦合的如权利要求1至7中的任一项所述的处理器以及与所述互连耦合的动态随机存取存储器(DRAM)。
25. 一种处理器,包括:
用于接收邻接数据元素成对交换指令的部件,所述邻接数据元素成对交换指令用来指示要包括多个邻接数据元素对的源打包数据,并且用来指示目的地存储位置;以及
用于响应于所述邻接数据元素成对交换指令而将结果打包数据存储在所述目的地存储位置中的部件,所述结果打包数据包括多个邻接数据元素对,所述结果打包数据的邻接数据元素的每个对对应于所述源打包数据的邻接数据元素的不同对,所述结果打包数据的邻接数据元素的每个对中的所述邻接数据元素要在相对于所述源打包数据的邻接数据元素的每个对应对中的所述邻接数据元素的位置中交换。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/978736 | 2015-12-22 | ||
US14/978,736 US20170177362A1 (en) | 2015-12-22 | 2015-12-22 | Adjoining data element pairwise swap processors, methods, systems, and instructions |
PCT/US2016/062867 WO2017112185A1 (en) | 2015-12-22 | 2016-11-18 | Adjoining data element pairwise swap processors, methods, systems, and instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108351780A true CN108351780A (zh) | 2018-07-31 |
CN108351780B CN108351780B (zh) | 2023-12-29 |
Family
ID=59064488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680068241.7A Active CN108351780B (zh) | 2015-12-22 | 2016-11-18 | 邻接数据元素成对交换处理器、方法、***和指令 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20170177362A1 (zh) |
EP (1) | EP3394725B1 (zh) |
CN (1) | CN108351780B (zh) |
TW (1) | TWI818894B (zh) |
WO (1) | WO2017112185A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2564696B (en) | 2017-07-20 | 2020-02-05 | Advanced Risc Mach Ltd | Register-based complex number processing |
US20190272175A1 (en) * | 2018-03-01 | 2019-09-05 | Qualcomm Incorporated | Single pack & unpack network and method for variable bit width data formats for computational machines |
US20210349719A1 (en) * | 2018-09-25 | 2021-11-11 | Nec Corporation | Information processing apparatus, information processing method, and program |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020027552A1 (en) * | 2000-05-05 | 2002-03-07 | Lee Ruby B. | Method and system for performing subword permutation instructions for use in two-dimensional multimedia processing |
US20030167460A1 (en) * | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
US20040143728A1 (en) * | 2003-01-21 | 2004-07-22 | Flynn David W. | Data processing apparatus and method for swapping data values |
US6859872B1 (en) * | 1999-05-12 | 2005-02-22 | Analog Devices, Inc. | Digital signal processor computation core with pipeline having memory access stages and multiply accumulate stages positioned for efficient operation |
CN101882127A (zh) * | 2010-06-02 | 2010-11-10 | 湖南大学 | 一种多核心处理器 |
US20120278591A1 (en) * | 2011-04-27 | 2012-11-01 | Advanced Micro Devices, Inc. | Crossbar switch module having data movement instruction processor module and methods for implementing the same |
US20130275729A1 (en) * | 2011-12-22 | 2013-10-17 | Seth Abraham | Packed Data Rearrangement Control Indexes Precursors Generation Processors, Methods, Systems, and Instructions |
US20140143521A1 (en) * | 2012-11-19 | 2014-05-22 | International Business Machines Corporation | Instruction swap for patching problematic instructions in a microprocessor |
CN104011652A (zh) * | 2011-12-30 | 2014-08-27 | 英特尔公司 | 打包选择处理器、方法、***和指令 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050188182A1 (en) * | 1999-12-30 | 2005-08-25 | Texas Instruments Incorporated | Microprocessor having a set of byte intermingling instructions |
US7739319B2 (en) * | 2001-10-29 | 2010-06-15 | Intel Corporation | Method and apparatus for parallel table lookup using SIMD instructions |
US7185182B2 (en) * | 2003-02-04 | 2007-02-27 | Via Technologies, Inc. | Pipelined microprocessor, apparatus, and method for generating early instruction results |
US7315261B2 (en) * | 2003-07-02 | 2008-01-01 | Texas Instruments Incorporated | Method for converting data from pixel format to bitplane format |
TWI265455B (en) * | 2005-04-21 | 2006-11-01 | King Billion Electronics Co Lt | Integrated data processor |
US7353331B2 (en) * | 2005-10-05 | 2008-04-01 | Intel Corporation | Hole-filling content addressable memory (HCAM) |
US20070156685A1 (en) * | 2005-12-28 | 2007-07-05 | Hiroshi Inoue | Method for sorting data using SIMD instructions |
US20120110037A1 (en) * | 2010-11-01 | 2012-05-03 | Qualcomm Incorporated | Methods and Apparatus for a Read, Merge and Write Register File |
GB2485774A (en) * | 2010-11-23 | 2012-05-30 | Advanced Risc Mach Ltd | Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field |
US10803009B2 (en) * | 2011-07-14 | 2020-10-13 | Texas Instruments Incorporated | Processor with table lookup processing unit |
US10564966B2 (en) * | 2011-12-22 | 2020-02-18 | Intel Corporation | Packed data operation mask shift processors, methods, systems, and instructions |
-
2015
- 2015-12-22 US US14/978,736 patent/US20170177362A1/en not_active Abandoned
-
2016
- 2016-11-17 TW TW105137684A patent/TWI818894B/zh active
- 2016-11-18 CN CN201680068241.7A patent/CN108351780B/zh active Active
- 2016-11-18 WO PCT/US2016/062867 patent/WO2017112185A1/en active Application Filing
- 2016-11-18 EP EP16879675.3A patent/EP3394725B1/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6859872B1 (en) * | 1999-05-12 | 2005-02-22 | Analog Devices, Inc. | Digital signal processor computation core with pipeline having memory access stages and multiply accumulate stages positioned for efficient operation |
US20020027552A1 (en) * | 2000-05-05 | 2002-03-07 | Lee Ruby B. | Method and system for performing subword permutation instructions for use in two-dimensional multimedia processing |
US20030167460A1 (en) * | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
US20040143728A1 (en) * | 2003-01-21 | 2004-07-22 | Flynn David W. | Data processing apparatus and method for swapping data values |
CN101882127A (zh) * | 2010-06-02 | 2010-11-10 | 湖南大学 | 一种多核心处理器 |
US20120278591A1 (en) * | 2011-04-27 | 2012-11-01 | Advanced Micro Devices, Inc. | Crossbar switch module having data movement instruction processor module and methods for implementing the same |
US20130275729A1 (en) * | 2011-12-22 | 2013-10-17 | Seth Abraham | Packed Data Rearrangement Control Indexes Precursors Generation Processors, Methods, Systems, and Instructions |
CN104011652A (zh) * | 2011-12-30 | 2014-08-27 | 英特尔公司 | 打包选择处理器、方法、***和指令 |
US20140143521A1 (en) * | 2012-11-19 | 2014-05-22 | International Business Machines Corporation | Instruction swap for patching problematic instructions in a microprocessor |
Also Published As
Publication number | Publication date |
---|---|
WO2017112185A1 (en) | 2017-06-29 |
TWI818894B (zh) | 2023-10-21 |
US20170177362A1 (en) | 2017-06-22 |
TW201732554A (zh) | 2017-09-16 |
EP3394725B1 (en) | 2021-12-01 |
EP3394725A4 (en) | 2020-04-22 |
EP3394725A1 (en) | 2018-10-31 |
CN108351780B (zh) | 2023-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104781803B (zh) | 用于架构不同核的线程迁移支持 | |
CN104756068B (zh) | 合并相邻的聚集/分散操作 | |
CN104137055B (zh) | 点积处理器、方法、***和指令 | |
CN109614076A (zh) | 浮点到定点转换 | |
CN104049953B (zh) | 用于合并操作掩码的未经掩码元素的装置、方法、***和制品 | |
TWI525533B (zh) | 用以執行遮罩位元壓縮之系統、設備、及方法 | |
CN104040488B (zh) | 用于给出相应复数的复共轭的矢量指令 | |
CN104137060B (zh) | 高速缓存协处理单元 | |
CN104077107B (zh) | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和*** | |
CN104335166B (zh) | 用于执行混洗和操作的装置和方法 | |
CN104115114B (zh) | 经改进的提取指令的装置和方法 | |
CN109791488A (zh) | 用于执行用于复数的融合乘-加指令的***和方法 | |
CN104011652B (zh) | 打包选择处理器、方法、***和指令 | |
CN104011663B (zh) | 掩码寄存器上的广播操作 | |
CN107003843A (zh) | 用于对向量元素集合执行约减操作的方法和设备 | |
CN109240744A (zh) | 排序加速处理器、方法、***和指令 | |
CN104011650B (zh) | 使用输入写掩码和立即数从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的***、装置和方法 | |
CN104350461B (zh) | 具有不同的读和写掩码的多元素指令 | |
CN107092465A (zh) | 用于提供向量混合和置换功能的指令和逻辑 | |
CN107077329A (zh) | 用于通过无序硬件软件协同设计处理器中的栈同步指令来实现和维持判定值的栈的方法和设备 | |
CN108519921A (zh) | 用于从通用寄存器向向量寄存器进行广播的装置和方法 | |
CN109196467A (zh) | 将源封包数据划分为通路的处理器、方法、***和指令 | |
CN108701028A (zh) | 用于执行用于置换掩码的指令的***和方法 | |
CN107003852A (zh) | 用于执行向量位混洗的方法和装置 | |
CN106445469A (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 |