CN108369572A - 用于基于向量的位操纵的指令和逻辑 - Google Patents

用于基于向量的位操纵的指令和逻辑 Download PDF

Info

Publication number
CN108369572A
CN108369572A CN201680073993.2A CN201680073993A CN108369572A CN 108369572 A CN108369572 A CN 108369572A CN 201680073993 A CN201680073993 A CN 201680073993A CN 108369572 A CN108369572 A CN 108369572A
Authority
CN
China
Prior art keywords
instruction
vector
processor
data
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201680073993.2A
Other languages
English (en)
Inventor
E.奥尔德-艾哈迈德-瓦尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN108369572A publication Critical patent/CN108369572A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

一种处理器包括:接收执行基于向量的位操纵的指令的前端,解码指令的解码器,以及存储多个数据元素的源向量寄存器。该处理器还包括执行单元,以用第一逻辑执行指令以并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个。另外,该处理器包括引退指令的引退单元。

Description

用于基于向量的位操纵的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构的领域,所述相关联的指令集架构在由处理器或其它处理逻辑执行时执行逻辑、数学或其它功能操作。
背景技术
多处理器系统正变得越来越普遍。多处理器系统的应用包括一直向下到桌面计算的动态域分区。为了利用多处理器系统,待执行的代码可以被分离成用于由各种处理实体执行的多个线程。每个线程可以被相互并行地执行。如它们在处理器上被接收的指令可以被解码为原始或更原始的用于在处理器上执行的术语或指令字。处理器可以被实现在片上系统中。
附图说明
附图的图中通过示例而非限制的方式图示实施例:
图1A是根据本公开的实施例的用可包括执行指令的指令单元的处理器形成的示范性计算机系统的框图;
图1B图示根据本公开的实施例的数据处理系统;
图1C图示用于执行文本串比较操作的数据处理系统的其它实施例;
图2是根据本公开的实施例的用于可包括执行指令的逻辑电路的处理器的微架构的框图;
图3A图示根据本公开的实施例的多媒体寄存器中的各种打包(packed)数据类型表示;
图3B图示根据本公开的实施例的可能的寄存器中数据存储格式;
图3C图示根据本公开的实施例的多媒体寄存器中的各种有符号和无符号的打包数据类型表示;
图3D图示操作编码格式的实施例;
图3E图示根据本公开的实施例的具有四十或更多位的另一个可能的操作编码格式;
图3F图示根据本公开的实施例的又一个可能的操作编码格式;
图4A是图示根据本公开的实施例的有序流水线和寄存器重命名级、无序发布/执行流水线的框图;
图4B是图示根据本公开的实施例的将包括在处理器中的有序架构核和寄存器重命名逻辑、无序发布/执行逻辑的框图;
图5A是根据本公开的实施例的处理器的框图;
图5B是根据本公开的实施例的核的示例性实现方式的框图;
图6是根据本公开的实施例的系统的框图;
图7是根据本公开的实施例的第二系统的框图;
图8是根据本公开的实施例的第三系统的框图;
图9是根据本公开的实施例的片上系统的框图;
图10图示根据本公开的实施例的包含可执行至少一个指令的中央处理单元和图形处理单元的处理器;
图11是图示根据本公开的实施例的IP核的开发的框图;
图12图示根据本公开的实施例的可如何由不同类型的处理器仿真第一类型的指令;
图13图示根据本公开的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细的框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子设备的框图;
图18是根据本公开的实施例的用于基于向量的位操纵的指令和逻辑的示例性系统的说明;
图19是图示根据本公开的实施例的执行扩展向量指令的处理器核的框图;
图20是图示根据本公开的实施例的示例性扩展向量寄存器文件的框图;
图22图示根据本公开的实施例的用于执行VPBLSRD指令的示例性方法2200;
图23图示根据本公开的实施例的用于执行VPBLSD指令的示例性方法2300;
图24图示根据本公开的实施例的用于执行VPBLSMSKD指令的示例性方法2400;
图25图示根据本公开的实施例的用于执行VPBITEXTRACTRANGED指令的示例性方法2500;
图26图示根据本公开的实施例的用于执行VPBITINSERTRANGED指令的示例性方法2600;
图27图示根据本公开的实施例的用于执行VPBITEXTRACTD指令的示例性方法2700;以及
图28图示根据本公开的实施例的用于执行VPBITINSERTD指令的示例性方法2800。
具体实施方式
下面的描述对用于在处理装置上执行基于向量的位操纵的指令和处理逻辑进行描述。这样的处理装置可包括无序处理器。在下面的描述中,阐述诸如处理逻辑、处理器类型、微架构条件、事件、使能机制等等之类的许多具体细节,以便提供对本公开的实施例的更全面理解。然而,本领域技术人员将意识到的是:可在没有这样的具体细节的情况下实践实施例。另外,一些公知的结构、电路等等未被详细示出,以避免不必要地模糊本公开的实施例。
虽然参照处理器来描述下面的实施例,但是其它实施例适用于其它类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于其它类型的电路或半导体器件,该电路或半导体器件可受益于较高的流水线吞吐量和改善的性能。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可应用于其中可执行数据的操纵或管理的任何处理器和机器。另外,下面的描述提供示例,并且附图出于说明的目的示出各种示例。然而,这些示例不应当被解释为限制性的意义,因为其仅仅旨在提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能的实现方式的穷尽列表。
虽然以下示例在执行单元和逻辑电路的上下文中描述指令处理和分布,但是本公开的其它实施例可通过存储在机器可读有形介质上的数据或指令来实现,该机器可读有形介质在由机器执行时使机器执行与该公开的至少一个实施例一致的功能。在一个实施例中,与本公开的实施例相关联的功能以机器可执行指令来体现。指令可用于使可用指令编程的通用或专用处理器来执行本公开的步骤。本公开的实施例可被提供为计算机程序产品或软件,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,该指令可用于编程计算机(或其它电子设备)以执行根据本公开的实施例的一个或多个操作。此外,本公开的实施例的步骤可能由包含用于执行步骤的固定功能逻辑的具体硬件组件或者由编程的计算机组件和固定功能硬件组件的任何组合来执行。
用于编程逻辑以执行本公开的实施例的指令可被存储在系统中的存储器内,诸如DRAM、高速缓存、闪速存储器或其它储存器。此外,指令可经由网络或通过其它计算机可读介质来分布。因而,机器可读介质可包括用于以由机器(例如,计算机)可读的形式存储或发送信息的任何机制,但是不限于在通过互联网、经由电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等)的信息传输中使用的软盘、光盘、压缩盘、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器、或者有形的机器可读储存器。相应地,计算机可读介质可包括适合于以由机器(例如,计算机)可读的形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。
设计可经历各种阶段,从创建到模拟到制造。表示设计的数据可以许多方式来表示设计。首先,如在模拟中可能有用的,硬件可使用硬件描述语言或另一种功能描述语言来表示。另外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,设计在某个阶段可达到表示硬件模型中的各种设备的物理布置的数据的水平。在其中使用某些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于生产集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可被存储在任何形式的机器可读介质中。存储器或者诸如盘之类的磁或光储存器可以是机器可读介质,以存储经由调制或以其它方式生成以发送这样的信息的光或电波发送的信息。当发送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重传而言,可制作新副本。因而,通信提供商或网络提供商可在有形的机器可读介质上至少临时存储体现本公开的实施例的技术的项目,诸如编码成载波的信息。
在现代处理器中,许多不同的执行单元可用于处理和执行各种代码和指令。一些指令可被更快完成,而其它指令可花费许多时钟周期来完成。指令的吞吐量越快,处理器的整体性能越好。因而,使尽可能多的指令尽可能快地执行将是有利的。然而,可能存在具有较大复杂度并且在执行时间和处理器资源方面需要更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
随着更多计算机系统用在互联网、文本和多媒体应用中,已经随时间的过去而引入了附加处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理、以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构实现,一个或多个微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器可共享公共指令集的至少一部分。例如,Intel® Pentium 4处理器、Intel® Core™处理器以及来自加利福尼亚州桑尼维尔的Advanced Micro Devices公司的处理器实现几乎相同版本的x86指令集(具有已经添加有较新版本的一些扩展),但是具有不同的内部设计。类似地,由诸如ARM控股有限公司、MIPS或者其被许可人或采用者之类的其它处理器开发公司设计的处理器可共享公共指令集的至少一部分,但是可包括不同的处理器设计。例如,可以不同方式、在不同的微架构中使用新的或公知的技术来实现ISA的相同寄存器架构,包括专用物理寄存器、使用寄存器重命名机制的一个或多个动态分配的物理寄存器(例如,使用寄存器别名表(RAT)、重新排序缓冲器(ROB)和引退寄存器文件。在一个实施例中,寄存器可包括可由或可不由软件编程器可寻址的一个或多个寄存器、寄存器架构、寄存器文件或者其它寄存器集。
指令可包括一个或多个指令格式。在一个实施例中,指令格式可指示各种字段(位的数量、位的位置等),以除其它外指定待执行的操作和将对其执行操作的操作数。在进一步的实施例中,一些指令格式可进一步由指令模板(或子格式)定义。例如,给定指令格式的指令模板可被定义成具有指令格式的字段的不同子集和/或被定义成具有被不同解释的给定字段。在一个实施例中,指令可使用指令格式(并且,如果被定义,则以该指令格式的指令模板的给定一个)来表达,并且指定或指示操作和操作将在其上操作的操作数。
科学、金融、自动向量化通用、RMS(识别、挖掘和合成)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可需要对大量数据项执行相同操作。在一个实施例中,单指令多数据(SIMD)是指使处理器对多个数据元素执行操作的一种类型的指令。SIMD技术可用在处理器中,该处理器可在逻辑上将寄存器中的位划分成许多固定大小或可变大小的数据元素,其中的每一个表示分离的值。例如,在一个实施例中,64位寄存器中的位可被组织为包含四个分离的16位数据元素的源操作数,其中的每一个表示分离的16位值。这种数据类型可被称为“打包”数据类型或“向量”数据类型,并且这种数据类型的操作数可被称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是存储在单个寄存器内的打包数据元素的序列,并且打包数据操作数或向量操作数可以是SIMD指令(或者“打包数据指令”或“向量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定将对两个源向量操作数执行的单个向量操作,以生成相同或不同大小的、具有相同或不同数量的数据元素的、并且以相同或不同的数据元素次序的目的地向量操作数(也被称为结果向量操作数)。
诸如由具有包括x86、MMX™、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1以及SSE4.2指令的指令集的Intel® Core™处理器,诸如具有包括VectorFloating Point(VFP)和/或NEON指令的指令集的ARM Cortex®系列处理器之类的ARM处理器,以及诸如由中国科学院的计算技术研究所(ICT)开发的龙芯(Loongson)系列处理器之类的MIPS处理器所采用的SIMD技术已经使得能够显著改进应用性能(Core™和MMX™是加利福尼亚州圣克拉拉的英特尔公司的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由具有与描绘的名称或功能不同的其它名称或功能的寄存器、存储器或其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域等等。在其它实施例中,SRC和DEST存储区域中的两个或更多个可对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,源寄存器中的一个还可通过例如将对第一和第二源数据执行的操作的结果回写到用作目的地寄存器的两个源寄存器中的一个来充当目的地寄存器。
图1A是根据本公开的实施例的用可包括执行指令的执行单元的处理器形成的示范性计算机系统的框图。根据本公开,诸如在本文所述的实施例中,系统100可包括组件,诸如采用包括执行用于过程数据的算法的逻辑的执行单元的处理器102。系统100可表示基于从加利福尼亚州圣克拉拉的英特尔公司可得到的PENTIUM® III、PENTIUM® 4、Xeon™、Itanium®、XScale™和/或StrongARM™微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器、工程工作站、机顶盒等等的PC)。在一个实施例中,样本系统100可执行可从华盛顿州雷蒙德的微软公司可得到的WINDOWS™版本的操作系统,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户接口。因而,本公开的实施例不限于硬件线路和软件的任何具体组合。
实施例不限于计算机系统。本公开的实施例可用在诸如手持设备之类的其它设备以及嵌入式应用中。手持设备的一些示例包括蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)和手持PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或者可执行根据至少一个实施例的一个或多个指令的任何其它系统。
计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108以执行算法来执行根据本公开的一个实施例的至少一个指令。可在单处理器台式计算机或服务器系统的上下文中描述一个实施例,但是可在多处理器系统中包括其它实施例。系统100可以是“中心(hub)”系统架构的示例。系统100可包括用于处理数据信号的处理器102。处理器102例如可包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器、或者诸如数字信号处理器之类的任何其它处理器设备。在一个实施例中,处理器102可耦合到处理器总线110,处理器总线110可在处理器102与系统100中的其它组件之间发送数据信号。系统100的元件可执行对本领域技术人员公知的常规功能。
在一个实施例中,处理器102可包括1级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一个实施例中,高速缓存存储器可驻留在处理器102外部。其它实施例还可包括内部和外部高速缓存两者的组合,这取决于特定的实现方式和需要。寄存器文件106可将不同类型的数据存储在包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器的各种寄存器中。
包括执行整数和浮点操作的逻辑的执行单元108也驻留在处理器102中。处理器102还可包括存储用于某些宏指令的微代码的微代码(ucode)ROM。在一个实施例中,执行单元108可包括处理打包指令集109的逻辑。通过将打包指令集109包括在通用处理器102的指令集中,连同执行指令的相关联的线路,可使用通用处理器102中的打包数据来执行由许多多媒体应用使用的操作。因而,可通过使用用于对打包数据执行操作的全宽度的处理器的数据总线来更高效地加速和执行许多多媒体应用。这可消除在处理器的数据总线上传送较小数据单元以一次一个数据元素地执行一个或多个操作的需要。
执行单元108的实施例还可用在微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路中。系统100可包括存储器120。存储器120可被实现为动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或其它存储器设备。存储器120可存储可由处理器102执行的数据信号所表示的指令119和/或数据121。
系统逻辑芯片116可耦合到处理器总线110和存储器120。系统逻辑芯片116可包括存储器控制器中心(MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116可向存储器120提供高带宽存储器路径118,以用于指令119和数据121的存储并且用于图形命令、数据和结构(texture)的存储。MCH 116可引导处理器102、存储器120与系统100中的其它组件之间的数据信号,并且桥接处理器总线110、存储器120与系统I/O 122之间的数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH 116可通过存储器接口118耦合到存储器120。图形卡112可通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100可使用专用中心接口总线122来将MCH 116耦合到I/O控制器中心(ICH)130。在一个实施例中,ICH 130可经由本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线可包括用于将外设连接到存储器120、芯片组和处理器102的高速I/O总线。示例可包括音频控制器129、固件中心(闪速BIOS)128、无线收发器126、数据储存器124、包含用户输入接口125(其可包括键盘接口)的传统I/O控制器123、诸如通用串行总线(USB)之类的串行扩展端口127、以及网络控制器134。数据存储设备124可包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪速存储器设备或其它大容量存储设备。
对于系统的另一个实施例,根据一个实施例的指令可与片上系统一起使用。片上系统的一个实施例由处理器和存储器组成。用于一个这样的系统的存储器可包括闪速存储器。闪速存储器可位于与处理器和其它系统组件相同的管芯上。另外,诸如存储器控制器或图形控制器之类的其它逻辑块也可位于片上系统上。
图1B图示实现本公开的实施例的原理的数据处理系统140。本领域技术人员将容易意识到的是:在不脱离该公开的实施例的范围的情况下,本文所述的实施例可用替代处理系统来操作。
计算机系统140包括用于执行根据一个实施例的至少一个指令的处理核159。在一个实施例中,处理核159表示任何类型的架构(包括但不限于CISC、RISC或VLIW类型架构)的处理单元。处理核159还可适合于以一个或多个工艺技术并且通过足够详细地在机器可读介质上表示的制造,可适合于促进所述制造。
处理核159包括执行单元142、寄存器文件的集合145以及解码器144。处理核159还可包括对理解本公开的实施例可能不必要的附加线路(未示出)。执行单元142可执行由处理核159接收的指令。除了执行典型的处理器指令之外,执行单元142还可执行打包指令集143中的指令以用于对打包数据格式执行操作。打包指令集143可包括用于执行该公开的实施例的指令以及其它打包指令。执行单元142可通过内部总线耦合到寄存器文件145。寄存器文件145可表示处理核159上用于存储包括数据的信息的存储区域。如先前所提及的,应理解的是:存储区域可存储可能不关键的打包数据。执行单元142可耦合到解码器144。解码器144可将由处理核159接收的指令解码为控制信号和/或微代码入口点。响应于这些控制信号和/或微代码入口点,执行单元142执行适当的操作。在一个实施例中,解码器可解释指令的操作码,该指令的操作码将指示应当对指令内指示的对应数据执行什么操作。
处理核159可与总线141耦合以用于与各种其它系统设备通信,各种其它系统设备例如可包括但不限于同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、突发闪速存储器接口148、个人计算机存储器卡国际协会(PCMCIA)/紧凑型闪存(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器访问(DMA)控制器151以及替代总线主接口152。在一个实施例中,数据处理系统140还可包括用于经由I/O总线153与各种I/O设备通信的I/O桥154。这样的I/O设备例如可包括但不限于通用异步接收器/发送器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供移动、网络和/或无线通信以及可执行包括文本串比较操作的SIMD操作的处理核159。处理核159可被编程有各种音频、视频、成像和通信算法,包括离散变换,诸如Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)及其各自的逆变换;压缩/解压缩技术,诸如颜色空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)功能,诸如脉冲编码调制(PCM)。
图1C图示执行SIMD文本串比较操作的数据处理系统的其它实施例。在一个实施例中,数据处理系统160可包括主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出系统168。输入/输出系统168可以可选地耦合到无线接口169。SIMD协处理器161可执行包括根据一个实施例的指令的操作。在一个实施例中,处理核170可适合于以一个或多个工艺技术并且通过足够详细地在机器可读介质上表示的制造,可适合于促进包括处理核170的数据处理系统160的全部或部分的制造。
在一个实施例中,SIMD协处理器161包括执行单元162和寄存器文件的集合164。主处理器166的一个实施例包括解码器165以识别包括根据一个实施例的指令的指令集163的指令以用于由执行单元162执行。在其它实施例中,SIMD协处理器161还包括解码器165的至少一部分(被示为165B)以解码指令集163的指令。处理器核170还可包括对理解本公开的实施例可能不必要的附加线路(未示出)。
在操作中,主处理器166执行数据处理指令的流,该数据处理指令控制包括与高速缓存存储器167和输入/输出系统168的交互的一般类型的数据处理操作。嵌入在数据处理指令的流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为应当由附接的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号)。这些指令可由任何附接的SIMD协处理器从协处理器总线171接收。在这种情况下,SIMD协处理器161可接受并执行旨在用于它的任何接收的SIMD协处理器指令。
数据可经由无线接口169而被接收以用于由SIMD协处理器指令处理。对于一个示例,语音通信可以数字信号的形式而被接收,该数字信号可由SIMD协处理器指令处理以再生表示语音通信的数字音频样本。对于另一个示例,压缩的音频和/或视频可以数字位流的形式而被接收,该数字位流可由SIMD协处理器指令处理以再生数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可被集成到单个处理核170中,单个处理核170包括执行单元162、寄存器文件的集合164和解码器165以识别包括根据一个实施例的指令的指令集163的指令。
图2是根据本公开的实施例的用于可包括执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,根据一个实施例的指令可被实现成对具有字节、字、双字、四字等的大小以及诸如单和双精度整数和浮点数据类型之类的数据类型的数据元素上操作。在一个实施例中,有序前端201可实现处理器200的一部分,该部分可取回待执行的指令并且准备稍后将在处理器流水线中使用的指令。前端201可包括几个单元。在一个实施例中,指令预取器226从存储器取回指令,并且将指令馈送到指令解码器228,指令解码器228进而解码或解释指令。例如,在一个实施例中,解码器将接收的指令解码为被称为“微指令”或“微操作”(也被称为微op或uop)的机器可执行的一个或多个操作。在其它实施例中,解码器将指令解析成可由微架构使用以执行根据一个实施例的操作的操作码以及对应的数据和控制字段。在一个实施例中,跟踪(trace)高速缓存230可将解码的uop汇编成uop队列234中的程序排序的序列或跟踪以用于执行。当跟踪高速缓存230遇到复杂指令时,微代码ROM232提供完成操作所需要的uop。
一些指令可被转换成单个微op,而其它需要几个微op来完成全部操作。在一个实施例中,如果需要多于四个微op来完成指令,解码器228可访问微代码ROM 232以执行指令。在一个实施例中,指令可被解码为少量的微op以用于在指令解码器228处处理。在另一个实施例中,如果需要许多微op来完成操作,指令可被存储在微代码ROM 232内。跟踪高速缓存230是指入口点可编程逻辑阵列(PLA),以确定正确的微指令指针,用于从微代码ROM 232读取微代码序列以完成根据一个实施例的一个或多个指令。在微代码ROM 232完成用于指令的排序微op之后,机器的前端201可从跟踪高速缓存230恢复取回微op。
无序执行引擎203可准备指令以用于执行。无序执行逻辑具有许多缓冲器以随着它们沿流水线向下进行并且被调度以用于执行而平滑且重新排序指令的流以优化性能。分配器/寄存器重命名器215中的分配器逻辑分配每个uop需要的机器缓冲器和资源以便执行。分配器/寄存器重命名器215中的寄存器重命名逻辑将逻辑寄存器重命名到寄存器文件中的条目上。分配器215还在指令调度器:存储器调度器209、快速调度器202、慢速/一般浮点调度器204和简单浮点调度器206之前分配用于两个uop队列(一个用于存储器操作(存储器uop队列207),并且一个用于非存储器操作(整数/浮点uop队列205))的一个中的每个uop的条目。uop调度器202、204、206基于其相关输入寄存器操作数源的准备度(readiness)以及uop需要完成其操作的执行资源的可用性来确定uop何时准备好执行。一个实施例的快速调度器202可在每半个主时钟周期上进行调度,而其它调度器仅仅可每主处理器时钟周期调度一次。调度器为分派端口仲裁以调度uop以用于执行。
寄存器文件208、210可被布置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器文件208、210中的每一个分别执行整数和浮点操作。每个寄存器文件208、210可包括可将尚未写入到寄存器文件中的刚刚完成的结果旁路或转发到新的相关uop的旁路网络。整数寄存器文件208和浮点寄存器文件210可相互通信数据。在一个实施例中,整数寄存器文件208可被分割成两个分离的寄存器文件,一个寄存器文件用于低阶32位数据,而第二寄存器文件用于高阶32位数据。浮点寄存器文件210可包括128位宽的条目,因为浮点指令典型地具有从64到128位宽的操作数。
执行块211可包含执行单元212、214、216、218、220、222、224。执行单元212、214、216、218、220、222、224可执行指令。执行块211可包括存储微指令需要执行的整数和浮点数据操作数值的寄存器文件208、210。在一个实施例中,处理器200可包括许多执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一个实施例中,浮点执行块222、224可执行浮点、MMX、SIMD和SSE或其它操作。在又一个实施例中,浮点ALU 222可包括64位乘64位浮点除法器以执行除法、平方根和余数微op。在各种实施例中,涉及浮点值的指令可用浮点硬件来处理。在一个实施例中,ALU操作可被传递到高速ALU执行单元216、218。高速ALU 216、218可执行具有半个时钟周期的有效等待时间的快速操作。在一个实施例中,最复杂的整数操作前进到慢速ALU 220,因为慢速ALU 220可包括用于长等待时间类型的操作的整数执行硬件,诸如乘法器、移位、标记逻辑和分支处理。存储器加载/存储操作可由AGU 212、214执行。在一个实施例中,整数ALU 216、218、220可对64位数据操作数执行整数操作。在其它实施例中,ALU 216、218,220可被实现成支持各种数据位大小,包括十六、三十二、128、256等。类似地,浮点单元222、224可被实现成支持具有各种宽度的位的一系列操作数。在一个实施例中,浮点单元222、224可结合SIMD和多媒体指令来对128位宽的打包数据操作数操作。
在一个实施例中,uop调度器202、204、206在父加载已经完成执行之前分派相关操作。因为uop可在处理器200中被推测地调度和执行,所以处理器200还可包括处理存储器未命中(miss)的逻辑。如果数据加载在数据高速缓存中未命中,在流水线中可能存在执行中(in flight)的相关操作,其给调度器留下临时不正确的数据。回放机制追踪并且重新执行使用不正确的数据的指令。仅仅相关操作可能需要被回放,并且相关操作可被允许完成。处理器的一个实施例的调度器和回放机制还可被设计成捕捉用于文本串比较操作的指令序列。
术语“寄存器”可指可用作识别操作数的指令的一部分的板上处理器存储位置。换句话说,寄存器可以是可从处理器的外部(从程序员的角度)可使用的寄存器。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可存储数据,提供数据,并且执行本文所述的功能。本文所述的寄存器可由处理器内的线路使用任何数量的不同技术来实现,诸如专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于打包数据的八个多媒体SIMD寄存器。对于下面的讨论,寄存器可被理解为被设计成保持打包数据的数据寄存器,诸如在用来自加利福尼亚州圣克拉拉的英特尔公司的MMX技术使能的微处理器中的64位宽的MMXTM寄存器(在一些实例中也被称为“mm”寄存器)。以整数和浮点形式两者可用的这些MMX寄存器可与伴随SIMD和SSE指令的打包数据元素一起操作。类似地,与SSE2、SSE3、SSE4或更高(被统称为“SSEx”)技术有关的128位宽的XMM寄存器可保持这样的打包数据操作数。在一个实施例中,在存储打包数据和整数数据时,寄存器不需要在两种数据类型之间进行区分。在一个实施例中,整数和浮点数据可被包含在相同的寄存器文件或不同的寄存器文件中。此外,在一个实施例中,浮点和整数数据可被存储在不同的寄存器或相同的寄存器中。
在下面的图的示例中,可描述许多数据操作数。图3A图示根据本公开的实施例的多媒体寄存器中的各种打包数据类型表示。图3A图示用于128位宽的操作数的用于打包字节310、打包字320和打包双字(dword)330的数据类型。该示例的打包字节格式310可以是128位长,并且包含十六个打包字节数据元素。字节例如可被定义为8位数据。用于每个字节数据元素的信息可被存储在用于字节0的位7至位0,用于字节1的位15至位8,用于字节2的位23至位16,以及最终用于字节15的位120至位127中。因而,可在寄存器中使用所有可用的位。该存储布置提高处理器的存储效率。同样,利用访问的十六个数据元素,现在可对十六个数据元素并行地执行一个操作。
通常,数据元素可包括单独的数据段,单独的数据段与相同长度的其它数据元素一起被存储在单个寄存器或存储器位置中。在与SSEx技术有关的打包数据序列中,存储在XMM寄存器中的数据元素的数量可以是128位除以单独的数据元素的位的长度。类似地,在与MMX和SSE技术有关的打包数据序列中,存储在MMX寄存器中的数据元素的数量可以是64位除以单独的数据元素的位的长度。虽然在图3A中图示的数据类型可以是128位长,但是本公开的实施例还可用64位宽或其它大小的操作数来操作。该示例的打包字格式320可以是128位长,并且包含八个打包字数据元素。每个打包字包含十六位的信息。图3A的打包双字格式330可以是128位长,并且包含四个打包双字数据元素。每个打包双字数据元素包含三十二位的信息。打包四字可以是128位长,并且包含两个打包四字数据元素。
图3B图示根据本公开的实施例的可能的寄存器中数据存储格式。每个打包数据可包括多于一个独立数据元素。图示三个打包数据格式;打包半341、打包单个342以及打包双343。打包半341、打包单个342以及打包双343的一个实施例包含固定点数据元素。对于另一个实施例,打包半341、打包单个342以及打包双343中的一个或多个可包含浮点数据元素。打包半341的一个实施例可以是包含八个16位数据元素的128位长。打包单个342的一个实施例可以是128位长,并且包含四个32位数据元素。打包双343的一个实施例可以是128位长,并且包含两个64位数据元素。将意识到的是:这样的打包数据格式可被进一步扩展成其它寄存器长度,例如,扩展成96位、160位、192位、224位、256位或更多。
图3C图示根据本公开的实施例的多媒体寄存器中的各种有符号和无符号的打包数据类型表示。无符号的打包字节表示344图示SIMD寄存器中的无符号的打包字节的存储。用于每个字节数据元素的信息可被存储在用于字节0的位7至位0,用于字节1的位15至位8,用于字节2的位23至位16,以及最终用于字节15的位120至位127中。因而,可在寄存器中使用所有可用的位。该存储布置可提高处理器的存储效率。同样,利用访问的十六个数据元素,现在可以并行方式对十六个数据元素执行一个操作。有符号的打包字节表示345图示有符号的打包字节的存储。注意:每个字节数据元素的第八位可以是符号指示符。无符号的打包字表示346图示可如何将字七至字零存储在SIMD寄存器中。有符号的打包字表示347可类似于无符号的打包字寄存器中表示346。注意:每个字数据元素的第十六位可以是符号指示符。无符号的打包双字表示348示出如何存储双字数据元素。有符号的打包双字表示349可类似于无符号的打包双字寄存器中表示348。注意:必要的符号位可以是每个双字数据元素的第三十二位。
图3D图示操作编码(操作码)的实施例。此外,格式360可包括与在下面所述的操作码格式的类型对应的寄存器/存储器操作数寻址模式:“IA-32 Intel ArchitectureSoftware Developer’s Manual Volume 2: Instruction Set Reference”,其可从加利福尼亚州圣克拉拉的英特尔公司在万维网(www)上的intel.com/design/litcentr得到。在一个实施例中,指令可由字段361和362中的一个或多个来编码。可识别每指令多达两个操作数位置,包括多达两个源操作数标识符364和365。在一个实施例中,目的地操作数标识符366可与源操作数标识符364相同,而在其它实施例中它们可不同。在另一个实施例中,目的地操作数标识符366可与源操作数标识符365相同,而在其它实施例中它们可不同。在一个实施例中,由源操作数标识符364和365标识的源操作数中的一个可由文本串比较操作的结果改写,而在其它实施例中,标识符364对应于源寄存器元件,并且标识符365对应于目的地寄存器元件。在一个实施例中,操作数标识符364和365可标识32位或64位的源和目的地操作数。
图3E图示根据本公开的实施例的具有四十或更多位的另一个可能的操作编码(操作码)格式370。操作码格式370与操作码格式360对应,并且包括可选的前缀字节378。根据一个实施例的指令可由字段378、371和372中的一个或多个编码。多达每指令两个操作数位置可由源操作数标识符374和375并且由前缀字节378标识。在一个实施例中,前缀字节378可用于标识32位或64位的源和目的地操作数。在一个实施例中,目的地操作数标识符376可与源操作数标识符374相同,而在其它实施例中,它们可不同。对于另一个实施例,目的地操作数标识符376可与源操作数标识符375相同,而在其它实施例中,它们可不同。在一个实施例中,指令对由操作数标识符374和375标识的操作数中的一个或多个操作,并且由操作数标识符374和375标识的一个或多个操作数可由指令的结果改写,而在其它实施例中,由标识符374和375标识的操作数可被写入到另一个寄存器中的另一个数据元素。操作码格式360和370允许由MOD字段363和373并且由可选的比例-索引-基础(scale-index-base)和位移字节所部分指定的寄存器到寄存器、存储器到寄存器、寄存器接(by)存储器、寄存器接寄存器、寄存器接立即、寄存器到存储器寻址。
图3F图示根据本公开的实施例的又一个可能的操作编码(操作码)格式。64位单指令多数据(SIMD)算术操作可通过协处理器数据处理(CDP)指令来执行。操作编码(操作码)格式380描绘具有CDP操作码字段382和389的一个这样的CDP指令。CDP指令的类型对于另一个实施例来说,操作可由字段383、384、387和388中的一个或多个编码。可标识每指令多达3个操作数位置,包括多达两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对八、十六、三十二和64位值操作。在一个实施例中,可对整数数据元素执行指令。在一些实施例中,可有条件地使用条件字段381来执行指令。对于一些实施例,源数据大小可由字段383编码。在一些实施例中,可对SIMD字段进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可由字段384编码。
图4A是图示根据本公开的实施例的有序流水线和寄存器重命名级、无序发布/执行流水线的框图。图4B是图示根据本公开的实施例的将包括在处理器中的有序架构核和寄存器重命名逻辑、无序发布/执行逻辑的框图。图4A中的实线框图示有序流水线,而虚线框图示寄存器重命名、无序发布/执行流水线。类似地,图4B中的实线框图示有序架构逻辑,而虚线框图示寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400可包括取回级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、回写/存储器写入级418、异常处理级422以及提交级424。
在图4B中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示那些单元之间的数据流的方向。图4B示出包括耦合到执行引擎单元450的前端单元430的处理器核490,并且引擎单元450和前端单元430两者都可耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或者混合或替代核类型。在一个实施例中,核490可以是专用核,诸如例如网络或通信核、压缩引擎、图形核等等。
前端单元430可包括耦合到指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可耦合到指令翻译后备缓冲器(TLB)436。TLB 436可耦合到指令取回单元438,指令取回单元438耦合到解码单元440。解码单元440可解码指令,并且生成一个或多个微操作、微代码入口点、微指令、其它指令或其它控制信号作为输出,其可被从原始指令中解码或者以其它方式反映原始指令或者可来源于原始指令。解码器可使用各种不同的机制来实现。适当的机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434可进一步耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440可耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可包括耦合到引退单元454和一个或多个调度器单元的集合456的重命名/分配器单元452。调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗口等。调度器单元456可耦合到物理寄存器文件单元458。物理寄存器文件单元458中的每一个表示一个或多个物理寄存器文件,其中的不同的物理寄存器文件存储一个或多个不同的数据类型(诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点等)、状态(例如,作为待执行的下一个指令的地址的指令指针)等。物理寄存器文件单元458可由引退单元454重叠,以图示可实现寄存器重命名和无序执行所用的各种方式(例如,使用一个或多个重新排序缓冲器以及一个或多个引退寄存器文件,使用一个或多个未来文件、一个或多个历史缓冲器以及一个或多个引退寄存器文件;使用寄存器映射和寄存器池等)。通常,架构寄存器可从处理器的外部或者从程序员的视角可见。寄存器可能不限于任何已知的特定类型的电路。各种不同类型的寄存器只要存储和提供如本文所述的数据,它们就可以是合适的。合适的寄存器的示例包括但可能不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。引退单元454和物理寄存器文件单元458可耦合到执行集群460。执行集群460可包括一个或多个执行单元的集合462以及一个或多个存储器访问单元的集合464。执行单元462可执行各种操作(例如,移位、加法、减法、乘法),并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行该操作。尽管一些实施例可包括专用于具体功能或功能集合的许多执行单元,但是其它实施例可仅仅包括一个执行单元或者全部执行所有功能的多个执行单元。调度器单元456、物理寄存器文件单元458和执行集群460被示为可能是复数个,因为某些实施例创建用于某些类型的数据/操作的分离的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,每个都具有其自己的调度器单元、物理寄存器文件单元和/或执行集群——并且在分离的存储器访问流水线的情况下,可实现某些实施例,其中仅仅该流水线的执行集群具有存储器访问单元464)。还应当理解:在使用分离流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行,并且其余是有序发布/执行。
存储器访问单元的集合464可耦合到存储器单元470,存储器单元470可包括耦合到数据高速缓存单元474的数据TLB单元472,数据高速缓存单元474耦合到2级(L2)高速缓存单元476。在一个示范性实施例中,存储器访问单元464可包括加载单元、存储地址单元和存储数据单元,其中的每一个可耦合到存储器单元470中的数据TLB单元472。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)。
应当理解:核可以各种方式支持多线程(执行操作或线程的两个或更多个并行集合)。多线程支持例如可通过包括时间切片多线程、同时多线程(其中单个物理核提供用于物理核正同时进行多线程的线程中的每一个的逻辑核)或其组合来执行。这样的组合例如可包括时间切片取回和解码以及此后的同时多线程,诸如在Intel® Hyperthreading技术中。
尽管可在无序执行的上下文中描述寄存器重命名,但是应当理解:寄存器重命名可用在有序架构中。尽管图示的处理器的实施例还可包括分离的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但是其它实施例可具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可包括内部高速缓存与可在核和/或处理器外部的外部高速缓存的组合。在其它实施例中,所有的高速缓存可在核和/或处理器外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可包括多核处理器。处理器500可包括通信地耦合到一个或多个核502的系统代理510。此外,核502和系统代理510可通信地耦合到一个或多个高速缓存506。核502、系统代理510和高速缓存506可经由一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可经由存储器控制单元552通信地耦合到图形模块560。
处理器500可包括用于互连核502、系统代理510和高速缓存506以及图形模块560的任何合适的机制。在一个实施例中,处理器500可包括基于环的互连单元508,以互连核502、系统代理510和高速缓存506以及图形模块560。在其它实施例中,处理器500可包括用于互连这样的单元的任何数量的公知技术。基于环的互连单元508可利用存储器控制单元552来促进互连。
处理器500可包括存储器层级,该存储器层级包括核内的一级或多级高速缓存、诸如高速缓存506之类的一个或多个共享高速缓存单元、或者耦合到集成存储器控制器单元的集合552的外部存储器(未示出)。高速缓存506可包括任何合适的高速缓存。在一个实施例中,高速缓存506可包括一个或多个中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存、最后一级高速缓存(LLC)和/或其组合。
在各种实施例中,核502中的一个或多个可执行多线程。系统代理510可包括用于协调和操作核502的组件。系统代理单元510例如可包括功率控制单元(PCU)。PCU可以是或包括用于调节核502的功率状态所需要的逻辑和组件。系统代理510可包括用于驱动一个或多个外部连接的显示器或图形模块560的显示引擎512。系统代理510可包括用于图形的通信总线的接口514。在一个实施例中,接口514可由快速PCI(PCIe)实现。在进一步的实施例中,接口514可由快速PCI图形(PEG)实现。系统代理510可包括直接媒体接口(DMI)516。DMI516可提供在计算机系统的主板或其它部分上的不同桥之间的链接。系统代理510可包括用于提供到计算系统的其它元件的PCIe链接的PCIe桥518。PCIe桥518可使用存储器控制器520和一致性逻辑522来实现。
核502可以任何合适的方式来实现。核502在架构和/或指令集方面可以是同构或异构的。在一个实施例中,核502中的一些可以是有序的,而其它可以是无序的。在另一个实施例中,核502中的两个或更多个可执行相同的指令集,而其它可仅仅执行该指令集的子集或不同的指令集。
处理器500可包括通用处理器,诸如Core™i3、i5、i7、2 Duo和Quad、Xeon™、Itanium™、XScale™或StrongARM™处理器,其可从加利福尼亚州圣克拉拉的英特尔公司可得到。可从诸如ARM控股有限公司、MIPS等之类的另一个公司提供处理器500。处理器500可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。可在一个或多个芯片上实现处理器500。处理器500可以是使用诸如例如BiCMOS、CMOS或NMOS之类的许多工艺技术中的任一个的一个或多个衬底的一部分和/或可在所述一个或多个衬底上实现处理器500。
在一个实施例中,高速缓存506中的给定一个可由核502中的多个核共享。在另一个实施例中,高速缓存506中的给定一个可专用于核502中的一个。高速缓存506到核502的指派可由高速缓存控制器或其它适当的机制处理。高速缓存506中的给定一个可通过实现给定的高速缓存506的时间切片来由两个或更多个核502共享。
图形模块560可实现集成图形处理子系统。在一个实施例中,图形模块560可包括图形处理器。此外,图形模块560可包括媒体引擎565。媒体引擎565可提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例性实现方式的框图。核502可包括通信地耦合到无序引擎580的前端570。核502可通过高速缓存层级503来通信地耦合到处理器500的其它部分。
前端570可以任何合适的方式来实现,诸如完全或部分地由如上所述的前端201来实现。在一个实施例中,前端570可通过高速缓存层级503与处理器500的其它部分通信。在进一步的实施例中,前端570可从处理器500的部分取回指令,并且随着指令被传递到无序执行引擎580而准备稍后将在处理器流水线中使用的指令。
无序执行引擎580可以任何合适的方式来实现,诸如完全或部分地由如上所述的无序执行引擎203来实现。无序执行引擎580可准备从前端570接收的指令以用于执行。无序执行引擎580可包括分配模块582。在一个实施例中,分配模块582可分配处理器500的资源或诸如寄存器或缓冲器之类的其它资源以执行给定指令。分配模块582可在诸如存储器调度器、快速调度器或浮点调度器之类的调度器中进行分配。这样的调度器在图5B中可由资源调度器584表示。分配模块582可完全或部分地由结合图2所述的分配逻辑来实现。资源调度器584可基于给定资源的源的准备度以及执行指令所需的执行资源的可用性来确定何时准备好执行指令。资源调度器584例如可由如上所述的调度器202、204、206来实现。资源调度器584可调度在一个或多个资源上的指令的执行。在一个实施例中,这样的资源可在核502内部,并且例如可被图示为资源586。在另一个实施例中,这样的资源可在核502外部,并且例如可由高速缓存层级503可访问。资源例如可包括存储器、高速缓存、寄存器文件或寄存器。在核502内部的资源可由图5B中的资源586表示。在必要时,写入到资源586或从资源586读取的值例如可通过高速缓存层级503与处理器500的其它部分协调。随着指令被指派资源,其可被置于重新排序缓冲器588中。重新排序缓冲器588可随着指令被执行而跟踪该指令,并且可基于处理器500的任何合适的准则而选择性地对其执行重新排序。在一个实施例中,重新排序缓冲器588可标识可被独立执行的指令或一系列指令。可与其它这样的指令并行地执行这样的指令或一系列指令。核502中的并行执行可由任何合适数量的分离的执行块或虚拟处理器执行。在一个实施例中,共享的资源——诸如存储器、寄存器和高速缓存——可对给定核502内的多个虚拟处理器可访问。在其它实施例中,共享的资源可对处理器500内的多个处理实体可访问。
高速缓存层级503可以任何合适的方式来实现。例如,高速缓存层级503可包括一个或多个较低或中级高速缓存,诸如高速缓存572、574。在一个实施例中,高速缓存层级503可包括通信地耦合到高速缓存572、574的LLC 595。在另一个实施例中,可在对处理器500的所有处理实体可访问的模块590中实现LLC 595。在进一步的实施例中,可在来自英特尔公司的处理器的非核模块中实现模块590。模块590可包括对于核502的执行必要、但是可能不在核502内实现的处理器500的部分或子系统。除了LLC 595之外,模块590例如可包括硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。对处理器500可用的RAM 599的访问可通过模块590并且更具体地通过LLC 595来进行。此外,核502的其它实例可类似地访问模块590。可部分地通过模块590来促进核502的实例的协调。
图6-8可图示适合于包括处理器500的示范性系统,而图9可图示可包括核502中的一个或多个的示范性片上系统(SoC)。本领域中已知的用于膝上型计算机、台式计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备和各种其它电子设备的其它系统设计和实现方式也可以是合适的。通常,合并如本文公开的处理器和/或其它执行逻辑的各种各样系统或电子设备通常可以是合适的。
图6图示根据本公开的实施例的系统600的框图。系统600可包括一个或多个处理器610、615,一个或多个处理器610、615可耦合到图形存储器控制器中心(GMCH)620。在图6中用虚线表示附加处理器615的可选性质。
每个处理器610、615可以是某个版本的处理器500。然而,应当注意:集成图形逻辑和集成存储器控制单元可能不存在于处理器610、615中。图6图示GMCH 620可耦合到存储器640,该存储器640例如可以是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可与非易失性高速缓存相关联。
GMCH 620可以是芯片组或芯片组的一部分。GMCH 620可与处理器610、615通信,并且控制处理器610、615与存储器640之间的交互。GMCH 620还可充当处理器610、615与系统600的其它元件之间的加速总线接口。在一个实施例中,GMCH 620经由诸如前端总线(FSB)695之类的多点总线与处理器610、615通信。
此外,GMCH 620可耦合到显示器645(诸如平板显示器)。在一个实施例中,GMCH620可包括集成图形加速器。GMCH 620可进一步耦合到输入/输出(I/O)控制器中心(ICH)650,其可用于将各种外围设备耦合到系统600。外部图形设备660可包括耦合到ICH 650连同另一个外围设备670的分立图形设备。
在其它实施例中,附加或不同的处理器也可存在于系统600中。例如,附加处理器610、615可包括可与处理器610相同的附加处理器、可与处理器610异构或不对称的附加处理器、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在包括架构、微架构、热、功耗特性等等的指标的一系列度量的方面,在物理资源610、615之间可存在各种差异。这些差异可将其自身有效地表现为在处理器610、615当中的不对称和异构。对于至少一个实施例,各种处理器610、615可驻留在相同的管芯封装中。
图7图示根据本公开的实施例的第二系统700的框图。如图7中所示,多处理器系统700可包括点对点互连系统,并且可包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是作为处理器610、615中的一个或多个的某个版本的处理器500。
尽管图7可图示两个处理器770、780,但是应理解:本公开的范围不限于此。在其它实施例中,一个或多个附加处理器可存在于给定处理器中。
处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还可包括点对点(P-P)接口776和778作为其总线控制器单元的一部分;类似地,第二处理器780可包括P-P接口786和788。处理器770、780可经由点对点(P-P)接口750、使用P-P接口电路778、788交换信息。如图7中所示,IMC 772和782可将处理器耦合到各自的存储器,即存储器732和存储器734,其在一个实施例可以是本地附接到各自的处理器的主存储器的部分。
处理器770、780可经由单独的P-P接口752、754、使用点对点接口电路776、794、786、798而各自与芯片组790交换信息。在一个实施例中,芯片组790还可经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可被包括在处理器中或者在两个处理器外部,但经由P-P互连与处理器连接,使得如果处理器被置于低功率模式,任一个或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组790可经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外围组件互连(PCI)总线或者诸如快速PCI总线之类的总线或者另一个第三代I/O互连总线,不过本公开的范围不限于此。
如图7中所示,各种I/O设备714可连同总线桥718耦合到第一总线716,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线720,例如包括键盘和/或鼠标722、通信设备727以及可包括指令/代码和数据730的诸如盘驱动器或其它大容量存储设备之类的存储单元728。此外,音频I/O 724可耦合到第二总线720。注意:其它架构可能是可能的。例如,代替图7的点对点架构,系统可实现多点总线或其它这样的架构。
图8图示根据本公开的实施例的第三系统800的框图。图7和图8中的相同元件带有相同的附图标记,并且已经从图8中省略了图7的某些方面,以便避免模糊图8的其它方面。
图8图示处理器770、780可分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于至少一个实施例,CL 872、882可包括集成存储器控制器单元,诸如以上结合图5和图7所述的集成存储器控制器单元。另外,CL 872、882还可包括I/O控制逻辑。图8图示不仅存储器732、734可耦合到CL 872、882,而且I/O设备814也可耦合到控制逻辑872、882。传统I/O设备815可耦合到芯片组790。
图9图示根据本公开的实施例的SoC 900的框图。图5中的类似元件带有相同的附图标记。而且,虚线框可表示更高级的SoC上的可选特征。互连单元902可耦合到:应用处理器910,其可包括一个或多个核502A-N的集合以及共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;媒体处理器920的集合或一个或多个媒体处理器920,其可包括集成图形逻辑908、用于提供静止和/或视频相机功能性的图像处理器924、用于提供硬件音频加速的音频处理器926、以及用于提供编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器访问(DMA)单元932;以及用于耦合到一个或多个外部显示器的显示单元940。
图10图示根据本公开的实施例的可执行至少一个指令的包含中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,根据至少一个实施例的执行操作的指令可能由CPU执行。在另一个实施例中,指令可能由GPU执行。在又一个实施例中,指令可通过由GPU和CPU执行的操作的组合来执行。例如,在一个实施例中,根据一个实施例的指令可被接收和解码以用于在GPU上执行。然而,在解码的指令内的一个或多个操作可由CPU执行,并且结果被返回到GPU以用于指令的最终引退。相反,在一些实施例中,CPU可充当主处理器并且GPU可充当协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可由GPU执行,而受益于从深度流水线架构受益的处理器的性能的指令可由CPU执行。例如,图形、科学应用、金融应用和其它并行工作负载可受益于GPU的性能并且被相应地执行,而诸如操作系统内核或应用代码之类的更多顺序应用可能更适合于CPU。
在图10中,处理器1000包括CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、存储器接口控制器1045、MIPI控制器1050、闪速存储器控制器1055、双数据速率(DDR)控制器1060、安全引擎1065以及I2S/I2C控制器1070。其它逻辑和电路可被包括在图10的处理器中,包括更多CPU或GPU以及其它外围接口控制器。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性数据实现,代表性数据表示处理器内的各种逻辑,其在由机器读取时使机器制造执行本文所述的技术的逻辑。被称为“IP核”的这样的表示可被存储在有形的机器可读介质(“带”)上,并且被供应给各种客户或制造设施,以加载到实际上制作逻辑或处理器的制造机器中。例如,诸如由ARM控股有限公司开发的Cortex™系列处理器以及中国科学院的计算技术研究所(ICT)开发的Loongson IP核之类的IP核可被许可或者出售给诸如德州仪器、高通、苹果或三星之类的各种客户或被许可人,并且在由这些客户或被许可人生产的处理器中实现。
图11图示根据本公开的实施例的图示IP核的开发的框图。储存器1130可包括模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160而被提供给储存器1100。由模拟工具和模型生成的IP核信息然后可被发送给制造设施1165,其中它可由第三方制造以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可对应于第一类型或架构(例如,x86),并且在不同类型或架构(例如,ARM)的处理器上被翻译或仿真。因此可在任何处理器或处理器类型(包括ARM、x86、MIPS、GPU或其它处理器类型或架构)上执行根据一个实施例的指令。
图12图示根据本公开的实施例的可如何由不同类型的处理器仿真第一类型的指令。在图12中,程序1205包含可执行与根据一个实施例的指令相同或基本上相同功能的一些指令。然而,程序1205的指令可具有不同于处理器1215或与处理器1215不兼容的类型和/或格式,意味着程序1205中的类型的指令可能无法由处理器1215本地执行。然而,在仿真逻辑1210的帮助下,程序1205的指令可被翻译成可由处理器1215本地执行的指令。在一个实施例中,仿真逻辑可以硬件来体现。在另一个实施例中,仿真逻辑可以有形的机器可读介质来体现,有形的机器可读介质包含将程序1205中的类型的指令翻译成由处理器1215本地可执行的类型的软件。在其它实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部并且可由第三方提供。在一个实施例中,处理器可通过执行包含在处理器中或者与处理器相关联的微代码或固件来加载在包含软件的有形的机器可读介质中体现的仿真逻辑。
图13是图示根据该发明的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器可以是软件指令转换器,不过指令转换器可以软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304编译采用高级语言1302的程序以生成可由具有至少一个x86指令集核1316的处理器本地执行的x86二进制代码1306。具有至少一个x86指令集核1316的处理器表示可通过兼容地执行或以其它方式处理以下对象来执行与具有至少一个x86指令集核的英特尔处理器基本上相同功能的任何处理器:(1)英特尔x86指令集核的指令集的相当大的一部分,或者(2)目标在于在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它软件的目标代码版本,以便实现与具有至少一个x86指令集核的英特尔处理器基本上相同的结果。x86编译器1304表示可操作以生成x86二进制代码1306(例如,目标代码)的编译器,x86二进制代码1306可以在有或没有附加链接处理的情况下在具有至少一个x86指令集核1316的处理器上被执行。类似地,图13示出可使用替代的指令集编译器1308编译采用高级语言1302的程序以生成可由不具有至少一个x86指令集核1314的处理器(例如,具有执行加利福尼亚州桑尼维尔的MIPS科技的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股的ARM指令集的核的处理器)本地执行的替代的指令集二进制代码1310。指令转换器1312可用于将x86二进制代码1306转换成可由不具有x86指令集核1314的处理器本地执行的代码。该转换的代码可能与替代的指令集二进制代码1310不相同;然而,转换的代码将完成一般操作,并且由来自替代的指令集的指令组成。因而,指令转换器1312表示软件、固件、硬件或其组合,其通过仿真、模拟或任何其它过程来允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码1306。
图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可包括任何合适数量或种类的组件。
例如,指令集架构1400可包括处理实体,诸如一个或多个核1406、1407和图形处理单元1415。核1406、1407可通过任何合适的机制(诸如通过总线或高速缓存)通信地耦合到指令集架构1400的其余部分。在一个实施例中,核1406、1407可通过L2高速缓存控制1408通信地耦合,L2高速缓存控制1408可包括总线接口单元1409和L2高速缓存1411。核1406、1407和图形处理单元1415可通过互连1410通信地彼此耦合并且耦合到指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可使用视频代码1420,该视频代码1420定义将编码和解码特定视频信号以用于输出所用的方式。
指令集架构1400还可包括任何数量或种类的接口、控制器或者用于与电子设备或系统的其它部分对接或通信的其它机制。这样的机制例如可促进与外设、通信设备、其它处理器或存储器的交互。在图14的示例中,指令集架构1400可包括液晶显示器(LCD)视频接口1425、订户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪速控制器1445和串行外围接口(SPI)主单元1450。LCD视频接口1425例如可从GPU 1415并且例如通过移动工业处理器接口(MIPI)1490或高清多媒体接口(HDMI)1495向显示器提供视频信号的输出。这样的显示器例如可包括LCD。SIM接口1430可提供对或来自SIM卡或设备的访问。SDRAM控制器1440可提供对或来自诸如SDRAM芯片或模块1460之类的存储器的访问。闪速控制器1445可提供对或来自诸如闪速存储器1465或RAM的其它实例之类的存储器的访问。SPI主单元1450可提供对或来自诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11之类的通信标准的无线模块1485之类的通信模块的访问。
图15是根据本公开的实施例的处理器的指令集架构1500的更详细的框图。指令架构1500可实现指令集架构1400的一个或多个方面。此外,指令集架构1500可图示用于处理器内的指令的执行的模块和机制。
指令架构1500可包括通信地耦合到一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可包括高速缓存和总线接口单元,诸如通信地耦合到执行实体1565和存储器系统1540的单元1510。在一个实施例中,将指令加载到执行实体1565中可由一个或多个执行级执行。这样的级例如可包括指令预取级1530、双指令解码级1550、寄存器重命名级155、发布级1560和回写级1570。
在一个实施例中,存储器系统1540可包括执行的指令指针1580。执行的指令指针1580可存储标识批指令内的最旧的未指派的指令的值。最旧的指令可对应于最低程序次序(PO)值。PO可包括指令的唯一号码。这样的指令可以是由多个串(strand)表示的线程内的单个指令。PO可在排序指令中使用以确保正确的代码执行语义。PO可通过诸如评估以指令而不是绝对值编码的对PO的增量之类的机制来重构。这样重构的PO可被称为“RPO”。虽然可在本文中引用PO,但是这样的PO可与RPO可互换地使用。串可包括作为依赖于彼此的数据的指令的序列。串可在编译时由二进制翻译器来布置。执行串的硬件可根据各种指令的PO来按序执行给定串的指令。线程可包括多个串,使得不同串的指令可依赖于彼此。给定串的PO可以是尚未被从发布级分派以执行的串中的最旧的指令的PO。相应地,给定多个串的线程,每个串包括由PO排序的指令,执行的指令指针1580可在线程中存储由最低号码图示的最旧的PO。
在另一个实施例中,存储器系统1540可包括引退指针1582。引退指针1582可存储标识最后一个引退指令的PO的值。引退指针1582例如可由引退单元454设置。如果还没有指令引退,引退指针1582可包括空值。
执行实体1565可包括处理器可通过其执行指令的任何合适数量和种类的机制。在图15的示例中,执行实体1565可包括ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,这样的实体可利用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560、1570组合可共同形成执行单元。
单元1510可以任何合适的方式来实现。在一个实施例中,单元1510可执行高速缓存控制。在这样的实施例中,单元1510因而可包括高速缓存1525。高速缓存1525在进一步的实施例中可被实现为具有任何合适大小的L2统一高速缓存,诸如零、128k、256k、512k、1M或2M字节的存储器。在另一个进一步的实施例中,可在纠错码存储器中实现高速缓存1525。在另一个实施例中,单元1510可执行到处理器或电子设备的其它部分的总线对接。在这样的实施例中,单元1510因而可包括用于通过互连、处理器内总线、处理器间总线或其它通信总线、端口或线通信的总线接口单元1520。总线接口单元1520可提供对接,以便例如执行存储器和输入/输出地址的生成,用于在执行实体1565与指令架构1500外部的系统的部分之间的数据传送。
为了进一步促进其功能,总线接口单元1520可包括用于生成中断和到处理器或电子设备的其它部分的其它通信的中断控制和分布单元1511。在一个实施例中,总线接口单元1520可包括处理用于多个处理核的高速缓存访问和一致性的探听(snoop)控制单元1512。在进一步的实施例中,为了提供这样的功能性,探听控制单元1512可包括处理不同高速缓存之间的信息交换的高速缓存到高速缓存传送单元。在另一个进一步的实施例中,探听控制单元1512可包括一个或多个探听过滤器1514,其监视其它高速缓存(未示出)的一致性,使得诸如单元1510之类的高速缓存控制器无须直接执行这样的监视。单元1510可包括用于同步指令架构1500的动作的任何合适数量的计时器1515。而且,单元1510可包括AC端口1516。
存储器系统1540可包括用于存储用于指令架构1500的处理需要的信息的任何合适数量和种类的机制。在一个实施例中,存储器系统1540可包括用于存储信息的加载存储单元1546,诸如写入到存储器或寄存器或者从存储器或寄存器读回的缓冲器。在另一个实施例中,存储器系统1540可包括翻译后备缓冲器(TLB)1545,其提供物理与虚拟地址之间的地址值的查找。在又一个实施例中,存储器系统1540可包括用于促进对虚拟存储器的访问的存储器管理单元(MMU)1544。在再一个实施例中,存储器系统1540可包括用于在这样的指令实际需要被执行之前从存储器请求指令以便减少等待时间的预取器1543。
执行指令的指令架构1500的操作可通过不同级来执行。例如,使用单元1510,指令预取级1530可通过预取器1543访问指令。检索的指令可被存储在指令高速缓存1532中。预取级1530可使能用于快速循环模式的选项1531,其中执行形成小得足以适合在给定高速缓存内的循环的一系列指令。在一个实施例中,可执行这样的执行而无需访问例如来自指令高速缓存1532的附加指令。确定预取什么指令例如可由分支预测单元1535做出,分支预测单元1535可访问全局历史1536中的执行的指示、目标地址1537的指示或者确定接下来将执行代码的分支1557中的哪个的返回栈1538的内容。这样的分支结果可能被预取。可通过如下所述的其它操作级来产生分支1557。指令预取级1530可将指令以及关于未来指令的任何预测提供给双指令解码级1550。
双指令解码级1550可将接收的指令翻译成可被执行的基于微代码的指令。双指令解码级1550每时钟周期可同时解码两个指令。此外,双指令解码级1550可将其结果传递到寄存器重命名级1555。另外,双指令解码级1550可从其对微代码的解码和最终执行中确定任何得到的分支。这样的结果可被输入到分支1557中。
寄存器重命名级1555可将对虚拟寄存器或其它资源的引用翻译成对物理寄存器或资源的引用。寄存器重命名级1555可包括在寄存器池1556中的这样的映射的指示。寄存器重命名级1555可在被接收时改变指令,并且将结果发送给发布级1560。
发布级1560可向执行实体1565发布或分派命令。这样的发布可以无序方式来执行。在一个实施例中,多个指令可在被执行之前保持在发布级1560处。发布级1560可包括用于保持这样的多个命令的指令队列1561。可基于任何可接受的准则,诸如用于执行给定指令的资源的可用性或适合性,由发布级1560向特定处理实体1565发布指令。在一个实施例中,发布级1560可对指令队列1561内的指令重新排序,使得接收的第一指令可能不是执行的第一指令。基于指令队列1561的排序,附加分支信息可被提供给分支1557。发布级1560可将指令传递到执行实体1565以用于执行。
在执行时,回写级1570可将数据写入到寄存器、队列或者指令集架构1500的其它结构中,以通信给定命令的完成。取决于布置在发布级1560中的指令的次序,回写级1570的操作可使得能够执行附加指令。指令集架构1500的性能可由跟踪单元1575监视或调试。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600例如可图示图15的指令架构1500的操作。
执行流水线1600可包括步骤或操作的任何合适的组合。在1605中,可进行接下来将执行的分支的预测。在一个实施例中,这样的预测可基于指令的先前执行及其结果。在1610中,对应于预测的执行分支的指令可被加载到指令高速缓存中。在1615中,指令高速缓存中的一个或多个这样的指令可被取回以用于执行。在1620中,已被取回的指令可被解码成微代码或更具体的机器语言。在一个实施例中,多个指令可被同时解码。在1625中,解码的指令内对寄存器或其它资源的引用可被重新指派。例如,对虚拟寄存器的引用可用对对应物理寄存器的引用来替换。在1630中,指令可被分派到队列以用于执行。在1640中,指令可被执行。这样的执行可以任何合适的方式来执行。在1650中,指令可被发布到合适的执行实体。执行指令所用的方式可取决于执行指令的具体实体。例如,在1655处,ALU可执行算术函数。ALU可为其操作利用单个时钟周期以及两个移位器。在一个实施例中,可采用两个ALU,并且因而可在1655处执行两个指令。在1660处,可进行得到的分支的确定。程序计数器可用于指定分支将被进行到的目的地。可在单个时钟周期内执行1660。在1665处,浮点算术可由一个或多个FPU执行。浮点运算可能需要多个时钟周期来执行,例如两个至十个周期。在1670处,可执行乘法和除法运算。可在四个时钟周期中执行这样的运算。在1675处,可执行对寄存器或流水线1600的其它部分的加载和存储操作。该操作可包括加载和存储地址。可在四个时钟周期中执行这样的操作。在1680处,回写操作可按需由1655-1675的得到的操作来执行。
图17是根据本公开的实施例的用于利用处理器1710的电子设备1700的框图。电子设备1700例如可包括笔记本、超级本、计算机、塔服务器、机架式服务器、刀片服务器、膝上型计算机、台式计算机、平板电脑、移动设备、电话、嵌入式计算机或任何其它合适的电子设备。
电子设备1700可包括通信地耦合到任何合适数量或种类的组件、外设、模块或设备的处理器1710。这样的耦合可由任何合适种类的总线或接口实现,诸如I2C总线、系统管理总线(SMBus)、低引脚数(LPC)总线、SPI、高清音频(HDA)总线、串行高级技术附接(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/发送器(UART)总线。
这样的组件例如可包括显示器1724、触摸屏1725、触摸板1730、近场通信(NFC)单元1745、传感器中心1740、热传感器1746、快速芯片组(EC)1735、可信平台模块(TPM)1738、BIOS/固件/闪速存储器1722、数字信号处理器1760、诸如固态盘(SSD)或硬盘驱动器(HDD)之类的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)1775、诸如USB 3.0相机之类的相机1754、或者例如以LPDDR3标准实现的低功率双数据速率(LPDDR)存储器单元1715。这些组件可各自以任何合适的方式来实现。
此外,在各种实施例中,其它组件可通过以上讨论的组件通信地耦合到处理器1710。例如,加速度计1741、环境光传感器(ALS)1742、罗盘1743和陀螺仪1744可通信地耦合到传感器中心1740。热传感器1739、风扇1737、键盘1746和触摸板1730可通信地耦合到EC1735。扬声器1763、耳机1764和麦克风1765可通信地耦合到音频单元1762,音频单元1762进而可通信地耦合到DSP 1760。音频单元1762例如可包括音频编解码器和D类放大器。SIM卡1757可通信地耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756之类的组件可以下一代形状因子(NGFF)来实现。
本公开的实施例涉及用于执行目标在于向量寄存器的一个或多个向量操作的指令和处理逻辑。图18是根据本公开的实施例的用于基于向量的位操纵操作的指令和逻辑的示例性系统1800的说明。
系统1800可包括处理器、SoC、集成电路或其它机制。例如,系统1800可包括处理器1804。虽然处理器1804在图18中被示为和描述为示例,但是可使用任何合适的机制。处理器1804可包括用于执行目标在于向量寄存器的向量操作的任何合适的机制,包括对存储在包含多个元素的向量寄存器中的结构操作的那些操作。在一个实施例中,这样的机制可用硬件来实现。处理器1804可完全或部分地由图1-17中所述的元件来实现。
将在处理器1804上执行的指令可被包括在指令流1802中。指令流1802例如可由编译器、即时解释器或其它合适的机制(其可能被或可能不被包括在系统1800中)来生成,或者可由导致指令流1802的代码的起草者来指定。例如,编译器可采用应用代码并且以指令流1802的形式生成可执行代码。指令可由处理器1804从指令流1802接收。可以任何合适的方式将指令流1802加载到处理器1804。例如,可从储存器、从其它机器或从诸如存储器系统1830之类的其它存储器加载将由处理器1804执行的指令。指令可到达并且可以在诸如RAM之类的驻留存储器中可用,其中将指令从储存器取回以由处理器1804执行。指令例如可由预取器或取回单元(诸如取指令单元1808)从驻留存储器中取回。
在一个实施例中,指令流1802可包括执行一个或多个位操纵操作的指令。例如,指令流1802可包括用于重置源向量的每个数据元素中的最低设置位的“VPBLSRD”指令、提取源向量的每个数据元素中的最低设置位的“VPBLSD”指令、为源向量的每个数据元素提取直到最低设置位的“VPBLSMSKD”指令、为源向量的每个数据元素提取一系列位的“VPBITEXTRACTRANGED”指令、为向量的每个数据元素插入一系列位的“VPBITINSERTRANGED”指令、为源向量的每个数据元素提取指定位的“VPBITEXTRACTD”指令、或者为向量的每个数据元素插入指定位的“VPBITINSERTD”指令。指令流1802还可包括不同于执行向量操作的指令的指令。
处理器1804可包括前端1806,前端1806可包括指令取回流水线级(诸如指令取回单元1808)和解码流水线级(诸如解码单元1810)。前端1806可使用解码单元1810来接收和解码来自指令流1802的指令。解码的指令可被分派、分配和调度以用于由流水线的分配级(诸如分配器1814)执行,并且被分配给具体执行单元1816以用于执行。将由处理器1804执行的一个或多个具体指令可被包括在为由处理器1804执行定义的库中。在另一个实施例中,具体指令可由处理器1804的特定部分作为目标。例如,处理器1804可识别指令流1802中的尝试以在软件中执行向量操作,并且可将指令发布给执行单元1816中的特定一个。
在执行期间,可通过存储器子系统1820进行对数据或附加指令(包括驻留在存储器系统1830中的数据或指令)的访问。此外,来自执行的结果可被存储在存储器子系统1820中,并且随后可被刷新到存储器系统1830。存储器子系统1820例如可包括存储器、RAM或高速缓存层级,其可包括一个或多个1级(L1)高速缓存1822或2级(L2)高速缓存1824,其中的一些可由多个核1812或处理器1804共享。在由执行单元1816执行之后,指令可由引退单元1818中的回写级或引退级来引退。这样的执行流水线的各种部分可由一个或多个核1812执行。
执行向量指令的执行单元1816可以任何合适的方式来实现。在一个实施例中,执行单元1816可包括或可通信地耦合到存储器元件以存储执行一个或多个向量操作所必要的信息。在一个实施例中,执行单元1816可包括执行基于向量的位操纵操作的线路。例如,执行单元1816可包括实现“VPBLSRD”指令、“VPBLSD”指令、“VPBLSMSKD”指令、“VPBITEXTRACTRANGED”指令、“VPBITINSERTRANGED”指令、“VPBITEXTRACTD”指令或“VPBITINSERTD”指令的线路。以下更详细地描述这些指令的示例性实现方式。
在本公开的实施例中,处理器1804的指令集架构可实现被定义为Intel®高级向量扩展512(Intel® AVX-512)指令的一个或多个扩展向量指令。处理器1804可或者隐含地或者通过解码和执行具体指令来识别这些扩展向量操作中的一个将被执行。在这样的情况下,可将扩展向量操作引导至执行单元1816中的特定一个以用于指令的执行。在一个实施例中,指令集架构可包括对512位SIMD操作的支持。例如,由执行单元1816实现的指令集架构可包括32个向量寄存器,其中的每一个是512位宽,并且包括对多达512位宽的向量的支持。由执行单元1816实现的指令集架构可包括八个专用掩码寄存器以用于目的地操作数的高效合并和有条件的执行。至少一些扩展向量指令可包括对广播的支持。至少一些扩展向量指令可包括对嵌入掩码的支持以使得能够预测。
至少一些扩展向量指令可将相同的操作同时应用于存储在向量寄存器中的向量的每个元素。其它扩展向量指令可将相同的操作应用于多个源向量寄存器中的对应元素。例如,可由扩展向量指令将相同的操作应用于存储在向量寄存器中的打包数据项的单独数据元素中的每一个。在另一个示例中,扩展向量指令可指定将对两个源向量操作数的各自数据元素执行的单个向量操作,以生成目的地向量操作数。
在本公开的实施例中,至少一些扩展向量指令可由处理器核内的SIMD协处理器执行。例如,核1812内的一个或多个执行单元1816可实现SIMD协处理器的功能性。SIMD协处理器可完全或部分地由图1-17中所述的元件来实现。在一个实施例中,由指令流1802内的处理器1804接收的扩展向量指令可被引导至实现SIMD协处理器的功能性的执行单元1816。
图19图示根据本公开的实施例的执行SIMD操作的数据处理系统的示例性处理器核1900。处理器1900可完全或部分地由图1-18中所述的元件来实现。在一个实施例中,处理器核1900可包括主处理器1920和SIMD协处理器1910。SIMD协处理器1910可完全或部分地由图1-17中所述的元件来实现。在一个实施例中,SIMD协处理器1910可实现图18中图示的执行单元1816中的一个的至少一部分。在一个实施例中,SIMD协处理器1910可包括SIMD执行单元1912和扩展向量寄存器文件1914。SIMD协处理器1910可执行扩展SIMD指令集1916的操作。扩展SIMD指令集1916可包括一个或多个扩展向量指令。这些扩展向量指令可控制包括与驻留在扩展向量寄存器文件1914中的数据的交互的数据处理操作。
在一个实施例中,主处理器1920可包括解码器1922以识别扩展SIMD指令集1916的指令以用于由SIMD协处理器1910执行。在其它实施例中,SIMD协处理器1910可包括解码器(未示出)的至少一部分以解码扩展SIMD指令集1916的指令。处理器核1900还可包括对理解本公开的实施例可能不必要的附加线路(未示出)。
在本公开的实施例中,主处理器1920可执行控制一般类型的数据处理操作的数据处理指令的流,包括与一个或多个高速缓存1924和/或寄存器文件1926的交互。在数据处理指令的流内所嵌入的可以是扩展SIMD指令集1916的SIMD协处理器指令。主处理器1920的解码器1922可将这些SIMD协处理器指令识别为应当由附接的SIMD协处理器1910执行的类型。相应地,主处理器1920可在协处理器总线1915上发布这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号)。这些指令可由任何附接的SIMD协处理器从协处理器总线1915接收。在图19中图示的示例性实施例中,SIMD协处理器1910可接受并执行旨在用于在SIMD协处理器1910上执行的任何接收的SIMD协处理器指令。
在一个实施例中,主处理器1920和SIMD协处理器1910可被集成到单个处理器核1900中,该单个处理器核1900包括执行单元、寄存器文件的集合以及识别扩展SIMD指令集1916的指令的解码器。
图18和19中描绘的示例性实现方式仅仅是说明性的,并且不意味着对本文所述的用于执行扩展向量操作的机制的实现方式进行限制。
图20是图示根据本公开的实施例的示例性扩展向量寄存器文件1914的框图。扩展向量寄存器文件1914可包括32个SIMD寄存器(ZMM0-ZMM31),其中的每一个都是512位宽。ZMM寄存器中的每一个的低256位被混叠到各自的256位YMM寄存器。YMM寄存器中的每一个的低128位被混叠到各自的128位XMM寄存器。例如,寄存器ZMM0(被示为2001)的位255至0被混叠到寄存器YMM0,并且寄存器ZMM0的位127至0被混叠到寄存器XMM0。类似地,寄存器ZMM1(被示为2002)的位255至0被混叠到寄存器YMM1,寄存器ZMM1的位127至0被混叠到寄存器XMM1,寄存器ZMM2(被示为2003)的位255至0被混叠到寄存器YMM2,寄存器ZMM2的位127至0被混叠到寄存器XMM2,等等。
在一个实施例中,扩展SIMD指令集1916中的扩展向量指令可对扩展向量寄存器文件1914中的任何寄存器操作,包括寄存器ZMM0-ZMM31、寄存器YMM0-YMM15和寄存器XMM0-XMM7。在另一个实施例中,在Intel® AVX-512指令集架构的开发之前实现的传统SIMD指令可对扩展向量寄存器文件1914中的YMM或XMM寄存器的子集操作。例如,在一些实施例中,由一些传统SIMD指令的访问可限于寄存器YMM0-YMM15或寄存器XMM0-XMM7。
在本公开的实施例中,指令集架构可支持访问多达四个指令操作数的扩展向量指令。举例来说,在至少一些实施例中,扩展向量指令可访问在图20中被示为源或目的地操作数的32个扩展向量寄存器ZMM0-ZMM31中的任一个。在一些实施例中,扩展向量指令可访问八个专用掩码寄存器中的任一个。在一些实施例中,扩展向量指令可访问作为源或目的地操作数的十六个通用寄存器中的任一个。
在本公开的实施例中,扩展向量指令的编码可包括指定执行特定向量操作的操作码。扩展向量指令的编码可包括识别八个专用掩码寄存器k0-k7中的任一个的编码。识别的掩码寄存器的每个位可随着向量操作应用于各自的源向量元素或目的地向量元素而管理向量操作的行为。例如,在一个实施例中,这些掩码寄存器中的七个(k1-k7)可用于有条件地管理扩展向量指令的每数据元素计算操作。在该示例中,如果未设置对应的掩码位,不为给定的向量元素执行操作。在另一个实施例中,掩码寄存器k1-k7可用于有条件地管理对扩展向量指令的目的地操作数的每元素更新。在该示例中,如果未设置对应的掩码位,不用操作的结果更新给定的目的地元素。
在一个实施例中,扩展向量指令的编码可包括指定将应用于扩展向量指令的目的地(结果)向量的掩码的类型的编码。例如,该编码可指定合并掩码或零掩码是否应用于向量操作的执行。如果该编码指定合并掩码,其掩码寄存器中的对应位未被设置的任何目的地向量元素的值可被保留在目的地向量中。如果该编码指定零掩码,其掩码寄存器中的对应位未被设置的任何目的地向量元素的值可用目的地向量中的零值来替换。在一个示例性实施例中,掩码寄存器k0不被用作用于向量操作的判定操作数。在该示例中,将以其它方式选择掩码k0的编码值可代替地选择全1的隐含掩码值,从而有效地禁用掩码。在该示例中,掩码寄存器k0可用于采用一个或多个掩码寄存器作为源或目的地操作数的任何指令。
以下示出扩展向量指令的使用和语法的一个示例:
VADDPS zmm1,zmm2,zmm3
在一个实施例中,该指令将向源向量寄存器zmm2和zmm3的所有元素应用向量加法操作,并将结果向量存储在目的地向量寄存器zmm1中。替代地,以下示出有条件地应用向量操作的指令:
VADDPS zmm1{k1}{z},zmm2,zmm3
在该示例中,该指令将向为其设置掩码寄存器k1中的对应位的源向量寄存器zmm2和zmm3的元素应用向量加法操作。在该示例中,如果设置{z}修饰符,存储在对应于掩码寄存器k1中未设置的位的目的地向量寄存器zmm1中的结果向量的元素的值可用零值来替换。否则,如果未设置{z}修饰符,或者如果未指定{z}修饰符,存储在对应于掩码寄存器k1中未被设置的位的目的地向量寄存器zmm1中的结果向量的元素的值可被保留。
在一个实施例中,一些扩展向量指令的编码可包括编码以用于指定嵌入式广播的使用。如果为从存储器加载数据并执行一些计算或数据移动操作的指令包括指定使用嵌入式广播的使用的编码,可在有效源操作数的所有元素上广播来自存储器的单个源元素。例如,当将在应用于源向量的所有元素的计算中使用相同的标量操作数时,可为向量指令指定嵌入式广播。在一个实施例中,扩展向量指令的编码可包括指定打包到源向量寄存器中或将打包到目的地向量寄存器中的数据元素的大小的编码。例如,编码可指定每个数据元素是字节、字、双字或四字等。在另一个实施例中,扩展向量指令的编码可包括指定打包到源向量寄存器中或将打包到目的地向量寄存器中的数据元素的数据类型的编码。例如,编码可指定数据表示单精度整数或双精度整数,或者多个支持的浮点数据类型中的任一个。
在一个实施例中,扩展向量指令的编码可包括指定用其访问源或目的地操作数的存储器地址或存储器寻址模式的编码。在另一个实施例中,扩展向量指令的编码可包括指定作为指令的操作数的标量整数或标量浮点数的编码。尽管本文描述几个具体的扩展向量指令及其编码,但这些仅仅是可在本公开的实施例中实现的扩展向量指令的示例。在其它实施例中,可在指令集架构中实现更少或不同的扩展向量指令,并且其编码可包括更多、更少或不同的信息来控制其执行。
在本公开的实施例中,用于执行由处理器核(诸如系统1800中的核1812)或由SIMD协处理器(诸如SIMD协处理器1910)实现的扩展向量操作的指令可包括执行基于向量的位操纵的指令。例如,这些指令可包括“VPBLSRD”指令、“VPBLSD”指令、“VPBLSMSKD”指令、“VPBITEXTRACTRANGED”指令、“VPBITINSERTRANGED”指令、“VPBITEXTRACTD”指令或“VPBITINSERTD”指令。
图21是根据本公开的实施例的执行基于向量的位操纵的操作的说明。在一个实施例中,系统1800可执行指令以执行基于向量的位操纵。例如,可执行“VPBLSRD”指令、“VPBLSD”指令、“VPBLSMSKD”指令、“VPBITEXTRACTRANGED”指令、“VPBITINSERTRANGED”指令、“VPBITEXTRACTD”指令或“VPBITINSERTD”指令。在一个实施例中,执行基于向量的位操纵的指令的调用可参考源向量寄存器。源向量寄存器可以是扩展向量寄存器,其包含表示两个或更多个数据结构的多个元素的打包数据。在一个实施例中,执行基于向量的位操纵的指令的调用可指定由存储在扩展向量寄存器中的数据表示的数据结构中的数据元素的大小。在另一个实施例中,执行基于向量的位操纵的指令的调用可指定包括在由存储在扩展向量寄存器中的数据表示的数据结构中的数据元素的数量。在一个实施例中,执行基于向量的位操纵的指令的调用可指定当将它写入到目的地位置时将应用于执行的结果的掩码寄存器。在又一个实施例中,执行基于向量的位操纵的指令的调用可指定将应用于结果的掩码的类型,诸如合并掩码或零掩码。
在图21中图示的示例性实施例中,可在(1)处由SIMD执行单元1912接收执行基于向量的位操纵的指令及其参数(其可包括每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数或者指定掩码类型的参数)。例如,执行基于向量的位操纵的指令可由核1812内的分配器1814发布给SIMD协处理器1910内的SIMD执行单元1912。在另一个实施例中,执行基于向量的位操纵的指令可由主处理器1920的解码器1922发布给SIMD协处理器1910内的SIMD执行单元1912。执行基于向量的位操纵的指令可由SIMD执行单元1912逻辑地执行。
由SIMD执行单元1912执行用于执行基于向量的位操纵的指令可包括:在(2)处,从扩展向量寄存器文件1914中的扩展向量寄存器ZMMm(2102)获得表示多个数据结构的数据元素。例如,执行基于向量的位操纵的指令的参数可将扩展向量寄存器ZMMn(2102)识别为待操纵的数据的源,并且SIMD执行单元1912可读取存储在识别的源向量寄存器中的打包数据。
由SIMD执行单元1912执行指令可包括:在(3)处,执行基于向量的位操纵。以下参照图22-28进一步地详细描述示例性的基于向量的位操纵。在一个实施例中,执行用于执行基于向量的位操纵的指令可包括:为其数据被存储在扩展向量寄存器ZMMn(2102)中的每个数据结构重复图21中图示的操作的任何或所有步骤。在组装目的地向量之后,执行用于执行基于向量的位操纵的指令可包括:在(4)处,将目的地向量写入到目的地。在一个实施例中,目的地可与源相同,例如扩展向量寄存器文件1914中的扩展向量寄存器ZMMm(2102)。在其它实施例中,目的地可以是另一个扩展向量寄存器(图21中未明确示出)。
在一个实施例中,如果在指令的调用中指定这样的掩码操作,将目的地向量写入到目的地可包括将合并掩码操作应用于目的地向量。在另一个实施例中,如果在指令的调用中指定这样的掩码操作,将目的地向量写入到目的地可包括将零掩码操作应用于目的地向量。
图22图示根据本公开的实施例的用于执行VPBLSRD指令的示例性方法2200。方法2200可由图1-21中所示的任何元件来实现。方法2200可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2200可在步骤2205处启动操作。方法2200可包括比图示的步骤更多或更少的步骤。此外,方法2200可以与以下图示的次序不同的次序来执行其步骤。方法2200可在任何合适的步骤处终止。此外,方法2200可在任何合适的步骤处重复操作。方法2200可与方法2200的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2200可被执行多次以执行多个基于向量的位操纵操作。
在步骤2205处,在一个实施例中,可接收并解码诸如VPBLSRD指令之类的执行基于向量的位操纵指令的指令。在步骤2210处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2215处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2200可前进到步骤2220。
在步骤2220处,可将位操纵应用于第一数据元素。例如,可重置数据元素中的最低设置位。作为示例,可如下操纵32位的双字:
预操纵:<00000000 00000000 00000000 00110000>
操纵后:<00000000 00000000 00000000 00100000>
在步骤2220的位操纵完成之后,方法2200可前进到步骤2240。
回来参考步骤2215,如果掩码被使能,方法2200可从步骤2215前进到步骤2225。在步骤2225处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2200可前进到步骤2230,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2200可前进到步骤2235,并且存储在第一数据元素中的位可被各自重置为零。在步骤2230或步骤2235完成之后,方法2200可前进到步骤2240。
在步骤2240处,可查询源向量中是否存在更多的数据元素。如果是,则方法2200可返回到步骤2215以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2200可从步骤2215到步骤2240循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2200可从步骤2215到步骤2240循环步骤八次。此外,可并行地执行步骤2215至步骤2240的多次迭代,使得位操纵被并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2240处确定基于向量的位操纵完成,并且可在步骤2245处引退指令。
由以上方法2200表示的VPBLSRD指令也可由下面的伪代码表示:
其中“VPBLSRD”中的“V”表示指令是基于向量的指令,“VPBLSRD”中的“D”表示基于向量的位操纵对源向量内的双字操作,“BLSR”指示指令是重置最低设置位指令,zmm1指定源,{k1}指定掩码,zmm2/m512指定目的地向量的位置,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图23图示根据本公开的实施例的用于执行VPBLSD指令的示例性方法2300。方法2300可由图1-21中所示的任何元件来实现。方法2300可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2300可在步骤2305处启动操作。方法2300可包括比图示的步骤更多或更少的步骤。此外,方法2300可以与以下图示的次序不同的次序来执行其步骤。方法2300可在任何合适的步骤处终止。此外,方法2300可在任何合适的步骤处重复操作。方法2300可与方法2300的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2300可被执行多次以执行多个基于向量的位操纵操作。
在步骤2305处,在一个实施例中,可接收并解码诸如VPBLSD指令之类的执行基于向量的位操纵指令的指令。在步骤2310处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2315处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2300可前进到步骤2320。
在步骤2320处,可将位操纵应用于第一数据元素。例如,根据VPBLSD指令,可提取数据元素中的最低设置位。作为示例,可如下操纵32位的双字:
:<00000000 00000000 00000000 11110000>
目的地: <00000000 00000000 00000000 00010000>
在步骤2320的位操纵完成之后,方法2300可前进到步骤2340。
回来参考步骤2315,如果掩码被使能,方法2300可从步骤2315前进到步骤2325。在步骤2325处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2300可前进到步骤2330,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2300可前进到步骤2335,并且存储在第一数据元素中的位可被各自重置为零。在步骤2330或步骤2335完成之后,方法2300可前进到步骤2340。
在步骤2340处,可查询源向量中是否存在更多的数据元素。如果是,则方法2300可返回到步骤2315以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2300可从步骤2315到步骤2340循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2300可从步骤2315到步骤2340循环步骤八次。此外,可并行地执行步骤2315至步骤2340的多次迭代,使得位操纵被并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2340处确定基于向量的位操纵已经完成,并且可在步骤2345处引退指令。
由以上方法2300表示的VPBLSD指令也可由下面的伪代码表示:
其中“VPBLSD”中的“V”表示指令是基于向量的指令,“VPBLSD”中的“D”表示基于向量的位操纵对源向量内的双字操作,“BLS”指示指令是提取最低设置位指令,zmm1指定源,{k1}指定掩码,zmm2/m512指定目的地向量的位置,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图24图示根据本公开的实施例的用于执行VPBLSMSKD指令的示例性方法2400。方法2400可由图1-21中所示的任何元件来实现。方法2400可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2400可在步骤2405处启动操作。方法2400可包括比图示的步骤更多或更少的步骤。此外,方法2400可以与以下图示的次序不同的次序来执行其步骤。方法2400可在任何合适的步骤处终止。此外,方法2400可在任何合适的步骤处重复操作。方法2400可与方法2400的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2400可被执行多次以执行多个基于向量的位操纵操作。
在步骤2405处,在一个实施例中,可接收并解码诸如VPBLSMSKD指令之类的执行基于向量的位操纵指令的指令。在步骤2410处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2415处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2400可前进到步骤2420。
在步骤2420处,可将位操纵应用于第一数据元素。例如,根据VPBLSMSKD指令,可设置目的地中的每个较低位,直到源的最低设置位。这样的指令可被称为基于向量的“get-mask-up-set-set-set-bit-bit”指令。在一个示例中,可如下操纵32位的双字:
源: <00000000 00000000 00000000 11100000>
目的地: <00000000 00000000 00000000 00111111>
在步骤2420的位操纵完成之后,方法2400可前进到步骤2440。
回来参考步骤2415,如果掩码被使能,方法2400可从步骤2415前进到步骤2425。在步骤2425处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2400可前进到步骤2430,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2400可前进到步骤2435,并且存储在第一数据元素中的位可被各自重置为零。在步骤2430或步骤2435完成之后,方法2400可前进到步骤2440。
在步骤2440处,可查询源向量中是否存在更多的数据元素。如果是,则方法2400可返回到步骤2415以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2400可从步骤2415到步骤2440循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2400可从步骤2415到步骤2440循环步骤八次。此外,可并行地执行步骤2415至步骤2440的多次迭代,使得位操纵被并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2440处确定基于向量的位操纵完成,并且可在步骤2445处引退指令。
由以上方法2400表示的VPBLSMSKD指令也可由下面的伪代码表示:
其中“VPBLSMSKD”中的“V”表示指令是基于向量的指令,“VPBLSMSKD”中的“D”表示基于向量的位操纵对源向量内的双字操作,“BLSMSK”表示指令是get-mask-up-to-lower-set-bit指令,zmm1指定源,{k1}指定掩码,zmm2/m512指定目的地向量的位置,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图25图示根据本公开的实施例的用于执行VPBITEXTRACTRANGED指令的示例性方法2500。方法2500可由图1-21中所示的任何元件来实现。方法2500可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2500可在步骤2505处启动操作。方法2500可包括比图示的步骤更多或更少的步骤。此外,方法2500可以与以下图示的次序不同的次序来执行其步骤。方法2500可在任何合适的步骤处终止。此外,方法2500可在任何合适的步骤处重复操作。方法2500可与方法2500的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2500可被执行多次以执行多个基于向量的位操纵操作。
在步骤2505处,在一个实施例中,可接收并解码诸如VPBITEXTRACTRANGED指令之类的执行基于向量的位操纵指令的指令。在步骤2510处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2515处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2500可前进到步骤2520。
在步骤2520处,可将位操纵应用于第一数据元素。例如,根据VPBITEXTRACTRANGED指令,可提取数据元素中的位的范围。作为示例,可从源的指定范围(例如,位8至15)提取32位的双字的8位并将其插入在目的地的八个最低有效位中。目的地的剩余位可被设置为零。
源: <xxxxxxxx xxxxxxxx 01010101 xxxxxxxx>
目的地: <00000000 00000000 00000000 01010101>
在步骤2520的位操纵完成之后,方法2500可前进到步骤2540。
回来参考步骤2515,如果掩码被使能,方法2500可从步骤2515前进到步骤2525。在步骤2525处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2500可前进到步骤2530,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2500可前进到步骤2535,并且存储在第一数据元素中的位可被各自重置为零。在步骤2530或步骤2535完成之后,方法2500可前进到步骤2540。
在步骤2540处,可查询源向量中是否存在更多的数据元素。如果是,则方法2500可返回到步骤2515以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2500可从步骤2515到步骤2540循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2500可从步骤2515到步骤2540循环步骤八次。在一些实施例中,源向量中的不同数据元素可具有在步骤2520的不同的各自迭代期间提取的各自的数据元素内的不同范围的位。此外,可并行地执行步骤2515至步骤2540的多次迭代,使得将位操纵并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2540处确定基于向量的位操纵完成,并且可在步骤2545处引退指令。
由以上方法2500表示的VPBITEXTRACTRANGED指令也可由下面的伪代码表示:
其中“VPBITEXTRACTRANGED”中的“V”表示指令是基于向量的指令,“VPBITEXTRACTRANGED”中的“D”表示基于向量的位操纵对源向量内的双字操作,zmm1是源和目的地两者,{k1}指定掩码,zmm2指定提取的位范围的开始位置,zmm3/m512包含提取的位数,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图26图示根据本公开的实施例的用于执行VPBITINSERTRANGED指令的示例性方法2600。方法2600可由图1-21中所示的任何元件来实现。方法2600可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2600可在步骤2605处启动操作。方法2600可包括比图示的步骤更多或更少的步骤。此外,方法2600可以与以下图示的次序不同的次序来执行其步骤。方法2600可在任何合适的步骤处终止。此外,方法2600可在任何合适的步骤处重复操作。方法2600可与方法2600的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2600可被执行多次以执行多个基于向量的位操纵操作。
在步骤2605处,在一个实施例中,可接收并解码诸如VPBITINSERTRANGED指令之类的执行基于向量的位操纵指令的指令。在步骤2610处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2615处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2600可前进到步骤2620。
在步骤2620处,可将位操纵应用于第一数据元素。例如,根据VPBITINSERTRANGED指令,来自源的位的范围可被插入到目的地中的相同位置中,而不变更目的地中的剩余位。例如,32位的源的16个最低有效位可被插入到32位的目的地的16个最低有效位中,而不变更目的地的剩余位。
源:<01010101 01010101 01010101 01010101>
目的地(之前): <00100000 00000000 00000000 00000000>
目的地(之后): <00100000 00000000 01010101 01010101>
在步骤2620的位操纵完成之后,方法2600可前进到步骤2640。
回来参考步骤2615,如果掩码被使能,方法2600可从步骤2615前进到步骤2625。在步骤2625处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2600可前进到步骤2630,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2600可前进到步骤2635,并且存储在第一数据元素中的位可被各自重置为零。在步骤2630或步骤2635完成之后,方法2600可前进到步骤2640。
在步骤2640处,可查询源向量中是否存在更多的数据元素。如果是,则方法2600可返回到步骤2615以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2600可从步骤2615到步骤2640循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2600可从步骤2615到步骤2640循环步骤八次。在已经处理源向量中的每个数据元素之后,可在步骤2640处确定基于向量的位操纵完成,并且可在步骤2645处引退指令。此外,可并行地执行步骤2615到步骤2640的多次迭代,使得将位操纵并行地应用于源向量中的多个数据元素中的每一个。
由以上方法2600表示的VPBITINSERTRANGED指令也可由下面的伪代码表示:
其中“VPBITINSERTRANGED”中的“V”表示指令是基于向量的指令,“VPBITINSERTRANGED”中的“D”表示基于向量的位操纵对源向量内的双字操作,zmm1是其中位的范围将被改变的目的地,{k1}指定掩码,zmm2指定新的位值所来自的源,zmm3/m512包含开始位位置的值和范围中的位数,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图27图示根据本公开的实施例的用于执行VPBITEXTRACTD指令的示例性方法2700。方法2700可由图1-21中所示的任何元件来实现。方法2700可由任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2700可在步骤2705处启动操作。方法2700可包括比图示的步骤更多或更少的步骤。此外,方法2700可以与以下图示的次序不同的次序来执行其步骤。方法2700可在任何合适的步骤处终止。此外,方法2700可在任何合适的步骤处重复操作。方法2700可与方法2700的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2700可被执行多次以执行多个基于向量的位操纵操作。
在步骤2705处,在一个实施例中,可接收并解码诸如VPBITEXTRACTD指令之类的执行基于向量的位操纵指令的指令。在步骤2710处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2715处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2700可前进到步骤2720。
在步骤2720处,可将位操纵应用于第一数据元素。例如,根据VPBITEXTRACTD指令,可提取数据元素中的位。作为示例,可从源提取32位的双字的八位,并将其插入目的地中的相同位置中。目的地的剩余位可被设置为零。
源: <xxxxxxxx xxxxxxxx xxxxxxxx 1xxxxxxx>
目的地: <00000000 00000000 00000000 10000000>
在步骤2720的位操纵完成之后,方法2700可前进到步骤2740。
回来参考步骤2715,如果掩码被使能,方法2700可从步骤2715前进到步骤2725。在步骤2725处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2700可前进到步骤2730,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2700可前进到步骤2735,并且存储在第一数据元素中的位可被各自重置为零。在步骤2730或步骤2735完成之后,方法2700可前进到步骤2740。
在步骤2740处,可查询源向量中是否存在更多的数据元素。如果是,则方法2700可返回到步骤2715以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2700可从步骤2715到步骤2740循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2700可从步骤2715到步骤2740循环步骤八次。在一些实施例中,源向量中的不同数据元素可具有在步骤2720的不同的各自迭代期间提取的各自的数据元素内的不同的位。此外,可并行地执行步骤2715至步骤2740的多次迭代,使得位操纵被并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2740处确定基于向量的位操纵完成,并且可在步骤2745处引退指令。
由以上方法2700表示的VPBITEXTRACTD指令也可由下面的伪代码表示:
其中“VPBITEXTRACTD”中的“V”表示指令是基于向量的指令,“VPBITEXTRACTD”中的“D”表示基于向量的位操纵对源向量内的双字操作,zmm1指定目的地,{k1}指定掩码,zmm2指定源,zmm3/m512指定提取的位,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
图28图示根据本公开的实施例的用于执行VPBITINSERTD指令的示例性方法2800。方法2800可由图1-21中所示的任何元件来实现。方法2800可通过任何合适的准则启动并且可在任何合适的点启动操作。在一个实施例中,方法2800可在步骤2805处启动操作。方法2800可包括比图示的步骤更多或更少的步骤。此外,方法2800可以与以下图示的次序不同的次序来执行其步骤。方法2800可在任何合适的步骤处终止。此外,方法2800可在任何合适的步骤处重复操作。方法2800可与方法2800的其它步骤并行地或者与其它方法的步骤并行地执行其任何步骤。此外,方法2800可被执行多次以执行多个基于向量的位操纵操作。
在步骤2805处,在一个实施例中,可接收并解码诸如VPBITINSERTD指令之类的执行基于向量的位操纵指令的指令。在步骤2810处,指令和指令的一个或多个参数可被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可包括源向量寄存器的标识符、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别特定掩码寄存器的参数和/或指定掩码类型的参数。
在步骤2815处,可查询是否为源向量中的第一数据元素(例如,双字)使能掩码。例如,如果用于第一数据元素的掩码位被设置为低,或者不存在指定的掩码,没有掩码可被使能。如果没有掩码被使能,方法2800可前进到步骤2820。
在步骤2820处,可将位操纵应用于第一数据元素。例如,根据VPBITINSERTD指令,可插入数据元素中的一位而不改变剩余位。作为示例,32位的源的第八位可被插入到目的地的相同位置中,而不会变更目的地的剩余位。
源: <xxxxxxxx xxxxxxxx xxxxxxxx 0xxxxxxx>
目的地(之前):<11111111 11111111 11111111 11111111>
目的地(之后):<11111111 11111111 11111111 01111111>
在步骤2820的位操纵完成之后,方法2800可前进到步骤2840。
回来参考步骤2815,如果掩码被使能,方法2800可从步骤2815前进到步骤2825。在步骤2825处,可查询掩码的类型(例如,零掩码或合并掩码)。如果合并掩码被使能,方法2800可前进到步骤2830,并且存储在第一数据元素中的位可被保留。并且如果零掩码被使能,方法2800可前进到步骤2835,并且存储在第一数据元素中的位可被各自重置为零。在步骤2830或步骤2835完成之后,方法2800可前进到步骤2840。
在步骤2840处,可查询源向量中是否存在更多的数据元素。如果是,则方法2800可返回到步骤2815以处理下一个数据元素。例如,如果源向量包括四个数据元素(例如,四个双字),方法2800可从步骤2815到步骤2840循环步骤四次。作为另一个示例,如果源向量包括八个数据元素(例如,八个双字),方法2800可从步骤2815到步骤2840循环步骤八次。在一些实施例中,源向量中的不同数据元素可具有在步骤2820的不同的各自迭代期间插入的各自的数据元素内的不同的位。此外,可并行地执行步骤2815至步骤2840的多次迭代,使得位操纵被并行地应用于源向量中的多个数据元素中的每一个。
在已经处理了源向量中的每个数据元素之后,可在步骤2840处确定基于向量的位操纵完成,并且可在步骤2845处引退指令。
由以上方法2800表示的VPBITINSERTD指令也可由下面的伪代码表示:
其中“VPBITINSERTD”中的“V”表示指令是基于向量的指令,“VPBITINSERTD”中的“D”表示基于向量的位操纵对源向量内的双字操作,zmm1指定目的地,{k1}指定掩码,zmm2指定源,zmm3/m512指定提取的位,KL表示掩码寄存器的大小,并且VL表示向量长度。如以上在伪代码中所示,如果基于向量的位操纵对32位的双字操作,具有4个这样的双字数据元素的向量将具有128位的向量长度,具有8个这样的双字数据元素的向量将具有256位的向量长度,并且具有16个这样的双字数据元素的向量将具有512位的向量长度。虽然以上伪代码指示32位的双字数据元素,但是也可利用其它大小的数据元素(字节、字、四字),并且以上伪代码中的32位的指定可相应地改变。在一些实施例中,掩码{k1}可以是可选的。并且在一些实施例中,可为指定的寄存器预先确定每个数据元素的数量和/或每个数据元素的大小,并且因而不在参数列表中识别。
本文公开的机制的实施例可用硬件、软件、固件或这样的实现方法的组合来实现。本公开的实施例可被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
程序代码可被应用于输入指令以执行本文所述的功能并生成输出信息。输出信息可以已知的方式被应用于一个或多个输出设备。为了本申请的目的,处理系统可包括具有处理器的任何系统,诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以高级过程或面向对象的编程语言来实现,以与处理系统通信。如果期望的话,程序代码还可以汇编或机器语言来实现。事实上,本文所述的机制在范围上不限于任何特定的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的代表性指令来实现,该代表性指令表示处理器内的各种逻辑,其在由机器读取时使机器制造用于执行本文所述的技术的逻辑。被称为“IP核”的这样的表示可被存储在有形的机器可读介质上并且被供应给各种客户或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。
这样的机器可读存储介质可包括而不限于由机器或设备制造或形成的物品的非瞬时有形布置,包括半导体器件,诸如只读存储器(ROM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)之类的随机存取存储器(RAM),可擦除可编程只读存储器(EPROM),闪速存储器,电可擦除可编程只读存储器(EEPROM),磁卡或光卡,或者适合于存储电子指令的任何其它类型的介质。
相应地,本公开的实施例还可包括非瞬时有形机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),其定义本文所述的结构、电路、装置、处理器和/或系统功能部件。这样的实施例还可被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换成目标指令集。例如,指令转换器可翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真或以其它方式将指令转换为将由核处理的一个或多个其它指令。指令转换器可以软件、硬件、固件或其组合来实现。指令转换器可能在处理器上、在处理器外、或者部分在处理器上并且部分在处理器外。
因而,公开根据至少一个实施例的用于执行一个或多个指令的技术。尽管已经描述并在附图中示出了某些示范性实施例,但是应理解:这样的实施例仅仅是说明性的而不是对其它实施例的限制,并且这样的实施例不限于所示和所述的具体结构和布置,因为各种其它修改可在研究本公开时被本领域普通技术人员想到。在诸如这一点之类的技术的领域中,其中增长快速并且进一步的进步并不容易预见,公开的实施例可在通过使能技术进步而被促进时可在布置和细节方面容易修改,而不脱离本公开的原理和所附权利要求的范围。
在一些实施例中,一种处理器可包括:接收执行基于向量的位操纵的指令的前端,解码指令的解码器,存储多个数据元素的源向量寄存器,用逻辑执行指令以并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个的执行单元,以及引退指令的引退单元。执行基于向量的位操纵的指令可包括参数以指定源向量寄存器中的多个数据元素中的每一个是包括字节、字、双字和四字的组中的一个。与以上实施例中的任一个相结合,执行单元可包括重置每个数据元素中的最低设置位的逻辑。与以上实施例中的任一个相结合,执行单元可包括提取每个数据元素中的最低设置位的逻辑。与以上实施例中的任一个相结合,执行单元可包括设置每个数据元素中的较低位中的每一个,直到最低设置位的逻辑。与以上实施例中的任一个相结合,执行单元可包括提取每个数据元素中的位的范围的逻辑。与以上实施例中的任一个相结合,执行单元可包括在每个数据元素中插入位的范围的逻辑。与以上实施例中的任一个相结合,执行单元可包括提取每个数据元素中的单个位的逻辑。与以上实施例中的任一个相结合,执行单元可包括在每个数据元素中插入单个位的逻辑。
在一些实施例中,一种系统可包括:接收执行基于向量的位操纵的指令的前端,解码指令的解码器,执行指令的核,该核包括第一逻辑以并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个,以及引退指令的引退单元。执行基于向量的位操纵的指令可包括参数以指定源向量寄存器中的多个数据元素中的每一个是包括字节、字、双字和四字的组中的一个。与以上实施例中的任一个相结合,核可包括重置每个数据元素中的最低设置位的逻辑。与以上实施例中的任一个相结合,核可包括提取每个数据元素中的最低设置位的逻辑。与以上实施例中的任一个相结合,核可包括设置每个数据元素中的较低位中的每一个,直到最低设置位的逻辑。与以上实施例中的任一个相结合,核可包括提取每个数据元素中的位的范围的逻辑。与以上实施例中的任一个相结合,核可包括在每个数据元素中插入位的范围的逻辑。与以上实施例中的任一个相结合,核可包括提取每个数据元素中的单个位的逻辑。与以上实施例中的任一个相结合,核可包括在每个数据元素中插入单个位的逻辑。
在一些实施例中,一种方法可包括:接收执行基于向量的位操纵的指令,解码指令,执行指令,并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个,以及引退指令。执行基于向量的位操纵的指令可包括参数以指定源向量寄存器中的多个数据元素中的每一个是包括字节、字、双字和四字的组中的一个。与以上实施例中的任一个相结合,该方法可包括:重置每个数据元素中的最低设置位。与以上实施例中的任一个相结合,该方法可包括:提取每个数据元素中的最低设置位。与以上实施例中的任一个相结合,该方法可包括:设置每个数据元素中的较低位中的每一个,直到最低设置位。与以上实施例中的任一个相结合,该方法可包括:提取每个数据元素中的位的范围。与以上实施例中的任一个相结合,该方法可包括:在每个数据元素中插入位的范围。与以上实施例中的任一个相结合,该方法可包括:提取每个数据元素中的单个位。与以上实施例中的任一个相结合,该方法可包括:在每个数据元素中插入单个位。
在一些实施例中,一种系统可包括:用于接收执行基于向量的位操纵的指令的装置,用于解码指令的装置,用于执行指令的装置,用于并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个的装置,以及用于引退指令的装置。执行基于向量的位操纵的指令可包括参数以指定源向量寄存器中的多个数据元素中的每一个是包括字节、字、双字和四字的组中的一个。与以上实施例中的任一个相结合,该系统可包括:用于重置每个数据元素中的最低设置位的装置。与以上实施例中的任一个相结合,该系统可包括:用于提取每个数据元素中的最低设置位的装置。与以上实施例中的任一个相结合,该系统可包括:用于设置每个数据元素中的较低位中的每一个,直到最低设置位的装置。与以上实施例中的任一个相结合,该系统可包括:用于提取每个数据元素中的位的范围的装置。与以上实施例中的任一个相结合,该系统可包括:用于在每个数据元素中插入位的范围的装置。与以上实施例中的任一个相结合,该系统可包括:用于提取每个数据元素中的单个位的装置。与以上实施例中的任一个相结合,该系统可包括:用于在每个数据元素中插入单个位的装置。

