快速向量动态存储器冲突检测的制作方法

文档序号:11519462阅读:208来源:国知局
快速向量动态存储器冲突检测的制造方法与工艺
发明领域本公开涉及处理逻辑、微处理器和相关联的指令集架构领域,所述指令集架构当由处理器或其他处理逻辑执行时执行逻辑操作、数学操作或其他功能操作。相关技术说明许多应用具有大量的数据级并行性,并且应当能够受益于单指令多数据(simd)支持。在simd执行中,单条指令同时在多个数据元素上进行操作。这通常通过扩展诸如寄存器和算术逻辑单元(alu)等各种资源的宽度来实现,允许它们分别保持或操作多个数据元素。然而,大多数这样的应用最初被设计为标量进程,即被配置为用于一次处理一个指令和一个数据元素的单指令单数据(sisd)。将标量进程转换为simd进程(即,“向量化”)可以提供操作改进,包括缩短的处理时间和增强的资源利用率。然而,重要的是确保由于数据内的冲突和依赖性而在必要时保持标量程序次序。附图说明实施例以举例的方式被展示并且不限于附图中的图,在附图中:图1a是框图,展示了根据实施例的示例性有序获取、解码、引退流水线和示例性寄存器重命名、乱序发布/执行流水线两者;图1b是框图,展示了根据实施例的有序获取、解码、引退核的示例性实施例以有待包含在处理器中的示例性寄存器重命名、乱序发布/执行架构核的示例性实施例两者;图2a和图2b是更特定的示例性有序核架构的框图;图3是具有集成存储器控制器和专用逻辑的单核处理器和多核处理器的框图;图4展示了根据实施例的系统的框图;图5展示了根据实施例的第二系统的框图;图6展示了根据实施例的第三系统的框图;图7展示了根据实施例的片上系统(soc)的框图;图8展示了对照根据实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;图9是框图,示出了根据实施例的示例性向量之间的运行时数据冲突;图10是根据实施例的用于计算停止位向量的逻辑的框图;图11是示例性冲突向量的矩阵表示;图12是有向非循环图,展示了根据实施例的分区向量的计算;图13是根据实施例;图14是根据实施例;图15是根据实施例;图16a和图16b是框图,展示了根据实施例的通用向量友好指令格式及其指令模板;图17a至图17d是框图,展示了根据本发明的示例性实施例的专用向量友好指令格式;并且图18是根据实施例的寄存器架构的框图。具体实施方式以下描述了处理器核架构,接着是对示例性处理器和计算机架构以及用于使用向量处理操作来动态地检测存储器冲突的指令的指令格式的描述。阐述了许多具体的细节以便提供对本发明的以下描述的实施例的彻底理解。然而,对于本领域技术人员而言,可以在不具有这些具体细节中的一些细节的情况下实践本实施例将是明显的。在其他情况下,以框图的形式示出公知的结构和设备,以避免模糊本发明实施例的基本原理。处理器核能够以不同的方式实现,用于不同的目的以及在不同的处理器中。例如,这样的核的实施方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实施方式可以包括:1)cpu,所述cpu包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,所述协处理器包括旨在主要用于图形和/或科学的一个或多个专用核(例如,许多集成核处理器)。这样的不同处理器导致不同的计算机系统架构,所述计算机系统架构可以包括:1)位于与cpu分开的芯片上的协处理器;2)位于与cpu相同的封装中的分开管芯上的协处理器;3)位于与cpu相同的裸片上的协处理器(在这种情况下,这样的协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑或专用核);以及4)芯片上的系统,所述系统可以包括位于相同裸片上的所描述的cpu(有时称为(多个)应用核或(多个)应用处理器)、上述协处理器、以及附加功能。示例性核架构有序和乱序核框图图1a是框图,展示了根据实施例的示例性有序流水线和示例性寄存器重命名、乱序发布/执行流水线两者。图1b是框图,展示了根据实施例的有序架构核的示例性实施例以有待包含在处理器中的示例性寄存器重命名、乱序发布/执行架构核的示例性实施例两者。图1a和图1b中的实线框展示了有序流水线和有序核,而虚线框的可选添加展示了寄存器重命名乱序发布/执行流水线和核。假定有序方面是乱序方面的子集,将描述乱序方面。在图1a中,处理器流水线100包括获取阶段102、长度解码阶段104、解码阶段106、分配阶段108、重命名阶段110、调度(也称为分派或发布)阶段112、寄存器读取/存储器读取阶段114、执行阶段116、回写/存储器写阶段118、异常处理阶段122以及提交阶段124。图1b示出了处理器核190,所述处理器核包括耦合到执行引擎单元150的前端单元130,并且所述执行引擎单元和前端单元都耦合到存储器单元170。核190可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核心、超长指令字(vliw)核、或混合或替代核类型。作为又一选项,核190可以是专用核,例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等。前端单元130包括耦合到指令高速缓存单元134的分支预测单元132,所述指令高速缓存单元被耦合到指令翻译后备缓冲器(tlb)136,所述指令转换后备缓冲器被耦合到指令获取单元138,所述指令获取单元被耦合到解码单元140。解码单元140(或解码器)可以对指令进行解码并且生成从原始指令解码出的、或以其他方式反映原始指令或从原始指令衍生出的作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号。解码单元140可以使用各种不同的机制来实现。合适机制的示例包括但不限于:查找表、硬件实施方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核190包括微代码rom或存储用于某些宏指令的微码的其他介质(例如,在解码单元140中或者在前端单元130内)。解码单元140被耦合到执行引擎单元150中的重命名/分配器单元152。执行引擎单元150包括耦合到引退单元154的重命名/分配器单元152和一组一个或多个调度器单元156。(多个)调度器单元156表示任何数量的不同调度器,包括保留站、中央指令窗口等。(多个)调度器单元156被耦合到物理寄存器堆单元158。(多个)物理寄存器堆单元158各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点状态(例如,作为有待执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元158包括向量寄存器单元、写掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、以及通用寄存器。物理寄存器堆单元158被引退单元154重叠,所述引退单元用于展示可以实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来堆,(多个)历史缓冲区,以及(多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元154和(多个)物理寄存器堆单元158被耦合到(多个)执行群集160。(多个)执行群集160包括一组一个或多个执行单元162和一组一个或多个存储器访问单元164。执行单元162可以执行各种操作(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可以仅包括执行所有功能的一个执行单元或多个执行单元。所述(多个)调度器单元156、(多个)物理寄存器堆单元158、以及(多个)执行集群160被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,所述流水线各自具有其本身的调度器单元、(多个)物理寄存器堆单元、和/或执行集群,并且在分开的存储器访问流水线的情况下,实现了其中只有该流水线的执行集群具有(多个)存储器访问单元164的某些实施例)。还应当理解的是,在使用分开的流水线的情况下,这些流水线中的一者或多者可以是乱序发布/执行流水线,并且其余的是有序流水线。所述一组存储器访问单元164被耦合到存储器单元170,所述存储器单元包括耦合到数据高速缓存单元174的数据tlb单元172,所述数据高速缓存单元被耦合到二级(l2)高速缓存单元176。在一个示例性实施例中,存储器访问单元164可以包括各自被耦合到存储器单元170中的数据tlb单元172的加载单元、存储地址单元、以及存储数据单元。指令高速缓存单元134被进一步耦合到存储器单元170中的二级(l2)高速缓存单元176。l2高速缓存单元176被耦合到一个或多个其他级的高速缓存并且最终被耦合到主存储器。作为示例,示例性寄存器重命名乱序发布/执行核架构可以如下实现流水线100:1)指令获取单元138执行获取阶段102和长度解码阶段104;2)解码单元140执行解码阶段106;3)重命名/分配器单元152执行分配阶段108和重命名阶段110;4)(多个)调度器单元156执行调度阶段112;5)(多个)物理寄存器堆单元158和存储器单元170执行寄存器读/写阶段114;执行集群160执行执行阶段116;6)存储器单元170和(多个)物理寄存器堆单元158执行回写/存储器写阶段118;7)各种单元可以涉及异常处理阶段122;以及8)引退单元154和(多个)物理寄存器堆单元158执行提交阶段124。核190可以支持一条或多条指令集(例如,x86指令集(具有已经添加了较新版本的一些扩展);加利福尼亚州桑尼维尔的mips技术公司的mips指令集;英格兰剑桥的arm控股公司的指令集(具有任选的附加扩展,例如neon)),包括本文所描述的指令。在一个实施例中,核190包括支持打包数据指令集扩展(例如,avx1、avx2等)的逻辑,从而允许使用打包数据来执行许多多媒体应用所使用的操作。应当理解,核可以支持多线程化(执行两个或更多个并行的操作或线程集),并且可以以各种方式来完成所述多线程化,此各种方式包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分获取和解码以及此后诸如超线程化技术中的同步多线程化)。虽然在乱序执行的上下文中描述了寄存器重命名,但应当理解的是,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还包括分开的指令和数据缓存单元134/174和共享的l2缓存单元176,但替代实施例可以具有用于指令和数据两者的单个内部缓存,例如一级(l1)内部缓存、或多级内部缓存。在一些实施例中,所述系统可以包括在所述核和/或处理器外部的内部高速缓存和外部高速缓存的组合。可替代地,所有高速缓存都可以在所述核和/或处理器的外部。特定示例性有序核架构图2a和图2b是更特定的示例性有序核架构的框图,该核是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核)之一。取决于应用,所述逻辑块通过具有某些固定功能逻辑、存储器i/o接口和其他必需i/o逻辑的高带宽互连网络(例如,环形网络)进行通信。图2a是根据实施例的单个处理器核、和其与裸片上互连网络202的连接以及其二级(l2)高速缓存204的局部子集的框图。在一个实施例中,指令解码器200支持具有紧缩数据指令集扩展的x86指令集。l1缓存206允许对缓存存储器的低时延访问进入标量单元和向量单元。虽然在一个实施例中(为了简化设计),标量单元208和向量单元210使用分开的寄存器组(分别为标量寄存器212和向量寄存器214),并且在它们之间传送的数据被写入存储器并且然后从一级(l1)高速缓存206中回读,但替代实施例可以使用不同的途径(例如,使用单个寄存器组或者包括允许数据在两个寄存器堆之间传送而未被书写和回读的通信路径)。l2高速缓存204的局部子集是全局l2高速缓存的一部分,所述全局l2高速缓存被划分为多个分开的局部子集,每个处理器核一个。每个处理器核具有到其本身的l2高速缓存204的局部子集的直接访问路径。由处理器核读取的数据被存储在其l2高速缓存子集204中并且可以被快速访问,与其他处理器核并行地访问其局部l2的高速缓存子集。由处理器核写的数据被存储在其本身的l2高速缓存子组204中,并且如果需要,则从其他子集划掉。所述环形网络确保共享数据的相干性。所述环形网络是双向的,允许诸如处理器核、l2高速缓存和其他逻辑块的媒介在芯片内彼此通信。每个环形数据路径在每个方向为1012位宽。图2b是根据实施例的图2a中的处理器核的一部分的放大视图。图2b包括l1缓存204的l1数据缓存206a部分、以及关于向量单元210和向量寄存器214的更多细节。具体地,向量单元210是16位宽向量处理单元(vpu)(参见16位宽alu228),所述向量处理单元执行整数、单精度浮点和双精度浮点指令中的一者或多者。vpu支持用混合单元220对寄存器输入进行混合、用转换单元222a-b进行数字转换、以及用复制单元224对存储器输入进行复制。写掩码寄存器226允许预测结果向量写。具有集成存储器控制器和专用逻辑的处理器图3是根据实施例的处理器300的框图,所述处理器可以具有多于一个核的、可以具有集成存储器控制器的、以及可以具有集成图形。图3中的实线框展示了具有单个核302a、系统代理310、一组一个或多个总线控制器单元316的处理器300,而虚线框的可选添加展示了具有多个核302a-n、系统代理310中的一组一个或多个集成存储器控制器单元314以及专用逻辑308的替代处理器300。因此,处理器300的不同实施方式可以包括:1)cpu,其中专用逻辑308是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核),并且核302a-n是一个或多个通用核(例如,通用有序核、通用乱序核、两者的组合);2)协处理器,其中核302a-n是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核302a-n是大量通用有序核。因此,处理器300可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量集成众核(mic)协处理器(包括30个或更多个核)、嵌入式处理器等。所述处理器可以在一个或多个芯片上实现。处理器300可以是一个或多个衬底的一部分和/或可以使用诸如例如bicmos、cmos或nmos的多种加工技术中的任何一种技术在一个或多个衬底上被实现。存储器层级包括所述核内的一个或多个级别的高速缓存,一组或一个或多个共享高速缓存单元306、以及外部存储器(未示出),所述外部存储器被耦合到所述一组集成存储器控制器单元314。所述一组共享高速缓存单元306可以包括一个或多个中级高速缓存,如二级(l2)、三级(l3)、四级(l4)、或其他级别的高速缓存、终极高速缓存(llc)、和/或其组合。虽然在一个实施例中,基于环形的互连单元312将集成图形逻辑308、所述一组共享高速缓存单元306、以及系统代理单元310/(多个)集成存储器控制器单元314互连,但替代实施例可以使用任何数量的用于互连这样的单元的已知技术。在一个实施例中,维持一个或多个高速缓存单元306与核302a-n之间的相干性。在一些实施例中,所述核302a-n中的一个或多个核能够进行多线程。系统代理310包括协调和操作核302a-n的那些组件。系统媒介单元310可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或包括用于调节核302a-n和集成图形逻辑308的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。就架构指令集而言,核302a-n可以是同质的或异构的;也就是说,核302a-n中的两个或更多个核能够执行相同的指令集,而其他的核能够仅执行所述指令集的子集或不同指令集。示例性计算机架构图4-7是示例性计算机架构的框图。本领域已知的用于膝上型计算机、台式机,手持pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是合适的。一般,能够结合本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备通常是合适的。现在参考图4,示出的是根据本发明的一个实施例的系统400的框图。系统400可以包括耦合到控制器中枢420的一个或多个处理器410、415。在一个实施例中,控制器中枢420包括图形存储器控制器中枢(gmch)490和输入/输出中枢(ioh)450(其可以在分开的芯片上);gmch490包括存储器和图形控制器,存储器440和协处理器445被耦合到所述图形控制器;ioh450将输入/输出(i/o)设备460耦合到gmch490。可替代地,存储器和图形控制器中的一者或两者被集成在处理器(如本文所述)内,存储器440和协处理器445通过ioh450直接耦合到单个芯片中的处理器410和控制器中枢420。图4中用虚线表示附加处理器415的特性。每个处理器410、415可以包括本文描述的一个或多个处理核,并且可以是某一版本的处理器300。存储器440可以例如是动态随机存取存储器(dram)、相变存储器(pcm)或两者的组合。对于至少一个实施例,控制器集线器420经由多点总线(例如前端总线(fsb)、诸如快速路径互连(qpi)的点对点接口或类似连接件495)与(多个)处理器410、415通信。在一个实施例中,协处理器445是专用处理器,例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。在一个实施例中,控制器中枢420可以包括集成图形加速器。就一系列指标量度(包括体系结构、微体系结构、热、功耗特性等)而言,物理资源410、415之间存在多种差异。在一个实施例中,处理器410执行控制一般类型的数据处理操作的指令。协处理器指令可以被嵌入在所述指令中。处理器410将这些协处理器指令识别为应由附连的协处理器445执行的类型。相应地,处理器410将协处理器总线或其他互连上的这些协处理器指令(或表示协处理器指令的控制信号)发布到协处理器445。(多个)协处理器445接受并执行接收到的协处理器指令。现在参考图5,示出了根据本发明的实施例的更具体的第一示例性系统500的框图。如图5所示,多处理器系统500是点对点互连系统,且包括经由点对点互连550耦合的第一处理器570和第二处理器580。处理器570和580各自可以是某一版本的处理器300。在本发明的一个实施例中,处理器570和580分别是处理器410和415,而协处理器538是协处理器445。在另一实施例中,处理器570和580分别是处理器410和445。处理器570和580被示出为分别包括集成存储器控制器(imc)单元572和582。处理器570还包括作为其总线控制器单元的一部分的点对点(p-p)接口576和578;类似地,第二处理器580包括p-p接口586和588。处理器570、580可以使用p-p接口电路578、588通过点对点(p-p)接口550交换信息。如图5所示,imc572和582将处理器联接到对应存储器、即存储器532和存储器534上,所述存储器可以是主存储器的局部附接到对应处理器上的部分。处理器570、580可以各自使用点对点接口电路576、594、586、598经由单独的p-p接口552、554来与芯片组590交换信息。芯片组590可以可选地经由高性能接口539与协处理器538交换信息。在一个实施例中,协处理器538是专用处理器,例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。共享高速缓存(未示出)可以包括在任一处理器中或者在两个处理器外部但经由p-p互连与所述处理器相连接,使得如果处理器被置于低功耗模式中,则任一或两个处理器的局部高速缓存信息可以被存储在所述共享高速缓存中。芯片组590可以经由接口596耦合至第一总线516。在一个实施例中,第一总线516可以是外围部件互连(pci)总线,或诸如pciexpress总线或另一种第三代i/o互连总线的总线,尽管本发明的范围不限于此。如图5所示,不同i/o设备514可以连同总线桥接器518耦合到第一总线516,所述总线桥接器可以将第一总线516耦合到第二总线520。在一个实施例中,一个或多个附加处理器515(例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、字段可编程门阵列、或任何其他处理器)被耦合到第一总线516。在一个实施例中,第二总线520可以是低引脚数(lpc)总线。在一个实施例中,各个设备可以耦合至第二总线520,所述设备包括例如键盘和/或鼠标522、多个通信设备527、以及可以包括指令/代码数据530的存储单元528(如磁盘驱动器或者其他大容量存储设备)。进一步地,音频i/o524可以耦合至第二总线520。注意到,其他架构是可能的。例如,替代图5的点对点体系结构,系统可以实现多站式总线或其他这样的架构。现在参考图6,示出了根据本发明的实施例的更具体的第二示例性系统600的框图。图5和图6中的相同元件具有相同的参考数字,并且已经从图6中省略了图5的某些方面以避免使图6的其他方面模糊。图6展示了处理器570、580可以分别包括集成存储器和i/o控制逻辑(“cl”)572和582。因此,cl572、582包括集成存储器控制器单元并且包括i/o控制逻辑。图6展示了不仅存储器532、534被耦合至cl572、582,而且i/o设备614也被耦合至控制逻辑572、582。传统i/o设备615被耦合至芯片组590。现在参考图7,示出的是根据本发明的实施例的soc700的框图。图3中的相似元件具有相同的附图标记。此外,虚线框是关于更先进的soc的可选特征。在图7中,(多个)互连单元702被耦合到:应用处理器710,所述应用处理器包括一组一个或多个核202a-n和一个或多个共享高速缓存单元306;系统代理单元310;(多个)总线控制器单元316;(多个)集成存储器控制器单元314;一组或一个或多个协处理器720,所述协处理器可以包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机存取存储器(sram)单元730;直接存储器访问(dma)单元732;以及显示单元740,所述显示单元用于耦合到一个或多个外部显示器。在一个实施例中,所述(多个)协处理器720是专用处理器,例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等。本文公开的机制的实施例以硬件、软件、固件或这些实现途径的组合来实现。多个实施例可以被实现为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。诸如图5所示的代码530的程序代码可以被应用于输入指令以执行本文所述的功能并且生成输出信息。输出信息能够以已知的方式应用于一个或多个输出设备。出于此应用的目的,处理系统包括具有处理器(例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)、或微处理器)的任何系统。程序代码能够以高级程序或面向对象的编程语言来实现,以与处理系统通信。如果需要,程序代码还能够以汇编或机器语言实现。事实上,本文描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。可以由机器可读介质上所存储的表属性指令实现至少一个实施例的一个或多个方面,该指令代表处理器内的各种逻辑,当被机器读取时该指令使该机器制作用于执行在此所描述的技术的逻辑。此类表示(称为“ip核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作该逻辑或处理器的制作机器中。这样的机器可读存储介质可以包括但不限于:由机器或设备制造或形成的物品的非瞬态有形安排,包括诸如硬盘的存储介质;任何其他类型的盘,包括软盘、光盘、cd盘只读存储器(cd-rom)、可擦写cd盘(cd-rw)、和磁光盘;半导体设备,例如只读存储器(rom);随机存取存储器(ram),例如动态随机存取存储器(dram)、静态随机存取存储器(sram);可擦可编程只读存储器(eprom);闪存存储器;电可擦可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。因此,实施例还包括包含指令或包含设计数据(如硬件描述语言(hdl))的非瞬态有形机器可读介质,所述非瞬态有形机器可读介质限定本文描述的结构、电路、设备、处理器和/或系统特征。这样的实施例也可以被称为程序产品。仿真(包括二进制翻译、代码变形等)在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,所述指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变形、仿真、或以其他方式转换为有待由核处理的一个或多个其他指令。指令转换器能够以软件、硬件、固件或其组合来实现。指令转换器可以位于处理器上、处理器外、或者部分在处理器上并且部分在处理器外。图8是对照根据实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图。在所示实施例中,指令转换器是软件指令转换器,然而可替代地,指令转换器能够以软件、固件、硬件或其各种组合来实现。图8示出了可以使用x86编译器804来编译高级语言802的程序以生成x86二进制代码806,所述x86二进制代码可以由具有至少一个x86指令集核的处理器816本机执行。具有至少一个x86指令集核的处理器816表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的处理器基本相同功能的任何处理器:(1)x86指令集核的指令集的实质部分、或(2)目标代码版本的应用或目标是在具有至少一个x86指令集核的处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的处理器基本相同的结果。x86编译器804表示可操作用于生成x86二进制代码806(例如,目标代码)的编译器,所述x86二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核816的处理器上执行。类似地,图8示出了可以使用替代性指令集编译器808来编译高级语言802的程序以生成替代性指令集二进制代码810,可以由不具有至少一个x86指令集核的处理器814(例如,具有执行加利福尼亚州桑尼维尔的mips技术公司的mips指令集和/或执行英格兰剑桥的arm控股公司的arm指令集的多个核的处理器)本机执行所述替代性指令集二进制代码。指令转换器812用于将x86二进制代码806转换为可由不具有x86指令集核的处理器814本机执行的代码。此经转换的代码不太可能与替代性指令集二进制代码810相同,因为能够实现这一点的指令转换器很难制作;然而,经转换的代码将完成一般操作,并且由来自所述替代性指令集的指令构成。因此,指令转换器812表示通过仿真、模拟或任何其他进程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码806的软件、固件、硬件或其组合。数据依赖性的运行时确定运行时存储器冲突检测将标量进程转换为向量进程典型地将较长序列的有序标量操作变换成较短序列的并行向量操作。每个并行操作对应于多个标量操作,其中标量操作的数量可以对应于执行所述操作的系统的向量长度。可以针对无序单索引、有序单索引和/或有序索引对来检测冲突。可以针对写入后读取(read-after-write)依赖性进一步检测冲突。冲突检测被配置为用于标识迭代序列中无法并行完成的操作(即,迭代)。如本文所使用的,“索引(index)”对应于包括在数组中的元素的地址。例如,可以尤其通过基址来指定数组。可以由索引指向数组中的元素。元素的地址则可以包括基址和索引(即,偏移)。当对标量进程进行向量化时,待由所述进程进行操作的数据可以被存储在数组中,并且标量进程可以被配置为用于对数组的元素一次操作一个元素。例如,标量进程可以包括循环,其中每遍次(即,迭代)通过循环时操作一个元素。取决于所述进程,可以对元素进行一次、多次操作或无操作。程序向量化技术应当在对标量进程进行向量化时注意程序控制和数据依赖性。一些程序包含仅在运行时已知的数据依赖性。下面的表1示出了具有运行时依赖性的示例性程序代码。表1:示例程序代码表1示出了包括循环的示例程序代码,所述循环包括阵列a的元素之间的分配。所述循环包含数据依赖性,其中数组a依赖于数组x和数组y的运行时值。为了对示例程序代码内的循环进行向量化,需要从数组x到数组y的运行时冲突检测。示例性数组x和y如下表2所示。表2:示例向量上面的表2将向量元素示出为c语言数组。数组从左到右索引为零。示例性向量的每个索引与表1的程序代码中的循环的迭代相关联。在该序列中,在迭代3读取a[1]并且迭代1写入a[1]时存在冲突。换句话说,x[3]=y[1]=1(注意,迭代数从0开始)。因此,从x[3]到y[l]至少存在一个冲突。从x[i]到y[j]的每个运行时冲突意味着从a[x[k]]到a[y[k]]的阻止传统向量化的运行时依赖性。图9是框图,示出了示例性向量之间的运行时数据冲突。示出了表2的示例性向量x902和y904,其索引为i901和j905。如果x[i]=y[j]并且j<i,则从x[i]到y[j]确定有冲突。除了冲突x[3]=y[1]=1,还存在冲突x[3]=y[2]=1。另外,x[4]=y[0]=2;x[5]=y[4]=3;并且x[6]=y[3]=y[2]=y[1]=1。由于冲突,传统的循环向量化技术不能对表1的示例性程序代码的所有迭代进行向量化。然而,可以在[0,2]的范围内对循环迭代进行向量化,然后在范围[3,4]内对循环迭代进行向量化,并且最后在范围[5,7]内对循环迭代进行向量化。一般地,可以将所述循环迭代分区成多个范围,使得在特定循环迭代范围内不存在冲突(例如,对于循环迭代范围[m,n],没有x[i]=y[j],m<=j<i<=n)。然后可以在由位掩码保护的向量中的每个范围内运行循环迭代,而不违背数据依赖性。例如,可以首先在由位掩码0b11100000保护的范围[0,2]内运行循环迭代,然后在由位掩码00011000保护的范围[3,4]内运行循环迭代,并且然后在由位掩码0b00000l11保护的范围[5,7]内运行循环迭代。应当注意,在一个实施例中,允许将迭代1和2(例如,y[1]=y[2]=1)中的相同的数组元素(例如,a[1])写入向量中是可接受的,因为向量写逻辑被配置为将到相同存储器位置稍微连续写入序列化。图10是根据实施例的用于计算停止位向量的逻辑的框图。在一个实施例中,为了计算停止位向量,逻辑被配置为可以扫描x[i]的每个元素以判定所述元素是否与y[j](例如,x[i]=y[j],j<i)的较早(例如较低索引)的元素冲突,并且将停止位m[i]设置为0或1。输入掩码寄存器k21001用作写掩码,以控制当前活动元素是否用于比较。定序器1002依序通过输入掩码寄存器k21001的位位置。如果掩码寄存器k2的当前位位置中的值在1003处确定为0,则将输出寄存器k11010中的相应位位置设置为0。在一个实施例中,如果掩码寄存器k2的当前位位置的值为1,则这确定了用于定序器1004和1005的操作的起始点。比较器1008将v0的每个元素i+1与v1的所有先前元素i、i-1、i-2等进行比较,并且利用or累加器1009将比较结果进行or操作在一起。然后相应地更新掩码寄存器k1。在一个实施例中,不是从x[i]到y[j]的每个冲突都需要设置停止位m[i]。例如,给定表2中的示例性向量x和y,从x[3]到y[1]存在冲突(即,x[3]=y[1]=1),并且停止位设置在m[3]中。因此,没有必要考虑从x[4]到y[0]的冲突(其中x[4]=y[0]=2)以及设置停止位m[4],因为停止位m[3]已经确保迭代0和迭代4将处于不同的循环迭代范围。一般地,如果由于从x[i1]到y[j1]的冲突而设置了停止位m[i1],则冲突逻辑不需要考虑从x[i2]到y[j2]的所有冲突(倘若j2<i1<i2)。换句话说,在针对j<i逻辑检查从x[i]到y[j]的冲突的情况下,针对所有j<最后停止位集逻辑可以忽略y[j]的冲突。下表3示出了用于计算冲突向量m的示例性算法。表3:示例停止位算法给定以上表2的示例性输入向量x和y,逻辑产生停止位向量m,如下表4所示:表4:示例停止位向量在示例性停止位向量中,每个范围在位“1”之前停止(例如,具有“1”的位指示新的循环分区的开始)。因此,表3的向量m指示循环迭代被分区为三个循环迭代范围:[0,2],[3,4]和[5,7]。在一个实施方式中,将多个位处理指令提供给处理器以从m生成对应的位掩码以确定用于位掩码的向量操作的循环迭代范围。例如,为第一向量操作生成位掩码0b11100000,以对循环迭代范围[0,2]进行向量化。将位掩码0b00011000用于第二向量操作,以对循环迭代范围[3,4]进行向量化。生成掩码0b00000l11以对循环迭代范围[5,7]进行向量化。基于向量的冲突确定替代实施方式利用处理器逻辑来计算向量z,其中每个位表示第一向量的每个元素与第二向量的每个其他元素之间是否存在冲突。例如,给定表2的示例性输入向量x和y,具有如图9所示的冲突,计算z向量,如表5所示。表5:示例冲突向量(z)表5的示例性冲突向量z示出了从x[3]到在z[3]=01100000的位置1和2(位位置是从左到右)处的为“1”的y[1]和y[2]的冲突。图11是示例性冲突向量z的矩阵表示。表2的示例性x向量被示出为x轴1102。表2的示例性y向量被示出为y轴1104。存储器冲突矩阵1101的每个体积示出了表5的示例性冲突向量的向量元素。虽然处理器向量单元可以有效地计算z冲突向量,但是z向量必须在可将其用于将循环分区成多个迭代范围(例如,示例性向量x和y的[0,2]、[3,4]和[5,7])之前进行后处理。执行后处理以确保有适当和完整的冲突检测器用于基于局部范围的循环向量化。例如,原始z冲突向量似乎指示迭代0、1、2和7可以作为向量操作运行,因为从x[0]、x[1]、x[2]和x[7]到任何y元素不存在冲突,而z[0]、z[1]、z[2]和z[7]为零。然而,正确的存储器排序要求在迭代7处a[3]的写入(例如,y[7]=3)是在迭代4处的a[3]的写入(例如,y[4]=3)之后,因为在一个实施例中,对相同存储器地址的写入要求严格排序。一种解决方案是针对具有全零的元素顺序地处理z,以确定第一循环迭代范围[0,2]。对于示例性冲突向量z,这指示元素0、1和2。在将范围[0,2]内的循环迭代执行为向量操作之后,与y[0,2]相关的任何未来的冲突都可以被忽略。为了掩蔽向量z中表示的对应冲突,产生位掩码(例如,0b000111111),其中范围[0,2]内的位为0,并且其他为1。位掩码可以同时应用于z的所有元素作为向量操作(例如,z[]=z[]&00011111),以移除与y[0,2]相关的所有冲突。所产生的新冲突产生z’(例如z-上撇号)向量,如表6所示。表6:示例性经处理的冲突向量(z’)考虑到范围[0,2]已经被处理,所产生的向量应用于范围[3,7]。然而,范围[3,7]中包含全零位的仅有向量元素是元素3和4。这指示对于范围[3,4]中的循环迭代,可以安全地执行向量操作。一旦执行用于范围[3,4]内的循环迭代的向量操作,与y[3,4]相关的冲突就不再相关。因此,将0b11100111的位掩码应用于z’的每个元素,产生如表7所示的z”(例如,z-双上撇号)向量。表7:示例性经处理的冲突向量(z”)范围[5,7]内z”的元素全部为零。因此,循环的剩余迭代可以被安全地向量化,并且处理逻辑可以在向量单一向量操作中进行到处理范围[5,7]内的循环迭代。基于向量的快速冲突确定在一个实施例中,通过若干个附加指令提供了基于向量的快速冲突确定。冲突确定在单条指令内执行运行时基于向量的存储器冲突检测,而不要求用于解决严格的存储器排序问题的附加后处理。在一个实施例中,p=vconflictp(x,y)指令处理两个输入向量以计算分区向量p。给定如表2中的输入向量x和y,产生作为结果的分区向量p,如下表8所示。表8:示例分区向量在表8的示例性分区向量中,“0”指示循环迭代属于循环迭代范围0(即[0,2]),“1”指示循环迭代属于循环迭代范围1(即[3,4]),并且“2”指示循环迭代属于循环迭代范围2(即[5,7])。因此,分区向量p提供了相同的循环迭代范围的不同表示作为停止位向量m。还可以将视图p[i]可视化为迭代范围(0,i]中的停止位m的计数(应当注意,在一个实施例中,m[0]始终为0)。这表示允许快速位掩码生成,而不需要对停止位向量m的位进行顺序扫描,这在一些实施例中产生了停止位实现的性能改进。在一个实施例中,使用向量比较操作来从p生成每个循环迭代范围的位掩码。在一个实施例中,向量比较操作基于向量值的分组生成每个迭代分区的分开的位掩码。表9中示出了示例性向量比较和作为结果的位图。表9:示例向量比较(21)ρ[]==0→11100000//用于循环迭代范围0(即[0,2])的位掩码(22)ρ[]==1→00011000//用于循环迭代范围1(即[3,4])的位掩码(23)ρ[]==2→00000111//用于循环迭代范围2(即[5,7])的位掩码可以使用示出存储器位置之间的冲突的有向非循环图(dag)来示出分区向量的计算。图12是根据实施例的用于确定路径向量的示例性dag。有向非循环图(dag)1200展示了如由表2中的示例性向量x和y确定的存储器位置之间的冲突。dag1200包括用于每个循环迭代(例如,节点0-7)的节点(例如,1201)以及每对迭代j<i之间的边缘j→i(例如,1202、1203)。每个边缘具有这样的长度,使得如果x[i]与y[j]冲突,则边缘j→i的长度为1(例如,与边缘1202相同,length(y,i)=1)。否则,边缘j→i的长度为0(例如,与边缘1203相同,length(y,i)=0)。鉴于图12的dag1200,可以做出以下观察:1)具有长度为1的边缘j→i指示由于x[i]与y[j]之间的冲突而在迭代范围[j,i]内将至少使用1个停止位;2)具有长度p的从节点0到i的路径指示在迭代范围(0,i]中至少使用p个停止位;3)从0到i的最长路径给出在迭代范围(0,i]中使用的停止位的最小计数。最长路径可以被递归地定义,其中p(0)=0,并且p(i)=max_j{p(j)+length(j,i)}。表10中示出了用于计算向量路径的示例性算法。表10:示例向量路径算法表10的向量路径算法的最坏情况复杂度与表3的停止位算法的最坏情况复杂度相同。然而,向量路径算法2避免了遍及内循环迭代(应当注意,对于内循环,i>j)的数据依赖性,并且可以通过处理器向量单元相对于表3的停止位算法更有效地计算。在一个实施例中,提供附加指令以计算r=vconflictr(x,y),这是循环迭代分区的附加表示。此指令使用另外优化的算法,所述算法避免了“max”操作的使用,这在一些处理器中实现可能是昂贵的。使用以下位表示,r表示循环迭代分区,如r=2^(p+1)-1:表11:基于功率的分区表示对于计算r,用于计算max(p[i],p[j]+length[j][i])的逻辑可以被替换为用于计算(r[i]|r[j]<<length[j][i])的逻辑(其中“<<”是“左移”操作,并且“|”是“按位或”操作)。可以使用如表12所示的示例性算法利用与p相关的精简硬件逻辑来计算r。表12:示例性基于功率的分区向量算法在用较便宜的“<<”操作代替相对较贵的“+”操作的情况下,昂贵的“max”操作被更便宜的“|”操作所取代。因此,利用由表12的功率分区向量算法计算出的如表2中的向量x和y,可以生成向量,如表13所示。表13:示例性基于功率的分区向量。在一个实施例中,使用向量比较操作从r生成用于循环迭代范围的位掩码,如表14所示。表14:从r向量生成位掩码可以使用向量比较来基于基于功率的分区向量的元素为每组向量化循环迭代生成单独的位掩码。可以生成对范围0(例如,元素[0,2])中的所有迭代进行分组的、对循环迭代范围1(例如,[3,4])中的第二组迭代进行分组的、以及对范围2(例如,[5,7])中的第三组迭代进行分组的第一位图。在替代性实施例中,从r生成用于循环迭代范围的位掩码,如表15所示。表15:替代性从r向量生成位掩码如表15所示,在一个实施例中,通过重复应用单个位向量比较,随后是向量右移(例如,右移所有向量元素),进一步简化了逻辑。例如,在行(47)处,向量比较设置初始化位掩码中的位以用于r中等于1的对应元素,并且对r执行向量右移以对r的每个元素执行右移。在行(48)处示出了示例性结果向量,其中等于‘1’的向量元素被移动到‘0’,向量元素等于‘11’被移动到‘1’,并且向量元素‘111’被移动到‘11’。该序列可以重复(例如,对于范围1和范围2),直到r的所有元素都等于‘0’。虽然已经示出了用于说明各种实施例的示例性向量和冲突的三个迭代组,但是分组的数量是基于由向量确定的存储器地址或数组元素之间的冲突的数量来确定的。还将理解,实施例一般可应用于在诸如循环向量化的操作过程中检测存储器冲突。用于实现如本文所述的vconflictp和vconflictr指令的示例性逻辑如下面的图13和图14所示。图13是根据实施例的用于确定循环迭代分区的逻辑的流程图。在一个实施例中,编译器或处理器逻辑包括用于使数组集合向量化的逻辑,所述数组集合定义了用于如1302处所示的向量化标量操作(例如,向量化循环)的存储器位置。在框1304中,所述逻辑可以扫描向量化数组集合以判定第一向量的元素是否与第二向量的较低索引元素冲突。在框1306中,所述逻辑进一步用于针对每个确定冲突来写入路径长度(例如,在路径矩阵、路径数据结构或被配置为用于存储路径数据的寄存器集合中)。在框1308中,所述逻辑进一步用于基于向量中的元素对之间的最长路径来确定用于所述向量化标量操作的多个迭代分区。循环迭代分区可以例如根据如本文所描述的向量路径算法或基于功率的分区向量算法来确定,然而也可以在各种实施例中执行其他具体实施方式。示例性处理器实施方式图14是根据实施例的包括用于执行动态存储器冲突检测的逻辑的处理系统的框图。示例性处理系统包括耦合到主存储器1400的处理器1455。处理器1455包括具有用于解码动态存储器冲突指令的解码逻辑1431的解码单元1430。另外,处理器执行引擎单元1440包括用于执行动态存储器冲突检测指令的附加执行逻辑1441。在执行单元1440执行指令流时,寄存器1405为操作数、控制数据和其他类型的数据提供寄存器存储。为简单起见,在图14中展示了单个处理器核(“核0”)的细节。然而,将理解的是,图14所示的每个核可以具有与核0相同的逻辑集合。如所展示的,每个核还可以包括用于根据指定的高速缓存管理策略来缓存指令和数据的专用一级(l1)高速缓存1412和二级(l2)高速缓存1411。l1高速缓存1411包括用于存储指令的分开的指令高速缓存1420和用于存储数据的分开的数据高速缓存1421。以高速缓存行的粒度来管理存储在各种处理器高速缓存内的指令和数据,所述粒度可以是固定大小(例如,长度为64、128、512字节)。该示例性实施例的每个核具有:用于从主存储器1400和/或共享三级(l3)高速缓存1416获取指令的指令获取单元1410;用于解码所述指令的解码单元1430;用于执行所述指令的执行单元1440;以及用于引退所述指令并回写结果的回写/引退单元1450。指令提取单元1410包括各种众所周知的组件,包括:下一个指令指针1403,其用于存储待从存储器1400(或所述高速缓存中的一个)获取的下一个指令的地址;指令翻译后备缓冲器(instructiontranslationlook-asidebuffer,itlb)1404,其用于存储最近使用的虚拟到物理指令地址的映射以提高地址翻译速度;分支预测单元1402,其用于推测性预测指令分支地址;以及多个分支目标缓冲器(btb)1401,其用于存储多个分支地址和目标地址。一旦获取,指令就被流传输到包括解码单元1430、执行单元1440以及回写/引退单元1450的指令流水线的剩余阶段。图15是根据实施例的用于执行动态存储器冲突检测的逻辑的流程图。在一个实施例中,处理器包括逻辑,所述逻辑用于获取用于执行向量存储器冲突检测的指令,如1502处所示。在1504处,所述逻辑进一步用于将所述指令解码为经解码的指令。在1506处,所述逻辑进一步用于执行所述经解码的指令以执行向量存储器冲突检测。在1508处,所述逻辑进一步用于基于检测到的冲突写入包含循环迭代分区信息的分区向量。在一个实施例中,所述分区向量是如表8所示的分区向量p。在一个实施例中,所述分区向量是如表13所示的基于功率的分区向量r。示例性指令格式本文描述的所述(多个)指令的实施例能够以不同的格式实现。另外,以下详述示例性系统、架构、以及流水线。所述(多个)指令的实施例可以在这样的系统、架构、以及流水线上执行,但不限于所详述的实施例。向量友好指令格式是适用于向量指令的指令格式(例如,存在某些特定于向量操作的字段)。虽然描述了通过所述向量友好指令格式使向量操作和标量操作均受支持的实施例,但是替代实施例仅使用向量操作向量友好指令格式。图16a和图16b是框图,展示了根据实施例的通用向量友好指令格式及其指令模板。图16a是框图,展示了根据实施例的通用向量友好指令格式及其a类指令模板;而图16b是框图,展示了根据实施例的通用向量友好指令格式及其b类指令模板。具体地,为通用向量友好指令格式1600限定了a类和b类指令模板,所述指令模板都不包括存储器访问1605指令模板和存储器访问1620指令模板。在向量友好指令格式的上下文中的术语“通用”是指不绑定到任何特定指令集的指令格式。虽然将描述多个实施例,其中向量友好指令格式支持以下各项:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小)(并且因此,64字节向量由16个双字大小元素或者8个四字大小元素组成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节向量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节向量操作数长度(或大小)。然而,替代实施例支持具有更多、更少或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的向量操作数大小(例如,256字节向量操作数)。图16a中的a类指令模板包括:1)在无存储器访问1605指令模板中,示出了无存储器访问,完全舍入控制式操作1610指令模板和无存储器访问,数据变换式操作1615指令模板;以及2)在存储器访问1620指令模板中,示出了存储器访问,时间1625指令模板和存储器访问,非时效性的1630指令模板。图16b中的b类指令模板包括:1)在无存储器访问1605指令模板中,示出了无存储器访问,写掩码控制、部分舍入控制式操作1612指令模板和无存储器访问、写掩码控制、vsize式操作1617指令模板;以及2)在存储器访问1620指令模板中,示出了存储器访问,写掩码控制1627指令模板。通用向量友好指令格式1600包括以下按照图16a和图16b所示的次序列出的以下字段。格式字段1640-该字段中的特定值(指令格式标识符值)唯一地标识所述向量友好指令格式,并且因此在指令流中出现向量友好指令格式的指令。如此,在仅具有通用向量友好指令格式的指令集不需要该字段的情况下,该字段是任性的。基础操作字段1642-其内容区分不同的基础操作。寄存器索引字段1644-其内容直接或通过地址生成来指定源操作数和目的地操作数的位置,无论是在寄存器还是存储器中。这些包含足够数量的位以从pxq(例如32×512、16×128、32×1024、64×1024)寄存器堆中选择n个寄存器。虽然在一个实施例中,n可以是多达三个源和一个目的寄存器,但替代实施例可以支持更多或更少的源和目的寄存器(例如,可以支持多达两个源(其中这些源之一也用作目的地),可以支持多达三个来源(其中一个源也用作目的地),可以支持多达两个源和一个目的地)。修饰符字段1646-其内容区分通用向量指令格式的指令的出现,所述指令指定来自不是通用向量指令格式的指令的存储器访问;也就是说,在无存储器访问1605指令模板语存储器访问1620指令模板之间。存储器访问操作读和/或写存储器层级(在一些情况下,使用多个寄存器中的值指定所述源和/或目的地址),而无存储器访问操作不读和/或写存储器层级(例如,所述源和目的地是寄存器)。虽然在一个实施例中,该字段还选择三种不同的方式来执行存储器地址计算,但替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。扩充操作字段1650-其内容区分各种不同操作中除了基础操作之外的哪一种有待被执行。该字段是特定于上下文的。在本发明的一个实施例中,该字段被划分为类字段1668、阿尔法字段1652、以及贝塔字段1654。扩充操作字段1650允许在单条指令而不是2条、3条或4条指令中执行常见的操作组。比例字段1660-其内容允许索引字段的内容按比例缩放以用于存储器地址生成(例如,对于地址生成,使用2比例*索引+基址)。移位字段1662a-其内容作存储器地址生成的一部分(例如,对于地址生成,使用2比例*索引+基址+移位)。移位因子字段1662b(注意,移位字段1662a直接并置在移位因子字段1662b上指示使用了一者或另一者)-其内容用作地址生成的一部分;所述移位因子字段指定有待由存储器访问(n)的大小来缩放的移位因子,其中n是存储器访问中的字节数(例如,对于地址生成,使用2比例*变址+基址+经缩放移位)。冗余的低次序位被忽略,并且因此,移位因子字段的内容乘以存储器操作数总大小(n),以便产生用于计算有效地址的最终移位。基于完整的操作数字段1674(在本文后面描述)和数据操作字段1654c,由运行时的处理器硬件确定n的值。移位字段1662a和移位因子字段1662b从不用于无存储器访问1605指令模板和/或不同实施例可以仅实现两者之一或一个都不实现的意义上说是可选的。数据元素宽度字段1664-其内容区分多个数据元素宽度中的哪一个有待被使用(在一些实施例中,针对所有指令;在其他实施例中,仅针对一些指令)。该字段从其在如果仅支持一个数据元素宽度和/或使用所述操作数的一些方面来支持多个数据元素宽度的情况下则不需要的意义上说是可选的。写入掩码字段1670-其内容基于每个数据元素位置控制目的向量操作数中的数据元素位置是否反映基址操作和扩充操作的结果。a类指令模板支持合并写入掩码,而b类指令模板支持合并和归零写入掩码。当合并时,向量掩码允许在执行(由所述基址操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集合免受更新;在另一实施例中,在对应的掩码位具有0的情况下保留目的地的每个元素的旧值。相比之下,当归零时,向量掩码允许在执行(由所述基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素归零;在一个实施例中,当对应的掩码位具有0值时,将目的地的元素设置为0。该功能的子集是控制正在执行的操作的向量长度(即正在修改的元素的跨度,从第一个到最后一个)的能力;然而,所修改的元素不必是连续的。因此,写入掩模字段1670允许部分向量操作,包括负载、存储、算术、逻辑等。虽然描述了多个实施例,其中写掩模字段的1670内容选择多个写掩码寄存器中的包含有待使用的写掩码的一个写掩码寄存器(并且因此写掩码字段的1670内容间接地标识要执行的掩码),替代实施例代替地或另外允许掩模写字段的1670内容直接指定有待执行的掩码。立即数字段1672-其内容允许立即数的指定。该字段从其不存在于不支持立即数的通用向量友好格式的实现中并且不存在于不使用立即数的指令中的意义上说是可选的。类字段1668-其内容区分不同类别的指令。参考图16a和图16b,该字段的内容在a类和b类指令之间进行选择。在图16a和图16b中,使用圆角方格指示字段(例如,图16a和图16b中分别为类字段1668的a类字段1668a和b类字段1668b)中存在特定值。a类指令模板在无存储器访问1605a类指令模板的情况下,阿尔法字段1652被解释为rs字段1652a,其内容区分所述不同扩充操作类型中的哪一种有待执行(例如,舍入1652a.1和数据变换1652a.2分别被指定用于无存储器访问舍入式操作1610和无存储器访问数据变换式操作1615指令模板),而贝塔字段1654区分所指定类型的操作中的哪一个有待执行。在无存储器访问1605指令模板中,不存在比例字段1660、移位字段1662a、以及移位比例字段1662b。非存储器访问指令模板-完全舍入控制式操作在无存储器访问完全舍入控制式操作1610指令模板中,贝塔字段1654被解释为舍入控制字段1654a,其(多项)内容提供静态舍入。虽然在所描述的实施例中,舍入控制字段1654a包括抑制所有浮点异常(sae)字段1656和舍入操作控制字段1658,但替代实施例可以支持并可以将这两个概念编码到同一个字段中、或者仅具有这些概念/字段中的一者或另一者(例如,可以只具有舍入操作控制字段1658)。sae字段1656-其内容区分是否禁用异常事件报告;当sae字段的1656内容表示抑制被启用时,给定指令不会报告任何类型的浮点异常标志并且不引发任何浮点异常处理程序。舍入操作控制字段1658-其内容区分一组舍入操作中的哪一个要执行(例如,上入、下舍、朝向零舍入以及舍入到最近整数)。因此,舍入操作控制字段1658允许基于每条指令改变舍入模式。在本发明的其中处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段的1650内容覆盖所述寄存器的值。非存储器访问指令模板-数据变换式操作在无存储器访问数据变换式操作1615指令模板中,贝塔字段1654被解释为数据变换字段1654b,其内容区分多项数据变换的哪一项有待执行(例如,无数据变换、混合、广播)。在存储器访问1620a类指令模板的情况下,阿尔法字段1652被解释为驱逐提示字段1652b,其内容区分驱逐提示中的哪一个有待使用(在图16a中,时间1652b.1和非时间1652b.2分别被指定用于存储器访问时间1625指令模板和存储器访问非时间1630指令模板),而贝塔字段1654被解释为数据操纵字段1654c,其内容区分多项数据操纵操作(也称为原语)中的哪一些有待执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问1620指令模板包括比例字段1660、以及可选的移位字段1662a或移位比例字段1662b。向量存储器指令通过转换支持对来存储器执行向量加载和向量存储。与常规向量指令一样,向量存储器指令以数据元素方式传送来自存储器的数据或将数据传送到存储器,实际传送的元素由被选择为写入掩码的向量掩码的内容决定。存储器访问指令模板-时间时效性的数据是可能很快重新使用足以从高速缓存中受益的数据。然而,这是一个提示,并且不同的处理器能够以不同的方式实现所述时态数据,包括完全忽略提示。存储器访问指令模板-非时态非时效性的数据是在一级高速缓存中不太可能很快重新使用足以从高速缓存中受益的数据,并且应优先考虑驱逐。然而,这是一个提示,并且不同的处理器能够以不同的方式实现所述时态数据,包括完全忽略提示。b类指令模板在b类指令模板的情况下,阿尔法字段1652被解释为写掩码控制(z)字段1652c,其内容区分由写掩码字段1670控制的写掩码应为合并还是归零。在无存储器访问1605b类指令模板的情况下,贝塔字段1654的一部分被解释为rl字段1657a,其内容区分所述不同扩充操作类型中的哪一种有待执行(例如,舍入1657a.1和向量长度(vsize)1657a.2分别被指定用于无存储器访问写掩码操作部分舍入控制式操作1612指令模块和无存储器访问写掩码控制vsize式操作1617指令模板),而贝塔字段1654的其余部分区分所指定类型的操作中的哪一个有待执行。在无存储器访问1605指令模板中,不存在比例字段1660、移位字段1662a、以及移位比例字段1662b。在无存储器访问写掩码操作部分舍入控制式操作1610指令模块中,贝塔字段1654的其余部分被解释为舍入操作字段1659a,并且异常事件报告被禁用(给定指令不报告任何类型的浮点异常标志并且不引发任何浮点异常处理程序)。舍入操作控制字段1659a(就像舍入操作控制字段1658一样)-其内容区分一组舍入操作中的哪一个要执行(例如,上入、下舍、朝向零舍入以及舍入到最近整数)。因此,舍入操作控制字段1659a允许基于每条指令改变舍入模式。在本发明的其中处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段的1650内容覆盖所述寄存器的值。在无存储器访问写掩码控制vsize式操作1617指令模板中,贝塔字段1654的其余部分被解释为向量长度字段1659b,其内容区分多个数据向量长度的哪一个有待执行(例如,128、256或512字节)。在存储器访问1620b类指令模板的情况下,贝塔字段1654的一部分被解释为广播字段1657b,其内容区分是否要执行广播式数据操纵操作,而贝塔字段1654的其余部分被解释为向量长度字段1659b。存储器访问1620指令模板包括比例字段1660、以及可选的移位字段1662a或移位比例字段1662b。关于通用向量友好指令格式1600,示出了包括格式字段1640、基础操作字段1642以及数据元素宽度字段1664的全操作码字段1674。尽管示出了全操作码字段1674包括所有这些字段的一个实施例,但在不支持所有这些字段的实施例中全操作码字段1674包括比所有这些字段更少的字段。全操作码字段1674提供操作代码(操作数)。扩充操作字段1650、数据元素宽度字段1664以及写掩码字段1670允许基于每条指令以通用向量友好指令格式指定这些特征。写掩码字段和数据元素宽度字段的组合创建了多个类型化指令,因为它们允许基于不同数据元素宽度应用掩码。在a类和b类中发现的各种指令模板在不同情况下都是有益的。在一些实施例中,不同处理器或处理器内的不同的核仅支持a类、仅支持b类或支持两类。例如,旨在用于通用计算的高性能通用乱序核可以仅支持b类,旨在主要用于图形和/或科学(吞吐量)计算的核可以仅支持a类,并且旨在用于支持两者的核可以支持两者(当然,具有来自两类的模板和指令的一些混合而不是来自两类的所有模板和指令的核是在本发明的范围内)。此外,单个处理器可以包括多个核,所有这些核都支持相同的类,或者其中不同的核支持不同的类。例如,在具有分开的图形核和通用核的处理器中,旨在主要用于图形和/或科学计算的图形核之一可以仅支持a类,而通用核中的一者或多者可以是高性能通用核,其中乱序执行和寄存器重命名旨在用于仅支持类b的通用计算。不具有分开的图形核的另一处理器可以包括支持a类和b类两者的更为通用的有序或乱序核。当然,在不同实施例中,来自一类的特征也可以在另一类中实现。以高级语言书写的程序将被放入(例如,及时编译或静态编译)到各种不同的可执行形式中,包括:1)仅具有由用于执行的目标处理器支持的类的指令的形式;或2)具有使用所有类别的指的不同组合书写的替代例程并且具有控制流程代码的形式,所述控制流程代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。示例性专用向量友好指令格式图17是框图,展示了根据实施例的示例性专用向量友好指令格式。图17示出了专用向量友好指令格式1700,所述专用向量友好指令格式从其指定所述字段的位置、大小、解释和次序以及某些字段的值的意义上说是特定的。可以使用专用向量友好指令格式1700来扩展x86指令集,并且因此所述字段中的一些字段与现有的x86指令集及其扩展(例如,avx)中使用的字段相似或相同。该格式与现有的带有扩展的x86指令集的前缀编码字段、实际操作数字节字段、modr/m字段、sib字段、移位字段、以及立即数字段保持一致。示出了来自图16的从图17映射到其中的字段。应当理解的是,尽管为了说明的目的,在通用向量友好指令格式1600的上下文中参考专用向量友好指令格式1700来描述实施例,但是本发明不限于专用向量友好指令格式1700,除非声称。例如,通用向量友好指令格式1600考虑了各种字段的各种可能的大小,而专用向量友好指令格式1700被示出为具有特定大小的字段。作为特定示例,虽然数据元素宽度字段1664被示为专用向量友好指令格式1700中的一位字段,但本发明不限于此(即,通用向量友好指令格式1600考虑了其他大小的数据元素宽度字段1664)。通用向量友好指令格式1600包括以下按照图17a所示的次序列出的以下字段。evex前缀(字节0-3)1702以四字节形式编码。格式字段1640(evex字节0,位[7:0])-第一字节(evex字节0)是格式字段1640,并且所述第一字节包含0x62(在本发明的一个实施例中,用于区分向量友好指令格式的唯一值)。第二至第四字节(evex字节1-3)包括提供特定能力的多个位字段。rex字段1705(evex字节1,位[7-5])由evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和1657bex字节1,位[5]-b)组成。evex.r、evex.x和evex.b位字段提供与对应的vex位字段相同的功能,并且使用ls补码形式进行编码,即zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段对如本领域已知的(rrr,xxx和bbb)编码寄存器索引的低3位进行编码,以便可以通过添加evex.r、evex.x、以及evex.b来形成rrrr、xxxx、以及bbbb。rex’字段1610-这是rex’字段1610的第一部分并且是用于对扩展的32寄存器集的较高16或较低16进行编码的evex.r’位字段(evex字节1,位[4]-r’)。在本发明的一个实施例中,该位以及如下所指示的其他位以位反转格式存储,以(在众所周知的x8632位模式中)从bound指令区分谁的实际操作数字节为62,但是在modr/m字段中不接受mod字段中的11的值;替代实施例不以反转格式存储该位和下面的指示的其他位。使用值1来对较低的16个寄存器进行编码。换句话说,r’rrrr是通过将evex.r’、evex.r和来自其他字段的另一rrr组合而形成的。操作码映射字段1715(evex字节1,位[3:0]-mmmm)-其内容对隐含的前导操作数字节(0f、0f38、或0f3)进行编码。数据元素宽度字段1664(evex字节2,位[7]-w)-用符号evex.w表示。evex.w用于定义数据类型(32位数据元素或64位数据元素)的粒度(大小)。evex.vvvv1720(evex字节2,位[6:3]-vvvv)-evex.vvvv的作用可以包括以下内容:1)evex.vvvv对第一源寄存器操作数进行编码,以反向(ls补码)形式指定,并且对于具有2个或更多个源操作数的指令有效;2)evex.vvvv对目的地寄存器操作数进行编码,对于某些向量移位以ls补码形式指定;或者3)evex.vvvv不对任何操作数进行编码,所述字段被保留并且应包含1111b。因此,evex.vvvv字段1720对以反转(ls补码)形式存储的第一源寄存器说明符的4个低次序位进行编码。取决于指令,使用另外不同的evex位字段将说明符大小扩展到32个寄存器。evex.u1668类字段(evex字节2,位[2]-u)-如果evex.u=0,则所述类字段表示a类或evex.u0;如果evex.u=1,则所述类字段表示b类或evex.u1。前缀编码字段1725(evex字节2,位[1:0]-pp)为所述基础操作字段提供多个附加位。除了为evex前缀格式的传统sse指令提供支持之外,所述前缀编码字段还具有压缩simd前缀的优点(而不是要求一个字节来表示simd前缀,evex前缀只需要2位)。在一个实施例中,为了支持使用传统格式和evex前缀格式的simd前缀(66h、f2h、f3h)的传统sse指令,这些传统simd前缀被编码到simd前缀编码字段中;并且在运行时在提供给解码器的pla之前扩展到传统simd前缀中(因此,pla可以同时执行这些传统指令的传统格式和evex格式,而无需修改)。虽然较新的指令可以将evex前缀编码字段的内容的直接用作操作数扩展,但是为了一致性,某些实施例以类似的方式扩展但允许由这些传统simd前缀指定不同的含义。替代实施例可以重新设计pla以支持2位simd前缀编码,并且因此不需要扩展。阿尔法字段1652(evex字节3,位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.写掩码控制和evex.n;也用α表示)-如前所述,该字段是特定于上下文的。贝塔字段1654(evex字节3,位[6:4]-sss,也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ表示)-如前所述,该字段是特定于上下文的。rex’字段1610-这是rex’字段的其余部分并且是可以用于对扩展的32寄存器集的较高16或较低16进行编码的evex.v’位字段(evex字节3,位[3]-v’)。该位是以位反转格式存储的。使用值1来对较低的16个寄存器进行编码。换句话说,v’vvvv是通过组合evex.v’、evex.vvvv形成的。写掩码字段1670(evex字节3,位[2:0]-kkk)-其内容指定写掩码寄存器中的寄存器的索引,如前所述。在本发明的一个实施例中,特定值evex.kkk=000具有特定的行为,意味着没有写掩码用于特定指令(这能够以各种方式实现,包括使用硬连线到所有或绕过掩码硬件的硬件的写掩码)。实际操作数字段1730(字节4)也称为操作数字节。在此字段中指定所述操作数的一部分。modr/m字段1740(字节5)包括mod字段1742、reg字段1744、以及r/m字段1746。如前所述,mod字段的1742内容在存储器访问和无存储器访问操作之间进行区分。reg字段1744的作用可以归结为两种情况:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作数扩展并且不用于对任何指令操作数进行编码。r/m字段1746的作用可以包括如下:对引用存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。比例索引基址(sib)字节(字节6)-如前所述,比例字段的1650内容用于存储器地址生成。sib.xxx1754和sib.bbb1756-这些字段的内容先前已经参考了寄存器索引xxxx和bbbb。移位字段1662a(字节7-10)-当mod字段1742包含10时,字节7-10是移位字段1662a,并且所述移位字段与传统32位移位(disp32)一样工作并且以字节粒度工作。移位因子字段1662b(字节7)-当mod字段1742包含01时,字节7是移位因子字段1662b。这个字段的位置与传统的x86指令集8位移位(disp8)的位置相同,所述字段以字节粒度工作。由于disp8是扩展符号,它只能在-128和127字节偏移之间寻址;就64字节高速缓存线而言,disp8使用只能设置四个非常有用的值-128、-64、0和64的8位;由于通常需要更大的范围,因此使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,移位因子字段1662b是disp8的重新解释;当使用移位因子字段1662b时,实际移位由移位因子字段的内容乘以存储器操作数访问(n)的大小来确定。这种类型的移位称为disp8*n。这减少了平均指令长度(用于移位的单个字节,但具有更大的范围)。这样的压缩移位是基于有效移位是存储访问粒度的倍数的假设,并且因此地址偏移的冗余低次序位不需要进行编码。换句话说,移位因子字段1662b代替传统的x86指令集8位移位。因此,移位因子字段1662b以与x86指令集8位移位相同的方式进行编码(因此modrm/sib编码规则没有变化),只有disp8超载到disp8*n除外。换句话说,编码规则或编码长度没有变化,但只有在由硬件解释移位值(这需要通过按存储器操作数的大小来缩放移位来获得字节地址偏移)时如此。立即数字段1672如前所述地操作。完整操作数字段图17b是框图,展示了根据本发明的一个实施例的专用向量友好指令格式1700的构成全操作码字段1674的字段。具体地,全操作码字段1674包括格式字段1640、基础操作字段1642以及数据元素宽度(w)字段1664。基础操作字节1642包括前缀编码字段1725、操作码映射字段1715、以及实际操作码字段1730。寄存器变址字段图17c是框图,展示了根据本发明的一个实施例的构成完整寄存器变址字段1644的专用向量友好指令格式1700的字段。具体地,寄存器索引字段1644包括rex字段1705、rex’字段1710、modr/m.reg字段1744、modr/mr/m字段1746、vvvv字段1720、xxx字段1754、以及bbb字段1756。扩充操作字段图17d是框图,展示了根据本发明的一个实施例的专用向量友好指令格式1700的构成扩充操作字段1650的字段。当类(u)字段1668包含0时,所述字段表示evex.u0(a类1668a);当所述字段包含1时,所述字段表示evex.u1(b类1668b)。当u=0并且mod字段1742包含11(表示无存储器访问操作)时,阿尔法字段1652(evex字节3,位[7]-eh)被解释为rs字段1652a。当rs字段1652a包含1(舍入1652a.1)时,贝塔字段1654(evex字节3,位[6:4]-sss)被解释为舍入控制字段1654a。舍入控制字段1654a包括一位sae字段1656和两位舍入操作字段1658。当rs字段1652a包含0(数据变换1652a.2)时,贝塔字段1654(evex字节3,位[6:4]-sss)被解释为三位数据变换字段1654b。当u=0并且mod字段1742包含00、01或10(表示存储器访问操作)时,阿尔法字段1652(evex字节3,位[7]-eh)被解释为驱逐提示(eh)字段1652b,并且贝塔字段1654(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段1654c。当u=1时,阿尔法字段1652(evex字节3,位[7]-eh)被解释为写掩码控制(z)字段1652c。当u=1并且mod字段1742包含11(表示非存储器访问操作)时,贝塔字段1654的一部分(evex字节3,位[4]-s0)被解释为rl字段1657a;当所述rl字段包含1(舍入1657a.1)时,贝塔字段1654的其余部分(evex字节3,位[6-5]-s2-1)被解释为舍入操作字段1659a,而当rl字段1657a包含0(vsize1657.a2)时,贝塔字段1654的其余部分(evex字节3,位[6-5]-s2-1)被解释为向量长度字段1659b(evex字节3,位[6-5]-l1-0)。当u=1并且mod字段1742包含00、01或10(表示存储器访问操作)时,贝塔字段1654(evex字节3,位[6:4]-sss)被解释为向量长度字段1659b(evex字节3,位[6-5]-l1-0)和广播字段1657b(evex字节3,位[4]-b)。示例性寄存器架构图18是根据本发明一个实施例的方法的寄存器架构1800的框图。在所示的实施例中,存在512位宽的32个向量寄存器1810;这些寄存器的参考号为zmm0到zmm31。较低的16个zmm寄存器的次序较低的256位叠加在寄存器ymm0-16上。较低的16个zmm寄存器的次序较低的128位(ymm寄存器的次序较低的128位)叠加在寄存器xmm0-15上。专用向量友好指令格式1700对这些叠加的寄存器堆进行操作,如下表4所示。表4:叠加式寄存器堆换句话说,向量长度字段1659b在最大长度与一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半长度;并且没有向量长度字段1659b的指令模板对最大向量长度进行操作。进一步地,在一个实施例中,专用向量友好指令格式1700的b类指令模板对压缩或标量单/双精度浮点数据以及压缩或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶的数据元素位置执行的操作;取决于所述实施例,次序较高的数据元素位置或者在所述指令之前保持不变或者被归零。写入掩码寄存器1815-在所示实施例中,存在8个写入掩码寄存器(k0至k7),每个写入掩码寄存器的大小为64位。在替代实施例中,写掩码寄存器1815的大小为16位。如前所述,在本发明的一个实施例中,向量掩模寄存器k0不能用作写入掩码;当通常指示k0的编码用于写入掩码时,所述向量掩模寄存器选择0xffff的硬连线写入掩码,有效地禁止所述指令的写入掩码。通用寄存器1825-在所示实施例中,存在十六个64位通用寄存器,所述通用寄存器与现有的x86寻址模式一起使用以对多个存储器操作数进行寻址。这些寄存器用名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp、以及r8到r15作为参考标记。标量浮点堆栈寄存器堆(x87堆栈)1845,在其上重叠有mmx压缩整数平面寄存器堆1850-在所示实施例中,x87堆栈是用于使用x87指令集扩展对32位/64位/80位浮点数据字节执行标量浮点操作的八元素堆栈;而mmx寄存器用于对64位压缩整数数据执行操作,以及为在mmx寄存器与xmm寄存器之间执行的某些操作保存操作数。替代实施例可以使用更宽或更窄的寄存器。另外,替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。在以上说明书中,已经参照本发明的特定示例性实施例描述了本发明。然而,在不偏离所附权利要求中阐述的本发明的更广精神和范围的情况下,将显然的是可对其进行各种修改和改变。相应地,本说明书和附图中应被视为说明性的而非限制性的。本文所描述的指令指代硬件的具体配置,例如被配置为用于执行某些操作或具有预定功能的专用集成电路(asic)。这样的电子设备典型地包括耦合到一个或多个其他组件(例如,一个或多个存储设备(非瞬态机器可读存储媒体)、用户输入/输出设备(例如键盘、触摸屏和/或显示器)、以及网络连接件)的一组一个或多个处理器。所述一组处理器和其他组件的耦合典型地通过一个或多个总线和桥接器(也称为总线控制器)。存储设备和携带网络流量的信号分别代表一个或多个机器可读存储媒体和机器可读通信媒体。因此,给定电子设备的存储设备典型地存储用于在所述电子设备的所述一组一个或多个处理器上执行的代码和/或数据。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。在本文整个详细描述中,出于解释的目的,阐述了许多具体的细节以便提供对本发明的彻底理解。然而,对于本领域技术人员而言,可以在不具有这些具体细节中的一些细节的情况下实践本发明将是明显的。在某些情况下,为了避免模糊本发明的主题,未详细描述公知的结构和功能。因此,本发明的范围和精神应根据以下权利要求来判定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1