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

用于存储器损坏检测的硬件装置和方法与流程

2021-10-27 21:21:00 来源:中国专利 TAG:
用于存储器损坏检测的硬件装置和方法本技术是pct国际申请号为pct/us2016/063211、国际申请日为2016年11月22日、进入中国国家阶段的申请号为201680067172.8,题为“用于存储器损坏检测的硬件装置和方法”的发明专利申请的分案申请。
技术领域
:1.本公开总体上关于电子学,更具体地,本公开的实施例关于具有存储器损坏检测硬件的硬件处理器。
背景技术
::2.处理器或处理器集合执行来自指令集(例如,指令集架构(isa))的指令。指令集是计算机架构的关于编程的部分,并且一般包括原生数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(i/o)。应当注意,术语“指令”在本文中一般是指宏指令或指微指令,该宏指令例如,提供给处理器供执行的指令,该微指令例如,由处理器的解码器解码宏指令所产生的指令。附图说明3.在所附附图中以示例方式而非限制方式图示本公开,在附图中,类似的附图标记指示类似的要素,其中:4.图1图示根据本公开的实施例的硬件处理器。5.图2图示根据本公开的实施例的存储器损坏检测(mcd)。6.图3图示根据本公开的实施例的具有地址字段且不具有存储器损坏检测(mcd)值字段的指针格式。7.图4图示根据本公开的实施例的具有地址字段和存储器损坏检测(mcd)值字段的指针格式。8.图5图示根据本公开的实施例的具有地址字段、存储器损坏检测(mcd)空间字段和存储器损坏检测(mcd)值字段的指针格式。9.图6图示根据本公开的实施例的用于存储器损坏检测(mcd)的寄存器的数据格式。10.图7图示根据本公开的实施例的具有存储器管理单元的存储器损坏检测(mcd)系统。11.图8图示根据本公开的实施例的存储器管理单元。12.图9图示根据本公开的实施例的具有地址字段且不具有存储器损坏检测(mcd)值字段的指针格式。13.图10图示根据本公开的实施例的具有地址字段且不具有存储器损坏检测(mcd)值字段的指针格式。14.图11图示根据本公开的实施例的具有地址字段、存储器损坏检测(mcd)空间字段和存储器损坏检测(mcd)值字段的指针格式。15.图12a示出根据本公开的实施例的线性地址空间。16.图12b图示根据本公开的实施例的、图12a中的线性地址空间的部分的视图。17.图12c图示根据本公开的实施例的图12b中的线性地址空间的、具有受存储器损坏检测(mcd)保护的空间的子集的部分的视图。18.图13图示根据本公开的实施例的具有地址字段且不具有存储器损坏检测(mcd)值字段的指针格式。19.图14图示根据本公开的实施例的具有地址字段、存储器损坏检测(mcd)空间字段和存储器损坏检测(mcd)值字段的指针格式。20.图15a示出根据本公开的实施例的线性地址空间。21.图15b图示根据本公开的实施例的、图15a中的线性地址空间的部分的视图。22.图15c图示根据本公开的实施例的图12b中的线性地址空间的、具有受存储器损坏检测(mcd)保护空间的子集的部分的视图。23.图16图示根据本公开的实施例的具有地址字段、存储器损坏检测(mcd)空间字段和存储器损坏检测(mcd)值字段的指针格式。24.图17a示出根据本公开的实施例的线性地址空间。25.图17b图示根据本公开的实施例的、图17a中的线性地址空间的部分的视图。26.图17c图示根据本公开的实施例的图17b中的线性地址空间的、具有受存储器损坏检测(mcd)保护空间的子集的部分的视图。27.图18示出根据本公开的实施例的流程图。28.图19a是示出根据本公开的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。29.图19b是示出根据本公开的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。30.图20a是根据本公开的实施例的单个处理器核以及其到管芯上互连网络的连接以及它的第2级(l2)高速缓存的本地子集的框图。31.图20b是根据本公开的各实施例的图20a中的处理器核的一部分的展开图。32.图21是根据本公开的实施例的可具有超过一个的核、可具有集成的存储器控制器、并且可具有集成图形的处理器的框图。33.图22是根据本公开的一个实施例的系统的框图。34.图23是根据本公开的实施例的更具体的示例性系统的框图。35.图24所示的是根据本公开的实施例的第二更具体的示例性系统的框图。36.图25示出的是根据本公开的实施例的芯片上系统(soc)的框图。37.图26是根据本公开的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式38.在以下描述中,陈述了众多具体细节。然而,应当理解,可不通过这些具体细节来实践本公开的实施例。在其他实例中,未详细示出公知的电路、结构和技术,以免使对本描述的理解模糊。39.说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用表明所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可能不一定都包括该特定的特征、结构或特性。此外,此类短语不一定是指同一个实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。40.(例如,具有一个或多个核的)(例如,硬件)处理器可执行指令以对数据操作,从而例如执行算术、逻辑或其他功能。硬件处理器可访问存储器(例如,数据存储设备)中的数据。在一个实施例中,硬件处理器是请求对数据的访问(例如,加载或存储)的客户端,而存储器是包含该数据的服务器。在一个实施例中,计算机包括请求对数据的访问(例如,加载或存储)的硬件处理器,并且储存器在该计算机的本地。存储器可划分为分开的数据行(例如,一个或多个高速缓存行),这些分开的数据行可例如出于一致性目的而被管理为单元。在某些实施例中,(例如,数据)指针(例如,地址)是引用(例如,指向)数据位置的值,例如,指针可以是(例如,线性)地址,而数据可被存储在那个(例如,线性)地址处。在某些实施例中,存储器可被划分为多个行,并且每个行可具有其自身的(例如,唯一的)地址。例如,存储器行可包括用于512位、256位、128位、64位、32位、16位或8位数据的存储。41.在某些实施例中,(例如,由攻击者产生的)存储器损坏可由出界(out‑of‑bound)访问(例如,使用存储器的块的基址和超出所分配的块大小的偏移的存储器访问)或由悬摆指针(例如,引用已被解除分配的存储器的块(例如,缓冲器)的指针)引起。42.本文中的某些实施例可利用存储器损坏检测(mcd)硬件和/或方法,以便例如防止出界访问或用悬摆指针进行的访问。43.转到附图,图1图示根据本公开的实施例的硬件处理器100。所描绘的硬件处理器100包括硬件解码单元102,该硬件解码单元102用于对指令解码,该指令例如,用于通过指向存储器110的块的指针105来请求对存储器110的块的访问的指令。指针105可以是指令的操作数。所描绘的硬件执行单元104用于执行经解码的指令,该经解码的指令例如,用于通过指向存储器110的块的(例如,具有(例如,线性)地址114的值的)指针105来请求对存储器110的块的访问的经解码的指令。在一个实施例中,数据块是单个数据行。在一个实施例中,数据块是多个数据行。例如,存储器的块可以是存储器110的(例如,线性或物理的)可寻址存储器112的、包括指向一个(例如,第一)行(例如,行1)的(例如,具有地址值114)的指针105的行1和行2的数据。某些实施例可具有总大小为x数量个行的存储器。44.硬件处理器100可包括一个或多个寄存器108,例如,控制寄存器或配置寄存器,诸如但不限于模型特定的寄存器(msr)或其他寄存器。在一个实施例中,存储在控制寄存器中的值用于改变(例如,控制)可选择的特征(例如,硬件处理器的特征)。45.硬件处理器100包括至存储器110的耦合(例如,连接)。存储器110可以是在硬件处理器本地的存储器(例如,系统存储器)。存储器110可以是与硬件处理器分开的存储器,例如,服务器的存储器。注意,本文中的附图可能没有描绘所有的数据通信连接。本领域技术人员将认识到,这样做是为了不使附图中的某些细节模糊。注意,附图中的双向箭头可以不要求双向通信,例如,它可以指示单向通信(例如,去往或来自那个部件或设备)。通信路径中的任一路径或所有组合可用于本文中的某些实施例。46.硬件处理器100包括存储器管理单元106,以例如执行和/或控制(例如,执行单元104)对存储器(的例如可寻址存储器112)的访问。在一个实施例中,硬件处理器包括至存储器的连接。附加地或替代地,存储器管理单元106可包括至存储器110(的例如可寻址存储器112和/或存储器损坏检测表116)的连接。47.某些实施例可例如在存储器管理单元中包括存储器损坏检测(mcd)特征。某些实施例可利用每个指针中的存储器损坏检测(mcd)值以及保持在存储器中的用于被指向的存储器的对应的(例如,匹配的)mcd值,该对应的(例如,匹配的)mcd值例如被保持为用于由指针指向的每个数据块的元数据(例如,描述其他数据的数据)。mcd值可以是位序列,例如,2位、3位、4位、5位、6位、7位、8位、9位、10位、11位、12位、13位、14位、15位、16位等。在一个实施例中,存储器损坏检测(mcd)硬件处理系统或处理器(例如,处理器或系统的存储器管理单元)用于验证由正由请求对存储器的访问的处理系统或处理器执行的应用的指令产生的指针。48.本文中的(例如,mmu电路的设置的)某些实施例利用存储器损坏检测的以下属性中的一项或多项:mcd被启用(例如,用于打开或关闭mcd特征);mcd位置(例如,用于定义指针中mcd值(元数据)的(多个)位的位置);受mcd保护的空间,例如,指针的最高有效的位的位置中的前缀(例如,用于定义将受架构保护的线性地址范围);以及mcd目录基址(例如,用于指向存储器mcd值(例如,元数据)表(例如,目录))。49.本文中的某些实施例允许将mcd值(例如,元数据位)灵活安置到指针中,例如,不限于最高有效位。本文中的某些实施例允许开拓较小的地址空间(例如,减小线性地址空间开销)和/或允许对(例如,64位)分页模式进行缩放。本文中的某些实施例允许通过受保护的空间选择(例如,选择将利用mcd来保护的(多个)地址,并且不利用mcd保护其他地址)、利用mcd对保存储器的仅子集(例如,部分)进行保护。50.在图1中,硬件处理器100的存储器管理单元106(例如,硬件存储器管理单元)可接收访问(例如,加载或存储)存储器110(例如,可寻址存储器112)的请求。该请求可包括(例如,具有地址值114)的指针105,该指针105例如作为指令的(例如,直接或间接的)操作数被传入。指针可将存储器损坏检测(mcd)值包括为该指针的部分(例如,字段)。存储器的多行块可包括用于那个块的mcd值,例如,用于那个块中的所有行的同一mcd值,并且用于那个块的mcd值用于与指向那个块的指针内的mcd值对应(例如,匹配)。存储器管理单元106(例如,存储器管理单元106的电路)可执行根据本公开的mcd验证检验(例如,以允许或拒绝访问)。51.图2图示根据本公开的实施例的存储器损坏检测(mcd)。处理系统或处理器可维护元数据表(例如,mcd表116或mcd表216),该元数据表存储用于存储器的块的多个行中的每一行的mcd值(例如,mcd标识符),存储器的块的多个行例如预定大小(例如,64字节,但是可利用其他行大小)的多个行。在一个实施例中,当存储器的块被分配给(例如,新创建的)存储器对象时,唯一的mcd值被生成,并且与那个块的一个或多个行相关联。mcd值可被存储在与正为该(例如,新创建的)存储器对象分配的存储器的块对应的一个或多个(例如,元数据)表条目中。在图2中,数据行1和数据行2被描绘为被分配给对象1(例如,作为数据块),并且mcd值(在此示出为“2”)在mcd表216中相关联,例如使得每个数据行与mcd表216中指示用于那个块的mcd值(例如,“2”)的条目相关联。在图2中,数据行3‑5被描绘为被分配给对象2(例如,作为数据块),并且mcd值(在此示出为“7”)在mcd表216中相关联,例如使得每个数据行与mcd表216中指示用于那个块的mcd值(例如,“7”)的条目相关联。在一个实施例中,mcd表216具有用于可寻址存储器112的每个对应行的mcd值字段。52.在某些实施例中,所生成的mcd值、或对应于或映射至用于数据块的所生成的mcd值的不同值被存储在指针的一个或多个位中,该指针例如是由存储器分配例程返回至请求存储器分配的应用的指针。在图2中,指针215包括mcd值字段215a和地址字段215b,该mcd值字段217a具有mcd值(“2”),该地址字段217b具有用于存储器的对象1块(的例如第一行)的(例如,线性)地址的值。在图2中,指针217包括mcd值字段217a和地址字段217b,该mcd值字段217a具有mcd值(“7”),该地址字段217b具有用于存储器的对象2块(的例如第一行)的(例如,线性)地址的值。53.在某些实施例中,响应于接收到存储器访问指令(例如,如从指令的操作码或对访问存储器的尝试中确定),处理系统或处理器将从mcd表检索到的(例如,用于将访问的数据块的)mcd值与来自由该存储器访问指令指定的指针(例如,从该指针提取)的mcd值进行比较。在一个实施例中,当这两个mcd值匹配时,准许对该数据块的访问。在一个实施例中,当这两个mcd值失配时,拒绝对该数据块的访问,例如,可生成页错误。在一个实施例中,mcd表(例如,mcd表116或mcd表216)可在存储器的线性地址空间中。在一个实施例中,(例如,在存储器管理单元(mmu)106中的)用于执行mcd验证检验的电路和/或逻辑用于访问存储器,但是该处理器(例如,执行单元)的其他部分用于不访问该存储器,除非mcd验证检验通过(例如,匹配为真)。在一个实施例中,对存储器的块的访问的请求是加载指令。在一个实施例中,对存储器的块的访问的请求是存储指令。54.在图2中,对存储器210的可寻址存储器212中的对象1块的访问的请求可(例如,由存储器管理单元)发起对指针215的读取,以获得mcd值字段215中的mcd值(“2”)和地址字段215b中的(例如,线性)地址。随后,系统(例如,处理器)可例如通过以下操作来执行验证检验:从存储器210中的mcd表加载mcd值以获得将访问的一个或多个行,并且将该mcd值与指向那一个或多个行的指针215中的mcd值进行比较。在某些实施例中,如果系统判定mcd值匹配(例如,在该实施例中,这两个mcd值都是“2”),则该系统允许对存储器(例如,仅数据行1、或者数据行1和2)的访问(例如,读取和/或写入)。在某些实施例中,如果不存在匹配,则拒绝请求(例如,作出请求的指令可出错)。在一个实施例中,对对象1块的访问的请求可包括对对象中的所有行(数据行1和数据行2)的访问的请求,并且系统可对数据行1执行验证检验(例如,如上文所讨论),并且可对数据行2执行第二验证检验。例如,系统(例如,处理器)可通过以下操作来对行2执行验证检验:从存储器210中的mcd表216加载用于行2的mcd值(例如,mcd值“2”),并且将该mcd值与指针215中的mcd值进行比较。在某些实施例中,如果系统判定mcd值匹配(例如,在该实施例中,这两个mcd值都是“2”),则该系统允许对存储器(例如,仅数据行2)的访问(例如,读取和/或写入)。55.图3图示根据本公开的实施例的具有地址字段300且不具有存储器损坏检测(mcd)值字段的指针格式301。在一个实施例中,地址字段301包含存储将访问的数据的数据行的线性地址。所图示的位的位置是示例。64位的指针大小是示例。56.图4图示根据本公开的实施例的具有地址字段401和存储器损坏检测(mcd)值字段403的指针格式400。在一个实施例中,mcd值字段403用于存储用于指针的mcd值,例如,其中由存储器分配例程将mcd值和用于指针的地址返回到请求存储器分配的应用。mcd值字段403可位于指针中的任何位置(例如,地方),例如,它不固定在一个位置。mcd值403可具有1位、2位、3位、4位、5位、6位、7位、8位、9位、10位等的大小。在一个实施例中,mcd值字段不在指针的最高有效或最低有效的1个、2个、3个、4个、5个、6个、7个、8个、9个、10个等的位中。在一个实施例中,指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。在一个实施例中,指针中的存储器损坏检测值的位置在第一位置、不同的第二位置以及不同的第三位置之间是能选择的。在一个实施例中,指针中的存储器损坏检测值的位置在第一位置、不同的第二位置、不同的第三位置以及不同的第四位置等之间是能选择的。在一个实施例中,多个不同的位置包括不重叠的一个或多个位的位置。在一个实施例中,多个不同的位置包括重叠的一个或多个位的位置。57.图5图示根据本公开的实施例的具有地址字段501、受存储器损坏检测(mcd)保护的空间字段505和存储器损坏检测(mcd)值字段503的指针格式500。在一个实施例中,地址字段501是存储将访问的数据的数据行的线性地址。在一个实施例中,mcd值字段503用于存储用于指针的mcd值。在一个实施例中,受mcd保护的空间字段505用于存储值,该值用于指示指针是否指向将使mcd验证检验被执行的存储器区域。58.在一个实施例中,每个指针中的存储器损坏检测值的位置例如在制造时、在设置时或例如在mcd特征激活期间通过应用(例如,软件,诸如但不限于操作系统)是能选择的。例如通过向控制(或配置)寄存器写入,可在硬件处理器中设置该位置。在一个实施例中,受mcd保护的空间(例如,存储器的哪个(些)子集受mcd特征保护)例如在制造时、在设置时或例如在mcd特征激活期间通过应用(例如,软件,诸如单不限于操作系统)是能选择的。例如通过向控制(或配置)寄存器写入,可在硬件处理器中设置受保护的空间(例如,少于所有的(可寻址)存储器)。在一个实施例中,mcd硬件和方法例如经由isa接口以例如通过软件(例如,os)来允许定义以下一项或多项:(1)指针中mcd值(例如,元数据)的位置,例如,指针中的线性地址中的哪些位用于存储mcd值;(2)受mcd保护的空间(例如,范围),其用于定义用于经历存储器损坏检测的存储器(例如,地址)的子集(以及例如存储器中将具有mcd值的地址行),例如,受mcd保护的空间可以是线性地址位前缀,该线性地址位前缀定义将经历存储器损坏检测(以及例如包含mcd值)的受保护的区域或存储器范围;以及(3)指向(多个)存储器mcd(例如,元数据)表的基址的指针(例如,线性地址指针)。在一个实施例中,例如通过使多个属性集合包括以上信息,存储器的多个子集(例如,区域)可受mcd保护。在一个实施例中,这些属性可通过寄存器(例如,控制和/或配置寄存器)来实现(例如,设置)。59.在一个实施例中,可使用以下表1中的伪代码来检验指针中的线性地址是否为受mcd保护的空间的部分(例如,使得将执行mcd验证检验)。表1la_prefix=la[63:(mcd.position 6)]if(mcd.enabled&&mcd.prefix==la_prefix)mcdchecklaagainstmcd.memorymetadatatable(mcd对照mcd.memorymetadatatable对线性地址检验la)在一个实施例中,存在多个区域(例如,具有对于每个区域的不同索引i的[i]),并且将受mcd保护的每个区域可通过以下一项或多项来定义:mcd[i].enabled(mcd[i].启用)、mcd[i].position(mcd[i].位置)mcd[i].protectedspace(mcd[i].受保护空间)(例如,mcd[i].prefix(mcd[i].前缀))和mcd[i].baseaddressofmcdtable(mcd[i].mcd表的基址)。在一个实施例中,受mcd保护的空间的(例如,任意的)顺序可以如表2中的针对n个受保护区域的以下伪代码:表2fori=1tonla_prefix=la[63:(mcd[i].position 6)]if(mcd[i].enabled&&mcd[i].prefix==la_prefix)mcdcheckagainstmcd[i].memorymetadatatable//对照mcd[i].memorymetadatatable进行mcd检验break如上文所述,mcd值为6位宽仅是示例,并且可利用其他大小。[0060]图6图示根据本公开的实施例的用于存储器损坏检测(mcd)的寄存器608的数据格式。虽然描绘了两个寄存器,但是可利用一个或更多个寄存器。在一个实施例中,控制或配置寄存器可以是模型特定的寄存器(msr)。mcd配置寄存器(cfgmsr)620可包括以下各项中的一项或多项:受存储器损坏检测(mcd)保护的空间字段622(例如,用于设置存储器的哪个子集将受本文中公开的mcd硬件和/或方法保护);大小字段626(例如,用于设置指针中和/或mcd表中的mcd值将包括的大小(例如,位的位置的数量));以及位置字段628(例如,用于设置指针中的哪些位将用作mcd值,例如,mcd值的第一个位的位置或最后一个位的位置)。在一个实施例中,一个或多个字段(例如,预留的字段624)可不用于mcd。mcd控制寄存器(ctrlmsr)630可包括以下各项中的一项或多项:mcd表字段的基址632(例如,其中基址加偏移(例如,距来自指针的(多个)行的地址的偏移)指示用于存储器中的对应行的mcd值)和启用字段638(例如,当设置(例如为1)时,启用mcd检验)。在一个实施例中,一个或多个字段(例如,预留的字段634)不用于mcd。在一个实施例中,预留的字段(例如,预留的字段624和/或预留的字段634)用于定义mcd验证的行为的不同模式。虽然列出了位的位置(例如,大小),但是这些是示例实施例,并且在某些实施例中可例如使用其他位的位置(例如,大小),并且在一些实施例中,位的位置也可以是固定的(例如,恒定的且不可配置的)。在一个实施例中,以上字段中的一个或多个可被包括在单个寄存器中,或者每个字段可处于其自身的寄存器中。[0061]对寄存器的写入(例如,存储指令)可设置字段中的一个或多个,例如,用于启用和/或设置mcd保护的来自软件的写入。可利用多组mcd配置和/或控制寄存器,例如,mcdcfgmsr[i]和mcdctrlmsr[i],例如,其中i可以是任何正整数。在一个实施例中,对于将受mcd保护的存储器的每个子集(例如,区域),存在不同的值i,例如,其中每个子集(例如,区域)可具有不同的mcd表(例如,由此具有不同的基址)和/或不同的大小、位置、受保护的空间、上述各项的组合,等等。[0062]图7图示根据本公开的实施例的具有存储器管理单元706的存储器损坏检测(mcd)系统700。在所描绘的实施例中,存储器管理单元706(例如,存储器管理电路)用于接收(例如,从配置和/或控制寄存器)将被启用的特征,这些特征例如,指针中的mcd值的位置和/或用于存储器中的行的mcd表的位置。在所描绘的实施例中,存储器管理单元706用于接收(例如,用于存储器访问请求的)指针。在一个实施例中,存储器管理单元706可对来自指针的地址值执行线性地址转换以确定由该指针指向的存储器的行的线性地址。在一个实施例中,存储器管理单元706从线性地址中去除指针中的mcd值。在一个实施例中,存储器管理单元将值插入到被去除的mcd的值的位的位置中。例如,来自被去除的值的所有被去除的位可用全零或全一替换,例如,匹配指针的最高有效位(例如,位的位置63)的值。可利用无mcd值的线性地址以获取用于存储器710的行的相关联的mcd值。随后,指针中的mcd值可与表中的用于被指向的那行的mcd值进行比较,以便(例如,由存储器管理单元706)判定是否存在匹配。在某些实施例中,如果mcd值匹配,则实现数据请求。在某些实施例中,如果mcd值不匹配,则拒绝数据请求。[0063]图8图示根据本公开的实施例的存储器管理单元806。在图8中的所描绘的电路中,硬件比较器840用于将受mcd保护的空间值(例如,示例为配置寄存器(例如,图6中的cfgmsr620)的位的位置63:(x 6))与指针的相同的位的位置(例如,63:(x 6))(例如,图5中的受mcd保护的空间字段中的线性地址前缀值)进行比较。在所描绘的实施例中,如果比较器的输出为真(例如,二进制1),并且mcd启用位被启用(例如,图6中ctrlmsr630中的启用字段638被设置为二进制1),则逻辑and(“与”)门842可输出信号(例如,二进制1)。来自逻辑and门的该1可以是去往多路复用器844的控制信号,并由此导致指针的输出(例如,线性地址),并且该指针的mcd值从中被去除。在所描绘的实施例中,被去除的mcd值位中的每一个由指针的最高有效的位的位置(位的位置63)中的值替换。作为去往多路复用器844的控制信号的零可导致原始指针的输出(例如,用于非受mcd保护的区域)。来自逻辑and门842的“1”输出可使逻辑and门848输出逻辑异或(xor)门对来自指针的mcd值(例如,(x 5):x)和指针中的mcd值中的位的数量乘以来自位63的位值的结果。在一个实施例中,这用于输出mcd值。在用于规范化的指针(例如,其中所有规范化的位完全相等的指针)的一个实施例中,xor门846用于输出mcd值0。在参照图16的实施例中,mcd值字段被存储在规范化的位(62:57)中的一些规范化的位中,并且在没有mcd的情况下,所有这些位将为0,并且在具有mcd的情况下,如果那些位为0,则意味着mcd值为0。在参照图16的一个实施例中,在位63为1的情况下,在没有mcd的情况下,所有那些位将是规范化的(例如,位63:56=1),并且在具有mcd的情况下,如果位62:57为1,则用位63对位62:57进行异或也将导致mcd值0。在一个实施例中,这使所有规范化的指针具有mcd值0,例如,这在软件实现中是有益的。去往and门848的零将导致输出零。来自逻辑and门842的1可以是作为输入指针正指向在受mcd保护的空间中的存储器行的信号的输出。来自逻辑and门842的0可以是作为输入指针正指向不在受mcd保护的空间中的存储器行的信号的输出。注意,6是mcd值的示例位大小,并且可使用其他大小。[0064]下文讨论某个尺寸的指针可唯一地标识的行的数量,例如,57位线性地址可允许指向128个千万亿字节(pb)的多个唯一指针。[0065]图9图示根据本公开的实施例的具有地址字段901且不具有存储器损坏检测(mcd)值字段的指针格式900。例如,5级分页操作系统(os)可支持(例如,指针900中的64位空间中的)地址字段901中的57位线性地址。其余七个高(例如,最高有效的)线性位可以是规范化的(例如,使得位63:57中的所有位都具有与位56相同的值)。[0066]图10图示根据本公开的实施例的具有地址字段1000且不具有存储器损坏检测(mcd)值字段的指针格式1001。例如,os可将正线性地址空间(例如,等于0的位63:56)给软件应用,并且预留负线性地址空间(例如,等于1的位63:56)供其自身使用。[0067]图11图示根据本公开的实施例的具有地址字段1101、位63:56中的受存储器损坏检测(mcd)保护的空间字段和存储器损坏检测(mcd)值字段1103的指针格式1100。例如,在具有用于应用线性地址空间且仍保留在规范化的地址范围内的mcd保护的实施例中,可(例如,在(多个)寄存器中)设置以下属性:mcd.enabled=真,mcd.position=50,并且mcd.prefix=00000000。[0068]图12a示出根据本公开的实施例的线性地址空间1200。所描绘的线性地址空间1200可以是(例如,由os)可寻址的完整的线性地址空间。所描绘的线性地址空间1200包括负规范化的线性地址空间1250、正规范化的线性地址空间1258、正非规范化的线性地址空间1256以及负非规范化的线性地址空间1254。在一个实施例中,非规范化线性地址空间1252包括其中位63:57各自不等于位56的地址。[0069]图12b图示根据本公开的实施例的图12a中的线性地址空间1200的部分的视图。更具体地,图12b是正线性地址空间(1256和1258)的放大视图。[0070]图12c图示根据本公开的实施例的图12b中的线性地址空间1200的、具有受存储器损坏检测(mcd)保护的空间1260的子集的部分的视图。在一个实施例中,受mcd保护的空间1260是64千万亿字节的正规范化的线性地址空间1258中的63千万亿字节的正规范化的线性地址空间,例如,留下未受mcd保护的1千万亿字节的正非规范化的线性地址空间1262。[0071]图13图示根据本公开的实施例的具有地址字段1301且不具有存储器损坏检测(mcd)值字段的指针格式1300。例如,mcd可(例如,由os)使用以保护其整个地址空间内的线性地址空间的子集。在一个实施例中,os可预留负地址范围供其自身使用,例如,如图13中所示,其中,位63:56等于1。[0072]图14图示根据本公开的实施例的具有地址字段1401、受存储器损坏检测(mcd)保护的空间字段1405(以及例如位63:56)和存储器损坏检测(mcd)值字段1403的指针格式1400。例如,在具有用于os线性地址空间的子集的mcd保护的实施例中,可(例如,在(多个)寄存器中)设置以下属性:mcd.enabled=真,mcd.position=41,并且mcd.prefix=11111111xxxxxxxxx(例如,其中xxxxxxxx是特定的9位值,其定义负线性地址空间中的哪个区域是受mcd保护的)。[0073]图15a示出根据本公开的实施例的线性地址空间1500。所描绘的线性地址空间1500可以是(例如,由os)可寻址的完整的线性地址空间。所描绘的线性地址空间1500包括负规范化的线性地址空间1550、正规范化的线性地址空间1558、正非规范化的线性地址空间1556以及负非规范化的线性地址空间1554。在一个实施例中,非规范化线性地址空间1552包括其中位63:57各自不等于位56的地址。[0074]图15b图示根据本公开的实施例的图15a中的线性地址空间1500的部分的视图。更具体地,图15b是负规范化线性地址空间1550的放大视图。[0075]图15c图示根据本公开的实施例的图15b中的线性地址空间1500的、具有受存储器损坏检测(mcd)保护的空间1560的子集的部分的视图。在一个实施例中,受mcd保护的空间1560是64千万亿的负规范化的线性地址空间1550中的128万亿字节的可用的线性地址空间。在一个实施例中,组合的受mcd保护的空间段1560和受mcd保护的空间段1560包含匹配mcd.prefix值(例如,111111xxxxxxxxx)的整个地址范围。在一个实施例中,受mcd保护的空间段1560b是其中指针的mcd值不为0的地址(例如,与图12c中的受mcd保护的空间1260相同)。在一个实施例中,受mcd保护的空间段1560a是其中指针mcd值为0的地址(例如,与图12c中的空间1262相同)。在某些实施例中,驻留在受mcd保护的空间段1560中的所有地址(例如,根据图8中的电路)经变换,并且实际的存储器操作将去往处于受mcd保护的空间段1560a中的地址。[0076]图16图示根据本公开的实施例的具有地址字段1601、存储器损坏检测(mcd)空间字段和存储器损坏检测(mcd)值字段1603的指针格式1600。例如,可(例如,在(多个)寄存器中)设置以下属性:mcd.enabled=真,mcd.position=57,并且mcd.prefix=0。[0077]图17a示出根据本公开的实施例的线性地址空间1700。所描绘的线性地址空间1700可以是(例如,由os)可寻址的完整的线性地址空间。所描绘的线性地址空间1700包括负规范化的线性地址空间1750、正规范化的线性地址空间1758、正非规范化的线性地址空间1756以及负非规范化的线性地址空间1754。在一个实施例中,非规范化线性地址空间1752包括其中位63:57各自不等于位56的地址。[0078]图17b图示根据本公开的实施例的图17a中的线性地址空间1700的部分的视图。更具体地,图17b是正线性地址空间(1758和1756)的放大视图。[0079]图17c图示根据本公开的实施例的图17b中的线性地址空间1700的、具有在正非规范化的线性地址空间1756中的受存储器损坏检测(mcd)保护的空间的子集的部分的视图。在一个实施例中,受mcd保护的空间在替代的段中,例如,在正非规范化的线性地址空间1756中。在一个实施例中,指针中的mcd值在规范化的位(62:57)中,但是位63是(例如,被要求是)规范化的,并且等于位56。在一个实施例中,这意味着其中位63等于位56的地址是受mcd保护的空间,而其中位63不等于位56的地址是非规范化的。在所描绘的实施例中,每个受mcd保护的空间段(例如,框)的大小为地址空间1758的大小,但是它们经压缩以便在该图中图示它们。[0080]图18示出根据本公开的实施例的流程图1800。流程图1800包括:1802:接收通过指向存储器的块的指针来访问该存储器的该块的请求;以及1804:当以存储器中的用于该块的存储器损坏检测值验证了指针中的存储器损坏检测值时,允许对该存储器的该块的访问,其中,指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。[0081]在一个实施例中,硬件处理器包括:执行单元,用于执行指令以通过指向存储器的块的指针来请求对所述存储器的所述块的访问;以及存储器管理单元,用于当以所述存储器中的用于所述块的存储器损坏检测值验证了所述指针中的存储器损坏检测值时,允许对所述存储器的所述块的访问,其中,所述指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。所述硬件处理器可包括控制寄存器,所述控制寄存器用于将所述位置设置为所述第一位置或所述不同的第二位置。所述硬件处理器可包括控制寄存器,所述控制寄存器用于设置用于所述存储器的子集的受存储器损坏检测保护的空间。所述指针可包括受存储器损坏检测保护的空间值,并且所述存储器管理单元可用于:当所述受存储器损坏检测保护的空间值不在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,无需以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值进行验证检验就允许对所述存储器的所述块的访问。所述指针可包括受存储器损坏检测保护的空间值,并且所述存储器管理单元可以当所述受存储器损坏检测保护的空间值在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值执行验证检验。所述硬件处理器可包括寄存器,所述寄存器用于存储所述存储器中的、包括用于所述块的存储器损坏检测值的存储器损坏检测表的基址。所述指针中的存储器损坏检测值的位置在第一位置、不同的第二位置以及不同的第三位置之间是能选择的。所述指针可包括所述存储器的所述块的线性地址。[0082]在另一实施例中,一种方法包括:接收通过指向存储器的块的指针来访问所述存储器的所述块的请求;以及当以所述存储器中的用于所述块的存储器损坏检测值验证了所述指针中的存储器损坏检测值时,允许对所述存储器的所述块的访问,其中,所述指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。所述方法可包括,将所述位置设置为所述第一位置或所述不同的第二位置。所述方法可包括:设置用于所述存储器的子集的受存储器损坏检测保护的空间。所述指针可包括受存储器损坏检测保护的空间值,并且所述方法可包括:当所述受存储器损坏检测保护的空间值不在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,无需以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值进行验证检验就允许对所述存储器的所述块的访问。所述指针可包括受存储器损坏检测保护的空间值,并且所述方法可包括:当所述受存储器损坏检测保护的空间值在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值执行验证检验。所述方法可包括:存储所述存储器中的、包括用于所述块的存储器损坏检测值的存储器损坏检测表的基址。所述指针中的存储器损坏检测值的位置在第一位置、不同的第二位置以及不同的第三位置之间是能选择的。所述指针可包括所述存储器的所述块的线性地址。[0083]在又一实施例中,一种系统包括:存储器;硬件处理器,所述硬件处理器包括执行单元,所述执行单元用于执行指令以通过指向存储器的块的指针来请求对所述存储器的所述块的访问;以及存储器管理单元,用于当以所述存储器中的用于所述块的存储器损坏检测值验证了所述指针中的存储器损坏检测值时,允许对所述存储器的所述块的访问,其中,所述指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。。所述系统可包括控制寄存器,所述控制寄存器用于将所述位置设置为所述第一位置或所述不同的第二位置。所述系统可包括控制寄存器,所述控制寄存器用于设置用于所述存储器的子集的受存储器损坏检测保护的空间。所述指针可包括受存储器损坏检测保护的空间值,并且所述存储器管理单元可用于:当所述受存储器损坏检测保护的空间值不在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,无需以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值进行验证检验就允许对所述存储器的所述块的访问。所述指针可包括受存储器损坏检测保护的空间值,并且所述存储器管理单元可以当所述受存储器损坏检测保护的空间值在用于所述存储器的所述子集的所述受存储器损坏检测保护的空间内时,以所述存储器中的用于所述块的存储器损坏检测值对所述指针中的存储器损坏检测值执行验证检验。所述系统可包括寄存器,所述寄存器用于存储所述存储器中的、包括用于所述块的存储器损坏检测值的存储器损坏检测表的基址。所述指针中的存储器损坏检测值的位置在第一位置、不同的第二位置以及不同的第三位置之间是能选择的。所述指针可包括所述存储器的所述块的线性地址。[0084]在另一实施例中,一种硬件处理器包括:用于执行指令以通过指向存储器的块的指针来请求对所述存储器的所述块的访问的装置;以及用于当以所述存储器中的用于所述块的存储器损坏检测值验证了所述指针中的存储器损坏检测值时允许对所述存储器的所述块的访问的装置,其中,所述指针中的存储器损坏检测值的位置在第一位置与不同的第二位置之间是能选择的。[0085]在又一实施例中,一种装置包括数据存储设备,所述数据存储设备存储代码,所述代码当由硬件处理器执行时使所述硬件处理器执行本文中公开的方法。装置可以如在具体实施方式中所述。方法可以如在具体实施方式中所述。[0086]指令集可以包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定将要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段具有不同的位的位置,因为较少的字段被包括)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果经定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。已经推出和/或发布了被称为高级向量扩展(avx)(avx1和avx2)和利用向量扩展(vex)编码方案的simd扩展集(参见例如2015年9月的64和ia‑32架构软件开发者手册;以及参见2015年8月的架构指令集扩展编程参考)。示例性核架构、处理器和计算机架构[0087]处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。示例性核架构有序和乱序核框图[0088]图19a是图示根据本公开的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图19b是示出根据本公开的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图19a‑图19b中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。[0089]在图19a中,处理器流水线1900包括取出级1902、长度解码级1904、解码级1906、分配级1908、重命名级1910、调度(也被称为分派或发布)级1912、寄存器读取/存储器读取级1914、执行级1916、写回/存储器写入级1918、异常处置级1922和提交级1924。[0090]图19b示出处理器核1990,该处理器核1990包括前端单元1930,该前端单元1930耦合到执行引擎单元1950,并且前端单元1930和执行引擎单元1950两者都耦合到存储器单元1970。核1990可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核1990可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。[0091]前端单元1930包括分支预测单元1932,该分支预测单元1932耦合到指令高速缓存单元1934,该指令高速缓存单元1934耦合到指令转换后备缓冲器(tlb)1936,该指令转换后备缓冲器1936耦合到指令取出单元1938,该指令取出单元1938耦合到解码单元1940。解码单元1940(或解码器或解码单元)可对指令(例如,宏指令)解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1940可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1990包括存储用于某些宏指令的微代码的微代码rom或其他介质(例如,在解码单元1940中,或以其他方式在前端单元1930内)。解码单元1940耦合到执行引擎单元1950中的重命名/分配器单元1952。[0092]执行引擎单元1950包括重命名/分配器单元1952,该重命名/分配器单元1952耦合到引退单元1954和一个或多个调度器单元的集合1956。(多个)调度器单元1956表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元1956耦合到(多个)物理寄存器堆单元1958。(多个)物理寄存器堆单元1958中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,(多个)物理寄存器堆单元1958包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元1958由引退单元1954重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元1954和(多个)物理寄存器堆单元1958耦合到(多个)执行集群1960。(多个)执行集群1960包括一个或多个执行单元的集合1962以及一个或多个存储器访问单元的集合1964。执行单元1962可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元1956、(多个)物理寄存器堆单元1958和(多个)执行集群1960示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元1964的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。[0093]存储器访问单元的集合1964耦合到存储器单元1970,该存储器单元1970包括数据tlb单元1972,该数据tlb单元1972耦合到数据高速缓存单元1974,该数据高速缓存单元1974耦合到第二级(l2)高速缓存单元1976。在一个示例性实施例中,存储器访问单元1964可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元1970中的数据tlb单元1972。指令高速缓存单元1934还耦合到存储器单元1970中的第二级(l2)高速缓存单元1976。l2高速缓存单元1976耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。[0094]作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1900:1)指令取出1938执行取出级1902和长度解码级1904;2)解码单元1940执行解码级1906;3)重命名/分配器单元1952执行分配级1908和重命名级1910;4)(多个)调度器单元1956执行调度级1912;5)(多个)物理寄存器堆单元1958和存储器单元1970执行寄存器读取/存储器读取级1914;执行集群1960执行执行级1916;6)存储器单元1970和(多个)物理寄存器堆单元1958执行写回/存储器写入级1918;7)各单元可牵涉到异常处置级1922;以及8)引退单元1954和(多个)物理寄存器堆单元1958执行提交级1924。[0095]核1990可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的mips技术公司的mips指令集;加利福尼亚州桑尼维尔市的arm控股公司的arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1990包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。[0096]应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如超线程化技术中的同时多线程化)。[0097]尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元1934/1974以及共享的l2高速缓存单元1976,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(l1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。具体的示例性有序核架构[0098]图20a‑图20b图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器i/o接口和其他必要的i/o逻辑进行通信。[0099]图20a是根据本公开的实施例的单个处理器核以及它至管芯上互连网络2002的连接及其第二级(l2)高速缓存的本地子集2004的框图。在一个实施例中,指令解码单元2000支持具有紧缩数据指令集扩展的x86指令集。l1高速缓存2006允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元2008和向量单元2010使用分开的寄存器集合(分别为标量寄存器2012和向量寄存器2014),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(l1)高速缓存2006读回,但是本公开的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。[0100]l2高速缓存的本地子集2004是全局l2高速缓存的一部分,该全局l2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的l2高速缓存的本地子集2004的直接访问路径。由处理器核读取的数据被存储在其l2高速缓存子集2004中,并且可以与其他处理器核访问其自身的本地l2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的l2高速缓存子集2004中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、l2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。[0101]图20b是根据本公开的实施例的图20a中的处理器核的一部分的展开图。图20b包括l1高速缓存2004的l1数据高速缓存2006a部分,以及关于向量单元2010和向量寄存器2014的更多细节。具体地,向量单元2010是16宽向量处理单元(vpu)(见16宽alu2028),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该vpu通过混合单元2020支持对寄存器输入的混合,通过数值转换单元2022a‑b支持数值转换,并且通过复制单元2024支持对存储器输入的复制。写掩码寄存器2026允许预测所得的向量写入。[0102]图21是根据本公开的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器2100的框图。图21中的实线框图示具有单个核2102a、系统代理2110、一个或多个总线控制器单元的集合2116的处理器2100,而虚线框的任选增加图示具有多个核2102a‑n、系统代理单元2110中的一个或多个集成存储器控制器单元的集合2114以及专用逻辑2108的替代处理器2100。[0103]因此,处理器2100的不同实现可包括:1)cpu,其中专用逻辑2108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核2102a‑n是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核2102a‑n是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核2102a‑n是大量通用有序核。因此,处理器2100可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器2100可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。[0104]存储器层次结构包括核内的一个或多个高速缓存级别、一个或多个共享高速缓存单元的集合2106、以及耦合到集成存储器控制器单元的集合2114的外部存储器(未示出)。共享高速缓存单元的集合2106可包括一个或多个中间级别的高速缓存,诸如,第二级(l2)、第三级(l3)、第四级(l4)或其他级别的高速缓存、末级高速缓存(llc)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元2112将集成图形逻辑2108、共享高速缓存单元的集合2106以及系统代理单元2110/(多个)集成存储器控制器单元2114互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元2106与核2102a‑n之间维持一致性。[0105]在一些实施例中,一个或多个核2102a‑n能够实现多线程化。系统代理2110包括协调和操作核2102a‑n的那些部件。系统代理单元2110可包括例如功率控制单元(pcu)和显示单元。pcu可以是对核2102a‑n以及集成图形逻辑2108的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。[0106]核2102a‑n在架构指令集方面可以是同构的或异构的;即,核2102a‑n中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例性计算机架构[0107]图22‑25是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。[0108]现在参考图22,所示出的是根据本公开一个实施例的系统2200的框图。系统2200可以包括一个或多个处理器2210、2215,这些处理器耦合到控制器中枢2220。在一个实施例中,控制器中枢2220包括图形存储器控制器中枢(gmch)2290和输入/输出中枢(ioh)2250(其可以在分开的芯片上);gmch2290包括存储器和图形控制器,存储器2240和协处理器2245耦合到该存储器和图形控制器;ioh2250将输入/输出(i/o)设备2260耦合到gmch2290。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器2240和协处理器2245直接耦合到处理器2210,并且控制器中枢2220与ioh2250处于单个芯片中。存储器2240可包括存储器损坏检测模块2240a,该存储器损坏检测模块2240a例如用于存储代码,该代码当被执行时使处理器执行本公开的任何方法。在另一实施例中,存储器损坏检测模块2240a驻留在处理器内,并且与存储器2240通信。[0109]附加的处理器2215的任选性在图22中通过虚线来表示。每一处理器2210、2215可包括本文中描述的处理核中的一个或多个,并且可以是处理器2100的某一版本。[0110]存储器2240可以是例如动态随机存取存储器(dram)、相变存储器(pcm)或这两者的组合。对于至少一个实施例,控制器中枢2220经由诸如前端总线(fsb)之类的多分支总线、诸如快速路径互连(qpi)之类的点对点接口、或者类似的连接2295来与(多个)处理器2210、2215进行通信。[0111]在一个实施例中,协处理器2245是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。在一个实施例中,控制器中枢2220可以包括集成图形加速器。[0112]在物理资源2210、2215之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。[0113]在一个实施例中,处理器2210执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器2210将这些协处理器指令识别为具有应当由附连的协处理器2245执行的类型。因此,处理器2210在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器2245。(多个)协处理器2245接受并执行所接收的协处理器指令。[0114]现在参见图23,所示出的是根据本公开的实施例的第一更具体的示例性系统2300的框图。如图23中所示,多处理器系统2300是点对点互连系统,并且包括经由点对点互连2350耦合的第一处理器2370和第二处理器2380。处理器2370和2380中的每一个都可以是处理器2100的某一版本。在本公开的一个实施例中,处理器2370和2380分别是处理器2310和2215,而协处理器2338是协处理器2245。在另一实施例中,处理器2370和2380分别是处理器2210和协处理器2245。[0115]处理器2370和2380示出为分别包括集成存储器控制器(imc)单元2372和2382。处理器2370还包括作为其总线控制器单元的一部分的点对点(p‑p)接口2376和2378;类似地,第二处理器2380包括p‑p接口2386和2388。处理器2370、2380可以经由使用点对点(p‑p)接口电路2378、2388的p‑p接口2350来交换信息。如图23中所示,imc2372和2382将处理器耦合到相应的存储器,即存储器2332和存储器2334,这些存储器可以是本地附连到相应处理器的主存储器的部分。[0116]处理器2370、2380可各自经由使用点对点接口电路2376、2394、2386、2398的各个p‑p接口2352、2354来与芯片组2390交换信息。芯片组2390可以任选地经由高性能接口2339来与协处理器2338交换信息。在一个实施例中,协处理器2338是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。[0117]共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由p‑p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。[0118]芯片组2390可以经由接口2396耦合到第一总线2316。在一个实施例中,第一总线2316可以是外围部件互连(pci)总线或诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本公开的范围不限于此。[0119]如图23中所示,各种i/o设备2314可连同总线桥2318一起耦合到第一总线2316,该总线桥2318将第一总线2316耦合到第二总线2320。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器2315耦合到第一总线2316。在一个实施例中,第二总线2320可以是低引脚数(lpc)总线。在一个实施例中,各种设备可耦合到第二总线2320,这些设备包括例如键盘和/或鼠标2322、通信设备2327以及存储单元2328,该存储单元2328诸如可包括指令/代码和数据2330的盘驱动器或者其他大容量存储设备。此外,音频i/o2324可以被耦合到第二总线2320。注意,其他架构是可能的。例如,代替图23的点对点架构,系统可以实现多分支总线或其他此类架构。[0120]现在参考图24,示出的是根据本公开的实施例的第二更具体的示例性系统2400的框图。图23和24中的类似元件使用类似的附图标记,并且从图24中省略了图23的某些方面以避免混淆图24的其他方面。[0121]图24图示处理器2370、2380可分别包括集成存储器和i/o控制逻辑(“cl”)2372和2382。因此,cl2372、2382包括集成存储器控制器单元,并包括i/o控制逻辑。图24图示不仅存储器2332、2334耦合到cl2372、2382,而且i/o设备2414也耦合到控制逻辑2372、2382。传统i/o设备2415被耦合到芯片组2390。[0122]现在参考图25,示出的是根据本公开的实施例的soc2500的框图。图21中的类似要素使用类似的附图标记。另外,虚线框是更先进的soc上的任选的特征。在图25中,(多个)互连单元2502被耦合到:应用处理器2510,其包括一个或多个核的集合202a‑n的集合以及(多个)共享高速缓存单元2106;系统代理单元2110;(多个)总线控制器单元2116;(多个)集成存储器控制器单元2114;一个或多个协处理器的集合2520,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元2530;直接存储器访问(dma)单元2532;以及用于耦合到一个或多个外部显示器的显示单元2540。在一个实施例中,(多个)协处理器2520包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、或嵌入式处理器,等等。[0123]本文公开的(例如,机制的)各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本公开的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。[0124]可将程序代码(诸如,图23中图示的代码2330)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。[0125]程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。[0126]至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。[0127]此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd‑rom)、可重写紧致盘(cd‑rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。[0128]因此,本公开的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。仿真(包括二进制变换、代码变形等)[0129]在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。[0130]图26是根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图26示出可使用x86编译器2604来编译高级语言2602形式的程序,以生成可由具有至少一个x86指令集核的处理器2616原生执行的x86二进制代码2606。具有至少一个x86指令集核的处理器2616表示通过兼容地执行或以其他方式执行以下各项来执行与具有至少一个x86指令集核英特尔处理器基本相同的功能的任何处理器:(1)英特尔x86指令集核的指令集的本质部分,或(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器2604表示可操作用于生成x86二进制代码2606(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器2616上执行。类似地,图26示出可以使用替代的指令集编译器2608来编译高级语言2602形式的程序,以生成可以由不具有至少一个x86指令集核的处理器2614(例如,具有执行加利福尼亚州桑尼维尔市的mips技术公司的mips指令集、和/或执行加利福尼亚州桑尼维尔市的arm控股公司的arm指令集的核的处理器)原生执行的替代的指令集二进制代码2610。指令转换器2612用于将x86二进制代码2606转换成可以由不具有x86指令集核的处理器2614原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码2610相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2612通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2606的软件、固件、硬件或其组合。当前第1页12当前第1页12
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