Claims (20)

1.一种处理器,包括:
前端,接收执行基于向量的位操纵的指令;
解码器,解码指令;
源向量寄存器,存储多个数据元素;
执行单元,用第一逻辑执行指令以并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个;以及
引退单元,引退指令。
2.根据权利要求1所述的处理器,其中执行基于向量的位操纵的指令包括参数以指定源向量寄存器中的多个数据元素中的每一个是由字节、字、双字和四字组成的组中的一个。
3.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以重置每个数据元素中的最低设置位。
4.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以提取每个数据元素中的最低设置位。
5.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以设置每个数据元素中的较低位中的每一个,直到最低设置位。
6.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以提取每个数据元素中的位的范围。
7.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以在每个数据元素中插入位的范围。
8.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以提取每个数据元素中的单个位。
9.根据权利要求1所述的处理器,其中执行单元包括第二逻辑以在每个数据元素中插入单个位。
10.一种系统,包括权利要求1-9所述的处理器中的任一个。
11.一种方法,包括:
接收执行基于向量的位操纵的指令;
解码指令;
执行指令;
并行地将位操纵应用于源向量寄存器内的多个数据元素中的每一个;以及
引退指令。
12.根据权利要求11所述的方法,其中执行基于向量的位操纵的指令包括参数以指定源向量寄存器中的多个数据元素中的每一个是由字节、字、双字和四字组成的组中的一个。
13.根据权利要求11所述的方法,进一步包括:重置每个数据元素中的最低设置位。
14.根据权利要求11所述的方法,进一步包括:提取每个数据元素中的最低设置位。
15.根据权利要求11所述的方法,进一步包括:设置每个数据元素中的较低位中的每一个,直到最低设置位。
16.根据权利要求11所述的方法,进一步包括:提取每个数据元素中的位的范围。
17.根据权利要求11所述的方法,进一步包括:在每个数据元素中插入位的范围。
18.根据权利要求11所述的方法,进一步包括:提取每个数据元素中的单个位。
19.根据权利要求11所述的方法,进一步包括:在每个数据元素中插入单个位。
20.一种装置,包括用于执行权利要求11-19所述的方法中的任一个的装置。
CN201680073993.2A 2015-12-18 2016-11-15 用于基于向量的位操纵的指令和逻辑 Pending CN108369572A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/975,201 US20170177354A1 (en) 2015-12-18 2015-12-18 Instructions and Logic for Vector-Based Bit Manipulation
US14/975201 2015-12-18
PCT/US2016/061964 WO2017105718A1 (en) 2015-12-18 2016-11-15 Instructions and logic for vector-based bit manipulation

