一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于低时延页解压缩和压缩加速的电路和方法与流程

2022-06-30 00:51:57 来源:中国专利 TAG:
1.本公开概括而言涉及电子设备,并且更具体而言,本公开的实施例涉及用于低时延页解压缩和压缩加速的电路。
背景技术
::2.处理器或者处理器的集合执行来自指令集(例如指令集体系结构(instructionsetarchitecture,isa))的指令。指令集是与编程有关的计算机体系结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理、以及外部输入和输出(i/o)。应当注意,本文的术语“指令”可以指宏指令,例如被提供到处理器以便执行的指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。技术实现要素:3.根据本公开的一方面,提供了一种装置,包括:硬件处理器核心;以及与所述硬件处理器核心耦合的加速器电路,所述加速器电路包括解压缩器电路和直接存储器访问电路,用于:响应于从所述硬件处理器核心发送的第一描述符,使得所述解压缩器电路将来自所述直接存储器访问电路的压缩数据解压缩成解压缩数据并且将所述解压缩数据存储在所述加速器电路中的缓冲器中,并且响应于从所述硬件处理器核心与所述第一描述符分开发送的第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述加速器电路外部的存储器。4.根据本公开的一方面,提供了一种方法,包括:由系统的硬件处理器核心将第一描述符发送到加速器电路,该加速器电路与所述硬件处理器核心耦合并且具有解压缩器电路和直接存储器访问电路;响应于接收到所述第一描述符,由所述解压缩器电路将来自所述直接存储器访问电路的压缩数据解压缩成解压缩数据,并且将所述解压缩数据存储在所述加速器电路中的缓冲器中;由所述系统的所述硬件处理器核心将第二描述符与所述第一描述符分开发送到所述加速器电路,并且响应于接收到所述第二描述符,由所述直接存储器访问电路将所述解压缩数据从所述缓冲器写入到所述加速器电路外部的存储器。5.根据本公开的一方面,提供了一种装置,包括:硬件处理器核心;存储器;以及与所述硬件处理器核心和所述存储器耦合的加速器电路,所述加速器电路包括解压缩器电路和直接存储器访问电路,用于:响应于从所述硬件处理器核心发送的第一描述符,使得所述解压缩器电路将来自所述存储器的压缩数据解压缩成解压缩数据并且将所述解压缩数据存储在所述加速器电路中的缓冲器中,并且响应于从所述硬件处理器核心与所述第一描述符分开发送的第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述存储器。附图说明6.在附图中以示例而非限制方式图示了本公开,附图中相似的标记指示类似的元素,并且其中:7.图1根据本公开的实施例图示了包括多个核心、存储器和加速器电路的计算机系统的框图,该加速器电路包括解压缩器电路。8.图2根据本公开的实施例图示了包括多个核心的硬件处理器的框图。9.图3是根据本公开的实施例的解压缩器电路的方框流程图。10.图4根据本公开的实施例图示了描述符的示例格式。11.图5根据本公开的实施例图示了包括源地址的描述符的示例格式。12.图6根据本公开的实施例图示了包括目的地地址的描述符的示例格式。13.图7是根据本公开的实施例图示出解压缩的方法的操作的流程图。14.图8根据本公开的实施例图示了与包括一个或多个作业排队指令的存储装置相耦合的硬件处理器。15.图9是根据本公开的实施例图示出用于处理作业排队指令的方法的操作的流程图。16.图10是根据本公开的实施例图示出解压缩的方法的操作的流程图。17.图11根据本公开的实施例图示了包括多个加速器和输入/输出存储器管理单元(iommu)的硬件处理器的框图。18.图12a是根据本公开的实施例图示出通用向量友好指令格式及其类别a指令模板的框图。19.图12b是根据本公开的实施例图示出通用向量友好指令格式及其类别b指令模板的框图。20.图13a是根据本公开的实施例图示出图12a和12b中的通用向量友好指令格式的字段的框图。21.图13b是根据本公开的一个实施例图示出构成完整操作码字段的图13a中的特定向量友好指令格式的字段的框图。22.图13c是根据本公开的一个实施例图示出构成寄存器索引字段的图13a中的特定向量友好指令格式的字段的框图。23.图13d是根据本公开的一个实施例图示出构成增强操作字段1250的图13a中的特定向量友好指令格式的字段的框图。24.图14是根据本公开的一个实施例的寄存器体系结构的框图。25.图15a是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、乱序发出/执行管线两者的框图。26.图15b是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。27.图16a是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(l2)缓存的其本地子集的连接的框图。28.图16b是根据本公开的实施例的图16a中的处理器核心的一部分的扩展视图。29.图17是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。30.图18是根据本公开的一个实施例的系统的框图。31.图19是根据本公开的实施例的更具体示范性系统的框图。32.图20示出了根据本公开的实施例的第二更具体示范性系统的框图。33.图21示出了根据本公开的实施例的片上系统(soc)的框图。34.图22是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。具体实施方式35.在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。36.说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。37.(例如,硬件)处理器(例如,具有一个或多个核心)可执行指令(例如,指令的线程)以对数据进行操作,例如以执行算术、逻辑或者其他功能。例如,软件可请求操作并且硬件处理器(例如,其一个或多个核心)可响应于该请求而执行该操作。某些操作包括访问一个或多个存储器位置,以例如存储和/或读取(例如,加载)数据。一系统可包括多个核心,例如,在例如片上系统(system-on-a-chip,soc)的多个插口的每个插口中具有适当的核心子集。每个核心(例如,每个处理器或每个插口)可访问数据存储装置(例如,存储器)。存储器可包括易失性存储器(例如,动态随机访问存储器(dynamicrandom-accessmemory,dram))或(例如,可字节寻址的)持久性(例如,非易失性)存储器(例如,非易失性ram)(例如,与任何系统存储装置分开,例如但不限于与硬盘驱动器分开)。持久性存储器的一个示例是双列直插式存储器模块(dualin-linememorymodule,dimm)(例如,非易失性dimm)(例如,optanetm存储器),例如,根据快速外围组件互连(peripheralcomponentinterconnectexpress,pcie)标准可访问的。38.某些实施例利用存储器层次体系中的“远端存储器”,例如,将不经常访问的(例如,“冷”)数据存储到远端存储器中。这样做允许了某些系统以较低的易失性存储器(例如,dram)容量执行相同的(一个或多个)操作。持久性存储器可被用作第二层级的存储器(例如,“远端存储器”),例如,易失性存储器(例如,dram)是第一层级的存储器(例如,“近端存储器”)。39.在一个实施例中,处理器耦合到(例如,片上或片外)加速器(例如,负载转移引擎)以执行一个或多个(例如,负载转移的)操作,例如,而不是仅在该处理器上执行那些操作。在一个实施例中,处理器包括(例如,片上或片外)加速器(例如,负载转移引擎)以执行一个或多个操作,例如,而不是仅在该处理器上执行那些操作。40.操作的两个非限制性示例是压缩操作和解压缩操作。压缩操作可以指使用比原始表示更少的比特对信息进行编码。解压缩操作可以指将压缩后的信息解码回原始表示。压缩操作可将数据从第一格式压缩到压缩的第二格式。解压缩操作可将数据从压缩的第一格式解压缩到未压缩的第二格式。压缩操作可根据(例如,压缩)算法来执行。解压缩操作可根据(例如,解压缩)算法来执行。41.在一个实施例中,加速器响应于去到和/或对于处理器(例如,中央处理单元(cpu))的执行压缩操作和/或解压缩操作的请求而执行该操作。加速器可以是硬件压缩加速器或硬件解压缩加速器。加速器可与存储器(例如,与加速器一起在片上或者在片外的存储器)耦合以存储数据,例如,输入数据和/或输出数据。加速器可利用一个或多个缓冲器(例如,与加速器一起在片上或者在片外的缓冲器)来存储数据,例如,输入数据和/或输出数据。在一个实施例中,加速器与输入缓冲器耦合以从其中加载输入。在一个实施例中,加速器与输出缓冲器耦合以在其上存储输出。处理器可执行指令来将一个或多个操作(例如,指令、指令的线程或者其他工作的操作)负载转移到加速器。42.可在数据流(例如,输入数据的流)上执行操作。数据流可以是经编码、压缩的数据流。在一个实施例中,数据首先被压缩,例如,根据压缩算法,例如但不限于lz77无损数据压缩算法或lz78无损数据压缩算法。在一个实施例中,从压缩算法输出的压缩符号被编码为代码,例如,根据霍夫曼算法(霍夫曼编码)进行编码,例如,使得更常见的符号由使用的比特数比不那么常见的符号更少的代码来表示。在某些实施例中,表示(例如,映射到)符号的代码在该代码中包括比该符号中更少的比特。在编码的某些实施例中,每个固定长度的输入符号由相应的可变长度(例如,无前缀)输出代码(例如,代码值)表示(例如,映射到该输出代码)。43.deflate数据压缩算法可被利用来对数据流(例如,数据集)进行压缩和解压缩。在deflate压缩的某些实施例中,数据流(例如,数据集)被划分为数据块的序列,并且每个数据块被单独压缩。块结束(end-of-block,eob)符号可用于表示每个块的结束。在deflate压缩的某些实施例中,lz77算法对deflate压缩的贡献是允许用(长度,距离)符号对来表示重复的字符模式,其中长度符号表示重复字符模式的长度,并且距离符号表示它与该模式的早前出现的距离,例如,以字节为单位。在deflate压缩的某些实施例中,如果一个字符模式没有被表示为其早前出现的重复,则它被表示为字面符号的序列,例如,对应于8比特字节模式。44.在某些实施例中,霍夫曼编码在deflate压缩中被用于编码长度、距离和字面符号,例如,以及块结束符号。在一个实施例中,例如,用于表示所有8比特字节模式的字面符号(例如,从0到255的值),连同块结束符号(例如,值256)和长度符号(例如,值257至285)一起,被使用第一霍夫曼代码树来编码为字面/长度代码。在一个实施例中,距离符号(例如,由从0至29的值表示)被使用单独的第二霍夫曼代码树来编码为距离代码。代码树可被存储在数据流的头部中。在一个实施例中,每个长度符号具有两个关联的值,即基本长度值和表示要从输入比特流读取的额外比特的数目的附加值。额外比特可被读取为整数,它可被添加到基本长度值,以给出由长度符号出现所表示的绝对长度。在一个实施例中,每个距离符号具有两个关联的值,即基本距离值和表示要从输入比特流读取的额外比特的数目的附加值。基本距离值可被添加到由来自输入比特流的额外比特的关联数目构成的整数,以给出由距离符号出现所表示的绝对距离。在一个实施例中,deflate数据的压缩块是编码字面和lz77回溯指示符的混合,由块结束指示符终止。在一个实施例中,deflate可被用于对数据流进行压缩,并且inflate可被用于对数据流进行解压缩。inflate一般可以指解码过程,该过程取得deflate数据流来进行解压缩(和解码),并且正确地产生原始的全尺寸数据或文件。在一个实施例中,数据流是经编码、压缩的deflate数据流,例如,包括多个字面代码(例如,码字)、长度代码(例如,码字)和距离代码(例如,码字)。45.在某些实施例中,当处理器(例如,cpu)将工作发送到硬件加速器(例如,设备)时,处理器(例如,cpu)创建对要完成的工作的描述(例如,描述符)并且将其提交给硬件加速器。在某些实施例中,描述符是由(例如,特殊)指令(例如,作业排队指令)发送的或者是经由存储器映射的输入/输出(memorymappedinput/output,mmio)写入事务发送的,例如,其中输入/输出mmio(input/outputmmio,iommu)将设备(例如,加速器)可见的虚拟地址(例如,设备地址或i/o地址)映射到存储器中的相应物理地址。在某些实施例中,存储器的页(例如,存储器页或虚拟页)是固定长度的连续虚拟存储器块,由页表(例如,在dram中)中的单个条目描述,该页表存储虚拟地址和物理地址之间的映射(例如,页是虚拟存储器操作系统中的存储器管理的最小数据单位)。存储器子系统可包括转化后备缓冲器(例如,tlb)(例如,在处理器中),以将虚拟地址转换为物理地址(例如,系统存储器的物理地址)。tlb可包括数据结构来存储(例如,最近使用的)虚拟到物理存储器地址转化,例如使得不必对存在的每个虚拟地址执行转化来获得物理存储器地址。如果虚拟地址条目不在tlb中,则处理器可在页表中执行页游走来确定虚拟到物理存储器地址转化。46.加速器的一种示例存储器相关使用是经由压缩进行(例如,dram)存储器分层,以例如经由页压缩来提供广泛的存储器节省。在某些实施例中,这是由对(例如,用户级)应用透明的(例如,监督者级)操作系统(operatingsystem,os)(或者虚拟机监视器(virtualmachinemonitor,vmm)或超级监督者)完成的,其中系统软件跟踪经常访问(例如,“热”)的存储器块(例如,存储器页)和不经常访问(例如,“冷”)的存储器块(例如,根据(一个或多个)热/冷定时阈值和自从块被访问以来经过的时间),并且将不经常访问(例如,“冷”)的块(例如,页)压缩到存储器的压缩区域中。在某些实施例中,当软件尝试访问被指示为不经常访问(例如,“冷”)的存储器块(例如,页)时,这将导致(例如,页)故障,并且os故障处理程序确定在存储器的压缩区域(例如,特殊(例如,“远端”)层级存储器区域)中存在压缩版本,并且作为响应,然后向硬件加速器(例如,在图1中描绘)提交作业(例如,相应的描述符),以解压缩这个存储器块(例如,页)(例如,并且使得该未压缩的数据被存储在近端存储器(例如,dram)中)。47.从而,此操作的时延可直接对应用性能产生重大影响,尤其是当尝试保存更大的容量时(例如,在这种情况下,压缩层级可能有一些对性能有更大不利影响的较缓(warmer)的页)。48.本文的实施例提供了低时延的页解压缩和压缩加速。本文的某些实施例侧重于页错失的端到端时延,例如,从应用引发故障之时到从中断返回之时(例如,表明页现在已被加载到存储器中,例如,从与存储器分离的硬盘驱动器(例如,图19中的存储单元1928))。然而,解压缩是一个固有的顺序过程,对处理速度构成了无法克服的基本限制。在某些实施例中,加快页的整体解压缩的最佳机制是尽可能早地推测性地发出解压缩操作。在解压缩作业被发送到加速器(例如,解压缩器电路)之前,某些实施例定位压缩页的地址(例如,源地址),并且创建空闲页(例如,在dram中),其地址成为目的地地址,但这后一步可能涉及大量的开销和时间,尤其如果空闲页列表是空的的话。49.本文的实施例通过例如只使用源地址来推测性地将解压缩作业发出到加速器,而目的地地址尚未确定(例如,与解压缩操作并行发生),从而减小了端到端的解压缩时延。50.向硬件加速器提交作业的某些实施例涉及创建(例如,解压缩)描述符,其所有操作对象被准确指定,例如,包括解压缩数据的目的地地址。然而,在解压缩操作可被开始之前等待系统软件(例如,os/超级监督者)提供目的地地址,会添加额外的时延。51.本文的实施例使用一种(例如,“撕裂的”)新描述符来为硬件加速器(例如,解压缩电路或引擎)定义多个相关作业。在某些实施例中,具有(例如,虚拟)源地址的第一描述符被提交给硬件加速器(例如,由系统软件),但操作的结果的(例如,虚拟)目的地地址缺失(例如,或者不正确),例如,目的地地址对于第一描述符要被忽略。然后,加速器可开始解压缩数据(例如,一个页的输出数据(例如,4千字节(kb)的输出数据),但是在抑制输出的特殊模式中(例如,抑制从加速器流出输出)。在一个实施例中,硬件加速器需要一定的时间(例如,大约1微秒(μs))来进行解压缩操作。在解压缩时间期间,本文的某些实施例(例如,响应于系统软件为目的地数据找到空闲页)提交具有目的地地址(例如,除未使用的源地址之外)的第二相关作业描述符。描述符可包括特殊的字段,来保存与该对相关描述符相匹配的标识(id)值,或者通过使用源地址来匹配成对的相关描述符。在某些实施例中,当接收到第二作业描述符时,加速器将其存储的解压缩数据内容(例如,存储在加速器内的历史缓冲存储器内)写出,例如,这可按非常高的速率进行,其中这是一个在宽接口总线上的数据移动(例如,每周期32或64字节)。当这完成时,在某些实施例中,加速器解锁该加速器(例如,处理了此作业对的解压缩器管线),例如,其中该加速器(例如,解压缩器管线)在其开始执行时在这样的作业对中的第一作业之后被锁定,并且(例如,仅)通过执行匹配的对(或者通过中止操作)被解锁。52.从而,本文的实施例可以隐藏与寻找/创建解压缩操作的目的地页有关的整个os时间。对于一般的使用和加速器功能,本文的实施例对客户/用户是有价值的,因为它减小了使用硬件加速器的开销和时延,并且降低了客户采用的障碍,且改善了加速器利用率。在一个实施例中,当与(例如,dram)存储器分层一起使用时,节省与解压缩单个数据块相关联的时延是至关重要的。本文的实施例是在不改变os存储器管理方案的情况下实现的。本文的实施例允许了实现尽可能最低时延的解压缩方案。53.现在转到图1,描绘了示例系统体系结构。图1根据本公开的实施例图示了计算机系统100的框图,该计算机系统100包括多个核心102-0至102-n(例如,其中n是大于一的任何正整数,虽然也可利用单核实施例)、存储器108、以及包括解压缩器电路124的加速器电路106-0(例如,加速器引擎)。在某些实施例中,加速器144包括多个加速器电路106-0至106-n(例如,其中n是大于一的任何正整数,虽然也可利用单个加速器电路实施例)。54.存储器102可包括操作系统(os)和/或虚拟机监视器代码110、用户(例如,程序)代码112、未压缩的数据(例如,页)114、压缩的数据(例如,页)116、或者这些的任何组合。在计算的某些实施例中,虚拟机(virtualmachine,vm)是计算机系统的模拟。在某些实施例中,vm是基于特定的计算机体系结构的,并且提供底层物理计算机系统的功能。其实现可能涉及专门的硬件、固件、软件或组合。在某些实施例中,虚拟机监视器(vmm)(也称为超级监督者)是一个软件程序,该软件程序当被执行时,使得能够创建、管理和治理vm实例,并且管理物理主机机器之上的虚拟化环境的运行。vmm在某些实施例中是虚拟化环境和实现背后的主要软件。在某些实施例中,当被安装在主机机器(例如,处理器)上时,vmm促进了vm的创建,例如,每个vm具有单独的操作系统(os)和应用。vmm可通过分配必要的计算、存储器、存储和其他输入/输出(i/o)资源,例如但不限于输入/输出存储器管理单元(iommu),来管理这些vm的后端操作。vmm可提供一种集中式接口,用于管理安装在单个主机机器上或分布在不同的且互连的主机上的vm的整体操作、状态和可用性。55.存储器108可以是与核心和/或加速器分开的存储器。存储器108可以是dram。压缩的数据116可被存储在第一存储器设备(例如,远端存储器146)中并且/或者未压缩的数据114可被存储在单独的第二存储器设备(例如,作为近端存储器)中。56.可包括耦合(例如,输入/输出(i/o)架构接口104),以允许加速器144、(一个或多个)核心102-0至102-n和存储器108之间的通信。57.在一个实施例中,硬件初始化管理器(非暂态)存储装置118存储硬件初始化管理器固件(例如,或者软件)。在一个实施例中,硬件初始化管理器(非暂态)存储装置118存储基本输入/输出系统(basicinput/outputsystem,bios)固件。在另一个实施例中,硬件初始化管理器(非暂态)存储装置118存储统一可扩展固件接口(unifiedextensiblefirmwareinterface,uefi)固件。在某些实施例中(例如,由处理器的加电或重启触发),计算机系统100(例如,核心102-0)执行存储在硬件初始化管理器(非暂态)存储装置118中的硬件初始化管理器固件(例如,或者软件),以初始化系统100来进行操作,例如,以开始执行操作系统(os)和/或初始化并测试系统100的(例如,硬件)组件。58.加速器144可包括任何所描绘的组件。例如,具有加速器电路106-0至106-n的一个或多个实例。在某些实施例中,作业(例如,该作业的相应描述符)经由工作队列140-0至140-m被提交到加速器144,例如,其中m是大于一的任何正整数,虽然也可利用工作队列实施例。在一个实施例中,工作队列的数目与加速器电路(例如,引擎)的数目相同。在某些实施例中,加速器配置120(例如,存储在其中的配置值)使得加速器144被配置为执行一个或多个(例如,解压缩或压缩)操作。在某些实施例中,控制逻辑电路136(例如,响应于加速器配置120)从工作队列中选择作业,并且将其提交给加速器电路106-0至106-n来进行一个或多个操作。59.在描绘的实施例中,(例如,每个)加速器电路106-0至106-n包括解压缩器电路124以执行解压缩操作(参考例如图3)、压缩器电路128以执行压缩操作、以及直接存储器访问(directmemoryaccess,dma)电路122,以例如连接到存储器108、核心的内部存储器(例如,缓存)和/或远端存储器146。在一个实施例中,压缩器电路128被加速器电路106-0至106-n中的两个或更多个所共享(例如,动态地共享)。在某些实施例中,指派给特定加速器电路(例如,加速器电路106-0)的作业的数据被dma电路122流入,例如,作为主输入和/或次输入。多路复用器126和132可被利用来为特定的操作路由数据。可选地,可包括(例如,结构化查询语言(structuredquerylanguage,sql))过滤引擎130,以例如对输入数据(例如,对从解压缩器电路124输出的解压缩数据)执行过滤查询(例如,针对在次数据输入上输入的搜索术语)。60.在某些实施例中,包括(一个或多个)映射表138,以将特定的作业(例如,或者逻辑上单个作业的相应的一对描述符)映射到特定的加速器电路106-0至106-n。在某些实施例中,每个工作队列140-0至140-m分别包括mmio端口142-0至142-n。在某些实施例中,核心经由mmio端口142-0至142-n中的一个或多个向加速器144发送作业(例如,描述符)。可选地,可以包括地址转化缓存(addresstranslationcache,atc)134,例如,作为tlb,来将虚拟(例如,源或目的地)地址转化为物理地址(例如,在存储器108和/或远端存储器146中)。如下文所述,加速器144可包括本地存储器148,例如,被多个加速器电路106-0至106-n共享的本地存储器148。计算机系统100可耦合到硬盘驱动器,例如,图19中的存储单元1928。61.图2根据本公开的实施例图示了包括多个核心102-0至102-n的硬件处理器202的框图。存储器访问(例如,存储或加载)请求可由核心生成,例如,存储器访问请求可由核心102-0的执行电路208生成(例如,由指令的执行引起)和/或存储器访问请求可由核心102-n的执行电路(例如,由其地址生成单元210)生成(例如,由指令的解码器电路206的解码和经解码的指令的执行引起)。在某些实施例中,存储器访问请求由一个或多个级别的缓存来提供服务,例如,用于核心102-0的核心(例如,第一级(l1))缓存204和例如由多个核心共享的缓存212(例如,最后一级缓存(lastlevelcache,llc))。额外地或者替换地(例如,对于缓存错失),存储器访问请求可由与缓存分离的存储器(例如,但不是盘驱动器)来提供服务。62.在某些实施例中,硬件处理器202包括存储器控制器电路214。在一个实施例中,对于硬件处理器202的多个核心102-0至102-n利用单个存储器控制器电路。存储器控制器电路214可接收存储器访问请求的地址,并且例如对于存储请求还接收要存储在该地址的有效载荷数据,然后执行进入存储器的相应访问,例如,经由i/o架构接口104(例如,一个或多个存储器总线)。在某些实施例中,存储器控制器214包括用于易失性类型的存储器108(例如,dram)的存储器控制器和用于非易失性类型的远端存储器146(例如,非易失性dimm或非易失性dram)的存储器控制器。计算机系统100还可包括与次级(例如,外部)存储器(例如,不能由处理器直接访问)的耦合,该次级存储器例如是盘(或固态)驱动器(例如,图19中的存储单元1928)。63.如上所述,访问存储器位置的尝试可能指示出要访问的数据不可用,例如,页错失。本文的某些实施例然后触发解压缩器电路对该数据的压缩版本执行解压缩操作(例如,经由相应的描述符),以例如利用单个计算机内的解压缩数据来服务于该错失。64.图3是根据本公开的实施例的解压缩器电路124的方框流程图。解压缩器电路124取得描述符302作为输入,解压缩操作电路304对描述符302中识别的压缩数据执行解压缩操作(例如,如描述符所示),然后将该数据存储在缓冲器306(例如,历史缓冲器)内。在某些实施例中,缓冲器306的大小被设置为存储来自单个解压缩操作的所有数据。65.累积地转到图1和图3,作为一个示例用途,希望进行一个(例如,解压缩)操作(例如,对在核心中错失并且将被从远端存储器146加载到存储器108中的未压缩数据114中和/或加载到核心的一个或多个缓存级别中的数据),并且相应的描述符被发送到加速器144,例如,进入工作队列140-0至140-m中。在某些实施例中,该描述符然后被控制逻辑电路136拾取,并且被发送到加速器电路106-0至106-n(例如,引擎)之一,这些加速器电路例如被映射到不同的压缩和解压缩管线。在某些实施例中,该引擎将从描述符中指定的源地址(例如,在压缩数据116中)开始读取源数据,并且dma电路122将把输入数据的流发送到解压缩器电路124中。66.单描述符模式67.在第一模式中(例如,如描述符302所指示,该描述符有指定目的地地址),dma电路122也将从解压缩器电路124取得输出流并且将其写出到存储器108(例如,作为未压缩的数据114)。68.图4根据本公开的实施例图示了描述符400的示例格式。描述符400可包括任何所描绘的字段,例如,其中pasid是进程地址空间id,以例如识别加速器144。在某些实施例中,操作代码402是指示出(例如,解压缩或压缩)操作的值,其中单个描述符400识别源地址和目的地地址。69.双描述符模式70.在第二模式中(例如,如第一描述符302所示,该描述符没有指定目的地地址),不是dma电路122响应于第一描述符从解压缩器电路124取得输出流并且将其写出到存储器108(例如,作为未压缩的数据114),而是正在解压缩该数据的加速器电路(例如,解压缩器电路124)将其存储在内部(例如,在如图3所示的缓冲器306内)。71.图5根据本公开的实施例图示了包括源地址的描述符500的示例格式。在某些实施例中,操作代码502(例如,job1)是指示出(例如,解压缩或压缩)操作的值,其中第一描述符500(一对描述符中的第一描述符)识别了源地址但没有指定目的地地址(例如,目的地字段504被忽略或不存在),并且不是dma电路122响应于此描述符500从解压缩器电路124取得输出流并且将其写出到存储器108(例如,作为未压缩的数据114),而是正在解压缩该数据的加速器电路(例如,解压缩器电路124)将其存储在内部(例如,在如图3所示的缓冲器306内)。72.在第二模式中(例如,如第二描述符302所指示,该第二描述符302指定有其目的地地址并且对应于没有指定其目的地地址的第一描述符),dma电路122然后将响应于第二描述符从解压缩器电路124的内部存储装置(例如,如图3所示的缓冲器306)输出该流并且将其写出到存储器108(例如,作为未压缩的数据114)。73.图6根据本公开的实施例图示了包括目的地地址的描述符600的示例格式。在某些实施例中,操作代码602(例如,job2)是指示出(例如,解压缩或压缩)操作的值,其中用于相同输入数据(例如,识别相同源地址)的一对描述符中的第二描述符600有指定目的地地址(例如,目的地字段604有效或存在),并且dma电路122随后将响应于描述符600而从解压缩器电路124的内部存储装置(例如,如图3所示的缓冲器306)输出该流并且将其写出到存储器108(例如,作为未压缩的数据114)。74.从而,在某些实施例中,第一模式要求在作业被提交给加速器之前,描述符中的所有字段都要被填充以准确的数据,但第二模式允许提交一对描述符(例如,就提交时间而言有任意间隔)。在一个实施例中,一对中的第一描述符具有新的操作代码(例如,形式为“解压缩-块大小-作业1”(例如,解压缩-4k-作业1),其中目的地地址字段被忽略(例如,被清零)和/或该对中的第二描述符具有新的操作代码(例如,形式为“解压缩-块大小-作业2”(例如,解压缩-4k-作业2),其中目的地是正确/有效的(例如,其他字段具有与作业1相同的值)。75.图7是根据本公开的实施例图示出解压缩的方法的(例如,硬件流程)操作700的流程图。操作700(或者本文描述的其他过程,或者变化,和/或其组合)中的一些或全部是在计算机系统(例如,其加速器)的控制下执行的。操作700包括,在块702,加速器接收job1(例如,根据第一描述符500)并且看到特殊操作代码(例如,操作代码502),并且作为响应,锁定可用的解压缩器电路(例如,解压缩管线)并且将相关识别信息(例如,pasid和源地址)存储在用于锁定的解压缩器电路(例如,解压缩管线)的新映射表中。操作700还包括,在704,加速器的直接存储器访问电路被设置用于读取压缩数据的输入流。操作700还包括,在706,解压缩器电路(例如,管线)被设置为抑制生成解压缩数据的输出流。操作700还包括,在708,解压缩操作进而消耗压缩数据的输入流并且生成解压缩数据(例如,最大为页大小,例如4kb),该解压缩数据被写入到解压缩器电路中的本地历史缓冲存储器。操作700还包括,在710,与上述并行,软件将为解压缩数据在存储器中找到可用的位置(例如,目的地空闲页)并且提交job2(例如,根据第二描述符600并且包括操作代码602)。操作700还包括,在712,加速器接收具有特殊操作码(例如,操作代码602)的job2,并且作为响应,将此作业路由到锁定的解压缩器电路(例如,管线)。在某些实施例中,加速器看到特殊操作码的job2,并且与映射表中的识别信息相匹配,以将此作业路由到锁定的解压缩器电路(例如,管线)(例如,与此同时没有其他作业可被发送到该解压缩器电路(例如,管线))。操作700还包括,在714,锁定的解压缩器电路(例如,管线)进入特殊的“转储状态”模式,并且(例如,以高速)将本地历史缓冲存储器清空到输出流中,并且dma电路被设置为使用可用位置的指定目的地地址来将解压缩的数据传送到存储器。该操作700还包括,在716,发信号通知完成(例如,中断)。操作700还包括,在718,解压缩器电路(例如,管线)被解锁(例如,并且映射表被清除)。76.图8根据本公开的实施例图示了与包括一个或多个作业排队指令804的存储装置802相耦合的硬件处理器800。在某些实施例中,作业排队指令是根据本文的任何公开内容的。在某些实施例中,作业排队指令804识别作业描述符806(例如,以及加速器的(例如,逻辑)mmio地址)。77.在一个实施例中,例如,响应于执行操作的请求,指令(例如,宏指令)被从存储装置802中取得并且被发送到解码器808。在所描绘的实施例中,解码器808(例如,解码器电路)将该指令解码成经解码的指令(例如,一个或多个微指令或微操作)。然后,经解码的指令被发送来执行,例如,经由调度器电路810以调度经解码的指令来执行。78.在某些实施例中(例如,其中处理器/核心支持乱序(out-of-order,ooo)执行),处理器包括与寄存器堆/存储器电路812(例如,单元)耦合的寄存器重命名/分配器电路810来分配资源并且在寄存器(例如,与指令的初始源和最终目的地相关联的寄存器)上执行寄存器重命名。在某些实施例中,(例如,对于乱序执行),处理器包括与解码器808耦合的一个或多个调度器电路810。(一个或多个)调度器电路可以调度与解码的指令相关联的一个或多个操作,包括从作业排队指令804解码出的一个或多个操作,例如,用于将操作的执行由执行电路814负载转移到加速器144。79.在某些实施例中,包括了写回电路818来将指令的结果写回到目的地(例如,将它们写入到(一个或多个)寄存器和/或存储器),例如,从而这些结果在处理器内是可见的(例如,在产生了这些结果的执行电路之外是可见的)。80.这些组件(例如,解码器808、寄存器重命名/寄存器分配器/调度器810、执行电路814、寄存器(例如,寄存器堆)/存储器812、或者写回电路818)中的一个或多个可在硬件处理器的单个核心中(例如,以及在多个核心中,每个核心具有这些组件的一个实例)。81.图9是根据本公开的实施例图示出用于处理作业排队指令的方法的操作900的流程图。处理器(例如,或者处理器核心)可执行方法的操作900,例如,响应于从软件接收到执行指令的请求。描绘的操作900包括通过执行以下步骤来处理“作业排队”指令:取得指令(例如,具有与作业排队助记符相对应的指令操作码)902,将该指令解码成经解码的指令904,取回与该指令相关联的数据906,(可选地)调度经解码的指令来执行908,执行经解码的指令以在加速器电路中将作业排队910,并且提交执行的指令的结果912。82.图10是根据本公开的实施例图示出解压缩的方法的操作1000的流程图。操作1000(或者本文描述的其他过程,或者变化,和/或其组合)中的一些或全部是在计算机系统(例如,其加速器)的控制下执行的。操作1000包括,在块1002,由系统的硬件处理器核心将第一描述符发送到与硬件处理器核心相耦合并且具有解压缩器电路和直接存储器访问电路的加速器电路。操作1000还包括,在块1004,响应于接收到第一描述符,通过解压缩器电路将来自直接存储器访问电路的压缩数据解压缩成解压缩数据,并且将解压缩数据存储在加速器电路中的缓冲器中。操作1000包括,在块1006,由系统的硬件处理器核心将第二描述符与第一描述符分开发送到加速器电路。操作1000包括,在块1008,响应于接收到第二描述符,通过直接存储器访问电路将解压缩数据从缓冲器写入到加速器电路外部的存储器。83.从而,本文的实施例可节省os为解压缩数据在存储器中找到可用位置(例如,目的地空闲页)所花费的时间。本文的某些实施例允许了存储器状态的转储(例如,响应于job2描述符)与解压缩操作本身的最后阶段重叠,例如,假设在解压缩器生成了解压缩数据的整个块的真子集(例如,4kb页中的3kb)时接收到第二作业,加速器可进入一种模式,在该模式中它现在处理两个作业,例如,job1继续将最后的解压缩数据(例如,1kb)填充到本地历史缓冲存储器中,而job2从一开始就排出它,确保它不会超过本地历史缓冲存储器中对于job1的最后写入位置。84.对硬件方案的进一步扩展85.本文的某些实施例可被扩展到处理大于本地历史缓冲存储器(例如,图3中的缓冲器306)的数据块(例如,页),例如,处理大于4kb(或4kib)的页,甚至用内部存储器小于4kb(或2kib)的加速器。例如,为了优化对于(例如,2mb或2mib)页的处理,而加速器历史缓冲器要小得多(例如,4kb或4kib)。在某些实施例中,加速器可在两种模式之间切换:86.(1)描述符1(desc-1)模式,它将读入数据并且解压缩到内部存储器,直到其填满本地历史缓冲存储器(例如,图3中的缓冲器306)(例如,4kb)为止,并且此时,管线被停滞,而不会再消耗任何输入数据,而是等待第二描述符desc-2。87.(2)描述符(desc-2)模式,使得当desc-2到达此加速器(例如,管线)并且提供目的地地址时,解压缩器电路(或引擎)通过向输出流转储数据(例如,“状态”)来作出响应(例如,并且dma电路写入到目的地),然后通过读入更多的输入数据并且连续产生输出数据来恢复到处理解压缩操作。88.在某些实施例中,当对其解压缩输出将大于(例如,加速器内部的)本地缓冲器大小(例如,图3中的缓冲器306)的数据进行解压缩时,第一作业(job1)(例如,相应的描述符)没有完成,例如,当(例如,加速器内部的)本地缓冲器满时,它停滞了。然而,在这些实施例中的某些中,加速器跟踪到它已经处理了来自输入流的数据的某个真子集(例如,“s”个字节),并且加速器(例如,解压缩器电路)保持锁定,直到该对作业中的第二作业(job2)(例如,相应的描述符)被接收到为止(例如,job2描述符具有与job1相同的源地址,或者加速器将来自job1的源地址信息与对已经处理的数据的某个真子集(例如,“s”个字节)的指示一起存储)。在某些实施例中,当接收到该对作业中的第二作业(job2)(例如,相应的描述符)时,加速器知道第一作业(job1)被停滞,因此加速器(例如,解压缩器电路)然后从(例如,加速器内部的)本地缓冲器将解压缩数据转储到输出流(例如,用于存储在dram中),然后在跳过来自输入流的数据的真子集(例如,“s”个字节)的压缩版本之后开始继续恢复被停滞的解压缩操作。89.压缩90.虽然上面论述了解压缩,但应当理解,本文的实施例可被用于压缩。在某些实施例中,当希望压缩数据时,os需要知道压缩数据的大小,以便从压缩率中获得最大利益(例如,为了避免过度地限制压缩比率)。在一个实施例中,os将数据压缩到临时缓冲器,然后基于其大小将压缩数据移动到压缩存储器(例如,图1中的压缩数据116)。然而,在某些实施例中,这将导致缓存污染并且浪费存储器带宽和处理器(例如,cpu)周期。91.本文的实施例通过一种压缩来克服了这些问题,在该压缩中:92.(1)os提交第一描述符,其没有压缩数据的目的地地址。93.(2)os读取第一完成记录以找到压缩数据的大小。例如,在这个流程中,desc-1和desc-2具有不同的完成记录地址,因为希望两个作业都传达一些信息回来。94.(3)os基于来自第一作业的大小确定压缩存储器池中的目的地地址,并且提交第二描述符,以将数据写入到该目的地地址。在一些实施例中,利用压缩器电路(例如,图1中的压缩器电路128)内的缓冲器,以一次性地存储压缩数据和/或压缩流。95.本地共享存储器96.在某些实施例中,本地共享存储器(例如,图1中的本地存储器148)被用来临时存储几个作业的整个压缩和/或解压缩结果。例如,对于在实例中的所有管线间共享的大型本地存储器。这些区域可通过使用特殊标志的描述符来寻址(例如,不是dram/系统存储器,而是本地设备中的区域)。97.在某些实施例中,第一描述符使得加速器电路将压缩和/或解压缩输出写入到本地存储器148,并且第二描述符将数据从本地存储器148移动到目的地地址,例如,在(一个或多个)核心的llc中(例如,llc作为图2中的缓存212)以进行解压缩或者在dram中(例如,双数据率同步动态随机访问存储器(doubledataratesynchronousdynamicrandom-accessmemory,ddrsdram))以进行压缩。从而,在某些实施例中,压缩器和/或解压缩器电路将(例如,仅)在本地存储器148满时被阻止。例如,os可通过发送第二描述符以丢弃来自本地存储器148的作业数据,来丢掉太大的压缩结果(例如,不使用任何带宽将数据写入dram)。在某些实施例中,在这个设备存储器中存在分配/释放存储器区域的操作,但缓冲器的释放也可随同读出结果的某些操作而隐含地发生。98.系统软件修改99.本文的实施例定义了一种方案,以实现类似的结果,而无需对加速器本身进行改变,例如,但要对系统软件进行一些改变。100.图11根据本公开的实施例图示了包括多个加速器1106、1110和1114和输入/输出存储器管理单元(iommu)1104的硬件处理器1100的框图。硬件处理器1100可包括一个或多个核心102-0至102-n,例如,耦合到存储器108。在某些实施例中,(例如,pcie)根复合体1102具有iommu1104,其允许地址转化,例如,从虚拟地址到物理地址的地址转化。加速器1106、1110和1114中的一个或多个可分别包括其自己的地址转化缓存(addresstranslationcache,atc)1108、1112和1116,例如,作为tlb,来将虚拟(例如,源或目的地)地址转化为物理地址(例如,在存储器108和/或远端存储器146中)。101.在某些实施例中,加速器(例如,加速器1106、1110和/或1114)具有用于支持共享虚拟存储器的模式,由此在描述符中指定虚拟地址,并且硬件使用iommu1104的地址转化服务来将这些转化为物理地址。在某些实施例中,加速器(例如,加速器1106、1110和/或1114)具有允许作业在故障时阻塞的模式,例如,等待页故障被os解决。102.本文的某些实施例是针对os推测性地解压缩数据的方案。例如,os使用新的未映射的虚拟地址v作为加速器的作业描述符中的目的地地址,这样它将加速器配置为故障时阻塞。从而,在某些实施例中,当加速器试图将其输出写入到该地址时,页游走逻辑不会找到存在的页,导致到os的故障(例如,来自iommu1104)。然后os可将地址v映射到新的空闲页,并且恢复加速器的操作,例如,并且当加速器完成时,os将应用的错失页映射到这个新页。103.在某些实施例中,为了节省最优的时延量,这被与加速器的新操作码相结合,该操作码在读入其输入流时不流出其输出。例如,它可将输出写入到本地历史缓冲存储器中,并且在最后将该状态转储出来。在某些实施例中,加速器的dma电路也被告知,对于这个特殊的操作码,它不应当尝试预取目的地地址上的转化,而是在写入缓冲器中有某个数据量(例如,前512字节)可用之后懒惰地进行这个。这给了os一个机会,来在加速器能够请求地址转化服务(addresstranslationservice,ats)之前修复映射。104.第一类型的加速器1106可以是来自图1的加速器144,例如,存储器中分析加速器(in-memoryanalyticsaccelerator,iax)。第二类型的加速器1110可以支持一组对存储器的变换操作,例如,数据流加速器(datastreamingaccelerator,dsa)。例如,为了生成和测试循环冗余校验(cyclicredundancycheck,crc)校验和或数据完好性字段(dataintegrityfield,dif)以支持存储和联网应用和/或用于存储器比较和delta生成/合并,以支持vm迁移、vm快速检查点和软件管理的存储器去重复使用。第三类型的加速器1114可支持安全性、认证和压缩操作(例如,加密加速和压缩操作),例如,quickassist技术(qat)加速器。105.下面详述其中可使用上述内容的示范性体系结构、系统等等。下面详述可引起为加速器排队作业的示范性指令格式。106.可考虑到以下示例来描述所公开的技术的至少一些实施例:107.示例1.一种装置,包括:108.硬件处理器核心;以及109.与所述硬件处理器核心耦合的加速器电路,所述加速器电路包括解压缩器电路和直接存储器访问电路,用于:110.响应于从所述硬件处理器核心发送的第一描述符,使得所述解压缩器电路将来自所述直接存储器访问电路的压缩数据解压缩成解压缩数据并且将所述解压缩数据存储在所述加速器电路中的缓冲器中,并且111.响应于从所述硬件处理器核心与所述第一描述符分开发送的第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述加速器电路外部的存储器。112.示例2.如示例1所述的装置,其中所述加速器电路用于将所述解压缩数据写入到所述存储器中的由所述第二描述符而不是所述第一描述符指定的目的地地址。113.示例3.如示例2所述的装置,其中所述第二描述符包括至少一个值,该至少一个值指示出所述第二描述符为响应于所述第一描述符而生成的所述解压缩数据提供所述目的地地址。114.示例4.如示例3所述的装置,其中所述至少一个值在所述第一描述符和所述第二描述符中是所述压缩数据的相同源地址。115.示例5.如示例1所述的装置,其中所述加速器电路用于:116.响应于从所述硬件处理器核心发送的所述第一描述符,当所述加速器电路中的所述缓冲器达到来自所述解压缩的所述解压缩数据的充满阈值时,使得所述解压缩器电路停滞对所述压缩数据的解压缩;并且117.响应于从所述硬件处理器核心与所述第一描述符分开发送的所述第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述加速器电路外部的所述存储器,并且恢复对所述压缩数据的解压缩。118.示例6.如示例1所述的装置,还包括第二加速器电路,该第二加速器电路包括第二解压缩器电路和第二直接存储器访问电路,其中所述加速器电路用于响应于所述第一描述符,锁定所述解压缩器电路以免解压缩其他压缩数据。119.示例7.如示例6所述的装置,其中所述加速器电路用于响应于所述第二描述符,在所述压缩数据的解压缩完成之后解除对所述解压缩器电路解压缩其他压缩数据的锁定。120.示例8.如示例1所述的装置,其中所述硬件处理器核心包括:121.解码器电路,用于将包括第一操作码的第一指令解码成经解码的第一指令并且将包括第二操作码的第二指令解码成经解码的第二指令,所述第一操作码指示执行电路生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且所述第二操作码指示所述执行电路生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路,以及122.所述执行电路,用于根据所述第一操作码执行所述经解码的第一指令以生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且根据所述第二操作码执行所述经解码的第二指令以生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路。123.示例9.一种方法,包括:124.由系统的硬件处理器核心将第一描述符发送到加速器电路,该加速器电路与所述硬件处理器核心耦合并且具有解压缩器电路和直接存储器访问电路;125.响应于接收到所述第一描述符,由所述解压缩器电路将来自所述直接存储器访问电路的压缩数据解压缩成解压缩数据,并且将所述解压缩数据存储在所述加速器电路中的缓冲器中;126.由所述系统的所述硬件处理器核心将第二描述符与所述第一描述符分开发送到所述加速器电路;并且127.响应于接收到所述第二描述符,由所述直接存储器访问电路将所述解压缩数据从所述缓冲器写入到所述加速器电路外部的存储器。128.示例10.如示例9所述的方法,其中所述解压缩数据的写入是写入到所述存储器中的由所述第二描述符而不是所述第一描述符指定的目的地地址。129.示例11.如示例10所述的方法,其中发送所述第二描述符包括发送至少一个值,该至少一个值指示出所述第二描述符为响应于所述第一描述符而生成的所述解压缩数据提供所述目的地地址。130.示例12.如示例11所述的方法,其中所述至少一个值在所述第一描述符和所述第二描述符中是所述压缩数据的相同源地址。131.示例13.如示例9所述的方法,还包括:132.响应于接收到所述第一描述符,当所述加速器电路中的所述缓冲器达到来自所述解压缩的所述解压缩数据的充满阈值时,停滞由所述解压缩器电路对所述压缩数据的解压缩;并且133.响应于接收到所述第二描述符,由所述直接存储器访问电路将所述解压缩数据从所述缓冲器写入到所述加速器电路外部的所述存储器,并且恢复对所述压缩数据的解压缩。134.示例14.如示例9所述的方法,其中所述系统还包括第二加速器电路,该第二加速器电路包括第二解压缩器电路和第二直接存储器访问电路,并且所述方法还包括:响应于接收到所述第一描述符,锁定所述解压缩器电路以免解压缩其他压缩数据。135.示例15.如示例14所述的方法,还包括:响应于接收到所述第二描述符,在所述压缩数据的解压缩完成之后解除对所述解压缩器电路解压缩其他压缩数据的锁定。136.示例16.如示例9所述的方法,还包括:137.由所述硬件处理器核心的解码器电路将包括第一操作码的第一指令解码成经解码的第一指令并且将包括第二操作码的第二指令解码成经解码的第二指令,所述第一操作码指示执行电路生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且所述第二操作码指示所述执行电路生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路,并且138.由所述硬件处理器核心的所述执行电路根据所述第一操作码执行所述经解码的第一指令以生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且根据所述第二操作码执行所述经解码的第二指令以生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路。139.示例17.一种装置,包括:140.硬件处理器核心;141.存储器;以及142.与所述硬件处理器核心和所述存储器耦合的加速器电路,所述加速器电路包括解压缩器电路和直接存储器访问电路,用于:143.响应于从所述硬件处理器核心发送的第一描述符,使得所述解压缩器电路将来自所述存储器的压缩数据解压缩成解压缩数据并且将所述解压缩数据存储在所述加速器电路中的缓冲器中,并且144.响应于从所述硬件处理器核心与所述第一描述符分开发送的第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述存储器。145.示例18.如示例17所述的装置,其中所述加速器电路用于将所述解压缩数据写入到所述存储器中的由所述第二描述符而不是所述第一描述符指定的目的地地址。146.示例19.如示例18所述的装置,其中所述第二描述符包括至少一个值,该至少一个值指示出所述第二描述符为响应于所述第一描述符而生成的所述解压缩数据提供所述目的地地址。147.示例20.如示例19所述的装置,其中所述至少一个值在所述第一描述符和所述第二描述符中是所述压缩数据的相同源地址。148.示例21.如示例17所述的装置,其中所述加速器电路用于:149.响应于从所述硬件处理器核心发送的所述第一描述符,当所述加速器电路中的所述缓冲器达到来自所述解压缩的所述解压缩数据的充满阈值时,使得所述解压缩器电路停滞对所述压缩数据的解压缩;并且150.响应于从所述硬件处理器核心与所述第一描述符分开发送的所述第二描述符,使得所述解压缩数据被所述直接存储器访问电路从所述缓冲器写入到所述加速器电路外部的所述存储器,并且恢复对所述压缩数据的解压缩。151.示例22.如示例17所述的装置,还包括第二加速器电路,该第二加速器电路包括第二解压缩器电路和第二直接存储器访问电路,其中所述加速器电路用于响应于所述第一描述符,锁定所述解压缩器电路以免解压缩其他压缩数据。152.示例23.如示例22所述的装置,其中所述加速器电路用于响应于所述第二描述符,在所述压缩数据的解压缩完成之后解除对所述解压缩器电路解压缩其他压缩数据的锁定。153.示例24.如示例17所述的装置,其中所述硬件处理器核心包括:154.解码器电路,用于将包括第一操作码的第一指令解码成经解码的第一指令并且将包括第二操作码的第二指令解码成经解码的第二指令,所述第一操作码指示执行电路生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且所述第二操作码指示所述执行电路生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路,以及155.所述执行电路,用于根据所述第一操作码执行所述经解码的第一指令以生成所述第一描述符并且使得所述第一描述符被发送到所述加速器电路,并且根据所述第二操作码执行所述经解码的第二指令以生成所述第二描述符并且使得所述第二描述符被发送到所述加速器电路。156.在另外一个实施例中,一种装置包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。157.指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过对指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式被解读的给定字段。从而,isa的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,以该指令格式的指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对象的字段。例如,示范性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且此add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。被称为高级向量扩展(advancedvectorextension,avx)(avx1和avx2)并且使用向量扩展(vectorextension,vex)编码方案的simd扩展的集合已被发布和/或发表(例如,参见64和ia-32体系结构软件开发者手册,2018年11月;并且参见体系结构指令集扩展编程参考,2018年10月)。158.示范性指令格式159.可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示范性系统、体系结构和管线。(一个或多个)指令的实施例可在这种系统、体系结构和管线上被执行,但不限于详述的那些。160.通用向量友好指令格式161.向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中向量和标量操作两者通过向量友好指令格式受到支持的实施例,但替换实施例只使用向量友好指令格式的向量操作。162.图12a-图12b是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图12a是根据本公开的实施例图示出通用向量友好指令格式及其类别a指令模板的框图;而图12b是根据本公开的实施例图示出通用向量友好指令格式及其类别b指令模板的框图。具体而言,针对通用向量友好指令格式1200定义了类别a和类别b指令模板,这两个指令模板都包括无存储器访问1205指令模板和存储器访问1220指令模板。术语“通用”在向量友好指令格式的情境中指的是该指令格式不被绑定到任何特定的指令集。163.虽然将描述其中向量友好指令格式支持以下所列项的本公开的实施例:64字节向量操作对象长度(或大小),其具有32比特(4字节)或64比特(8字节)的数据元素宽度(或大小)(从而,64字节向量由16个双字大小的元素或者8个四字大小的元素构成);64字节向量操作对象长度(或大小),其具有16比特(2字节)或8比特(1字节)的数据元素宽度(或大小);32字节向量操作对象长度(或大小),其具有32比特(4字节)、64比特(8字节)、16比特(2字节)、或者8比特(1字节)的数据元素宽度(或大小);以及16字节向量操作对象长度(或大小),其具有32比特(4字节)、64比特(8字节)、16比特(2字节)、或者8比特(1字节)的数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)的数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。164.图12a中的类别a指令模板包括:1)在无存储器访问1205指令模板内,示出了无存储器访问、完全舍入控制型操作1210指令模板和无存储器访问、数据变换型操作1215指令模板;以及2)在存储器访问1220指令模板内,示出了存储器访问、暂态1225指令模板以及存储器访问、非暂态1230指令模板。图12b中的类别b指令模板包括:1)在无存储器访问1205指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作1212指令模板以及无存储器访问、写入掩码控制、vsize型操作1217指令模板;以及2)在存储器访问1220指令模板内,示出了存储器访问、写入掩码控制1227指令模板。165.通用向量友好指令格式1200包括下面按图12a-图12b中所示的顺序列出的以下字段。166.格式字段1240—此字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,从而标识出采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集而言是不需要的。167.基本操作字段1242—其内容区分不同的基本操作。168.寄存器索引字段1244—其内容直接指定或者通过地址生成指定源和目的操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从pxq(例如,32x512、16x128、32x1024、64x1024)寄存器堆中选择n个寄存器。虽然在一个实施例中n可以是多达三个源和一个目的地寄存器,但替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持多达两个源,其中这些源之一也充当目的地;可支持多达三个源,其中这些源之一也充当目的地;可支持多达两个源和一个目的地)。169.修饰字段1246—其内容区分通用向量指令格式中指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问1205指令模板与存储器访问1220指令模板。存储器访问操作读取和/或写入存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目的地是寄存器)。虽然在一个实施例中这个字段也在执行存储器地址计算的三种不同方式之间进行选择,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。170.增强操作字段1250—其内容区分除了基本操作以外还要执行各种不同操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此字段被划分成类别字段1268、阿尔法字段1252、以及贝塔字段1254。增强操作字段1250允许了在单个指令而不是2、3或4个指令中执行共同的操作群组。171.缩放比例字段1260—其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引 基址的地址生成)。172.位移字段1262a—其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引 基址 位移的地址生成)。173.位移因子字段1262b(注意,将位移字段1262a并列在位移因子字段1262b的正上方表明一者或另一者被使用)—其内容被用作地址生成的一部分;其指定要被存储器访问的大小(n)缩放的位移因子—其中n是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引 基址 经缩放的位移的地址生成)。冗余的低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(n)以便生成要被用于计算有效地址的最终位移。n的值由处理器硬件在运行时基于完整操作码字段1274(本文中稍后描述)和数据操纵字段1254c来确定。位移字段1262a和位移因子字段1262b是可选的,因为它们不被用于无存储器访问1205指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。174.数据元素宽度字段1264—其内容区分若干个数据元素宽度中的哪一个要被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为在只有一个数据元素宽度受到支持和/或数据元素宽度是利用操作码的某个方面来受到支持的情况下,则不需要该字段。175.写入掩码字段1270—其内容基于每数据元素位置来控制目的地向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别a指令模板支持合并-写入掩蔽,而类别b指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目的地中的任何元素集合被保护免于在(由基本操作和增强操作指定的)任何操作的执行期间的更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,当归零时,向量掩码允许了目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的地的元素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段1270允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了其中写入掩码字段1270的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(并且从而写入掩码字段1270的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许了掩码写入字段1270的内容直接指定要执行的掩蔽。176.立即数字段1272—其内容允许对立即数(immediate)的指定。此字段是可选的,因为在不支持立即数的通用向量友好格式的实现方式中该字段不存在并且在不使用立即数的指令中该字段不存在。177.类别字段1268—其内容区分指令的不同类别。参考图12a-图12b,此字段的内容在类别a和类别b指令之间进行选择。在图12a-图12b中,圆角方形用于指示特定的值存在于一字段中(例如,图12a-图12b中分别用于类别字段1268的类别a1268a和类别b1268b)。178.类别a的指令模板179.在类别a的非存储器访问1205指令模板的情况下,阿尔法字段1252被解读为rs字段1252a,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作1210和无存储器访问数据变换型操作1215指令模板分别指定舍入1252a.1和数据变换1252a.2),而贝塔字段1254区分指定类型的操作中的哪一个要被执行。在无存储器访问1205指令模板中,缩放比例字段1260、位移字段1262a和位移缩放比例字段1262b不存在。180.无存储器访问指令模板—完全舍入控制型操作181.在无存储器访问完全舍入控制型操作1210指令模板中,贝塔字段1254被解读为舍入控制字段1254a,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段1254a包括抑制所有浮点异常(suppressallfloatingpointexceptions,sae)字段1256和舍入操作控制字段1258,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可以只具有舍入操作控制字段1258)。182.sae字段1256—其内容区分是否禁用异常事件报告;当sae字段1256的内容指示抑制被启用时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。183.舍入操作控制字段1258—其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段1258允许了基于每指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段1250的内容推翻该寄存器值。184.无存储器访问指令模板—数据变换型操作185.在无存储器访问数据变换型操作1215指令模板中,贝塔字段1254被解读为数据变换字段1254b,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配、广播)。186.在类别a的存储器访问1220指令模板的情况下,阿尔法字段1252被解读为逐出提示字段1252b,其内容区分要使用逐出提示中的哪一个(在图12a中,对于存储器访问暂态1225指令模板和存储器访问非暂态1230指令模板分别指定暂态1252b.1和非暂态1252b.2),而贝塔字段1254被解读为数据操纵字段1254c,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问1220指令模板包括缩放比例字段1260,并且可选地包括位移字段1262a或者位移缩放比例字段1262b。187.向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由向量掩码的内容来规定,该向量掩码被选择作为写入掩码。188.存储器访问指令模板—暂态189.暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一种提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。190.存储器访问指令模板—非暂态191.非暂态数据是这样的数据:该数据不太可能很快被再使用、快到足以受益于在第1级缓存中进行缓存,而应当被优先逐出。然而,这是一种提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。192.类别b的指令模板193.在类别b的指令模板的情况下,阿尔法字段1252被解读为写入掩码控制(z)字段1252c,其内容区分由写入掩码字段1270控制的写入掩蔽应当是合并还是归零。194.在类别b的非存储器访问1205指令模板的情况下,贝塔字段1254的一部分被解读为rl字段1257a,其内容区分不同增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作1212指令模板和无存储器访问、写入掩码控制、vsize型操作1217指令模板分别指定舍入1257a.1和向量长度(vsize)1257a.2),而贝塔字段1254的其余部分区分所指定类型的操作中的哪一个要被执行。在无存储器访问1205指令模板中,缩放比例字段1260、位移字段1262a和位移缩放比例字段1262b不存在。195.在无存储器访问、写入掩码控制、部分舍入控制型操作1210指令模板中,贝塔字段1254的其余部分被解读为舍入操作字段1259a并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。196.舍入操作控制字段1259a—正如舍入操作控制字段1258一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入和朝最近舍入)。从而,舍入操作控制字段1259a允许了基于每指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段1250的内容推翻该寄存器值。197.在无存储器访问、写入掩码控制、vsize型操作1217指令模板中,贝塔字段1254的其余部分被解读为向量长度字段1259b,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。198.在类别b的存储器访问1220指令模板的情况下,贝塔字段1254的一部分被解读为广播字段1257b,其内容区分是否要执行广播型数据操纵操作,而贝塔字段1254的其余部分被解读为向量长度字段1259b。存储器访问1220指令模板包括缩放比例字段1260,并且可选地包括位移字段1262a或者位移缩放比例字段1262b。199.关于通用向量友好指令格式1200,完整操作码字段1274被示为包括格式字段1240、基本操作字段1242、以及数据元素宽度字段1264。虽然示出了其中完整操作码字段1274包括所有这些字段的一个实施例,但完整操作码字段1274在不支持所有这些字段的实施例中包括比所有这些字段更少的字段。完整操作码字段1274提供操作代码(操作码)。200.增强操作字段1250、数据元素宽度字段1264以及写入掩码字段1270允许了这些特征在通用向量友好指令格式中基于每指令被指定。201.写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。202.在类别a和类别b内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别a、只支持类别b、或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可以只支持类别b,打算主要用于图形和/或科学(吞吐量)计算的核心可以只支持类别a,并且打算用于两者的核心可以支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可以只支持类别a,而通用核心中的一个或多个可以是只支持类别b的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。没有单独的图形核心的另一处理器可包括支持类别a和类别b两者的一个或多个通用有序或乱序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被及时编译或静态编译到)各种不同的可执行形式中,包括:1)只具有受到目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有控制流程代码的形式,该控制流程代码基于当前在执行代码的处理器所支持的指令来选择要执行的例程。203.示范性特定向量友好指令格式204.图13是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图13示出了在如下意义上特定的特定向量友好指令格式1300:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式1300可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,avx)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、modr/m字段、sib字段、位移字段以及立即数字段保持一致。图示出了来自图13的字段所映射到的来自图12的字段。205.应当理解,虽然出于说明目的在通用向量友好指令格式1200的情境中参考特定向量友好指令格式1300描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式1300。例如,通用向量友好指令格式1200对于各种字段设想了各种可能的大小,而特定向量友好指令格式1300被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段1264在特定向量友好指令格式1300中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式1200设想了数据元素宽度字段1264的其他大小)。206.通用向量友好指令格式1200包括下面按图13a中所示的顺序列出的以下字段。207.evex前缀(字节0-3)1302—被编码为四字节形式。208.格式字段1240(evex字节0,比特[7:0])—第一字节(evex字节0)是格式字段1240并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。[0209]第二-第四字节(evex字节1-3)包括提供特定能力的若干个比特字段。[0210]rex字段1305(evex字节1,比特[7-5])-由evex.r比特字段(evex字节1,比特[7]–r)、evex.x比特字段(evex字节1,比特[6]–x)和1257bex字节1,比特[5]–b)构成。evex.r、evex.x和evex.b比特字段提供与相应的vex比特字段相同的功能,并且被利用反码(1scomplement)形式来编码,即,zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特进行编码(rrr、xxx和bbb),从而可通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。[0211]rex'字段1210—这是rex'字段1210的第一部分并且是用于对扩展32寄存器集合的高16或低16进行编码的evex.r'比特字段(evex字节1,比特[4]-r')。在本公开的一个实施例中,这个比特以及如下所示的其他比特被以比特反转格式来存储以与bound指令相区分(在公知的x8632比特模式中),bound指令的真实操作码字节是62,但不在modr/m字段(下文描述)中接受mod字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器进行编码。换言之,r'rrrr是通过组合evex.r'、evex.r和来自其他字段的其他rrr来形成的。[0212]操作码映射字段1315(evex字节1,比特[3:0]–mmmm)—其内容编码了所暗示的前导操作码字节(0f、0f38、或0f3)。[0213]数据元素宽度字段1264(evex字节2,比特[7]–w)—由符号evex.w表示。evex.w被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。[0214]evex.vvvv1320(evex字节2,比特[6:3]-vvvv)—evex.vvvv的作用可包括以下项:1)evex.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)evex.vvvv编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)evex.vvvv不编码任何操作对象,该字段被预留并且应当包含1111b。从而,evex.vvvv字段1320编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同evex比特字段被用于将指定符大小扩展到32个寄存器。[0215]evex.u1268类别字段(evex字节2,比特[2]-u)—如果evex.u=0,则其指示类别a或evex.u0;如果evex.u=1,则其指示类别b或者evex.u1。[0216]前缀编码字段1325(evex字节2,比特[1:0]-pp)—为基本操作字段提供额外比特。除了针对采取evex前缀格式的传统sse指令提供支持以外,这还具有使simd前缀紧缩的益处(evex前缀只要求2个比特,而不是要求一字节来表达simd前缀)。在一个实施例中,为了支持使用采取传统格式和采取evex前缀格式两者的simd前缀(66h、f2h、f3h)的传统sse指令,这些传统simd前缀被编码到simd前缀编码字段中;并且在运行时被扩展成传统simd前缀,然后才被提供到解码器的pla(因此pla可执行这些传统指令的传统和evex格式两者,而无需修改)。虽然较新的指令可直接使用evex前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统simd前缀指定不同的含义。替换实施例可重设计pla来支持2比特simd前缀编码,从而不要求扩展。[0217]阿尔法字段1252(evex字节3,比特[7]–eh;也称为evex.eh、evex.rs、evex.rl、evex.写入掩码控制、以及evex.n;也用α来图示)—如前所述,此字段是依情境而定的。[0218]贝塔字段1254(evex字节3,比特[6:4]–sss;也称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ来图示)—如前所述,此字段是依情境而定的。[0219]rex'字段1210—这是rex'字段的剩余部分并且是可用于对扩展32寄存器集合的高16或低16进行编码的evex.v'比特字段(evex字节3,比特[3]-v')。此比特被以比特反转格式来存储。值1被用于对低16寄存器进行编码。换言之,v'vvvv是通过组合evex.v'、evex.vvvv来形成的。[0220]写入掩码字段1270(evex字节3,比特[2:0]-kkk)—其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值evex.kkk=000具有暗示对于特定指令不使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。[0221]真实操作码字段1330(字节4)也被称为操作码字节。在这个字段中指定操作码的一部分。[0222]modr/m字段1340(字节5)包括mod字段1342、reg字段1344、以及r/m字段1346。如前所述,mod字段1342的内容区分存储器访问和非存储器访问操作。reg字段1344的作用可被总结成两个情形:编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待,而不被用于编码任何指令操作对象。r/m字段1346的作用可包括以下项:编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0223]缩放比例、索引、基数(scale,index,base,sib)字节(字节6)—如前所述,缩放比例字段1250的内容被用于存储器地址生成。sib.xxx1354和sib.bbb1356—先前已关于寄存器索引xxxx和bbbb提及了这些字段的内容。[0224]位移字段1262a(字节7-10)—当mod字段1342包含10时,字节7-10是位移字段1262a,并且其工作方式与传统32比特位移(disp32)相同并且以字节粒度工作。[0225]位移因子字段1262b(字节7)—当mod字段1342包含01时,字节7是位移因子字段1262b。此字段的位置与传统x86指令集8比特位移(disp8)的相同,其以字节粒度工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移b)。[0233]示范性寄存器体系结构[0234]图14是根据本公开的一个实施例的寄存器体系结构1400的框图。在图示的实施例中,存在32个512比特宽的向量寄存器1410;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式1300如以下表格中所示在这些覆盖的寄存器堆上进行操作。[0235][0236][0237]换言之,向量长度字段1259b在最大长度和一个或多个其他更短的长度之间做出选择,其中每个这种更短长度是前一长度的一半长度;并且没有向量长度字段1259b的指令模板按最大向量长度进行操作。另外,在一个实施例中,特定向量友好指令格式1300的类别b指令模板对紧缩或标量单/双精度浮点数据和紧缩或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。[0238]写入掩码寄存器1415—在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器1415的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xffff,这实际上针对该指令禁用了写入掩蔽。[0239]通用寄存器1425—在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15来引用。[0240]标量浮点堆栈寄存器堆(x87堆栈)1445(在其上化名了mmx紧缩整数平坦寄存器堆1450)—在图示的实施例中,x87堆栈是用于利用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆栈;而mmx寄存器被用于在64比特紧缩整数数据上执行操作,以及针对在mmx和xmm寄存器之间执行的一些操作保持操作对象。[0241]本公开的替换实施例可以使用更宽或更窄的寄存器。此外,本公开的替换实施例可以使用更多、更少或不同的寄存器堆和寄存器。[0242]示范性核心体系结构、处理器和计算机体系结构[0243]可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的cpu;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与cpu分开的芯片上;2)协处理器在与cpu相同的封装中、分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一管芯上包括所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。[0244]示范性核心体系结构[0245]有序和乱序核心框图[0246]图15a是根据本公开的实施例图示出示范性有序管线和示范性寄存器重命名、乱序发出/执行管线两者的框图。图15b是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图15a-图15b中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行管线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。[0247]在图15a中,处理器管线1500包括取得阶段1502、长度解码阶段1504、解码阶段1506、分配阶段1508、重命名阶段1510、调度(也称为调遣或发出)阶段1512、寄存器读取/存储器读取阶段1514、执行阶段1516、写回/存储器写入阶段1518、异常处理阶段1522、以及提交阶段1524。[0248]图15b示出了处理器核心1590包括与执行引擎单元1550耦合的前端单元1530,并且两者都耦合到存储器单元1570。核心1590可以是精简指令集计算(reducedinstructionsetcomputing,risc)核心、复杂指令集计算(complexinstructionsetcomputing,cisc)核心、超长指令字(verylonginstructionword,vliw)核心、或者混合或替换核心类型。作为另外一个选项,核心1590可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(generalpurposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。[0249]前端单元1530包括分支预测单元1532,其耦合到指令缓存单元1534,指令缓存单元1534耦合到指令转化后备缓冲器(translationlookasidebuffer,tlb)1536,指令tlb1536耦合到指令取得单元1538,指令取得单元1538耦合到解码单元1540。解码单元1540(或者解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。可利用各种不同的机制来实现解码单元1540。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心1590包括微代码rom或其他介质,其为某些宏指令存储微代码(例如,在解码单元1540中或者以其他方式在前端单元1530内)。解码单元1540耦合到执行引擎单元1550中的重命名/分配器单元1552。[0250]执行引擎单元1550包括重命名/分配器单元1552,其耦合到引退单元1554和一组一个或多个调度器单元1556。(一个或多个)调度器单元1556表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。(一个或多个)调度器单元1556耦合到(一个或多个)物理寄存器堆单元1558。物理寄存器堆单元1558中的每一者表示一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器堆单元1558包括向量寄存器单元、写入掩码寄存器单元、以及标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、以及通用寄存器。(一个或多个)物理寄存器堆单元1558与引退单元1554重叠以说明可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元1554和(一个或多个)物理寄存器堆单元1558耦合到(一个或多个)执行集群1560。(一个或多个)执行集群1560包括一组一个或多个执行单元1562和一组一个或多个存储器访问单元1564。执行单元1562可对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元1556、(一个或多个)物理寄存器堆单元1558、以及(一个或多个)执行集群1560被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器单元、物理寄存器堆单元和/或执行集群—并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元1564)。还应当理解,在使用分开管线的情况下,这些管线中的一个或多个可以是乱序发出/执行,并且其余的是有序的。[0251]存储器访问单元1564的集合耦合到存储器单元1570,存储器单元1570包括数据tlb单元1572,数据tlb单元1572耦合到数据缓存单元1574,数据缓存单元1574耦合到第2级(l2)缓存单元1576。在一个示范性实施例中,存储器访问单元1564可包括加载单元、存储地址单元、以及存储数据单元,它们中的每一者耦合到存储器单元1570中的数据tlb单元1572。指令缓存单元1534进一步耦合到存储器单元1570中的第2级(l2)缓存单元1576。l2缓存单元1576耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。[0252]在某些实施例中,包括了预取电路1578来预取数据,以例如预测访问地址并且将这些地址的数据带入到一个或多个缓存中(例如,从存储器1580)。[0253]作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现管线1500如下:1)指令取得1538执行取得和长度解码阶段1502和1504;2)解码单元1540执行解码阶段1506;3)重命名/分配器单元1552执行分配阶段1508和重命名阶段1510;4)(一个或多个)调度器单元1556执行调度阶段1512;5)(一个或多个)物理寄存器堆单元1558和存储器单元1570执行寄存器读取/存储器读取阶段1514;执行集群1560执行执行阶段1516;6)存储器单元1570和(一个或多个)物理寄存器堆单元1558执行写回/存储器写入阶段1518;7)在异常处理阶段1522中可涉及各种单元;并且8)引退单元1554和(一个或多个)物理寄存器堆单元1558执行提交阶段1524。[0254]核心1590可支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);加州森尼维尔市的mips技术公司的mips指令集;加州森尼维尔市的arm控股公司的arm指令集(带有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1590包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。[0255]应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像hyper-threading技术中那样)。[0256]虽然是在乱序执行的情境中描述寄存器重命名的,但应当理解,寄存器重命名可被用在有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元1534/1574和共享的l2缓存单元1576,但替换实施例可针对指令和数据两者具有单个内部缓存,例如,第1级(l1)内部缓存或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存与在核心和/或处理器外部的外部缓存的组合。或者,所有缓存可在核心和/或处理器外部。[0257]具体示范性有序核心体系结构[0258]图16a-图16b图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器i/o接口和其他必要i/o逻辑进行通信,这取决于应用。[0259]图16a是根据本公开的实施例的单个处理器核心及其与片上互连网络1602以及与第2级(l2)缓存的其本地子集1604的连接的框图。在一个实施例中,指令解码单元1600支持具有紧缩数据指令集扩展的x86指令集。l1缓存1606允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1608和向量单元1610使用分开的寄存器集合(分别是标量寄存器1612和向量寄存器1614)并且在它们之间传送的数据被写入到存储器,然后被从第1级(l1)缓存1606读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器堆之间传送而不被写入和读回的通信路径)。[0260]l2缓存的本地子集1604是全局l2缓存的一部分,全局l2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的l2缓存本地子集1604的直接访问路径。处理器核心所读取的数据被存储在其l2缓存子集1604中并且可被迅速访问,所述访问与其他处理器核心访问其自己的本地l2缓存子集并行进行。处理器核心所写入的数据被存储在其自己的l2缓存子集1604中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、l2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每方向上是1012比特宽的。[0261]图16b是根据本公开的实施例的图16a中的处理器核心的一部分的扩展视图。图16b包括l1缓存1604的l1数据缓存1606a部分,以及关于向量单元1610和向量寄存器1614的更多细节。具体而言,向量单元1610是16宽的向量处理单元(vectorprocessingunit,vpu)(参见16宽alu1628),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。vpu支持利用调配单元1620调配寄存器输入,利用数值转换单元1622a-b进行的数值转换,以及利用复制单元1624对存储器输入进行的复制。写入掩码寄存器1626允许断言结果向量写入。[0262]图17是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器1700的框图。图17中的实线框图示了具有单个核心1702a、系统代理1710和一组一个或多个总线控制器单元1716的处理器1700,而虚线框的可选添加图示了具有多个核心1702a-n、系统代理单元1710中的一组一个或多个集成存储器控制单元1714和专用逻辑1708的替换处理器1700。[0263]从而,处理器1700的不同实现方式可包括:1)其中专用逻辑1708是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心),并且核心1702a-n是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或者两者的组合)的cpu;2)其中核心1702a-n是大量的主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心1702a-n是大量的通用有序核心的协处理器。从而,处理器1700可以是通用处理器、协处理器或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器1700可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。[0264]存储器层次体系包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元1706、以及与该组集成存储器控制器单元1714相耦合的外部存储器(未示出)。该组共享缓存单元1706可包括一个或多个中间级别缓存(例如第2级(l2)、第3级(l3)、第4级(l4)或者其他级别的缓存),最后一级缓存(lastlevelcache,llc),和/或这些的组合。虽然在一个实施例中基于环的互连单元1712互连集成图形逻辑1708、该组共享缓存单元1706以及系统代理单元1710/(一个或多个)集成存储器控制器单元1714,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元1706和核心1702a-n之间维持一致性。[0265]在一些实施例中,核心1702a-n中的一个或多个能够进行多线程处理。系统代理1710包括协调和操作核心1702a-n的那些组件。系统代理单元1710可包括例如功率控制单元(powercontrolunit,pcu)和显示单元。pcu可以是或者可以包括对核心1702a-n和集成图形逻辑1708的功率状态进行调节所需要的逻辑和组件。显示单元用于驱动一个或多个在外部连接的显示器。[0266]核心1702a-n就体系结构指令集而言可以是同构的或者异构的;也就是说,核心1702a-n中的两个或更多个可能够执行同一指令集,而其他的核心可能够只执行该指令集的子集或者不同的指令集。[0267]示范性计算机体系结构[0268]图18-图21是示范性计算机体系结构的框图。本领域中已知的用于膝上型电脑、桌面型电脑、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(digitalsignalprocessor,dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。[0269]现在参考图18,其中示出了根据本公开的一个实施例的系统1800的框图。系统1800可包括一个或多个处理器1810、1815,它们耦合到控制器中枢1820。在一个实施例中,控制器中枢1820包括图形存储器控制器中枢(graphicsmemorycontrollerhub,gmch)1890和输入/输出中枢(input/outputhub,ioh)1850(它们可在分开的芯片上);gmch1890包括与存储器1840和协处理器1845耦合的存储器和图形控制器;ioh1850将输入/输出(i/o)设备1860耦合到gmch1890。或者,存储器和图形控制器中的一者或两者被集成在处理器内(如本文所述),存储器1840和协处理器1845直接耦合到处理器1810,并且控制器中枢1820与ioh1850在单个芯片中。存储器1840可包括例如系统和/或用户代码1840a,以存储当被执行时使得处理器执行本公开的任何方法的代码。[0270]额外的处理器1815的可选性在图18中用虚线表示。每个处理器1810、1815可包括本文描述的处理核心中的一个或多个并且可以是处理器1700的某个版本。[0271]存储器1840可例如是动态随机访问存储器(dynamicrandomaccessmemory,dram)、相变存储器(phasechangememory,pcm)、或者两者的组合。对于至少一个实施例,控制器中枢1820经由多点分支总线(例如前端总线(frontsidebus,fsb))、点到点接口(例如quickpathinterconnect(qpi))或者类似的连接1895与(一个或多个)处理器1810、1815进行通信。[0272]在一个实施例中,协处理器1845是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。在一个实施例中,控制器中枢1820可包括集成的图形加速器。[0273]在物理资源1810、1815之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的一系列价值度量而言,可以有各种差异。[0274]在一个实施例中,处理器1810执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1810将这些协处理器指令识别为应当由附接的协处理器1845执行的类型。因此,处理器1810在协处理器总线或其他互连上向协处理器1845发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器1845接受并且执行接收到的协处理器指令。[0275]现在参考图19,其中示出了根据本公开的实施例的第一更具体示范性系统1900的框图。如图19所示,多处理器系统1900是点到点互连系统,并且包括经由点到点互连1950耦合的第一处理器1970和第二处理器1980。处理器1970和1980中的每一者可以是处理器1700的某个版本。在本公开的一个实施例中,处理器1970和1980分别是处理器1810和1815,而协处理器1938是协处理器1845。在另一实施例中,处理器1970和1980分别是处理器1810和协处理器1845。[0276]处理器1970和1980被示为分别包括集成存储器控制器(integratedmemorycontroller,imc)单元1972和1982。处理器1970还包括点到点(p-p)接口1976和1978作为其总线控制器单元的一部分;类似地,第二处理器1980包括p-p接口1986和1988。处理器1970、1980可利用p-p接口电路1978、1988经由点到点(p-p)接口1950来交换信息。如图19所示,imc1972和1982将处理器耦合到各自的存储器,即存储器1932和存储器1934,存储器1932和存储器1934可以是在本地附接到各个处理器的主存储器的一部分。[0277]处理器1970、1980可各自利用点到点接口电路1976、1994、1986、1998经由个体p-p接口1952、1954来与芯片组1990交换信息。芯片组1990可以可选地经由高性能接口1939与协处理器1938交换信息。在一个实施例中,协处理器1938是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。[0278]共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由p-p互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。[0279]芯片组1990可经由接口1996耦合到第一总线1916。在一个实施例中,第一总线1916可以是外围组件互连(peripheralcomponentinterconnect,pci)总线,或者诸如快速pci总线或另一种第三代i/o互连总线之类的总线,虽然本公开的范围不限于此。[0280]如图19所示,各种i/o设备1914可耦合到第一总线1916,以及将第一总线1916耦合到第二总线1920的总线桥1918。在一个实施例中,一个或多个额外的处理器1915,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或者任何其他处理器,耦合到第一总线1916。在一个实施例中,第二总线1920可以是低引脚数(lowpincount,lpc)总线。各种设备可耦合到第二总线1920,包括例如键盘/鼠标1922、通信设备1927和存储单元1928,例如盘驱动器或者其他大容量存储设备,其中该存储单元1928在一个实施例中可包括指令/代码和数据1930。另外,音频i/o1924可耦合到第二总线1920。注意,其他体系结构是可能的。例如,取代图19的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。[0281]现在参考图20,其中示出了根据本公开的实施例的第二更具体示范性系统2000的框图。图19和图20中的相似元素带有相似的标号,并且图19的某些方面被从图20中省略以避免模糊图20的其他方面。[0282]图20图示出处理器1970、1980可分别包括集成存储器和i/o控制逻辑(“cl”)1972和1982。从而,cl1972、1982包括集成存储器控制器单元并且包括i/o控制逻辑。图20图示出不仅存储器1932、1934耦合到cl1972、1982,而且i/o设备2014也耦合到控制逻辑1972、1982。传统i/o设备2015耦合到芯片组1990。[0283]现在参考图21,其中示出了根据本公开的实施例的soc2100的框图。图17中的相似元素带有相似的标号。另外,虚线框是更先进soc上的可选特征。在图21中,(一个或多个)互连单元2102耦合到:应用处理器2110,其包括一组一个或多个核心1702a-n和(一个或多个)共享缓存单元1706;系统代理单元1710;(一个或多个)总线控制器单元1716;(一个或多个)集成存储器控制器单元1714;一组或一个或多个协处理器2120,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随机访问存储器(staticrandomaccessmemory,sram)单元2130;直接存储器访问(directmemoryaccess,dma)单元2132;以及显示单元2140,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器2120包括专用处理器,例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器,等等。[0284]可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的(例如,机制的)实施例。本公开的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。[0285]程序代码,例如图19中所示的代码1930,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0286]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。[0287]至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0288]这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下各项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写致密盘(compactdiskrewritable,cd-rw)、和磁光盘),半导体设备(例如,只读存储器(read-onlymemory,rom),诸如动态随机访问存储器(dynamicrandomaccessmemory,dram)、静态随机访问存储器(staticrandomaccessmemory,sram)之类的随机访问存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0289]因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可被称为程序产品。[0290]仿真(包括二进制转化、代码变形等等)[0291]在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。[0292]图22是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图22示出了可以利用x86编译器2204来编译高级别语言2202的程序以生成x86二进制代码2206,x86二进制代码2206可由具有至少一个x86指令集核心的处理器2216原生执行。具有至少一个x86指令集核心的处理器2216表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个x86指令集核心的处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的处理器基本上相同的结果。x86编译器2204表示可操作来生成x86二进制代码2206(例如,目标代码)的编译器,x86二进制代码2206在带有或不带有额外的链接处理的情况下可在具有至少一个x86指令集核心的处理器2216上被执行。类似地,图22示出了高级别语言2202的程序可被利用替换指令集编译器2208来编译以生成替换指令集二进制代码2210,替换指令集二进制代码2210可由没有至少一个x86指令集核心的处理器2214(例如,具有执行加州森尼维耳市的mips技术公司的mips指令集和/或执行加州森尼维耳市的arm控股公司的arm指令集的核心的处理器)原生执行。指令转换器2212用于将x86二进制代码2206转换成可由没有x86指令集核心的处理器2214原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码2210相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器2212表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子设备执行x86二进制代码2206的软件、固件、硬件或者其组合。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献