用于得到多个向量元素操作的指令和逻辑的制作方法

文档序号:14958977发布日期:2018-07-18 00:08阅读:252来源:国知局

本公开涉及处理逻辑、多处理器和相关联的指令集架构领域,所述指令集架构当由处理器或其他处理逻辑执行时执行逻辑、数学或其他功能操作。

相关技术说明

多处理器系统正变得越来越普遍。多处理器系统的应用包括动态域分区一直延续到桌面计算。为了利用多处理器系统,可以将有待执行的代码分成多个线程以供由各种处理实体执行。可以彼此并行地执行每个线程。当指令在处理器上接收时其可以被解码为原生或更原生的词语或指令字以供在处理器上执行。处理器可以在片上系统中实施。被组织成三个或四个元素的元组的数据结构可以用于媒体应用、高性能计算应用、以及分子动力学应用中。

附图说明

实施例以举例的方式被展示并且不限于附图中的图:

图1a是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图;

图1b展示了根据本公开的实施例的数据处理系统;

图1c展示了用于执行文本串比较操作的数据处理系统的其他实施例;

图2是根据本公开的实施例的可以包括用于执行指令的逻辑电路的处理器的微架构的框图;

图3a展示了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示;

图3b展示了根据本公开的实施例的可能的寄存器中数据存储格式(in-registerdatastorageformat);

图3c展示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示;

图3d展示了操作编码格式的实施例;

图3e展示了根据本公开的实施例的具有四十个位或更多个位的另一种可能的操作编码格式;

图3f展示了根据本公开的实施例的又另一种可能的操作编码格式;

图4a是框图,展示了根据本公开的实施例的有序流水线和寄存器重命名级、乱序发布/执行流水线;

图4b是框图,展示了根据本公开的实施例的有待包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发布/执行逻辑;

图5a是根据本公开的实施例的处理器的框图;

图5b是根据本公开的实施例的核的示例实施方式的框图;

图6是根据本公开的实施例的系统的框图;

图7是根据本公开的实施例的第二系统的框图;

图8是根据本公开的实施例的第三系统的框图;

图9是根据本公开的实施例的片上系统的框图;

图10展示了根据本公开的实施例的包含可以执行至少一条指令的中央处理单元和图形处理单元的处理器;

图11是框图,展示了根据本公开的实施例的ip核的开发;

图12展示了根据本公开的实施例可以如何由不同类型的处理器对第一类型的指令进行仿真;

图13展示了对照根据本公开的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;

图14是根据本公开的实施例的处理器的指令集架构的框图;

图15是根据本公开的实施例的处理器的指令集架构的更详细框图;

图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;

图17是根据本公开的实施例的用于利用处理器的电子装置的框图;

图18是根据本公开的实施例的用于进行向量操作的指令和逻辑的示例系统的图示,所述向量操作用于得到同一类型的多个向量元素。

图19是框图,展示了根据本公开的实施例的用于执行扩展向量指令的处理器核;

图20是框图,展示了根据本公开的实施例的示例扩展向量寄存器堆;

图21是根据本公开的实施例的用于执行向量get操作的操作的图示,所述向量get操作用于得到同一类型的多个元素。

图22a至图22d展示了根据本公开的实施例的vpget3和vpget4指令的对应形式的操作。

图23展示了根据本公开的实施例的用于从不同源寄存器中的数据结构中得到同一类型的多个向量元素的示例方法。

图24a和图24b展示了根据本公开的实施例的用于利用多个向量get3操作以从不同的源中获得多个数据结构的数据元素并且置换所述数据元素的示例方法。

图25a和图25b展示了根据本公开的实施例的用于利用多个向量get4操作以从不同的源中获得多个数据结构的数据元素并且置换所述数据元素的示例方法。

具体实施方式

以下说明描述了用于在处理设备上执行用于操作的指令和处理逻辑,所述操作用于得到多个向量元素。这种处理设备可以包括乱序处理器。在以下具体实施方式中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等许多具体细节以便提供对本公开的实施例的更全面理解。然而,本领域技术人员应理解的是,可以在没有这些具体细节的情况下实践实施例。另外,未详细示出一些熟知的结构、电路等,从而避免不必要地模糊本公开的实施例。

虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高的流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本公开的诸个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中可以执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应当以限制性意义来解释,因为它们仅仅旨在提供本公开的诸个实施例的示例,而并非对本公开的实施例的所有可能实现方式进行穷举。

虽然下述的示例是在执行单元和逻辑电路情境下描述指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开至少一个实施例相一致的功能。在一个实施例中,与本公开的实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使可以通过这些指令而被编程的通用处理器或专用处理器执行本公开的步骤。本公开的诸个实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行根据本公开的实施例的一个或多个操作。此外,本公开的多个实施例的多个步骤可由包含用于执行这些步骤的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。

被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统的存储器(诸如,dram、高速缓存、闪存、或其他存储器)中。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(诸如,计算机)可读形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(cd-rom)、磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储器。因此,计算机可读介质可以包括适用于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。

设计会经历多个阶段,从创造到仿真到制造。表示设计的数据可用多种方式来表示该设计。首先,像仿真中可以有用的那样,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,设计在某个阶段可以达到表示硬件模型中各种设备的物理布置的数据的层级。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在任何设计表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储设备(诸如,盘)可以是存储经由光或电波发送的信息的机器可读介质,调制或以其他方式生成这些光或电波以发送这些信息。当发送指示或承载代码或设计的电载波达到实现该电信号的复制、缓冲或重新发送的程度时,可以产生新的副本。因此,通信提供商或网络提供商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。

在现代处理器中,可以将多个不同的执行单元用于处理和执行各种代码和指令。一些指令可以更快地完成,而其他指令可能需要多个时钟周期来完成。指令的吞吐量越快,则处理器的总体性能越好。因此,使尽可能多的指令尽可能快地执行将会是有利的。然而,可能存在具有较大的复杂度并且在执行时间和处理器资源方面要求更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等等。

因为更多的计算机系统被用于互联网、文本以及多媒体应用,所以已逐渐地引进了附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,一个或多个计算机架构包括:数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(i/o)。

在一个实施例中,指令集架构(isa)可由一个或多个微架构来实现,微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的多个处理器可共享公共指令集的至少一部分。例如,奔腾四(pentium4)处理器、酷睿(coretm)处理器、以及来自加利福尼亚州桑尼威尔(sunnyvale)的超微半导体有限公司(advancedmicrodevices,inc.)的多个处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如,arm控股有限公司、mips或它们的授权方或兼容方)设计的多个处理器可共享至少一部分公共指令集,但可包括不同的处理器设计。例如,isa的相同寄存器架构在不同的微架构中可使用新的或公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(rat)、重排序缓冲器(rob)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可包括:可由软件编程者寻址或不可由软件编程者寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器集合。

指令可以包括一个或多个指令格式。在一个实施例中,指令格式可指示多个字段(位的数量、位的位置等)以指定将要被执行的操作以及将要对其执行操作的操作数等。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式字段的不同的子集,和/或被定义为具有以不同方式进行解释的给定字段。在一个实施例中,可以使用指令格式(并且,如果定义过,则以该指令格式的指令模板中的给定的一个)来表示指令,并且该指令指定或指示操作以及该操作将操作的操作数。