Publications (1)

Publication Number Publication Date
CN108369572A true CN108369572A (zh) 2018-08-03

Family

ID=59057274

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680073993.2A Pending CN108369572A (zh) 2015-12-18 2016-11-15 用于基于向量的位操纵的指令和逻辑

Country Status (5)

Country Link
US (1) US20170177354A1 (zh)
EP (1) EP3391237A4 (zh)
CN (1) CN108369572A (zh)
TW (1) TWI773654B (zh)
WO (1) WO2017105718A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240020119A1 (en) * 2022-07-13 2024-01-18 Simplex Micro, Inc. Vector processor with extended vector registers

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6266758B1 (en) * 1997-10-09 2001-07-24 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
CN1112635C (zh) * 1996-08-19 2003-06-25 三星电子株式会社 多媒体信号处理器中的单指令多数据处理方法及其装置
US20100205411A1 (en) * 2009-02-11 2010-08-12 International Business Machines Corporation Handling complex regex patterns storage-efficiently using the local result processor
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102884505A (zh) * 2011-04-08 2013-01-16 松下电器产业株式会社 数据处理装置、和数据处理方法
CN104536958A (zh) * 2014-09-26 2015-04-22 杭州华为数字技术有限公司 一种复合索引方法,及装置
CN104583938A (zh) * 2012-08-23 2015-04-29 高通股份有限公司 向量处理器中的数据提取系统和方法
US20150121039A1 (en) * 2001-10-29 2015-04-30 Intel Corporation Method and apparatus for shuffling data

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6077265A (ja) * 1983-10-05 1985-05-01 Hitachi Ltd ベクトル処理装置
US5805875A (en) * 1996-09-13 1998-09-08 International Computer Science Institute Vector processing system with multi-operation, run-time configurable pipelines
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US9495724B2 (en) * 2006-10-31 2016-11-15 International Business Machines Corporation Single precision vector permute immediate with “word” vector write mask
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
CN107145335B (zh) * 2011-12-23 2021-01-22 英特尔公司 用于大整数运算的向量指令的装置和方法
US20140223138A1 (en) * 2011-12-23 2014-08-07 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a mask register into a vector register.

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1112635C (zh) * 1996-08-19 2003-06-25 三星电子株式会社 多媒体信号处理器中的单指令多数据处理方法及其装置
US6266758B1 (en) * 1997-10-09 2001-07-24 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US20150121039A1 (en) * 2001-10-29 2015-04-30 Intel Corporation Method and apparatus for shuffling data
US20100205411A1 (en) * 2009-02-11 2010-08-12 International Business Machines Corporation Handling complex regex patterns storage-efficiently using the local result processor
CN102110058A (zh) * 2009-12-25 2011-06-29 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102884505A (zh) * 2011-04-08 2013-01-16 松下电器产业株式会社 数据处理装置、和数据处理方法
CN104583938A (zh) * 2012-08-23 2015-04-29 高通股份有限公司 向量处理器中的数据提取系统和方法
CN104536958A (zh) * 2014-09-26 2015-04-22 杭州华为数字技术有限公司 一种复合索引方法,及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
CAREWOLF: "X86 Bit manipulation instruction set", 《HTTPS://EN.WIKIPEDIA.ORG/W/INDEX.PHP?DIFF=587914674》 *