科学应用、金融应用、自动向量化通用应用、rms(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2d/3d图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(simd)指的是使得处理器对多个数据元素执行一个操作的指令类型。可将simd技术用于可将寄存器中的多个位逻辑地划分为多个固定尺寸或可变尺寸的数据元素(每个数据元素表示单独的值)的处理器中。例如,在一个实施例中,可将64位寄存器中的多个位组织为包含四个单独的16位数据元素的源操作数,每个数据元素表示单独的16位的值。该数据类型可被称为‘紧缩’数据类型或‘向量’数据类型,并且该数据类型的操作数可被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是simd指令(或“紧缩数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,simd指令指定了将要对两个源向量操作数执行以生成具有相同或不同尺寸的、具有相同或不同数量的数据元素的、具有相同或不同数据元素顺序的目的地向量操作数(也被称为结果向量操作数)的单个向量操作。

诸如由酷睿(coretm)处理器(具有包括x86、mmxtm、流simd扩展(sse)、sse2、sse3、sse4.1、sse4.2指令的指令集)、arm处理器(诸如,arm处理器族,具有包括向量浮点(vfp)和/或neon指令的指令集)和mips处理器(诸如,中国科学院计算机技术研究所(ict)开发的龙芯处理器族)所采用的simd技术之类的simd技术在应用性能上带来了极大的提高(coretm和mmxtm是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。

在一个实施例中,目的地寄存器/数据和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其他存储区域来实现。例如,在一个实施例中,“dest1”可以是临时存储寄存器或其他存储区域,而“src1”和“src2”可以是第一和第二源存储寄存器或其他存储区域,等等。在其他实施例中,src和dest存储区域中的两个或更多可对应于相同存储区域中的不同数据存储元素(例如,simd寄存器)。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中作为目的地寄存器的那个寄存器,源寄存器中的一个也可以作为目的地寄存器。

图1a是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为可以包括用于执行指令的执行单元的处理器。根据本公开,诸如在本文中所描述的实施例中,系统100可以包括诸如处理器102之类的组件,该处理器102用于使用包括逻辑的执行单元以执行算法来处理数据。系统100可以代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的pentiumtmiii、pentiumtm4、xeontm、itaniumtm、xscaletm和/或strongarmtm微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器的pc、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的windowstm操作系统的一个版本,不过也可使用其它操作系统(例如unix和linux)、嵌入式软件、和/或图形用户界面。因此,本公开的各实施例不限于硬件电路和软件的任何特定组合。

诸实施例不限于计算机系统。本公开的实施例可用于其他设备,诸如手持式设备和嵌入式应用。手持式设备的某些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(pda)以及手持式pc。嵌入式应用可包括微控制器、数字信号处理器(dsp)、芯片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机、或可执行根据至少一个实施例的一条或多条指令的任何其他系统。

计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108,用于执行算法以执行根据本公开的一个实施例的至少一个指令。可在单处理器桌面或服务器系统的情境中描述一个实施例,但是可将其他实施例包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括处理器102以用于处理数据信号。处理器102可以包括复杂指令集计算机(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器、实现多个指令集组合的处理器或任意其他处理器设备(例如,数字信号处理器)。在一个实施例中,处理器102可以耦合至处理器总线110,处理器总线110可以在处理器102与系统100中的其他组件之间传输数据信号。系统100的多个要素可以执行为熟悉本领域的人员所公知的它们的常规功能。

在一个实施例中,处理器102可以包括第一级(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与mch116通信。mch116可以提供至存储器120的高带宽存储器路径118,用于指令119和数据121的存储,并且用于图形命令、数据和纹理的存储。mch116可以引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并用于在处理器总线110、存储器120和系统i/o122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合至图形控制器112的图形端口。mch116可通过存储器接口118耦合至存储器120。图形卡112可通过加速图形端口(agp)互连114耦合至mch116。

系统100可使用专有中枢接口总线122以将mch116耦合至i/o控制器中枢(ich)130。在一个实施例中,ich130可经由本地i/o总线来提供到某些i/o设备的直接连接。本地i/o总线可包括用于将外围设备连接到存储器120、芯片组以及处理器102的高速i/o总线。示例可包括音频控制器129、固件中枢(闪存bios)128、无线收发机126、数据存储设备124、包括用户输入接口125(可包括键盘接口)的传统i/o控制器123、串行扩展端口127(诸如,通用串行总线(usb))以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、cd-rom设备、闪存设备、或其他大容量存储设备。

对于系统的另一个实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器可以包括闪存。闪存可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于芯片上系统上。

图1b示出数据处理系统140,该数据处理系统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桥154,用于经由i/o总线153与各种i/o设备进行通信。此类i/o设备可包括但不限于:例如,通用异步接收机/发射机(uart)155、通用串行总线(usb)156、蓝牙无线uart157、以及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,该解码器165用于识别包括根据一个实施例的、用于由执行单元162执行的指令的指令集163中的多条指令。在其他实施例中,simd协处理器161也包括用于对指令集163中的多条指令进行解码的解码器165的至少部分(示为165b)。处理核170也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。

在操作中,主处理器166执行控制通用类型的数据处理操作(包括与高速缓存存储器167和输入/输出系统168之间的交互)的数据处理指令流。simd协处理器指令可以被嵌入到该数据处理指令流中。主处理器166的解码器165将这些simd协处理器指令识别为应当由附连的simd协处理器161来执行的类型。因此,主处理器166在协处理器总线166上发布这些simd协处理器指令(或表示simd协处理器指令的控制信号)。可以由任何附连的simd协处理器从协处理器总线171接收这些指令。在这种情况下,simd协处理器161可以接受并执行任何接收到的针对该simd协处理器的simd协处理器指令。

可经由无线接口169接收数据以通过simd协处理器指令进行处理。对于一个示例,能以数字信号的形式接收到语音通信,可由simd协处理器指令处理该数字信号以便重新生成表示该语音通信的数字音频样本。对于另一个示例,能以数字位流的形式接收到被压缩的音频和/或视频,可由simd协处理器指令处理该数字位流以便重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和simd协处理器161可被集成在单个处理核170中,该单个处理核170包括执行单元162、一组寄存器堆164以及用于识别包括根据一个实施例的多条指令的指令集163中的多条指令的解码器165。

图2是根据本公开的实施例的处理器200的微架构的框图,处理器200可以包括用于执行指令的逻辑电路。在一些实施例中,可将根据一个实施例的指令实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(例如,单精度和双精度整数和浮点数据类型)的数据元素进行操作。在一个实施例中,有序前端201可以实现处理器200的部分,该部分可以取出要被执行的指令,并准备这些指令以便稍后在处理器流水线中使用。前端201可以包括若干单元。在一个实施例中,指令预取器226从存储器中取出指令,并将这些指令馈送至指令解码器228,指令解码器228进而解码或解释这些指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其他实施例中,该解码器将指令解析为可由微架构用于执行根据一个实施例的多个操作的操作码以及对应的数据和控制字段。在一个实施例中,追踪高速缓存230可以在uop队列234中将经解码的uop组合为程序排序的序列或踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码rom232提供完成操作所需的uop。

一些指令可以被转换为单个微op,而其他指令需要若干个微op以完成完整的操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器228可以访问微代码rom232以执行该指令。在一个实施例中,可将指令解码为少量的微op,以便在指令解码器228处进行处理。在另一实施例中,如果需要许多微op来完成操作,则可将指令存储在微代码rom232中。追踪高速缓存230参考进入点可编程逻辑阵列(pla)来确定正确的微指令指针,以从微代码rom232中读取微代码序列来完成根据一个实施例的一条或多条指令。在微代码rom232完成对指令的微op进行的序列化操作之后,该机器的前端201可以恢复从追踪高速缓存230中取出微op。

乱序执行引擎203可以准备指令以供执行。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器/寄存器重命名器215中的分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。分配器/寄存器重命名器215中的寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器209、快速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器215也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作(存储器微操作队列207),另一个微操作队列用于非存储器操作(整数/浮点微操作队列205)。uop调度器202、204、206基于它们的从属输入寄存器操作数源的准备就绪以及uop完成它们的操作所需的执行资源的可用性来确定uop何时准备好用于执行。一个实施例的快速调度器202可以在主时钟周期的每半个时钟周期上进行调度,而其他调度器在每个主处理器时钟周期上仅可调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。

寄存器堆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、agu214、快速alu216、快速alu218、慢速alu220、浮点alu222、浮点移动单元224。在另一个实施例中,浮点执行块222和224可以执行浮点、mmx、simd、sse以及其他操作。在又一个实施例中,浮点alu222可以包括用于执行除法、平方根和余数微op的64位除64位的浮点除法器。在各实施例中,可利用浮点硬件来处置涉及浮点值的指令。在一个实施例中,可以将alu操作传递到高速alu执行单元216和218。高速alu216和218可以执行有效等待时间为半个时钟周期的快速操作。在一个实施例中,大多数复杂的整数操作去往慢速alu220,因为慢速alu220可以包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位器、标志逻辑和分支处理设备。存储器加载/存储操作可以由agu212和214来执行。在一个实施例中,整数alu216、218和220可以对64位数据操作数执行整数操作。在其他实施例中,alu216、218和220可实现为支持包括16、32、128以及256等的各种数据位尺寸。类似地,浮点单元222和224可实现为支持具有各种宽度的位的一系列操作数。在一个实施例中,浮点单元222和224可结合simd和多媒体指令来对128位宽的紧缩数据操作数进行操作。

在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属操作。由于可以在处理器200中推测性地调度并执行uop,因此处理器200也可以包括用于处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在已带着临时错误的数据离开调度器的运行中的依赖性操作。重放机制跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖性操作可能需要被重放,而可以允许独立操作完成。也可将处理器的一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。

术语“寄存器”可以是指可以被用作标识操作数的指令的部分的板上处理器存储器位置。换句话说,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些处理器存储位置。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据以及执行本文中所描述的功能。本文所描述的寄存器可利用任何数量的不同技术,由处理器中的电路来实现,这些不同技术诸如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含八个多媒体simd寄存器,用于紧缩数据。对于以下讨论,寄存器可以被理解为设计成保存紧缩数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了mmx技术的微处理器的64位宽mmxtm寄存器(在一些实例中也称为“mm”寄存器)。这些mmx寄存器(在整数和浮点形式两者中是可用的)可与伴随simd和sse指令的紧缩数据元素一起操作。类似地,涉及sse2、sse3、sse4或以外的(统称为“ssex”)技术的128位宽的xmm寄存器可以保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点数据可被包括在相同的寄存器堆中,或被包括在不同的寄存器堆中。进一步地,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。

在下述附图的示例中,可以描述多个数据操作数。图3a示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3a示出用于128位宽操作数的紧缩字节310、紧缩字320以及紧缩双字(dword)330的数据类型。本示例的紧缩字节格式310可以是128位长,并且包含十六个紧缩字节数据元素。字节可以被定义为,例如,数据的八位。每一个字节数据元素的信息可以被存储为:对于字节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的一个实施例可以是128位长,包含八个16位数据元素。紧缩单数据元素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示出了如何可以将字7到字0存储在simd寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器内表示346。注意,每个字数据元素的第十六位可以是符号指示符。无符号紧缩双字表示348示出了如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器内表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。

fig.图3d示出了操作编码(操作码)的实施例。此外,格式360可以包括与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/design/litcentr上获得的“ia-32英特尔架构软件开发者手册卷2:指令集参考(ia-32intelarchitecturesoftwaredeveloper'smanualvolume2:instructionsetreference)”中描述的操作码格式类型相对应的寄存器/存储器操作数寻址模式。在一个实施例中,可通过字段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)和位移(displacement)字节部分地指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器到存储器寻址。

图3f示出了根据本公开的实施例的又一可能的操作编码(操作码)格式。可以通过协处理器数据处理(cdp)指令来执行64位单指令多数据(simd)算术操作。操作编码(操作码)格式380描绘了具有cdp操作码字段382和389的一条此类cdp指令。对于另一实施例,可由字段383、384、387和388中的一个或多个对cdp指令操作的这种类型进行编码。可以对每个指令标识多至三个操作数位置,包括多至两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8位、16位、32位和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,且执行引擎单元和前端单元两者都可以耦合到存储器单元470。

核490可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核或混合或其他核类型。在一个实施例中,核490可以是专用核,诸如例如,网络或通信核、压缩引擎、图形核等。

前端单元430可以包括耦合至指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合至指令转换后备缓冲器(tlb)436。tlb436可以耦合至指令取出单元438,指令取出单元耦合至解码单元440。解码单元440可解码指令,并生成可从原始指令中解码出的、或以其他方式反映原始指令的、或可从原始指令中导出的一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同的机制来实现解码器。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的第2级(l2)高速缓存单元476。解码单元440可以耦合至执行引擎单元450中的重命名/分配器单元452。

执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452以及一组一个或多个调度器单元456。调度器单元456表示任意数量的不同调度器,包括预留站、中央指令窗等。调度器单元456可以耦合到物理寄存器堆单元458。每个物理寄存器堆单元458表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,作为要被执行的下一条指令的地址的指令指针)等等。物理寄存器堆单元458可以被引退单元454所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆、使用一个或多个未来文件(futurefile)、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看可以是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器可适用,只要它们存储并提供本文中所述的数据。合适寄存器的示例包括但可能不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。引退单元454和物理寄存器堆单元458可以耦合至执行群集460。执行群集460可以包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。调度器单元456、物理寄存器堆单元458和执行群集460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自调度器单元、物理寄存器堆单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线;以及在单独的存储器访问流水线的情况下,某些实施例可以被实现为仅仅该流水线的执行群集具有存储器访问单元464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。

存储器访问单元464的集合可以耦合到存储器单元470,该存储器单元可以包括耦合到数据高速缓存单元474的数据tlb单元472,其中数据高速缓存单元耦合到第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))。

应当理解,核可以按各种方式来支持多线程操作(执行两个或更多个并行的操作或线程的集合)。可以由例如包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合来执行多线程操作支持。此类组合可以包括,例如,时分取出和解码以及此后诸如利用超线程技术的同步多线程操作。

尽管可以在乱序执行的上下文中描述寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。虽然处理器的所示出的实施例也可以包括单独的指令和数据高速缓存单元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可以包括显示引擎512,用于驱动一个或多个外部连接的显示器或图形模块560。系统代理510可以包括用于通信总线的接口514以用于图形。在一个实施例中,接口514可以由pci快速(pcie)实现。在进一步的实施例中,接口514可以由pci快速图形(peg)实现。系统代理510可以包括直接媒体接口(dmi)516。dmi516可以提供母板上的或计算机系统的其他部分上的不同桥之间的链路。系统代理510可以包括pcie桥518以用于将pcie链路提供到计算系统的其他元件。可以使用存储器控制器520和一致性逻辑522来实现pcie桥518。

核502可以以任何合适的方式来实现。核502可以是在架构和/或指令集上同构的或异构的。在一个实施例中,核502中的一些可以是有序的,而另一些可以是乱序的。在另一实施例中,核502中的两个或更多可以执行相同的指令集,而其他核仅可执行该指令集的子集或不同的指令集。

处理器500可以包括通用处理器,诸如酷睿(coretm)i3、i5、i7、2duo和quad、至强(xeontm)、安腾(itaniumtm)、xscaletm或strongarmtm处理器,这些均可以从加利福尼亚圣克拉拉市的英特尔公司获得。处理器500可以提供自另一个公司,诸如,来自arm控股公司、mips等。处理器500可以是专用处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、等等。处理器500可以被实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分,和/或可以使用多种处理技术中的任何一种(诸如,例如,bicmos、cmos或nmos)实现在一个或多个衬底上。

在一个实施例中,高速缓存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的llc595。在另一实施例中,llc595可以实现在可被处理器500的所有处理实体访问的模块590中。在进一步的实施例中,模块590可以实现在来自英特尔公司的处理器的非核模块中。模块590可以包括对于核502的执行有必要的处理器500的部分或子系统中,但是可能不实现在核502内。除了llc595之外,模块590可以包括,例如,硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地llc595使处理器500可访问ram599。此外,核502的其他实例可以类似地访问模块590。可以通过模块590部分地促进核502的实例的协调。

图6-8可以示出适于包括处理器500的示例性系统,而图9可以示出可包括核502中的一个或多个的示例性芯片上系统(soc)。本领域已知的对膝上型设备、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和实现也可以是合适的。一般地,包含本文中所公开的处理器和/或其它执行逻辑的多个系统或电子设备一般可以是合适的。

图6示出了根据本公开的实施例的系统600的框图。系统600可以包括可以耦合至图形存储器控制器中枢(gmch)620的一个或多个处理器610、615。附加的处理器615的可选性质在图6中通过虚线来表示。

每个处理器610、615可以是处理器500的某个版本。然而,应当注意,集成图形逻辑和集成存储器控制单元可能不会出现在处理器610和615中。图6示出了gmch620可以耦合至存储器640,该存储器640可以是例如动态随机存取存储器(dram)。对于至少一个实施例,dram可以与非易失性高速缓存相关联。

gmch620可以是芯片组或芯片组的部分。gmch620可以与处理器610、615进行通信,并控制处理器610、615与存储器640之间的交互。gmch620还可充当处理器610、615和系统600的其他元件之间的加速总线接口。在一个实施例中,gmch620经由诸如前端总线(fsb)695之类的多点总线与处理器610、615进行通信。

此外,gmch620可以耦合至显示器645(诸如平板显示器)。在一个实施例中,gmch620可以包括集成图形加速器。gmch620可以进一步耦合至输入/输出(i/o)控制器中枢(ich)650,该输入/输出(i/o)控制器中枢(ich)650可用于将各种外围设备耦合至系统600。外部图形设备660可以包括与另一外围设备670一起耦合至ich650的分立图形设备。

在其他实施例中,附加的或不同的处理器也可存在于系统600中。例如,附加的处理器610、615可以包括可以与处理器610相同的附加的处理器、可以与处理器610异构的或不对称的附加的处理器、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器。在物理资源610和615之间可以存在包括架构、微架构、热和功耗特征等的一系列品质度量方面的各种差异。这些差异可以有效显示为处理器610和615之间的不对称性和异构性。对于至少一个实施例,各种处理器610和615可驻留在同一管芯封装中。

图7示出了根据本公开的实施例的第二系统700的框图。如图7所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750而被耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本(如处理器610、615中的一个或多个)。

虽然图7可以示出两个处理器770、780,但是应当理解本公开的范围不限于此。在其他实施例中,在给定处理器中可存在一个或多个附加处理器。

处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还可以包括点对点(p-p)接口776和778作为其总线控制器单元的部分;类似地,第二处理器780可以包括p-p接口786和788。处理器770、780可以经由使用点对点(p-p)接口电路778、788的p-p接口750来交换信息。如图7所示,imc772和782可以将处理器耦合至相应的存储器,即,存储器732和存储器734,它们在一个实施例中可以是本地连接到相应的处理器的主存储器的部分。

处理器770、780可各自经由使用点对点接口电路776、794、786、798的各个p-p接口752、754与芯片组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/o724可以被耦合到第二总线720。注意,其他架构是可能的。例如,代替图7的点对点架构,系统可以实现多分支总线或其他此类架构。

图8示出了根据本公开的实施例的第三系统800的框图。图7和8中的类似元件使用类似附图标记,且在图8中省略了图7的某些方面以避免使图8的其他方面模糊。

图8示出处理器770、780可分别包括集成存储器和i/o控制逻辑(“cl”)872和882。对于至少一个实施例,cl872和882可包括诸如以上结合图5和7所描述的集成存储器控制器单元。此外,cl872、882还可包括i/o控制逻辑。图8示出了不仅存储器732、734可以被耦合到cl872、882,而且i/o设备814也可以被耦合到控制逻辑872、882。传统i/o设备815可以被耦合至芯片组790。

图9示出了根据本公开的实施例的soc900的框图。在图5中,相似的部件具有同样的附图标记。另外,虚线框可以表示更先进的soc的可选特征。互连单元902可耦合至:应用处理器910,其可包括一个或多个核的集合502a-n和共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一个或多个媒体处理器的集合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包括,cpu1005、gpu1010、图像处理器1015、视频处理器1020、usb控制器1025、uart控制器1030、spi/sdio控制器1035、显示设备1040、存储器接口控制器1045、mipi控制器1050、闪存控制器1055、双数据率(ddr)控制器1060、安全引擎1065、i2s/i2c控制器1070。其他逻辑和电路(包括更多的cpu或gpu以及其他外围设备接口控制器)可被包括在图10的处理器中。

至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的表示性数据来实现,当机器读取该表示性数据时,该表示性数据使得该机器用于制造执行本文所述的技术的逻辑。可将此类表示(称为“ip核”)存储在有形的机器可读介质(“磁带”)上,并将其提供给各种顾客或生产设施,以便加载到实际制作该逻辑或处理器的制造机器中。例如,ip核(诸如由arm控股公司所开发的cortextm处理器族以及由中国科学院计算机技术研究所(ict)所开发的龙芯ip核)可被授权或销售给各种客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方生产的处理器中。

图11示出根据本公开的实施例的示出ip核开发的框图。存储设备1100可以包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示ip核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160而被提供给存储设备1100。由仿真工具和模型所生成的ip核信息可随后被发送到生产设施1165,可由第三方在该生产设施中制造该ip核以执行根据至少一个实施例的至少一条指令。

在一些实施例中,一条或多条指令可以对应于第一类型或架构(例如,x86),并且可在不同类型或架构(例如,arm)的处理器上被转换或仿真。根据一个实施例,因此可在任何处理器或处理器类型(包括arm、x86、mips、gpu或其他处理器类型或架构)上执行指令。

图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令。在图12中,程序1205包含可执行与根据一个实施例的指令相同或基本相同的功能的一些指令。然而,程序1205的指令可以是与处理器1215不同或不兼容的类型和/或格式,这意味着不能够由处理器1215原生地执行程序1205中的类型的指令。然而,借助于仿真逻辑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指令集核的处理器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,视频编解码器定义其中特定视频信号将被编码和解码以作为输出的方式。

指令集架构1400还可以包括任何数量或种类的接口、控制器或用于与电子设备或系统的其他部分相接或通信的其他机制。此类机制可以促进与例如外围设备、通信设备、其他处理器或存储器的交互。在图14的示例中,指令集架构1400可以包括液晶显示器(lcd)视频接口1425、用户接口模块(sim)接口1430、引导rom接口1435、同步动态随机存取存储器(sdram)控制器1440、闪存控制器1445、以及串行外围接口(spi)主单元1450。lcd视频接口1425可以提供将视频信号从例如gpu1415并且通过例如移动产业处理器接口(mipi)1490或高清晰度多媒体接口(hdmi)1495输出到显示器。此类显示器可以包括例如lcd。sim接口1430可以提供到sim卡或设备的访问或来自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、寄存器重命名级1555、发布级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、alu1567和浮点单元(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可以包括监听控制单元1512,其为多个处理核处置高速缓存访问和一致性。在进一步的实施例中,为了提供此类功能,监听控制单元1512可以包括高速缓存到高速缓存传输单元,其处置不同高速缓存之间的信息交换。在另一进一步的实施例中,监听控制单元1512可以包括一个或多个监听过滤器1514,其监视其他高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不必直接执行此类监视。单元1510可以包括任何合适数量的计时器1515以用于使指令架构1500的动作同步。此外,单元1510可以包括ac端口1516。

存储器系统1540可以包括任何合适数量和种类的机制以用于为指令架构1500的处理需要存储信息。在一个实施例中,存储器系统1540可以包括加载存储单元1546以用于存储信息,诸如写入存储器或寄存器或从存储器或寄存器读回的缓冲器。在另一实施例中,存储器系统1540可以包括转换后备缓冲器(tlb)1545,其提供在物理地址与虚拟地址之间查找地址值。在又一实施例中,存储器系统1540可以包括存储器管理单元(mmu)1544以用于促进对虚拟存储器的访问。在再一实施例中,存储器系统1540可以包括预取器1543以用于在实际需要执行指令之前从存储器请求这些指令以减少等待时间。

指令架构1500执行指令的操作可以通过不同级来实现。例如,通过使用单元1510,指令预取级1530可以通过预取器1543访问指令。可以将被检索的指令存储在指令高速缓存1532中。预取级1530可以为快速循环模式实现选项1531,其中执行形成足够小以装入给定高速缓存的循环的一系列指令。在一个实施例中,可以实现此类执行而无需访问来自例如指令高速缓存1532的附加指令。对预取哪些指令的确定可以由例如分支预测单元1535作出,其可以访问全局历史1536中对执行的指示、对目标地址1537的指示、或返回栈1538的内容以确定接下来将执行代码的分支1557中的哪些指令。可能预取此类分支作为结果。分支1557可以通过如下所述的其他级的操作而产生。指令预取级1530可以将指令以及关于未来指令的任何预测提供到双指令解码级。

双指令解码级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的操作可以使得附加指令能被执行。可以由跟踪单元1575监视或调试指令集架构1500的性能。

图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、诸如usb3.0相机的相机1754、或以例如lpddr3标准实现的低功率双数据率(lpddr)存储器单元1715。这些组件可以各自以任何合适的方式来实现。

此外,在各实施例中,其他组件可以通过上文讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(als)1742、罗盘1743以及陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1736以及触板1730可以通信地耦合至ec1735。扬声器1763、头戴式耳机1764以及话筒1765可以通信地耦合至音频单元1762,音频单元可以进而通信地耦合至dsp1760。音频单元1762可以包括,例如,音频编解码器和d类放大器。sim卡1757可以通信地耦合至wwan单元1756。诸如wlan单元1750、蓝牙单元1752以及wwan单元1756的组件可以以下一代形状因数(ngff)实现。

本公开的实施例涉及用于执行针对向量寄存器的一个或多个向量操作的指令和处理逻辑,所述一个或多个向量操作中的至少一些对存储在向量寄存器中的包含多个元素的结构进行操作。图18是根据本公开的实施例的用于进行操作的指令和逻辑的示例系统1800的图示,所述操作用于得到同一类型的多个向量元素。

在一些应用中使用的数据结构可以包括可以单独存取的元素的元组。在一些情况下,这些类型的数据结构可以被组织为数组。在本公开的实施例中,这些数据结构中的多个数据结构可以存储在单个向量寄存器中。例如,每个数据结构都可以包括不同类型的多个数据元素,并且所述数据结构中的每一个都可以存储在向量寄存器内的不同“通道(lane)”中。在此上下文中,术语“通道”可以指向量寄存器的保持多个数据元素的固定宽度部分。例如,512位向量寄存器可以包括四个128位通道。在本公开的实施例中,这种数据结构内的单独数据元素可以被重新组织成类似元素的多个单独向量以便以相同的方式对类似元素进行操作。例如,可以执行一个或多个“get多个向量元素”指令以从数据结构中提取类似元素并且将所述类似元素一起存储在对应目的地向量中。在对数据元素中的至少一些进行操作之后,可以调用一个或多个其他指令以将单独向量中的数据元素置换回到其原始的元组数据结构中。

系统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可以包括一个或多个“vpget3”型指令,所述指令用于从存储在多个源向量寄存器中的三元素数据结构中得到同一类型的多个向量元素并且将所述向量元素一起存储在单个目的地向量寄存器中。在另一实施例中,指令流1802可以包括一个或多个“vpget4”型指令,所述指令用于从存储在多个源向量寄存器中的四元素数据结构中得到同一类型的多个向量元素并且将所述向量元素一起存储在单个目的地向量寄存器中。注意,指令流1802可以包括除了执行向量操作的那些指令之外的指令。

处理器1804可以包括前端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可以包括用于实施“vpget3”型指令的一种或多种形式的电路系统。在另一示例中,执行单元1816可以包括用于实施“vpget4”型指令的一种或多种形式的电路系统。以下更详细地描述了这些指令的示例实施方式。

在本公开的实施例中,处理器1804的指令集架构可以实施被限定为高级向量扩展512(avx-512)指令的一个或多个扩展向量指令。处理器1804可以隐式地或通过特定指令的解码和执行来识别这些扩展向量操作之一将被执行。在这种情况下,扩展向量操作可以被引导至执行单元1816的特定执行单元以供执行指令。在一个实施例中,指令集架构可以包括针对512位simd操作的支持。例如,由执行单元1816实施的指令集架构可以包括32个向量寄存器,其中每一个都是512位宽,并且支持高达512位宽的向量。由执行单元1816实施的指令集架构可以包括用于对目的地操作数进行条件执行和高效合并的八个专用掩码寄存器。至少一些扩展向量指令可以包括针对广播的支持。至少一些扩展向量指令可以包括针对嵌入式掩码的支持以实现预测。

至少一些扩展向量指令可以同时对存储在向量寄存器中的向量的每个元素应用相同的操作。其他扩展向量指令可以对多个源向量寄存器中的相应元素应用相同的操作。例如,可以由扩展向量指令对存储在向量寄存器中的紧缩数据项的各个数据元素中的每一个应用相同的操作。在另一示例中,扩展向量指令可以指定单个向量操作,所述单个向量操作有待对两个源向量操作数的对应数据元素执行以便生成目的地向量操作数。

在本公开的实施例中,至少一些扩展向量指令可以由处理器核内的simd协处理器来执行。例如,核1812内的执行单元1816中的一个或多个可以实施simd协处理器的功能。simd协处理器可以完全或部分地由图1至图17中所描述的元件来实施。在一个实施例中,指令流1802内的由处理器1804接收的扩展向量指令可以被引导至实施simd协处理器的功能的执行单元1816。

如图18所示,在一个实施例中,vpget3型指令可以包括{x/y/z}参数,所述参数指示将提取每个数据结构中的哪些数据元素。vpget3型指令还可以包括{尺寸}参数,所述参数指示每个数据结构中的数据元素的尺寸。在一个实施例中,所有数据元素都可以具有相同的尺寸和类型。在一个实施例中,vpget3型指令可以包括三个reg参数,这些参数标识指令的三个源向量寄存器,所述源向量寄存器之一还是指令的目的地向量寄存器。在一个实施例中,vpget3型指令可以包括{kn}参数,如果将应用掩码,则所述参数标识特定掩码寄存器。如果将应用掩码,则vpget3型指令可以包括指定掩码类型的{z}参数。在一个实施例中,vpget4型指令可以包括{x/y/z/w}参数,所述参数指示将提取每个数据结构中的哪些数据元素。vpget4型指令还可以包括{尺寸}参数,所述参数指示每个数据结构中的数据元素的尺寸。在一个实施例中,所有数据元素都可以具有相同的尺寸和类型。在一个实施例中,vpget4型指令可以包括三个reg参数,这些参数中的两个标识指令的两个源向量寄存器,并且这些参数中的一个标识指令的目的地向量寄存器。在一个实施例中,vpget4型指令可以包括即时参数,所述即时参数的值表示指令的目的地偏移量。在一个实施例中,vpget4型指令可以包括{kn}参数,如果将应用掩码,则所述参数标识特定掩码寄存器。如果将应用掩码,则vpget4型指令可以包括指定掩码类型的{z}参数。

图18所示的vpget3和vpget4型指令的参数中的一个或多个对于所述指令来说可以是固有的。例如,在不同实施例中,这些参数的任何组合都可以编码在所述指令的操作码格式的位或字段中。在其他实施例中,图18所示的vpget3和vpget4型指令的参数中的一个或多个对于所述指令来说可以是可选的。例如,在不同实施例中,这些参数的任意组合可以在指令被调用时指定。

图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协处理器1920可以被集成到包括执行单元、一组寄存器堆以及用于识别扩展simd指令集1916的指令的解码器的单个处理器核1900中。

图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。在另一实施例中,在avx-512指令集架构的开发之前实施的传统simd指令可以在扩展向量寄存器堆1914的ymm寄存器或xmm寄存器的子集上进行操作。例如,在一些实施例中,由一些传统simd指令进行的访问可能限于寄存器ymm0至ymm15或限于寄存器xmm0至xmm7。

在本公开的实施例中,指令集架构可以支持访问高达四个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可以将图20中所示的32个扩展向量寄存器zmm0至zmm31中的任何一个作为源操作数或目的地操作数来访问。在一些实施例中,扩展向量指令可以访问八个专用掩码寄存器中的任何一个。在一些实施例中,扩展向量指令可以访问十六个通用寄存器中的任何一个作为源操作数或目的地操作数。

在本公开的实施例中,对扩展向量指令的编码可以包括指定有待执行的特定向量操作的操作码。对扩展向量指令的编码可以包括标识八个专用掩码寄存器k0至k7中的任何一个的编码。当所标识掩码寄存器的每个位被应用于对应的源向量元素或目的地向量元素时,其可以管控向量操作的行为。例如,在一个实施例中,这些掩码寄存器中的七个(k1至k7)可以用于有条件地管控扩展向量指令的每数据元素计算操作。在本示例中,如果相应的掩码位未被置位,则针对给定向量元素不执行所述操作。在另一实施例中,掩码寄存器(k1至k7)可以用于有条件地管控对扩展向量指令的目的地操作数的每个元素的更新。在本示例中,如果相应的掩码位未被置位,则不会使用所述操作的结果更新给定目的地元素。

在一个实施例中,对扩展向量指令的编码可以包括指定有待应用于扩展向量指令的目的地(结果)向量的掩码类型的编码。例如,这种编码可以指定是否将合并掩码或零掩码应用于向量操作的执行。如果这种编码指定合并掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以保持在目的地向量中。如果这种编码指定零掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以用目的地向量中的零值来替代。在一个示例实施例中,掩码寄存器k0不被用作向量操作的预测操作数。在本示例中,在其他情况下将选择掩码k0的编码值可以替代地选择全为一的隐式掩码值,从而有效地禁用掩码。在本示例中,掩码寄存器k0可以用于将一个或多个掩码寄存器作为源操作数或目的地操作数的任何指令。

以下示出了扩展向量指令的使用和语法的一个示例:

vaddpszmm1,zmm2,zmm3

在一个实施例中,以上所示指令将对源向量寄存器zmm2和zmm3的所有元素应用向量加法运算。在一个实施例中,以上所示指令将把结果向量存储在目的地向量寄存器zmm1中。可替代地,以下示出了用于有条件地应用向量运算的指令:

vaddpszmm1{k1}{z},zmm2,zmm3

在此示例中,所述指令将对源向量寄存器zmm2和zmm3的、为其置位了掩码寄存器k1中的相应位的元素应用向量加法运算。在此示例中,如果{z}修饰符被置位,则可以使用值零来代替存储在目的地向量寄存器zmm1中的结果向量的、对应于掩码寄存器k1中未被置位的位的元素的值。否则,如果{z}修饰符未被置位,或者如果{z}修饰符未被指定,则可以保留存储在目的地向量寄存器zmm1中的结果向量的、对应于掩码寄存器k1中未被置位的位的元素的值。

在一个实施例中,一些扩展向量指令的编码可以包括用于指定对嵌入式广播的使用的编码。如果对于从存储器加载数据并且执行某种计算操作或数据移动操作的指令,包括了指定对嵌入式广播的使用的编码,则来自存储器的单个源元素可以跨有效源操作数的所有元素而广播。例如,当要在对源向量的所有元素应用的计算中使用同一标量操作数时,可以为向量指令指定嵌入式广播。在一个实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的尺寸的编码。例如,所述编码可以指定每个数据元素是字节、字、双字或四字等。在另一实施例中,对扩展向量指令的编码可以包括指定被紧缩到源向量寄存器中或有待紧缩到目的地向量寄存器中的数据元素的数据类型的编码。例如,所述编码可以指定数据表示单精度整数或双精度整数,或者多个所支持的浮点数据类型中的任何一种。

在一个实施例中,对扩展向量指令的编码可以包括指定用来访问源操作数或目的地操作数的存储器地址或存储器寻址模式的编码。在另一实施例中,对扩展向量指令的编码可以包括指定作为指令的操作数的标量整数或标量浮点数的编码。虽然本文中描述了多个特定的扩展向量指令及其编码,但这些仅仅是可以在本公开的实施例中实施的扩展向量指令的示例。在其他实施例中,可以在指令集架构中实施更多、更少或不同的扩展向量指令并且其编码可以包括更多、更少或不同的信息以控制其执行。

在许多应用中,被组织成可以单独存取的三个或四个元素的元组的数据结构是常见的。例如,在媒体应用中使用的许多编码方案中,rgb(红-绿-蓝)是一种常见格式。存储这种类型的信息的数据结构可以由三个数据元素(r分量、g分量和b分量)组成,所述数据元素被连续存储并且具有相同的尺寸(例如,所述数据元素可以全都是32位整数)。对于高性能计算应用中的编码数据来说常见的格式包括共同表示多维空间内的位置的两个或更多个坐标值。例如,数据结构可以存储表示2d空间内的位置的x和y坐标或者可以存储表示3d空间内的位置的x、y和z坐标。在这些和其他类型的应用中可能出现具有较高数量的元素的其他常见数据结构。

在一些情况下,这些类型的数据结构可以被组织为数组。在本公开的实施例中,这些数据结构中的多个数据结构可以存储在单个向量寄存器中,如上述xmm、ymm或zmm向量寄存器之一。在一个实施例中,这种数据结构内的单独数据元素可以被重新组织成之后可以在simd循环中使用的类似元素的向量,因为这些元素在数据结构本身中可能不被存储为彼此靠近。应用可以包括用于以相同的方式对一种类型的所有数据元素进行操作的指令以及用于以不同的方式对不同类型的所有数据元素进行操作的指令。在一个示例中,对于各自包括rgb颜色空间中的r分量、g分量和b分量的数据结构的数组,相比于对所述数组的行中的每一个中的g分量或b分量应用的计算操作,可以对所述数组的行中的每一个(每个数据结构)中的r分量应用不同的计算操作。在本公开的实施例中,为了对这些类型的分量中的单独分量进行操作,可以使用一个或多个向量get3指令来从rgb数据结构的数组中将r值、g值和b值提取到包含同一类型的元素的单独向量中。因此,所述向量中的一个可以包括所有r值;一个可以包括所有g值;并且一个可以包括所有b值。

在另一示例中,许多分子动力学应用对由xyzw数据结构的数组组成的近邻列表进行操作。在此示例中,所述数据结构中的每一个都可以包括x分量、y分量、z分量和w分量。在本公开的实施例中,为了对这些类型的分量中的单独分量进行操作,可以使用一个或多个向量get4指令来从xyzw数据结构的数组中将x值、y值、z值和w值提取到包含同一类型的元素的单独向量中。因此,所述向量中的一个可以包括所有x值;一个可以包括所有y值;一个可以包括所有z值;并且一个可以包括所有w值。在一些情况下,在对这些单独向量内的数据元素中的至少一些进行操作之后,应用可以包括将xyzw数据结构作为整体而进行操作的指令。例如,在更新单独向量中的x、y、z和w值中的至少一些之后,应用可以包括访问数据结构之一以检索xyzw数据结构或将其作为整体而进行操作的指令。在这种情况下,可以调用一个或多个其他指令以将xyzw值存储回其原始格式中。

在本公开的实施例中,用于执行由处理器核(如系统1800中的核1812)或由simd协处理器(如simd协处理器1910)实施的扩展向量操作的指令可以包括用于执行用于从包括不同类型的三个数据元素的数据结构中得到同一类型的数据元素的向量操作或者用于从包括不同类型的四个数据元素的数据结构中得到同一类型的数据元素的向量操作的指令。例如,这些指令可以包括一个或多个“vpget3”或“vpget4”指令。在本公开的实施例中,vpget3和vpget4指令可以用于从包括多种类型的元素的数据结构中提取不同类型的数据元素。vpget3和vpget4指令可以将所提取数据元素存储到包含存储器中的数据结构的不同数据元素的对应向量中。在一个实施例中,这些指令可以用于从其数据元素一起存储在一个或多个源向量寄存器内的连续位置中的数据结构中提取数据元素。在一个实施例中,多元素数据结构中的每一个都可以表示数组的行。

在本公开的实施例中,向量寄存器内的不同“通道”可以用于保持不同类型的数据元素。在一个实施例中,每个通道都保持单个类型的多个数据元素。在另一实施例中,保持在单个通道中的数据元素可以不属于同一类型,但所述数据元素可以由应用以相同的方式进行操作。例如,一个通道可以保持x值,一个通道可以保持y值等等。在此上下文中,术语“通道”可以指向量寄存器的保持将以相同的方式得以处理的多个数据元素的一部分,而不是向量寄存器的保持单个数据元素的一部分。在另一实施例中,向量寄存器内的不同“通道”可以用于保持不同数据结构的数据元素。在此上下文中,术语“通道”可以指向量寄存器的保持单个数据结构的多个数据元素的一部分。在此示例中,存储在每个通道中的数据元素可以属于两种或更多种不同类型。在向量寄存器的宽度为512位的一个实施例中,可以存在四个128位通道。例如,512位向量寄存器内的最低顺序的128位可以被称为第一通道,接下来的128位可以被称为第二通道等等。在此示例中,128位通道中的每一个都可以存储两个64位数据元素、四个32位数据元素、八个16位数据元素、或者四个8位数据元素。在向量寄存器的宽度为512位的另一实施例中,可以存在两个256位通道,所述通道中的每一个都存储对应数据结构的数据元素。在此示例中,256位通道中的每一个各自都可以存储高达128位的多个数据元素。

在一个实施例中,表示多个xyz型数据结构的数据可以存储在如zmm寄存器等扩展向量寄存器中。在此示例中,每个数据结构的x、y和z分量各自可以是32位。zmm寄存器中的每一个都可以将表示第一数据结构的数据元素存储在第一通道中、将表示第二数据结构的数据元素存储在第二通道中、将表示第三数据结构的数据元素存储在第三通道中、并且将表示第四数据结构的数据元素存储在第四通道中。在一个实施例中,xyz型数据结构可以共同存储在三个不同的向量寄存器中。例如,每个zmm寄存器都可以存储来自组成这三个数据结构的这48个数据元素当中的十六个32位数据元素。在一个实施例中,“vpget3”指令可以用于从共同存储在这三个源zmm寄存器中的这三个xyz型数据结构中提取x分量并且将所述分量存储到目的地向量寄存器中。在一个实施例中,源向量寄存器之一还可以充当目的地向量寄存器。在这种情况下,可以使用单一类型的所提取数据元素(这三个源向量寄存器中的所有数据结构的x分量)来覆写双用途向量寄存器中表示xyz型数据结构的源数据。在另一实施例中,目的地向量寄存器可以是如zmm寄存器等另一扩展向量寄存器。在此示例中,vpget3可以置换从源zmm寄存器中提取的数据元素以创建目的地向量。例如,由vpget3指令生成且由vpget3指令存储到目的地zmm寄存器中的目的地向量可以包括来自存储在这三个源zmm寄存器中的数据结构的、采用以下顺序的x数据元素:x1,x2,x3...x16。在此示例中,可以使用两个附加vpget3指令分别从这三个源zmm寄存器中的数据结构中提取y和z分量并且将所述分量存储到单独的目的地向量寄存器中。

在一个实施例中,表示十六个xyzw型数据结构的数据可以存储在如zmm寄存器等四个扩展向量寄存器中。在此示例中,每个数据结构的x、y、z和w分量各自都可以是32位。zmm寄存器中的每一个都可以将表示第一数据结构的数据元素存储在第一通道中、将表示第二数据结构的数据元素存储在第二通道中、将表示第三数据结构的数据元素存储在第三通道中、并且将表示第四数据结构的数据元素存储在第四通道中。在一个实施例中,“vpget4”指令可以用于从前两个源zmm寄存器中的每一个中的这四个xyzw型数据结构中提取x分量并且将所述分量存储到目的地向量寄存器的最低顺序半部中。在一个实施例中,源向量寄存器之一还可以充当目的地向量寄存器。在这种情况下,可以使用单一类型的所提取数据元素(这三个源向量寄存器中的所有数据结构的x分量)来覆写双用途向量寄存器中表示xyzw型数据结构的源数据。在另一实施例中,目的地向量寄存器可以是如zmm寄存器等另一扩展向量寄存器。在此示例中,vpget4可以置换从这两个源zmm寄存器中提取的数据元素以创建目的地向量。例如,由vpget4指令生成且由vpget4指令存储到目的地zmm寄存器中的目的地向量可以包括来自所述前两个源zmm寄存器的这四个通道的、采用以下顺序的x数据元素:x1,x2,x3...x8。在此示例中,第二vpget4指令可以用于从这三个和四个源zmm寄存器中的每一个中的这四个xyzw型数据结构中提取x分量并且(以与最低顺序位置的某一偏移量或不以任何偏移量)将所述分量存储到同一目的地向量寄存器的最高顺序半部或者存储到不同的目的地寄存器中。类似地,vpget4指令可以用于一次性从源zmm寄存器中的两个中的这四个xyzw型数据结构中提取y、z或w分量并且将所述分量存储在目的地向量寄存器的一半中。

图21是根据本公开的实施例的用于执行向量操作的操作的图示,所述向量操作用于得到同一类型的多个元素。在一个实施例中,系统1800可以执行用于执行向量get操作的指令。例如,可以执行vpget3指令或vpget4指令。所述指令可以包括任何适当数量和种类的操作数、位、标记、参数、或其他元素。在一个实施例中,vpget3和vpget4指令的编码可以包括相同字段中的一些或全部,并且对于这些指令的类似变体,可以采用相同的方式来填充这些公共字段。在一个实施例中,vpget3和vpget4指令的编码中的单个位或字段的值可以指示所述指令将从中提取数据元素的数据结构包含三个还是四个数据元素。在另一实施例中,vpget3和vpget4指令可以共享操作码,并且包括在对指令的调用中的指令参数可以指示所述指令将从中提取数据元素的数据结构包含三个还是四个数据元素。

在一个实施例中,对vpget3指令或vpget4指令的调用可以引用三个源向量寄存器。源向量寄存器中的每一个都可以是包含紧缩数据的扩展向量寄存器,所述紧缩数据表示两个或更多个数据结构的多个数据元素。数据结构中的每一个的数据元素可以存储在源向量寄存器中的连续位置中。对vpget3指令或vpget4指令的调用还可以引用目的地向量寄存器。目的地向量寄存器可以是扩展向量寄存器,在所述指令从存储在源向量寄存器内的数据结构中提取了同一类型的数据元素之后,所述数据元素可以存储到所述扩展向量寄存器中。在图21中展示的示例中,第一次引用的源向量寄存器还充当所述指令的目的地向量寄存器。在一个示例中,执行vpget3指令可以使源向量寄存器中的每个三元素数据结构内的同一位置中的数据元素被写入到在对vpget3指令的调用中引用的目的地向量寄存器中的连续位置中。类似地,执行vpget4指令可以使源向量寄存器中的每个四元素数据结构内的同一位置中的数据元素被写入到在对vpget4指令的调用中引用的目的地向量寄存器中的连续位置中。

在一个实施例中,对vpget3或vpget4指令的调用可以指定由存储在源向量寄存器中的数据表示的数据结构中的数据元素的尺寸。在另一实施例中,对vpget3或vpget4指令的调用可以指定存储在源向量寄存器中的数据结构内的待提取数据元素的位置。例如,对vpget3指令的调用可以包括指定应当从源向量寄存器中的每个数据结构中提取第一(x)、第二(y)、还是第三(z)元素的编码或参数。类似地,对vpget4指令的调用可以包括指定应当从源向量寄存器中的每个数据结构中提取第一(x)、第二(y)、第三(z)还是第四(w)元素的编码或参数。在一个实施例中,对vpget4指令的调用可以包括目的地偏移参数,所述目的地偏移参数指示目的地向量(以及目的地向量寄存器)内由vpget4指令提取的数据元素应当开始存储的位置。在一个实施例中,对vpget3或vpget4指令的调用可以指定将在将执行结果写入到目的地向量寄存器中时对所述执行结果应用的掩码寄存器。在又另一实施例中,对vpget3或vpget4的调用可以指定将对所述结果应用的掩蔽的类型,如合并-掩码或零-掩码。在仍其他实施例中,在对vpget3或vpget4指令的调用中可以引用更多、更少或不同的参数。

在图21所示的示例实施例中,在(1)处,可以由simd执行单元1912接收vpget3或vpget4指令及其参数(所述参数可以包括以下各项中的任何或全部项:上述源和目的地向量寄存器、对每个数据结构中的数据元素的尺寸的指示、对将提取每个数据结构中的哪些数据元素的指示、指定vpget4指令的目的地偏移量的参数、指定特定掩码寄存器的参数、或指定掩码类型的参数)。例如,在一个实施例中,vpget3或vpget4指令可以由核1812内的分配器1814发布给simd协处理器1910内的simd执行单元1912。在另一实施例中,vpget3或vpget4指令可以由主处理器1920的解码器1922发布给simd协处理器1910内的simd执行单元1912。vpget3或vpget4指令可以由simd执行单元1912逻辑地执行。

在此示例中,表示多个数据结构的紧缩数据可以存储在扩展向量寄存器堆1914内的第一源向量寄存器2101、第二源向量寄存器2102和第三源向量寄存器2103中。所述数据可以存储在这些扩展向量寄存器zmmn中的每一个中,使得组成数据结构中的每一个的数据元素一起存储在扩展向量寄存器中。例如,包括扩展向量寄存器2101的最低顺序位的第一通道可以存储第一数据结构的多个数据元素,包括扩展向量寄存器2101的接下来的最低顺序位的第二通道可以存储第二数据结构的多个数据元素等等。在此示例中,第一源向量寄存器2101还充当所述指令的目的地向量寄存器。

由simd执行单元1912执行vpget3或vpget4指令可以包括:在(2)处,获得表示存储在扩展向量寄存器堆1914中的第一源向量寄存器2101中的数据结构中的每一个的单个分量的数据元素。例如,vpget3或vpget4指令的参数可以将扩展向量寄存器2101标识为待由vpget3或vpget4指令存储到目的地向量寄存器中的数据的第一源,并且simd执行单元1912可以从存储在所标识第一源向量寄存器中的多个通道中的紧缩数据中提取指定数据元素。由simd执行单元1912执行vpget3或vpget4指令可以包括:在(3)处,获得表示存储在扩展向量寄存器堆1914中的第二源向量寄存器2102中的数据结构中的每一个的同一单个分量的数据元素。例如,vpget3或vpget4指令的参数可以将扩展向量寄存器2102标识为待由vpget3或vpget4指令存储到目的地向量寄存器中的数据的第二源,并且simd执行单元1912可以从存储在所标识第二源向量寄存器中的多个通道中的紧缩数据中提取指定数据元素。由simd执行单元1912执行vpget3或vpget4指令可以包括:在(4)处,获得表示存储在扩展向量寄存器堆1914中的第三源向量寄存器2103中的数据结构中的每一个的同一单个分量的数据元素。例如,vpget3或vpget4指令的参数可以将扩展向量寄存器2103标识为待由vpget3或vpget4指令存储到目的地向量寄存器中的数据的第三源,并且simd执行单元1912可以从存储在所标识第三源向量寄存器中的多个通道中的紧缩数据中提取指定数据元素。

由simd执行单元1912执行vpget3或vpget4指令可以包括:在(5)处,置换从存储在这三个所标识源向量寄存器中的数据结构内的指定位置中获得的源数据以包括在目的地向量中。在一个实施例中,置换由vpget3指令获得的数据可以包括:组装从彼此靠近的这三个源寄存器中提取的同一类型的数据元素以包括在目的地向量中。例如,从第一源向量寄存器中的第一数据结构中提取的数据元素可以彼此靠近地置于目的地向量中。在一个实施例中,置换由第一vpget4指令获得的数据可以包括:组装来自两个源向量寄存器的同一类型的数据元素并且(以偏移量0)将所述数据元素置于目的地寄存器的较低顺序半部中。随后,置换由第二vpget4指令获得的数据可以包括:组装来自两个其他源向量寄存器的同一类型的数据元素并且(以偏移量8)将所述数据元素置于目的地寄存器的较高顺序半部中,同时将目的地寄存器的较低顺序半部的内容保留为数据元素的附加源。

在一个实施例中,执行vpget3或vpget4指令可以包括:针对其数据作为紧缩数据被存储在这三个源向量寄存器2101、2102和2103中的数据结构中的每一个而重复图21所示的操作的步骤中的任何或全部步骤。在此示例中,在将从第一源向量寄存器中的第一数据结构中提取的数据元素置于目的地向量中之后,可以将从第一源向量寄存器中的剩余数据结构中提取的数据元素彼此靠近地置于目的地向量中。随后,可以将从第二源向量寄存器中的数据结构中提取的数据元素彼此靠近地置于目的地向量中,并且可以将从第三源向量寄存器中的数据结构中提取的数据元素彼此靠近地置于目的地向量中。例如,可以针对将从其中提取数据元素并且来自其中的数据元素将包括在目的地向量中的数据结构中的每一个而执行一次步骤(2)、(3)、(4)和(5)。在一个实施例中,对于每次附加迭代,simd执行单元1912可以从这三个源向量寄存器内的数据结构之一中的同一位置中提取数据元素并且将所述数据元素组装成彼此靠近以包括在目的地向量中。

在组装目的地向量之后,执行vpget3或vpget4指令可以包括:在(6)处,将目的地向量写入到扩展向量寄存器堆1914中由vpget3或vpget4指令的参数标识的目的地向量寄存器中,在这之后,可以引退vpget3或vpget4指令。在此示例中,被标识为第一源向量寄存器(2101)的向量寄存器还充当此指令的目的地(结果)向量寄存器。因此,可以通过目的地向量中的数据来覆写存储在向量寄存器2101中的源数据中的至少一些(取决于是否向目的地向量应用掩码)。在另一示例中,vpget3或vpget4指令的参数可以将另一扩展向量寄存器zmmn标识为vpget3或vpget4指令的目的地(结果)向量寄存器,并且simd执行单元1912可以将从这三个源向量寄存器(2101,2102,2103)中的数据结构中提取的数据元素存储到所标识目的地向量寄存器中。在一个实施例中,为vpget4指令指定的偏移参数可以指示目的地向量寄存器中、从两个源向量寄存器中一次性提取的数据元素将被存储的位置。在一个实施例中,将目的地向量写入到目的地向量寄存器中可以包括对目的地向量应用合并-掩码操作,条件是在对vpget3或vpget4指令的调用中指定了这种掩码操作。在另一实施例中,将目的地向量写入到目的地向量寄存器中可以包括对目的地向量应用零-掩码操作,条件是在对vpget3或vpget4指令的调用中指定了这种掩码操作。

在一个实施例中,因为来自每个数据结构的数据元素都是从源向量寄存器中提取的并且被组装成彼此靠近,所以所述数据元素可以存储到目的地向量寄存器中。例如,一旦已经从第一数据结构中提取了指定数据元素并且已经将所述指定数据元素组装到了目的地向量中,就可以将这些所提取数据元素写入到目的地向量寄存器中的连续位置中。随后,一旦已经从第二数据结构中提取了指定数据元素并且已经将所述指定数据元素组装到了目的地向量中,就可以将这些附加的所提取数据元素写入到目的地向量寄存器中的连续位置中等等。

在一个实施例中,扩展simd指令集架构可以实施用于从紧缩向量寄存器中提取同一类型的数据元素的操作的多个版本或多种形式,包括例如以下所示的版本或形式:

vpget3{x/y/z}{size}{kn}{z}(reg,reg,reg)

vpget4{x/y/z/w}{size}{kn}{z}(reg,reg,reg,imm)

在vpget3和vpget4指令的这些示例形式中,vpget3指令的参数{x/y/z}的值可以指示所述指令应当提取每个三元素数据结构中的数据元素中的哪个数据元素。类似地,vpget4指令的参数{x/y/z/w}的值可以指示所述指令应当提取每个四元素数据结构中的数据元素中的哪个数据元素。在这些示例中,第一reg参数可以标识充当所述指令的第一源向量寄存器并且还充当所述指令的目的地向量寄存器的扩展向量寄存器。在这些示例中,第二reg参数可以标识所述指令的第二源向量寄存器,并且第三reg参数可以标识所述指令的第三源向量寄存器。在这些示例中,“尺寸”修饰符可以指定源向量寄存器中的数据元素的尺寸和/或类型。这可以对应于由存储在源向量寄存器中的紧缩数据表示的每个数据结构中的数据元素的尺寸和/或类型。在一个实施例中,指定尺寸/类型可以是{b/w/d/q/ps/pd}之一。

在这些示例中,可选指令参数“kn”可以标识多个掩码寄存器中的特定一个掩码寄存器。当将向vpget3或vpget4指令的目的地(结果)向量应用掩码时,可以指定此参数。在掩码将被应用的实施例中(例如,如果针对指令指定了掩码寄存器),可选指令参数“z”可以指示是否应当应用归零掩码。在一个实施例中,如果这个可选参数被置位,则可以应用零掩码,并且如果这个可选参数未被置位或如果这个可选参数被省略,则可以应用合并掩码。在以上所示的vpget4指令的示例形式中,即时参数可以指定vpget4指令的整数目的地偏移值。此目的地偏移值可以指示目的地向量寄存器中、所述指令的结果应当被写入的起始位置。在其他实施例(未示出)中,vpget3或vpget4指令可以包括指示源向量寄存器中的每一个中的通道或数据结构的数量(例如,4、3或2)。

图22a至图22d展示了根据本公开的实施例的vpget3和vpget4指令的对应形式的操作。更具体地,图22a展示了不具有掩码的示例vpget3xd指令(“vpget3xd(reg,reg,reg)”指令)的操作。在此示例中,共同存储在三个源向量寄存器(例如,zmmn寄存器)2101、2102和2103中的紧缩数据包括十六个数据结构的数据元素,所述数据结构中的每一个都包括三个32位双字。在一个实施例中,所述数据结构中的每一个都可以表示数组的行。在此示例中,每个数据结构(或行)中都包括x分量、y分量和z分量。在执行vpget3xd指令之前,数组中的每个数据结构(行)的数据元素已经加载到了源向量寄存器之一中的96位中,或者跨越源向量寄存器中的两个的96位中。在此示例中,第一源向量寄存器2101存储前五个数据结构,所述数据结构各自包括三个32位双字:x分量、y分量和z分量。在此示例中,第一源向量寄存器2101的最高顺序32位还存储第六数据结构的第一数据元素(x6),而第六数据结构的剩余数据元素(y6和z6)存储在第二源向量寄存器2102的最低顺序64位中。在此示例中,第二源向量寄存器2102还存储接下来的四个数据结构(各自包括x分量、y分量和z分量)以及第十一数据结构的前两个元素(x11和y11)。最终,第三源向量寄存器2103存储第十一数据结构的剩余数据元素(z11)以及各自包括x分量、y分量和z分量的最后五个数据结构。

在一个实施例中,vpget3xd指令可以用于提取表示共同存储在这三个源向量寄存器2101、2102和2103中的数据结构中的每一个的x分量的数据元素。例如,执行vpget3xd指令可以引起从这三个源向量寄存器中提取存储在这三个源向量寄存器中的每个数据结构内的第一位置中的数据元素(x分量)。执行vpget3xd指令可以使这些所提取数据元素存储到目的地向量寄存器2103中的连续位置中。

图22b展示了根据本公开的实施例的具有掩码的示例vpget3yd指令(“vpget3xdknz(reg,reg,reg)”指令)的操作。在此示例中,源向量寄存器2101、2102和2103可以是图22a所示的相同源向量寄存器。在此示例中,这些源向量寄存器预加载有与如上所述的十六个三元素数据结构相对应的数据元素。在一个实施例中,vpget3yd指令可以用于提取表示共同存储在这三个源向量寄存器2101、2102和2103中的数据结构中的每一个的y分量的数据元素。例如,执行vpget3yd指令可以引起从这三个源向量寄存器中提取存储在这三个源向量寄存器中的每个数据结构内的第二位置中的数据元素(y分量)并将其置于目的地向量2201中。然而,在此示例中,在将目的地向量2201存储到目的地向量寄存器2103中的连续位置中之前,可以对所述目的地向量应用掩码操作。在此示例中,指定掩码寄存器2202在第四、第五、第十、第十四和第十五位(例如,位3、4、9、13和14)中包括零。因此,不是将目的地向量内的这些位置中的数据元素存储到目的地向量寄存器中,而是可以将零写入到目的地向量寄存器中的相应位置中。在一个实施例中,可以执行vpget3z指令以提取表示共同存储在这三个源向量寄存器2101、2102和2103中的数据结构中的每一个的z分量的数据元素。例如,执行vpget3zd指令可以引起从这三个源向量寄存器中提取存储在这三个源向量寄存器中的每个数据结构内的第三位置中的数据元素(z分量)并将其置于目的地向量中。

图22c展示了根据本公开的实施例的具有目的地偏移参数值0的示例vpget4xd指令(“vpget4xd(reg,reg,reg,0)”指令)的操作。在此示例中,还充当目的地向量寄存器的第一源向量寄存器2101不包含表示vpget4xd指令的源数据元素的任何数据。然而,在执行vpget4xd指令之后,可以保留第一源向量寄存器2101中的数据中的一些。在此示例中,存储在这两个源向量寄存器2102和2103中的每一个中的紧缩数据包括四个数据结构的数据元素,所述数据结构中的每一个都包含四个32位双字。在一个实施例中,这四个数据结构中的每一个都可以表示数组的行。在此示例中,每个数据结构(或行)中都包括x分量、y分量、z分量和w分量。在执行vpget4xd指令之前,数组中的每个数据结构(行)的数据元素已经加载到了第二源向量寄存器(扩展向量寄存器zmmn2102)和第三源向量寄存器(扩展向量寄存器zmmn2103)的对应128位通道中。在此示例中,源向量寄存器2102的最低顺序128位(其可以被称为第二源向量寄存器的第一通道)包含表示存储在源向量寄存器中的第一数据结构的数据元素的四个32位双字:x1、y1、z1和w1。在此示例中,第二源向量寄存器2102的接下来的最低顺序128位(其可以被称为第二源向量寄存器的第二通道)包含表示存储在源向量寄存器中的第二数据结构的数据元素的四个32位双字:x2、y2、z2和w2。类似地,第二源向量寄存器2102的接下来的最低顺序128位(其可以被称为第二源向量寄存器的第三通道)包含表示存储在源向量寄存器中的第三数据结构的数据元素的四个32位双字:x3、y3、z3和w3;并且第二源向量寄存器2101的最高顺序128位(其可以被称为第二源向量寄存器的第四通道)包含表示存储在源向量寄存器中的第四数据结构的数据元素的四个32位双字:x4、y4、z4和w4。

在此示例中,第三源向量寄存器2103的最低顺序128位(其可以被称为第三源向量寄存器的第一通道)包含表示存储在源向量寄存器中的第五数据结构的数据元素的四个32位双字:x5、y5、z5和w5。在此示例中,第三源向量寄存器2103的接下来的最低顺序128位(其可以被称为第三源向量寄存器的第二通道)包含表示存储在源向量寄存器中的第六数据结构的数据元素的四个32位双字:x6、y6、z6和w6。类似地,第三源向量寄存器2103的接下来的最低顺序128位(其可以被称为第三源向量寄存器的第三通道)包含表示存储在源向量寄存器中的第七数据结构的数据元素的四个32位双字:x7、y7、z7和w7;并且第三源向量寄存器2102的最高顺序128位(其可以被称为第三源向量寄存器的第四通道)包含表示存储在源向量寄存器中的第八数据结构的数据元素的四个32位双字:x8、y8、z8和w8。

在一个实施例中,具有偏移量0的vpget4xd指令可以用于从这两个源向量寄存器2102和2103中提取x数据元素。执行vpget4xd指令可以使这些所提取数据元素(以偏移量0)存储到目的地向量寄存器2101中从最低顺序位置处开始的连续位置中。在此示例中,通过执行vpget4xd指令,目的地向量寄存器2101的上部部分不被使用,并且其内容可以不变。

图22d展示了根据本公开的实施例的第二vpget4xd指令(“vpget4xd(reg,reg,reg,8)”指令)的操作。在此示例中,第二vpget4xd指令具有目的地偏移参数值8。在此示例中,还充当此指令的目的地向量寄存器的第一源向量寄存器2101的最低顺序八个位置包含由图22c所示且以上所述的vpget4xd指令存储到第一源向量寄存器2101中的结果数据。因此,第一源向量寄存器2101可以向第二vpget4xd指令的目的地向量贡献此结果数据。在此示例中,存储在这两个源向量寄存器2102和2103中的每一个中的紧缩数据可以包括四个附加数据结构的数据元素,所述数据结构中的每一个都包含四个32位双字。在一个实施例中,这四个数据结构中的每一个都可以表示数组的行。在此示例中,每个数据结构(或行)中都包括x分量、y分量、z分量和w分量。更具体地,源向量寄存器2102已经加载有第九、第十、第十一和第十二数据结构的数据元素,并且源向量寄存器2103已经加载有第十三、第十四、第十五和第十六数据结构的数据元素。

在一个实施例中,具有偏移量8的vpget4xd指令可以用于从已经加载到这两个源向量寄存器2102和2103中的附加数据结构中提取x数据元素。执行vpget4xd指令可以使这些所提取数据元素(以偏移量8)存储到目的地向量2203中从第九位置处开始的连续位置中。在此示例中,目的地向量2203的较低顺序部分未被第二vpget4xd指令使用。在此示例中,仅通过执行第二vpget4xd指令而产生的数据元素被第二vpget4xd指令存储到目的地向量寄存器2101中,并且所述数据元素被存储在目的地向量寄存器2101的上半部中(在与目的地向量2203相同的位置中)。在下半部目的地向量寄存器2101中,第一vpget4xd指令的结果保持不变。

因此,在执行第一和第二vpget4xd指令之后,目的地向量寄存器可以包含十六个源数据结构的由这些vpget4xd指令一次八个地提取的所有x分量。

在一个实施例中,可以执行附加vpget4指令以一次性提取存储在两个源向量寄存器2101和2102中的数据结构的所有y分量、z分量或w分量。作为执行每个这种指令的结果,所提取数据元素可以彼此靠近地存储在目的地向量寄存器的一半中(取决于为所述指令指定的目的地偏移参数)。通过执行针对相同数据结构分量(y、z或w分量)、但具有不同目的地偏移值(0或8)的两个vpget4指令,可以从来自四个源向量寄存器的高达十六个数据结构中提取类似分量。

图22a至图22d所示的vpget3和vpget4指令的形式仅仅是这些指令可以采用的许多形式的示例。在其他实施例中,vpget3和vpget4指令可以采用各种其他形式中的任何形式,其中,指令修饰符值和指令参数值的不同组合包括在指令中或者在vpget3或vpget4指令被调用时被指定。例如,如果为vpget3或vpget4指令指定了合并-掩码,则可以保留目的地向量寄存器中、与那个掩码寄存器相对应的数据元素在其他情况下会被存储到的位置的内容。

图23展示了根据本公开的实施例的用于从不同源寄存器中的数据结构中得到同一类型的多个向量元素的示例方法2300。方法2300可以由图1至图22所示的元件中的任何元件实施。方法2300可以由任何适当标准开始并且可以在任何适当的点开始操作。在一个实施例中,方法2300可以在2305处开始操作。方法2300可以包括比所示步骤更多或更少的步骤。另外,方法2300可以采用与以下所示顺序不同的顺序来执行其步骤。方法2300可以在任何适当的步骤处终止。另外,方法2300可以在任何适当的步骤处重复操作。方法2300的步骤中的任何步骤可以与方法2300的其他步骤并行或者与其他方法的步骤并行地执行。此外,方法2300可以被执行多次以执行从不同源寄存器中的数据结构中得到同一类型的多个向量元素。

在2305处,在一个实施例中,可以接收用于执行用于从存储在三个源向量寄存器中的数据结构中得到数据元素子集的操作的指令(例如,vpget3或vpget4指令)并对其进行解码。在2310处,可以将所述指令以及所述指令的一个或多个参数引导到simd执行单元以供执行。在一些实施例中,指令参数可以包括三个源向量寄存器的标识符,所述标识符中的至少两个包含紧缩数据、目的地向量寄存器(其可以与第一源向量寄存器相同)的标识符、对应当提取每个数据结构的数据元素中的哪个数据元素的指示、对由紧缩数据表示的每个数据结构中的数据元素的尺寸的指示、对由紧缩数据表示的每个数据结构中的数据元素的数量的指示、目的地偏移参数值、标识特定掩码寄存器的参数、或者指定掩码类型的参数。

在2315处,可以从存储在第一源向量寄存器中的数据结构内的给定位置中提取指定数据元素子集中的第一数据元素。在一个实施例中,所述指令的编码(操作码)可以指示将由所述指令提取每个数据结构的第一、第二、第三还是第四数据元素。在一个实施例中,所述指令的编码中的单个位或字段的值可以指示在将由所述指令从中提取数据元素的数据结构中包括三个还是四个数据元素。

如果(在2320处)确定与所提取数据元素相对应的目的地掩码位组被置位或者还未为vpget3或vpget4操作指定掩码,则在2325处,可以根据为所述指令指定的偏移参数(如果有的话)的值将所提取数据元素存储在第一源/目的地向量寄存器中的下一可用位置中。在一个实施例中,在所标识掩码寄存器中可以存在针对源向量寄存器中的每个数据元素(例如,针对待存储在目的地向量寄存器中的每个数据元素)的对应位。在另一实施例中,在所标识掩码寄存器中可以存在针对源向量寄存器中的每个通道或数据结构的对应位。在又另一实施例中,在所标识屏蔽寄存器中可以存在针对目的地向量寄存器中的每个通道的对应位。如果(在2320处)确定与所提取数据元素相对应的目的地掩码位未被置位,并且如果(在2330处)确定指定了零-掩码,则在2335处,可以将零存储在目的地向量寄存器中、在其他情况下会存储所提取向量元素的位置中。如果(在2320处)确定与所提取数据元素相对应的目的地掩码位未被置位,并且如果(在2330处)确定未指定零-掩码(例如,如果指定了合并-掩码,或者既未指定零-掩码,也未指定合并-掩码),则在2340处,可以保留当前存储在目的地向量寄存器内在其他情况下会存储所提取向量元素的位置中的值。

如果在2350处确定在待从源向量寄存器中提取的指定源数据子集中存在更多数据元素,则在2360处,可以从源向量寄存器之一中提取来自这三个源向量寄存器的指定源数据子集中的下一数据元素。在这种情况下,可以对新提取的数据元素重复2320至2340中所示的操作中的至少一些。在一个实施例中,可以将2320至2360中所示的操作重复一次或多次以从存储在源向量寄存器中的数据结构中提取指定源数据子集中的所有数据元素。例如,可以重复这些操作,直到已经从源向量寄存器中的数据结构中提取了给定类型的所有数据元素。一旦不存在将从源向量寄存器中提取的附加数据元素(如在2350处确定的),就可以在2370处引退所述指令。

在本公开的实施例中,在执行vpget3或vpget4指令之前,可以执行第一指令序列以将多个数据结构的数据元素预加载到源向量寄存器中。随后,可以执行包括多个vpget3和vpget4指令的第二指令序列以将不同类型的数据元素提取到单独的向量寄存器中。通过以下示例伪代码展示了用于预加载针对vpget3指令的数据的第一指令序列。在此示例中,假设的是,在执行第一指令序列之前,十六个xyz型数据结构的数据元素在存储器中的连续位置中被存储为x1y1z1、x2y2z2等。

vpmovdzmm3,[mem]

//zmm3=x1y1z1x2y2z2…x5y5z5x6

vpmovdzmm4,[mem+64]

//zmm4=y6z6x7y7z7…x10y10z10x11y11

vpmovdzmm5,[mem+128]

//zmm5=z11x12y12z12…x16y16z16

在此示例中,三个向量移动指令用于使用表示总共十六个xyz型数据结构的数据元素来填充三个扩展向量寄存器(zmm3至zmm5)中的每一个。更具体地,这些向量移动指令用于将存储器中的对应数据结构的三个32位值(x分量、y分量和z分量)填充到扩展向量寄存器之一中的96位中或者跨越扩展向量寄存器中的两个的96位中。通过以下示例伪代码展示了第二指令序列的示例。

vpmovdzmm1,zmm3

vpget3xdzmm1,zmm4,zmm5

//zmm1=x1...x16

vpmovdzmm2,zmm3

vpget3ydzmm2,zmm4,zmm5

//zmm2=y1...y16

vpget3zdzmm3,zmm4,zmm5

//zmm3=z1...z16

在此示例中,vpget3指令的vpget3d形式指定每个数据元素都是32位四字。在此示例中,一旦向量寄存器zmm3至zmm5已经填充有表示这十六个数据结构的数据元素,则所述向量寄存器可以充当这三个vpget3d指令的源向量寄存器。在此示例中,执行第一vpget3d指令(在这种情况下,vpget3xd指令)以从源向量寄存器中提取所有x分量并且将所述分量置于目的地向量寄存器中。类似地,执行第二vpget3d指令(在这种情况下,vpget3yd指令)以从源向量寄存器中提取所有y分量并且将所述分量置于第二目的地向量寄存器中,并且执行第三vpget3d指令(在这种情况下,vpget3zd指令)以从源向量寄存器中提取所有z分量并且将所述分量置于第三目的地向量寄存器中。注意,由于每个指令的第一源向量寄存器还充当所述指令的目的地向量寄存器,所以在执行所述指令之前,目的地将被写入其中的源向量寄存器的原始内容被复制到另一向量寄存器中。作为执行这三个指令的结果,向量寄存器zmm1至zmm3中的每一个都可以存储从源向量寄存器zmm3至zmm5中提取的同一类型的十六个数据元素(例如,分别地,十六个x分量、十六个y分量或十六个z分量)。

图24a和图24b中展示了向量get3型操作的一个示例应用。更具体地,图24a展示了根据本公开的实施例的用于利用多个向量get3从不同的源中获得多个数据结构的数据元素并置换所述数据元素的示例方法2400。在此示例方法中,三个源向量寄存器预加载有表示十六个数据结构的紧缩数据元素,在这之后,多个向量get3指令被调用以提取不同类型的数据元素并将所述数据元素存储在单独的目的地向量寄存器中。方法2400可以由图1至图22中所示的元件中的任何一个来实施。方法2400可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2400可以在2405处发起操作。方法2400可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2400可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2400可以在任何合适的步骤处终止。此外,方法2400可以在任何合适的步骤处重复操作。方法2400可以采用与方法2400中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。此外,方法2400可以被执行多次以利用多个向量get3操作来从不同的源中获得多个数据结构的数据元素并置换所述数据元素。

在2405处,在一个实施例中,可以开始执行包括多个扩展向量指令的指令流。在2410处,可以使三个512位源向量寄存器加载有十六个三元素数据结构,使得每个数据结构的32位x、y和z分量都跨这三个源向量寄存器被共同放置成彼此靠近。每个数据结构中的这三个数据元素可以属于不同类型。在一个实施例中,可以将数据元素从存储器加载到源向量寄存器中。在另一实施例中,可以将数据元素从通用寄存器加载到源向量寄存器中。在又另一实施例中,可以将数据元素从其他向量寄存器加载到向量寄存器中。

在2415处,在一个实施例中,可以将来自第一源向量寄存器的这十六个最低顺序数据元素复制到vpget3xd指令的第一源/目的地向量寄存器中。在2420处,可以执行vpget3xd指令以从第一源/目的地寄存器中以及第二和第三源向量寄存器中的每个数据结构中提取x分量并且将所提取数据元素置于第一源/目的地向量寄存器中。在2425处,在一个实施例中,可以将来自第一源向量寄存器的这十六个最低顺序数据元素复制到vpget3yd指令的第二源/目的地向量寄存器中。在2430处,可以执行vpget3yd指令以从第二源/目的地寄存器中以及第二和第三源向量寄存器中的每个数据结构中提取y分量并且将所提取数据元素置于第二源/目的地向量寄存器中。

在2435处,可以执行vpget3zd指令以从第三源/目的地寄存器中以及第二和第三源向量寄存器中的每个数据结构中提取z分量并且将所提取数据元素置于第三源/目的地向量寄存器中。在此示例中,在执行方法2400之后,第一、第二和第三目的地向量寄存器中的每一个都可以存储从原始的三个源向量寄存器中表示的这十六个数据结构中的每一个内的同一位置中提取的同一类型的数据元素。

图24b进一步展示了图24a所示的示例方法2400。在此示例中,在执行上述向量指令序列之前,向量寄存器zmm1(2402)存储十六个xyz数据结构的数据元素中的第一三个;向量寄存器zmm2(2404)存储这十六个xyz数据结构的数据元素中的第二三个;并且向量寄存器zmm3(2406)存储这十六个xyz数据结构的剩余数据元素。在执行图24b所示的指令序列之后,向量寄存器zmm1(2402)存储这十六个数据结构的所有十六个x分量;向量寄存器zmm2(2404)存储这十六个数据结构的所有十六个y分量;并且向量寄存器zmm3(2406)存储这十六个数据结构的所有十六个z分量。

通过以下示例伪代码展示了用于预加载针对vpget4指令的数据的第一指令序列。在此示例中,假设的是,在执行第一指令序列之前,十六个xyzw型数据结构的数据元素在存储器中的连续位置中被存储为x1y1z1w1、x2y2z2w2等。

vpmovdzmm5,[mem]

//zmm5=x1y1z1w1x2y2z2w2…x4y4z4w4

vpmovdzmm6,[mem+64]

//zmm6=x5y5z5w5…x8y8z8w8

vpmovdzmm7,[mem+128]

//zmm7=x9y9z9w9…x12y12z12w12

vpmovdzmm8,[mem+192]

//zmm8=x13y13z13w13…x16y16z16w16

在此示例中,四个向量移动指令用于使用表示总共十六个xyzw型数据结构的数据元素来填充四个扩展向量寄存器(zmm5至zmm8)中的每一个。更具体地,这些向量移动指令用于将存储器中的每个对应数据结构的这四个32位值(x分量、y分量、z分量和w分量)填充到扩展向量寄存器之一中的128位通道中。通过以下示例伪代码展示了用于使用多个vpget4指令来创建类似元素的向量的第二指令序列。

vpget4xdzmm1,zmm5,zmm6,0

//zmm1=x1...x8,uuuuuuuu====字母u意指未使用的元素

vpget4xdzmm1,zmm7,zmm8,8

//zmm1=x1...x16

vpget4ydzmm2,zmm5,zmm6,0

//zmm2=y1...y8,uuuuuuuu

vpget4ydzmm2,zmm7,zmm8,8

//zmm2=y1...y16

vpget4zdzmm3,zmm5,zmm6,0

//zmm3=z1...z8,uuuuuuuu

vpget4zdzmm3,zmm7,zmm8,8

//zmm3=z1...z16

vpget4wdzmm4,zmm5,zmm6,0

//zmm4=w1...w8,uuuuuuuu

vpget4wdzmm4,zmm7,zmm8,8

//zmm4=w1...w16

在此示例中,vpget4指令的vpget4d形式指定每个数据元素都是32位四字。在此示例中,一旦向量寄存器zmm5至zmm8已经填充有表示这十六个数据结构的数据元素,则所述向量寄存器可以充当这四个vpget4d指令的源向量寄存器。在此示例中,执行第一vpget4d指令(在这种情况下,具有偏移量0的vpget4xd指令)以从前两个源向量寄存器中提取所有x分量并且将所述分量置于第一目的地向量寄存器的下半部中。随后,执行第二vpget4d指令(在这种情况下,具有偏移量8的vpget4xd指令)以从第三和第四源向量寄存器中提取所有x分量并且将所述分量置于同一(第一)目的地向量寄存器的上半部中。类似地,执行第二对vpget3d指令(在这种情况下,具有不同目的地偏移值的一对vpget3yd指令)以从源向量寄存器中提取所有y分量并且将所述分量分别置于第二目的地向量寄存器的下半部和上半部中;执行第三对vpget3d指令(在这种情况下,具有不同目的地偏移值的一对vpget3zd指令)以从源向量寄存器中提取所有z分量并且将所述分量分别置于第三目的地向量寄存器的下半部和上半部中;并且执行第四对vpget3d指令(在这种情况下,具有不同目的地偏移参数值的一对vpget3wd指令)以从源向量寄存器中提取所有w分量并且将所述分量分别置于第四目的地向量寄存器的下半部和上半部中。

在此示例中,由于每个指令的第一源向量寄存器还充当所述指令的目的地向量寄存器,而每个指令仅影响目的地寄存器的一半,所以由每一对中的第一vpget3d指令写入到目的地向量寄存器中的每一个中的结果数据可以对所述对中的第二vpget3d指令的结果有贡献。作为执行这八个指令的结果,向量寄存器zmm1至zmm4中的每一个都可以存储从源向量寄存器zmm5至zmm8中提取的同一类型的十六个数据元素(例如,分别地,十六个x分量、十六个y分量、十六个z分量、或十六个w分量)。

图25a和图25b中展示了向量get4型操作的一个示例应用。更具体地,图25a展示了根据本公开的实施例的用于利用多个向量get4从不同的源中获得多个数据结构的数据元素并置换所述数据元素的示例方法2500。在此示例方法中,四个源向量寄存器预加载有表示十六个数据结构的紧缩数据元素,在这之后,多个向量get4指令被调用以提取不同类型的数据元素并将所述数据元素存储在单独的目的地向量寄存器中。方法2500可以由图1至图22所示的元件中的任何元件实施。方法2500可以由任何适当标准开始并且可以在任何适当的点开始操作。在一个实施例中,方法2500可以在2505处开始操作。方法2500可以包括比所示步骤更多或更少的步骤。另外,方法2500可以采用与以下所示顺序不同的顺序来执行其步骤。方法2500可以在任何适当的步骤处终止。另外,方法2500可以在任何适当的步骤处重复操作。方法2500的步骤中的任何步骤可以与方法2500的其他步骤并行或者与其他方法的步骤并行地执行。此外,方法2500可以被执行多次以利用多个向量get4操作来从不同的源中获得多个数据结构的数据元素并置换所述数据元素。

在2505处,在一个实施例中,可以使四个源向量寄存器中的每一个加载有多个四元素数据结构,使得每个数据结构的32位x、y、z和w分量都彼此靠近地置于这四个源向量寄存器之一中。在2510处,在一个实施例中,可以执行第一vpget4xd指令以从第一和第二源向量寄存器中的数据结构中提取x分量并且(不以任何偏移量)将所述分量置于第一源/目的地向量寄存器中在这八个最低顺序位置中。在2515处,在一个实施例中,可以执行第二vpget4xd指令以从第三和第四源向量寄存器中的数据结构中提取x分量并且(以偏移量8)将所述分量置于第一源/目的地向量寄存器中在这八个最高顺序位置中。在2520处,可以执行第一vpget4yd指令以从第一和第二源向量寄存器中的数据结构中提取y分量并且(不以任何偏移量)将所述分量置于第二源/目的地向量寄存器中在这八个最低顺序位置中。在2525处,在一个实施例中,可以执行第二vpget4yd指令以从第三和第四源向量寄存器中的数据结构中提取y分量并且(以偏移量8)将所述分量置于第二源/目的地向量寄存器中在这八个最高顺序位置中。

在2530处,在一个实施例中,可以执行第一vpget4zd指令以从第一和第二源向量寄存器中的数据结构中提取z分量并且(不以任何偏移量)将所述分量置于第三源/目的地向量寄存器中在这八个最低顺序位置中。在2535处,在一个实施例中,可以执行第二vpget4zd指令以从第三和第四源向量寄存器中的数据结构中提取z分量并且(以偏移量8)将所述分量置于第三源/目的地向量寄存器中在这八个最高顺序位置中。在2540处,在一个实施例中,可以执行第一vpget4wd指令以从第一和第二源向量寄存器中的数据结构中提取w分量并且(不以任何偏移量)将所述分量置于第四源/目的地向量寄存器中在这八个最低顺序位置中。在2545处,在一个实施例中,可以执行第二vpget4wd指令以从第三和第四源向量寄存器中的数据结构中提取w分量并且(以偏移量8)将所述分量置于第四源/目的地向量寄存器中在这八个最高顺序位置中。

在此实施例中,在执行方法2500之后,第一、第二、第三和第四目的地向量寄存器中的每一个都可以存储从在原始的四个源向量寄存器中表示的这十六个数据结构中的每一个内的同一位置中提取的同一类型的数据元素。

图25b进一步展示了图25a所示的示例方法2500。在此示例中,在执行上述向量指令序列之前,向量寄存器zmm5(2502)存储十六个xyzw数据结构中的第一四个的数据元素;向量寄存器zmm6(2504)存储这十六个xyzw数据结构中的第二四个的数据元素;向量寄存器zmm7(2506)存储这十六个xyzw数据结构中的接下来的四个;并且向量寄存器zmm8(2508)存储这十六个xyzw数据结构中的最后四个。在执行图25b所示的指令序列之后,向量寄存器zmm1(2512)存储这十六个数据结构的所有十六个x分量;向量寄存器zmm2(2514)存储这十六个数据结构的所有十六个y分量;向量寄存器zmm3(2516)存储这十六个数据结构的所有十六个z分量;并且向量寄存器zmm4(2518)存储这十六个数据结构的所有十六个w分量。

在本公开的其他实施例中,可以执行其他vpget3和/或vpget4操作序列以从具有不同数量数据元素的数据结构集合中提取同一类型的数据元素的向量。在本公开的其他实施例中,可以执行其他vpget3和/或vpget4操作序列以从不同数量的数据结构中提取同一类型的数据元素的向量。在本公开的仍其他实施例中,可以执行其他vpget3和/或vpget4操作序列以从具有各种步幅的数据结构集合中提取同一类型的数据元素的向量。

虽然许多示例描述了对存储在扩展向量寄存器(zmm寄存器)中的紧缩数据元素进行操作的vpget3或vpget4指令的多种形式,但是在其他实施例中,这些指令可以对存储在具有少于512位的向量寄存器中的紧缩数据元素进行操作。例如,如果vpget3或vpget4指令的源和/或目的地向量包括256位或更少,则vpget3或vpget4指令可以对ymm寄存器或xmm寄存器进行操作。

在上述示例中的许多示例中,每种分量类型的数据元素相对较小(例如,32位),并且存在足够少的所述数据元素以便所有数据元素都可以存储在作为vpget3或vpget4指令的目的地向量寄存器的单个zmm寄存器中。在其他实施例中,可以存在足够的每种分量类型的数据元素以便(根据数据元素的尺寸)所述数据元素可以填充多个zmm目的地寄存器。例如,可以存在值x值的多于512位、值y值的多于512位等等。在一个实施例中,所产生数据结构的对应子集的组成分量可以由多个vpget3或vpget4指令填充到多个zmm寄存器中的每一个中。在其他实施例中,可以存在足够少的每种分量类型的数据元素以便(根据数据元素的尺寸)所述数据元素可以纳入到xmm或ymm目的地寄存器中。

如以上示例所示,不像可以从源操作数中取得数据并将所述数据不变地存储到目的地操作数中的标准get指令,本文所述的vpget3和vpget4操作可以用于提取数据元素并且置换一起存储在源向量寄存器内的多个数据结构的数据元素以便在将所述数据存储到其目的地操作数中之前分离出表示每个数据结构的不同分量的数据元素。以上多个示例描述了使用vpget3和vpget4指令来提取表示存储器中的多个数据结构(如数组)的组成分量的数据元素。在其他实施例中,这些操作可以更一般地用于从源向量寄存器内的不同位置中提取紧缩数据元素并且在将向量寄存器的内容存储到目的地位置中时根据所述紧缩数据元素被提取的位置而置换所述紧缩数据元素,而不论数据元素如何(或甚至是否)彼此相关。

本文中公开的机制的实施例可以以硬件、软件、固件或这些实施途径的组合来实施。本公开的实施例可以被实施为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、以及至少一个输出装置。

可以将程序代码应用于输入指令以执行在此描述的功能并生成输出信息。所述输出信息可以以已知的方式应用于一个或多个输出装置。为了本申请的目的,处理系统可以包括具有处理器的任何系统,如例如;数字信号处理器(dsp)、微控制器、专用集成电路(asic)、或多处理器。

程序代码可以以高级程序或面向对象的编程语言来实施,以与处理系统通信。如果需要,程序代码还可以以汇编或机器语言实施。事实上,在此描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。

可以由机器可读介质上所存储的表示性指令来实施至少一个实施例的一个或多个方面,所述指令代表处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文中所描述的技术的逻辑。这种表示(被称为“ip核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。

这种机器可读存储介质可以包括但不限于:由机器或装置制造或形成的制品的非暂态有形安排,包括如硬盘的存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(cd-rom)、可覆盖致密盘(cd-rw)和磁光盘;半导体装置,比如,只读存储器(rom);随机存取存储器(ram),比如,动态随机存取存储器(dram)、静态随机存取存储器(sram);可擦除可编程只读存储器(eprom);闪存;电可擦除可编程只读存储器(eeprom);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。

因此,本公开的实施例还可以包括包含指令或包含设计数据(比如硬件描述语言(hdl))的非暂态有形机器可读介质,所述非暂态有形机器可读介质限定本文中描述的结构、电路、设备、处理器和/或系统特征。这类实施例也可以被称为程序产品。

在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为有待由核处理的一个或多个其他指令。可以在软件、硬件、固件或其组合中实施指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。

因此,公开了用于执行根据至少一个实施例的一条或多条指令的技术。虽然已经描述并在附图中示出了某些示例性实施例,但应当理解的是,此类实施例仅是说明性的并且不限制其他实施例,并且这类实施例不限于所示和所描述的特定构造和安排,因为在研究本公开时本领域普通技术人员将想到各种其他修改。在发展迅速且无法轻易预见进一步改进的此技术领域中,在不违背本公开的原理或所附权利要求书的范围的情况下,在技术进步的帮助下,所公开的实施例在安排和细节上可轻易更改。

本公开的一些实施例包括一种处理器。在这些实施例的至少一些实施例中,所述处理器可以包括:前端,用于接收指令;解码器,用于对所述指令进行解码;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括:第一源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第二源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第一逻辑,用于从待存储在所述第一源向量寄存器中的每个元组内的特定位置中提取对应数据元素,所述特定位置取决于所述指令的编码;第二逻辑,用于从待存储在所述第二源向量寄存器中的每个元组内的所述特定位置中提取对应数据元素;第三逻辑,用于将待从所述第一源向量寄存器中提取的所述数据元素存储在目的地向量寄存器中;以及第四逻辑,用于将待从所述第二源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述核可以进一步包括:第三源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第五逻辑,用于从待存储在所述第三源向量寄存器中的每个元组内的所述特定位置中提取对应数据元素;以及第六逻辑,用于将待从所述第三源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中。在以上实施例中的任何实施例中,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都用于表示数据结构,并且所述数据结构包括不同类型的至少三个数据元素。在以上实施例中的任何实施例中,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都包括不同类型的三个数据元素;待存储在每个元组内的相同位置中的数据元素将属于同一类型;并且所述指令的所述编码用于指定待提取的所述数据元素的类型。结合以上实施例中的任何实施例,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都包括不同类型的四个数据元素;待存储在每个元组内的相同位置中的数据元素将属于同一类型;所述指令的所述编码用于指定在每个元组内将从中提取所述数据元素的所述特定位置;并且所述第三逻辑用于将待从所述第一源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中从取决于将为所述指令指定的偏移参数的位置处开始的连续位置中。在以上实施例中的任何实施例中,所述目的地向量寄存器可以是所述源向量寄存器之一。在以上实施例中的任何实施例中,所述第一源寄存器还可以是所述目的地寄存器。结合以上实施例中的任何实施例,所述核可以进一步包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,待存储在所述目的地向量寄存器中的数据元素将被存储到所述目的地向量寄存器中;并且对于所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被存储到所述目的地向量寄存器中的数据元素将不被存储到所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作使用零来代替将在其他情况下存储在所述目的地向量中的数据元素。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保留所述目的地向量寄存器中、数据元素在其他情况下会被存储在其处的位置中的当前值。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定每个元组中的数据元素的数量。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定存储在所述第一源向量寄存器内将从中提取数据元素的元组的数量。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定将从存储在所述第一源向量寄存器内的所述元组中的每一个中提取的所述数据元素的尺寸。在以上实施例中的任何实施例中,所述核可以包括:单指令多数据(simd)协处理器,用于实施对所述指令的执行。在以上实施例中的任何实施例中,所述处理器可以包括向量寄存器堆,所述向量寄存器堆包括所述源向量寄存器。

本公开的一些实施例包括一种方法。在这些实施例中的至少一些中,所述方法可以包括在处理器中:接收第一指令;对所述第一指令进行解码;执行所述第一指令;以及引退所述第一指令。执行所述第一指令可以包括从存储在第一源向量寄存器中的多个数据结构中的每一个内的特定位置中提取对应数据元素,所述特定位置取决于所述第一指令的编码;从存储在第二源向量寄存器中的多个数据结构中的每一个内的所述特定位置中提取对应数据元素;将从所述第一源向量寄存器中提取的所述数据元素存储在第一目的地向量寄存器中;将从所述第二源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中;以及引退所述指令。结合以上实施例中的任何实施例,所述方法可以进一步包括:从存储在所述第三源向量寄存器中的多个数据结构中的每一个内的所述特定位置中提取对应数据元素;以及将从所述第三源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中。在以上实施例中的任何实施例中,存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个数据结构都可以包括不同类型的三个数据元素;存储在每个数据结构内的相同位置中的数据元素可以属于同一类型;并且所述指令的所述编码可以指定待提取的所述数据元素的类型。组合以上实施例中的任何实施例,存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个数据结构都可以包括不同类型的四个数据元素;存储在每个数据结构内的相同位置中的数据元素可以属于同一类型;所述指令的所述编码可以指定每个数据结构内将从中提取所述数据元素的所述特定位置;并且存储从所述第一和第三源向量寄存器中提取的所述数据元素可以包括:将从所述第一和第三源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中从取决于为所述第一指令指定的偏移参数的位置处开始的连续位置中。在以上实施例中的任何实施例中,所述目的地向量寄存器可以是所述源向量寄存器之一。在以上实施例中的任何实施例中,所述第一源寄存器还可以是所述目的地寄存器。结合以上实施例中的任何实施例,所述方法可以包括:当所述目的地向量被存储到所述目的地向量寄存器中时向所述目的地向量应用掩码操作,使得:对于所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,待存储在所述目的地向量寄存器中的数据元素将被存储到所述目的地向量寄存器中;并且对于所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被存储到所述目的地向量寄存器中的数据元素将不被存储到所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述方法可以包括:当所述目的地向量被存储到所述目的地向量寄存器中时向所述目的地向量应用掩码操作,使得:对于所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作使用零来代替被彼此靠近地置于所述目的地向量中的两个或更多个数据元素。结合以上实施例中的任何实施例,所述方法可以包括:当所述目的地向量被存储到所述目的地向量寄存器中时向所述目的地向量应用掩码操作,使得:对于所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保留所述目的地向量寄存器中、被彼此靠近地置于所述目的地向量中的两个或更多个数据元素在其他情况下会被写入到其处的位置中的当前值。结合以上实施例中的任何实施例,所述方法可以包括:根据为所述第一指令指定的参数值确定所述数据结构中的每一个中的数据元素的数量。结合以上实施例中的任何实施例,所述方法可以包括:根据为所述第一指令指定的参数值确定在所述第一源向量寄存器内将从中提取数据元素的数据结构的数量。结合以上实施例中的任何实施例,所述方法可以包括:根据为所述第一指令指定的参数值确定将从存储在所述第一源向量寄存器内的所述数据结构中的每一个中提取的所述数据元素的尺寸。在以上实施例中的任何实施例中,所述处理器可以包括单指令多数据(simd)协处理器,所述simd协处理器实施对所述第一指令的执行。结合以上实施例中的任何实施例,所述方法可以进一步包括在执行所述第一指令之前:执行第二指令,包括:将多个数据结构的数据元素加载到所述第一源向量寄存器中,每个数据结构都包括不同类型的三个数据元素;执行第三指令,包括:将多个数据结构的数据元素加载到所述第二源向量寄存器中,每个数据结构都包括不同类型的三个数据元素;以及执行第四指令,包括:将多个数据结构的数据元素加载到第三源向量寄存器中,每个数据结构都包括不同类型的三个数据元素。在以上实施例中的任何实施例中,执行所述第一指令可以包括:从存储在所述三个源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取第一类型的对应数据元素;以及将所述第一类型的所提取数据元素存储在所述第一目的地向量寄存器中。结合以上实施例中的任何实施例,所述方法可以进一步包括:在执行所述第一指令之后:执行第五指令,包括:从存储在所述三个源向量寄存器中的所述数据结构中的每一个内取决于所述第五指令的编码的位置中提取第二类型的对应数据元素;以及将所述第二类型的所述数据元素存储在第二目的地向量寄存器中;以及执行第六指令,包括:从存储在所述三个源向量寄存器中的所述数据结构中的每一个内取决于所述第六指令的编码的位置中提取第三类型的对应数据元素;以及将所述第三类型的所述数据元素存储在第三目的地向量寄存器中。结合以上实施例中的任何实施例,所述方法可以进一步包括在执行所述第一指令之前:执行第二指令,包括:将多个数据结构的数据元素加载到所述第一源向量寄存器中,每个数据结构都包括不同类型的四个数据元素;执行第三指令,包括:将多个数据结构的数据元素加载到所述第二源向量寄存器中,每个数据结构都包括不同类型的四个数据元素;以及执行第四指令,包括:将多个数据结构的数据元素加载到第三源向量寄存器中,每个数据结构都包括不同类型的四个数据元素;以及执行第五指令,包括:将多个数据结构的数据元素加载到第四源向量寄存器中,每个数据结构都包括不同类型的四个数据元素。在以上实施例中的任何实施例中,执行所述第一指令可以包括:从存储在所述第一和第二源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取第一类型的对应数据元素;以及将从所述第一和第二源向量寄存器中提取的所述第一类型的所述数据元素存储在所述第一目的地向量寄存器的较低顺序部分中。结合以上实施例中的任何实施例,所述方法可以进一步包括在执行所述第一指令之后:执行第六指令,包括:从存储在所述第三和第四源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取所述第一类型的对应数据元素;以及将从所述第三和第四源向量寄存器中提取的所述第一类型的所述数据元素存储在所述第一目的地向量寄存器的较高顺序部分中;以及对于第二数据元素类型、第三数据元素类型和第四数据元素类型中的每个给定数据元素类型,执行对应的一对指令。执行所述一对指令中的所述第一指令包括:从存储在所述第一和第二源向量寄存器中的所述数据结构中的每一个内取决于所述一对指令中的所述第一指令的编码的位置中提取所述给定数据元素类型的对应数据元素;将从所述第一和第二源向量寄存器中提取的所述给定类型的所述数据元素存储在所述给定数据元素类型的目的地向量寄存器的较低顺序部分中。执行所述一对指令中的所述第二指令包括:从存储在所述第三和第四源向量寄存器中的所述数据结构中的每一个内取决于所述一对指令中的所述第二指令的所述第二指令的编码的位置中提取所述给定数据元素类型的对应数据元素;以及将从所述第三和第四源向量寄存器中提取的所述给定类型的所述数据元素存储在所述给定数据元素类型的所述目的地向量寄存器的较高顺序部分中。

本公开的一些实施例包括一种系统。在这些实施例中的至少一些中,所述系统可以包括:前端,用于接收指令;解码器,用于对所述指令进行解码;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括:第一源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第二源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第一逻辑,用于从待存储在所述第一源向量寄存器中的每个元组内的特定位置中提取对应数据元素,所述特定位置取决于所述指令的编码;第二逻辑,用于从待存储在所述第二源向量寄存器中的每个元组内的所述特定位置中提取对应数据元素;第三逻辑,用于将待从所述第一源向量寄存器中提取的所述数据元素存储在目的地向量寄存器中;以及第四逻辑,用于将待从所述第二源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述核可以进一步包括:第三源向量寄存器,用于存储至少两个元组的数据元素,每个元组都包括至少三个数据元素;第五逻辑,用于从待存储在所述第三源向量寄存器中的每个元组内的所述特定位置中提取对应数据元素;以及第六逻辑,用于将待从所述第三源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中。在以上实施例中的任何实施例中,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都用于表示数据结构,并且所述数据结构包括不同类型的至少三个数据元素。在以上实施例中的任何实施例中,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都包括不同类型的三个数据元素;待存储在每个元组内的相同位置中的数据元素将属于同一类型;并且所述指令的所述编码用于指定待提取的所述数据元素的类型。结合以上实施例中的任何实施例,待存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个元组都包括不同类型的四个数据元素;待存储在每个元组内的相同位置中的数据元素将属于同一类型;所述指令的所述编码用于指定在每个元组内将从中提取所述数据元素的所述特定位置;并且所述第三逻辑用于将待从所述第一源向量寄存器中提取的所述数据元素存储在所述目的地向量寄存器中从取决于将为所述指令指定的偏移参数的位置处开始的连续位置中。在以上实施例中的任何实施例中,所述目的地向量寄存器是所述源向量寄存器之一。在以上实施例中的任何实施例中,所述第一源寄存器还是所述目的地寄存器。结合以上实施例中的任何实施例,所述核可以进一步包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,待存储在所述目的地向量寄存器中的数据元素将被存储到所述目的地向量寄存器中;并且对于所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被存储到所述目的地向量寄存器中的数据元素将不被存储到所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作使用零来代替将在其他情况下存储在所述目的地向量中的数据元素。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于在待从所述第一源向量寄存器和所述第二源向量寄存器中提取的所述数据元素被存储在所述目的地向量寄存器中时应用掩码操作,使得:对于所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保留所述目的地向量寄存器中、数据元素在其他情况下会被存储在其处的位置中的当前值。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定每个元组中的数据元素的数量。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定存储在所述第一源向量寄存器内将从中提取数据元素的元组的数量。结合以上实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于根据为所述指令指定的参数值确定将从存储在所述第一源向量寄存器内的所述元组中的每一个中提取的所述数据元素的尺寸。在以上实施例中的任何实施例中,所述核可以包括:单指令多数据(simd)协处理器,用于实施对所述指令的执行。在以上实施例中的任何实施例中,所述系统可以包括处理器。在以上实施例中的任何实施例中,所述系统可以包括向量寄存器堆,所述向量寄存器堆包括所述源向量寄存器。

本公开的一些实施例包括一种用于执行指令的系统。在这些实施例中的至少一些中,所述系统可以包括用于进行以下操作的装置:接收第一指令;对所述第一指令进行解码;执行所述第一指令;以及引退所述第一指令。用于执行所述第一指令的所述装置可以包括用于从存储在第一源向量寄存器中的多个数据结构中的每一个内的特定位置中提取对应数据元素的装置,所述特定位置取决于所述第一指令的编码;用于从存储在第二源向量寄存器中的多个数据结构中的每一个内的所述特定位置中提取对应数据元素的装置;用于将从所述第一源向量寄存器中提取的所述数据元素存储在第一目的地向量寄存器中的装置;以及用于将从所述第二源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于从存储在所述第三源向量寄存器中的多个数据结构中的每一个内的所述特定位置中提取对应数据元素的装置;以及用于将从所述第三源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中的装置。在以上实施例中的任何实施例中,存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个数据结构都可以包括不同类型的三个数据元素;存储在每个数据结构内的相同位置中的数据元素可以属于同一类型;并且所述指令的所述编码可以指定待提取的所述数据元素的类型。组合以上实施例中的任何实施例,存储在所述第一源向量寄存器中以及所述第二源向量寄存器中的每个数据结构都可以包括不同类型的四个数据元素;存储在每个数据结构内的相同位置中的数据元素可以属于同一类型;所述指令的所述编码可以指定每个数据结构内将从中提取所述数据元素的所述特定位置;并且存储从所述第一和第三源向量寄存器中提取的所述数据元素可以包括:将从所述第一和第三源向量寄存器中提取的所述数据元素存储在所述第一目的地向量寄存器中从取决于为所述第一指令指定的偏移参数的位置处开始的连续位置中。在以上实施例中的任何实施例中,所述目的地向量寄存器可以是所述源向量寄存器之一。在以上实施例中的任何实施例中,所述第一源寄存器还可以是所述目的地寄存器。结合以上实施例中的任何实施例,所述系统可以包括:用于当所述目的地向量被存储到所述目的地向量寄存器中时进行以下操作的装置:向所述目的地向量应用掩码操作,使得:对于所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,待存储在所述目的地向量寄存器中的数据元素将被存储到所述目的地向量寄存器中;并且对于所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被存储到所述目的地向量寄存器中的数据元素将不被存储到所述目的地向量寄存器中。结合以上实施例中的任何实施例,所述系统可以包括:用于当所述目的地向量被存储到所述目的地向量寄存器中时进行以下操作的装置:向所述目的地向量应用掩码操作,使得:对于所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作使用零来代替被彼此靠近地置于所述目的地向量中的两个或更多个数据元素。结合以上实施例中的任何实施例,所述系统可以包括:用于当所述目的地向量被存储到所述目的地向量寄存器中时进行以下操作的装置:向所述目的地向量应用掩码操作,使得:对于所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保留所述目的地向量寄存器中、被彼此靠近地置于所述目的地向量中的两个或更多个数据元素在其他情况下会被写入到其处的位置中的当前值。结合以上实施例中的任何实施例,所述系统可以包括:用于根据为所述第一指令指定的参数值确定所述数据结构中的每一个中的数据元素的数量的装置。结合以上实施例中的任何实施例,所述系统可以包括:用于根据为所述第一指令指定的参数值确定在所述第一源向量寄存器内将从中提取数据元素的数据结构的数量的装置。结合以上实施例中的任何实施例,所述系统可以包括:用于根据为所述第一指令指定的参数值确定将从存储在所述第一源向量寄存器内的所述数据结构中的每一个中提取的所述数据元素的尺寸的装置。在以上实施例中的任何实施例中,所述处理器可以包括单指令多数据(simd)协处理器,所述simd协处理器实施对所述第一指令的执行。结合以上实施例中的任何实施例,所述系统可以进一步包括用于在执行所述第一指令之前执行第二指令的装置:所述装置包括:用于将多个数据结构的数据元素加载到所述第一源向量寄存器中的装置,每个数据结构都包括不同类型的三个数据元素;用于执行第三指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到所述第二源向量寄存器中的装置,每个数据结构都包括不同类型的三个数据元素;以及用于执行第四指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到第三源向量寄存器中的装置,每个数据结构都包括不同类型的三个数据元素。在以上实施例中的任何实施例中,用于执行所述第一指令的所述装置可以包括:用于从存储在所述三个源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取第一类型的对应数据元素的装置;以及用于将所述第一类型的所提取数据元素存储在所述第一目的地向量寄存器中的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括:用于在执行所述第一指令之后执行第五指令的装置,所述装置包括:用于从存储在所述三个源向量寄存器中的所述数据结构中的每一个内取决于所述第五指令的编码的位置中提取第二类型的对应数据元素的装置;以及用于将所述第二类型的所述数据元素存储在第二目的地向量寄存器中的装置;以及用于执行第六指令的装置,所述装置包括:用于从存储在所述三个源向量寄存器中的所述数据结构中的每一个内取决于所述第六指令的编码的位置中提取第三类型的对应数据元素的装置;以及用于将所述第三类型的所述数据元素存储在第三目的地向量寄存器中的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括在执行所述第一指令之前执行第二指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到所述第一源向量寄存器中的装置,每个数据结构都包括不同类型的四个数据元素;用于执行第三指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到所述第二源向量寄存器中的装置,每个数据结构都包括不同类型的四个数据元素;以及用于执行第四指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到第三源向量寄存器中的装置,每个数据结构都包括不同类型的四个数据元素;以及用于执行第五指令的装置,所述装置包括:用于将多个数据结构的数据元素加载到第四源向量寄存器中,每个数据结构都包括不同类型的四个数据元素。在以上实施例中的任何实施例中,用于执行所述第一指令的所述装置可以包括:用于从存储在所述第一和第二源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取第一类型的对应数据元素的装置;以及用于将从所述第一和第二源向量寄存器中提取的所述第一类型的所述数据元素存储在所述第一目的地向量寄存器的较低顺序部分中的装置。结合以上实施例中的任何实施例,所述系统可以进一步包括用于在执行所述第一指令之后执行第六指令的装置,所述装置包括:用于从存储在所述第三和第四源向量寄存器中的所述数据结构中的每一个内的所述特定位置中提取所述第一类型的对应数据元素的装置;以及用于将从所述第三和第四源向量寄存器中提取的所述第一类型的所述数据元素存储在所述第一目的地向量寄存器的较高顺序部分中的装置;以及对于第二数据元素类型、第三数据元素类型和第四数据元素类型中的每个给定数据元素类型,用于执行对应的一对指令的装置。用于执行所述一对指令中的所述第一指令的所述装置包括:用于从存储在所述第一和第二源向量寄存器中的所述数据结构中的每一个内取决于所述一对指令中的所述第一指令的编码的位置中提取所述给定数据元素类型的对应数据元素的装置;以及用于将从所述第一和第二源向量寄存器中提取的所述给定类型的所述数据元素存储在所述给定数据元素类型的目的地向量寄存器的较低顺序部分中的装置。用于执行所述一对指令中的所述第二指令的所述装置包括:用于从存储在所述第三和第四源向量寄存器中的所述数据结构中的每一个内取决于所述一对指令中的所述第二指令的所述第二指令的编码的位置中提取所述给定数据元素类型的对应数据元素的装置;以及用于将从所述第三和第四源向量寄存器中提取的所述给定类型的所述数据元素存储在所述给定数据元素类型的所述目的地向量寄存器的较高顺序部分中的装置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1