Also Published As

Publication number Publication date
WO2017105718A1 (en) 2017-06-22
US20170177354A1 (en) 2017-06-22
EP3391237A1 (en) 2018-10-24
EP3391237A4 (en) 2019-08-07
TWI773654B (zh) 2022-08-11
TW201729081A (zh) 2017-08-16

Similar Documents

Publication Publication Date Title
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369511B (zh) 用于基于通道的跨步存储操作的指令和逻辑
CN108351779B (zh) 用于安全指令执行流水线的指令和逻辑
CN108369516B (zh) 用于加载-索引和预取-分散操作的指令和逻辑
CN108369513A (zh) 用于加载-索引-和-收集操作的指令和逻辑
CN105745630B (zh) 用于在集群宽执行机器中的存储器访问的指令和逻辑
KR20150081238A (ko) 조건부 루프들을 벡터화하기 위한 명령어들 및 로직
CN106030518B (zh) 用于整理和退出存储的处理器、方法、系统和装置
CN108351863A (zh) 用于可编程结构层级结构和高速缓存的指令和逻辑
CN108139905A (zh) 用于从持久存储器预取信息的指令和逻辑
CN108292229A (zh) 用于重新出现的相邻聚集的指令和逻辑
CN107003921A (zh) 具有有限状态机控制的可重配置测试访问端口
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
TWI715681B (zh) 用於位元欄位位址和插入之指令及邏輯
CN108351784A (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
CN108292293A (zh) 用于得到多个向量元素操作的指令和逻辑
CN108292232A (zh) 用于加载索引和分散操作的指令和逻辑
CN108351785A (zh) 用于部分减少操作的指令和逻辑
CN107003839A (zh) 用于移位和乘法器的指令和逻辑
CN106575219A (zh) 针对用于处理运算的向量格式的指令和逻辑技术领域
CN109791493A (zh) 用于乱序集群化解码中的负载平衡的系统和方法
TW201729076A (zh) 用於合成與排列操作序列之指令及邏輯
CN108701101A (zh) 处理器系统管理中断事件的基于仲裁器的串行化
TW201723815A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180803