存储器写日志存储处理器、方法、系统和指令与流程

文档序号:18414188发布日期:2019-08-13 19:07阅读:203来源:国知局
存储器写日志存储处理器、方法、系统和指令与流程

本文描述的实施例一般涉及处理器。更具体地,本文描述的实施例一般涉及日志记录关于处理器的操作的信息。



背景技术:

处理器一般能够执行指令以访问存储器。例如,处理器可执行加载或读取指令以从存储器加载或读取数据,并且存储或写指令以将数据存储到或写入存储器。

为了有助于提高性能,处理器通常具有至少一个高速缓存,或者常常具有包括处于不同高速缓存级别的多个高速缓存的高速缓存层级。高速缓存中的每一个可表示相对小的快速访问本地存储,其比系统存储器相对更接近核、硬件线程或其他逻辑处理器(例如,其算术和逻辑执行单元)。通过示例的方式,处理器可包括最接近逻辑处理器的第一级或一级(l1)高速缓存,可选地包括接下来最接近逻辑处理器的第二级或二级(l2)高速缓存,并且可选地包括离逻辑处理器最远并且最接近系统存储器的第三级或三级(l3)高速缓存。

在操作期间,高速缓存可用于高速缓存或临时存储已从系统存储器加载到处理器中的数据。随后,当处理器想要从系统存储器读取相同的数据,或者写入来自系统存储器数据时,处理器可首先检查来看数据的副本当前是否被存储在高速缓存中。如果在高速缓存中存储数据,相比于必须从系统存储器访问数据的情况,可从高速缓存中更快地访问数据。或者,如果数据未被存储在高速缓存中,可发生高速缓存丢失。通过示例的方式,如果l1数据高速缓存中存在高速缓存丢失,l1数据高速缓存(例如,其对应的l1数据高速缓存控制器)可检查来看所寻找的数据是否在一个或多个其他高速缓存(例如,l2高速缓存和/或l3高速缓存)中。如果数据未被存储在任何高速缓存中,则可从系统存储器获得数据,并将其作为高速缓存线存储在高速缓存中(例如,在l1数据高速缓存中)。

附图说明

通过参考用于图示实施例的以下描述和附图,可最好地理解本发明的实施例。在图中:

图1是处理器的实施例的框图。

图2是实行开始存储器写日志指令的实施例的方法的实施例的流程框图。

图3是具有处理器的实施例的系统的框图,该处理器可操作以实行开始存储器写日志指令的实施例。

图4是响应于和/或由于开始存储器写日志指令的实施例而生成并存储专用存储器地址日志的示例性实施例和专用数据项日志的示例性实施例二者的执行单元的实施例的框图。

图5是组合的存储器地址和数据项日志的示例性实施例的框图。

图6是将存储器地址存储到存储器地址日志并且可选地将数据项存储到数据项日志的方法的实施例的流程框图。

图7是确定是否已发生结束存储器写日志条件的方法的实施例的流程框图。

图8是实行开始存储器写日志指令的另一实施例的方法的另一实施例的流程框图。

图9是专用时间日志的示例性实施例的框图。

图10是组合的存储器地址和时间日志的示例性实施例的框图。

图11是用于执行或实行开始存储器写日志指令的实施例的执行单元的详细示例性实施例的框图。

图12是用于执行或实行开始存储器写日志指令的实施例的执行单元的更详细示例性实施例的框图。

图13是可操作以实行结束存储器写日志指令的实施例的处理器的实施例的框图。

图14a-14b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。

图14a是图示根据本发明的实施例的通用向量友好指令格式及其a类指令模板的框图。

图14b是图示根据本发明的实施例的通用向量友好指令格式及其b类指令模板的框图。

图15a是图示根据本发明的实施例的示范性特定向量友好指令格式的框图。

图15b是图示根据本发明的一个实施例的构成完整操作码字段的特定向量友好指令格式的字段的框图。

图15c是图示根据本发明的一个实施例的构成寄存器索引字段的特定向量友好指令格式的字段的框图。

图15d是图示根据本发明的一个实施例的构成扩增操作字段的特定向量友好指令格式的字段的框图。

图16是根据本发明的一个实施例的寄存器架构的框图。

图17a是图示根据本发明的实施例的示范性有序流水线和示范性寄存器重命名、无序发布/执行流水线二者的框图。

图17b是图示根据本发明的实施例的要被包括在处理器中的有序架构核的示范性实施例和示范性寄存器重命名、无序发布/执行架构核二者的框图。

图18a-b图示更具体的示范性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)之一。

图19是根据本发明的实施例的可具有多于一个核、可具有集成存储器控制器并且可具有集成图形装置的处理器的框图。

图20示出根据本发明的一个实施例的系统的框图。

图21是根据本发明的实施例的第一更特定的示范性系统的框图。

图22是根据本发明的实施例的第二更特定的示范性系统的框图。

图23是根据本发明的实施例的soc的框图。

图24是根据本发明的实施例的对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。

具体实施方式

本文公开的是开始存储器写日志指令和结束存储器写日志指令的实施例。还公开用于实行这些指令中的一个或多个的处理器的实施例,当实行这些指令中的一个或多个时由处理器实行的方法的实施例,包含用于实行这些指令中的一个或多个的一个或多个处理器的系统的实施例,以及提供这些指令中的一个或多个的程序或机器可读介质的实施例。在以下描述中,阐述许多特定细节(例如,特定指令操作、操作序列、数据结构类型、处理器配置、可能的微架构实施方式细节等)。然而,可在没有这些具体细节的情况下实践实施例。在其他实例中,尚未详细示出公知的电路、结构和技术,以避免模糊对描述的理解。

图1是处理器100的实施例的框图。在一些实施例中,处理器可以是通用处理器(例如,在台式计算机、膝上型计算机、智能电话或其他计算机中使用的类型的通用微处理器或中央处理单元(cpu))。替换地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(dsp)和控制器(例如,微控制器)。通常,处理器可被放置在至少一个集成电路或半导体管芯上。通常,处理器可包括至少一些硬件(例如,晶体管、存储电路级指令/控制信号的非易失性存储器、集成电路等等)。

处理器可具有和/或以指令集架构(isa)为特征。isa表示与编程相关的处理器的架构的一部分,并且通常包括处理器的本机指令(即指令集的指令)、架构寄存器、数据类型、寻址模式、存储器架构等等。isa与微架构不同,微架构一般表示用于实现isa的特定处理器设计技术。处理器可具有各种复杂指令集计算(cisc)架构、精简指令集计算(risc)架构、超长指令字(vliw)架构、混合架构、其他类型的架构、或者具有不同架构的组合(例如,不同的核可能具有不同的架构)中的任一个。

在一些实施例中,处理器的指令集可以可选地包括开始存储器写日志指令,并且处理器可包括用于实行开始存储器写日志指令的逻辑102。通过示例的方式,这样的逻辑可包括解码单元或者其他单元或逻辑以解码开始存储器写日志指令,以及执行单元或者其他单元或逻辑以执行或实行开始存储器写日志指令。在一些实施例中,开始存储器写日志指令的执行或实行可促使执行单元和/或逻辑和/或处理器开始存储器写日志记录并且存储包含关于至少一些写入到存储器的信息的一个或多个日志。通过示例的方式,这样的信息可包括写入的存储器地址、对应于写入的高速缓存线或其他数据项、正在实行写入的时间、与写入相关联的存储器地址上下文或元数据(例如,实行写入的过程的标识符)等等、或其各种组合。在各种实施例中,可仅对数据项的初始或首次写入(例如,通常由于写入而在修改之前的原始/初始数据项,但是替换地可以是由于写入而在修改之后的数据项)、对数据项的所有写入(例如,初始和后续二者)或者仅对数据项的最后/最终写入日志记录这样的信息。

再次参考图1,在一些实施例中,处理器的指令集可以可选地包括结束存储器写日志指令,并且处理器可包括用于实行结束存储器写日志指令的逻辑104。通过示例的方式,这样的逻辑可包括解码单元或者其他单元或逻辑以解码结束存储器写日志指令,以及执行单元或者其他单元或逻辑以执行或实行结束存储器写日志指令。在一些实施例中,结束存储器写日志指令的执行或实行可促使执行单元和/或逻辑和/或处理器以停止或结束存储器写日志记录并存储关于一个或多个日志的信息,一个或多个日志由于开始存储器写日志指令而被存储。在一些实施例中,这样的信息可包括指示一个或多个日志的结束和/或大小的信息。例如,这样的信息可包括一个或多个存储器指针、偏移或者指示一个或多个最后或最终存储器位置的其他信息,其中信息(例如,存储器地址、数据项或时间)被存储在一个或多个日志中。

在一些实施例中,指令集可以可选地包括开始和结束存储器写日志指令二者,并且处理器可以可选地包括逻辑102和逻辑104二者。在其他实施例中,指令集可以可选地仅包括指令中的任一个(但不是二者),并且仅包括逻辑102、104中的任一个(但不是二者)。作为一个示例,可能可选地省略用于实行结束存储器写日志指令的逻辑104,并且可以其他方式代替地结束由于开始存储器写日志指令的存储器写日志记录。通过示例的方式,在固定或指定的时间(例如,由开始存储器写日志指令所指定)到期,固定或指定数量的写入或初始写入(例如,由开始存储器写日志指令所指定)结束时,当没有进一步的资源来继续实现存储器写日志记录(例如,没有进一步的资源来跟踪初始写入)时等,可结束存储器写日志记录。作为另一示例,可能可选地省略用于实行开始存储器写日志指令的逻辑102,并且可以其他方式启动或开始存储器写日志记录。通过示例的方式,可实行多个不同的指令以开始针对不同类型的数据的日志记录,可通过软件等来实行该日志记录,等等。

图2是实行开始存储器写日志指令的实施例的方法206的实施例的流程框图。在各种实施例中,方法206可由处理器、指令处理装置、数字逻辑器件或集成电路实行。

该方法包括在块207处提取或以其他方式接收开始存储器写日志指令。在各个方面,可在处理器或其一部分(例如,指令提取单元、解码单元、总线接口单元等)处接收指令。在各个方面,可从处理器外和/或远离管芯的源(例如,从存储器、互连等)或从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列等)接收指令。开始存储器写日志指令可指定或以其他方式指示至少一个目的地存储器地址信息。可以如下面进一步讨论的以各种不同的方式来指示目的地存储器地址信息。

该方法还包括:在块208处,响应于和/或由于开始存储器写日志指令而为对对应数据项(例如,高速缓存线或高速缓存线的部分)的至少所有初始写入将存储器地址存储到存储器中的存储器地址日志,该至少所有初始写入在开始存储器写日志指令之后以原始程序顺序发生。存储器地址日志的起始可对应于目的地存储器地址信息(例如,在寻址的目的地存储器位置的起始处)。如本文所使用的,术语“日志”广泛地表示用于存储感兴趣的信息(例如,特别应用)的摘要或其他数据结构。

在一些实施例中,该方法可以可选地包括:在块209处,响应于和/或由于开始存储器写日志指令,为对对应数据项的至少所有初始写入将对应数据项存储到存储器中的数据项日志。如由虚线所指示,存储数据项是可选的而不是必需的。其他实施例可能可选地省略存储数据项。

在一些实施例中,可能可选地仅为所有初始写入而不为任何后续写入存储存储器地址和对应数据项。对于这样的实施例,通常数据项可表示由于相关联的初始写入而在修改之前的初始/原始数据项(但是替换地,可能是由于相关联的初始写入而在修改之后的修改的数据项)。在其他实施例中,可能可选地为所有写入(例如,所有初始写入和所有后续写入两者)存储存储器地址和对应数据项。在另外其他实施例中,可能可选地仅为最终写入(无论它们是初始写入还是后续写入)存储存储器地址和对应数据项。

在一些实施例中,数据项可被可选地存储到与存储器地址日志分开或截然不同的专用数据项日志。通过示例的方式,下面针对图4进一步示出和描述的专用数据项日志和存储器地址日志是合适的,但不是必需的。替换地,存储器地址和数据项二者都可被可选地存储到组合的存储器地址和数据项日志。通过示例的方式,下面针对图5进一步示出和描述的组合的存储器地址和数据项日志是合适的,但不是必需的。

如本文所使用的,将存储器地址、数据项和其他数据存储到日志包括存储未改变或未变换的这样的数据以及存储变换的这样的数据二者,诸如例如通过压缩数据、加密数据、将奇偶或其他冗余数据添加到存储的数据等等。在这样的数据变换的情况下,该方法还可能可选地包括通过压缩、加密、添加冗余等等来变换数据。

已经以相对基本的形式描述了该方法。然而,可能可选地从该方法中移除操作和/或向该方法添加操作。例如,在另一实施例中,可能可选地省略在块209处存储数据项和/或可能可选地添加存储其他数据(例如,写入存储器的次数)。作为另一示例,该方法可能可选地包括以下中的任何一个或多个或者任何组合:(1)更新一个或多个存储器指针、存储器偏移或其他存储器地址相关值;(2)确定对存储器的写入是对存储器的初始写入(在开始实行开始存储器写日志指令之后)还是对存储器的后续写入;(3)检测或确定是否已经发生结束存储器写日志条件。在一些实施例中,用于检测或确定是否已经发生结束存储器写日志条件的微架构操作可能可选地包括以下中的一个或多个:(1)检测或确定是否已经实行结束存储器写日志指令;以及(2)检测或确定缺少可用于继续实现开始存储器写日志指令的附加资源(例如,继续跟踪向存储器的所有初始写入)。另外,虽然流程图示出根据实施例的操作顺序,但该顺序是示范性的。替换实施例可以不同顺序实行某些操作,组合某些操作,在临时地重叠某些操作等。例如,块208和209的操作可以相反的顺序实行或者至少部分地同时实行。

图3是具有处理器300的实施例的系统310的框图,处理器300可操作以实行开始存储器写日志指令312的实施例。在一些实施例中,处理器300可操作以实行图2的方法206。为处理器300描述的组件、特征和特定可选细节也可以可选地应用于方法206。替换地,方法206可能可选地由类似或不同的处理器或装置实行和/或在类似或不同的处理器或装置内实行。此外,处理器300可能可选地实行与方法206相同、类似或不同的方法。

在各种实施例中,系统310可表示台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、服务器、网络设备(例如,路由器或交换机)、智能电视、电视电缆接收器、视频游戏控制台、自主驾驶交通工具或者其他类型的计算机系统或电子设备。

该系统包括处理器300和存储器层级329。存储器层级可包括一个或多个高速缓存322(例如,在一个或多个高速缓存级别)、系统主存储器或主要存储器328、以及系统辅助或后备存储器(未示出)。系统主存储器或主要存储器可包括动态随机存取存储器(dram)或其他常规易失性存储器,在一些情况下可能可选地包括表示系统主存储器或主要存储器的一部分的可选非易失性或持久性存储器或存储,或者其组合。处理器和系统存储器可通过各种类型的耦合机制中的任何一种(例如,通过一个或多个总线、互连、集线器、存储器控制器、芯片组组件及其组合)耦合或以其他方式彼此通信。处理器可能可选地是先前针对图1描述的各种类型中的任何一种(例如,通用或专用处理器,具有cisc、risc或vliw架构)。尽管在系统中示出处理器以便更好地图示某些概念,但是应理解:其他实施例在包含在这样的系统中之前仅涉及处理器(例如,没有系统主存储器或主要存储器情况下的处理器)。

再次参考图3,处理器可被耦合以接收开始存储器写日志指令312(例如,通过总线或其他互连而从系统主存储器或主要存储器)。开始存储器写日志指令可表示宏指令、机器语言指令、机器代码指令、处理器本身能够解码的指令、或者处理器的指令集的其他指令。在一些实施例中,开始存储器写日志指令可明确地指定(例如,通过指令编码中的一个或多个字段或一组位),或以其他方式指示(例如,隐含地指示)第一目的地存储器地址信息319。第一目的地存储器地址信息可指向、寻址或以其他方式指示(可能与其他存储器地址信息一起,这取决于正在使用的存储器寻址模式)系统主存储器或主要存储器中的第一目的地存储器位置330,其中存储器地址日志332(即,第一日志)要被存储。在一些实施例中,开始存储器写日志指令可能可选地还明确指定或以其他方式指示第二目的地存储器地址信息320,但这不是必需的。第二目的地存储器地址信息可指向、寻址或以其他方式指示(可能与其他存储器地址信息一起,这取决于正在使用的存储器寻址模式)系统主存储器或主要存储器中第二不同目的地存储器位置334,其中数据项日志336(即第二日志)要被存储。如果还可选地存储一个或多个其他专用日志以存储本文公开的各种其他类型的写相关元数据或信息,可类似地提供一个或多个附加的目的地存储器地址信息。

第一目的地存储器地址信息319和可选的第二目的地存储器地址信息320可具有各种不同的类型,并且可以各种不同的方式来指示。通常,存储器地址信息可表示存储器指针、存储器指针的一部分、偏移或者可以用于导出或生成存储器地址的其他信息。如所示的,在一些实施例中,第一和可选的第二目的地存储器地址信息可被可选地存储在处理器的一组通用寄存器318中。在这样的实施例中,指令可明确地指定(例如,通过其编码中的一个或多个位、寄存器指定字段等),或以其他方式指示(例如,隐含地指示)用于存储第一目的地存储器地址信息的第一源通用寄存器。同样地,指令可明确地指定或以其他方式指示用于存储第二目的地存储器地址信息的第二源通用寄存器。

为了图示隐含指示,固定的通用寄存器可能可选地对于指令隐含(例如,对于指令的操作码隐含),并且处理器可隐含地或固有地理解当它识别指令时(例如,当它解码指令操作码时)而指令无需具有用于指定寄存器的任何非操作码位时在该隐含的固定通用寄存器中查找存储器地址信息。开始存储器写日志指令可具有操作码,有时称为操作代码(例如,一组位或一个或多个字段),以识别要实行的指令和/或操作(例如,开始存储器写日志操作)。替换地,可能可选地在指令的立即数中提供或以其他方式提供第一和可选的第二目的地存储器地址信息中的一个或多个。取决于正在使用的存储器寻址模式,第一和可选的第二目的地存储器地址信息可各自可选地与附加存储器地址信息组合以生成标识目的地存储器位置的完整存储器地址。这样的附加存储器地址信息可在指令的编码时被存储在另一寄存器(例如,数据段寄存器、扩展段寄存器或其他存储器地址寄存器)中,或者被以其他方式提供。

通用寄存器318中的每一个可表示用于可操作以存储数据的管芯上和/或集成电路上存储位置。寄存器可表示架构可见或架构寄存器,该架构可见或架构寄存器对软件和/或编程器可见和/或是可由处理器的指令集的指令指示以识别操作数的寄存器。寄存器可在不同的微架构中以不同的方式来实现,并且不限于任何类型的设计。合适类型的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及其组合。

再次参考图3,处理器包括解码单元或解码器314。解码单元可被耦合以接收开始存储器写日志指令,并且可操作以解码开始存储器写日志指令。解码单元可输出一个或多个相对较低级别的指令或控制信号(例如,一个或多个微指令、微操作、微代码入口点、解码指令或控制信号),其反映、表示相对较高级别的开始存储器写日志指令和/或是从相对较高级别的开始存储器写日志指令中导出的。在一些实施例中,解码单元可包括经耦合以接收开始存储器写日志指令的至少一个输入结构(例如,端口、互连或接口),与其耦合以识别和解码开始存储器写日志指令的指令识别和解码逻辑,以及与其耦合以输出(一个或多个)较低级别指令或(一个或多个)控制信号的至少一个输出结构(例如,端口、互连或接口)。解码单元和/或其指令识别和解码逻辑可使用各种指令解码机制来实现,包括但不限于微代码只读存储器(rom)、查找表、硬件实施方式、可编程逻辑阵列(pla)、适合于实现解码单元的其他机制、及其组合。在一些实施例中,解码单元可包括至少一些硬件(例如,晶体管,集成电路,管芯上只读存储器,或者存储微代码、微指令或其他低级别或硬件级别指令或控制信号的其他非易失性存储器中的一个或多个)。在一些实施例中,解码单元可被包括在管芯、集成电路或半导体衬底上。

在一些实施例中,代替正直接提供给解码单元的开始存储器写日志指令,可能可选地使用指令仿真器、转译器、变形器、解释器或其他指令转换模块。可用软件、硬件、固件或其组合来实现各种类型的指令转换模块。在一些实施例中,指令转换模块可位于处理器外部,诸如例如,位于单独的管芯上和/或存储器中(例如,作为静态、动态或运行时间仿真模块)。通过示例的方式,指令转换模块可接收可以是第一指令集的开始存储器写日志指令,并且可模拟、转译、变形、解释或以其他方式将开始存储器写日志指令转换成一个或多个对应的中间指令或控制信号,其可以是第二不同指令集。可将第二指令集的一个或多个中间指令或控制信号提供给解码单元,解码单元可将它们解码为由处理器的本机硬件(例如,一个或多个执行单元)可执行的一个或多个较低级别指令或控制信号。

再次参考图3,执行单元316与解码单元314耦合,以接收表示开始存储器写日志指令和/或从开始存储器写日志指令导出的一个或多个解码的或以其他方式转换的指令或控制信号。在一些实施例中,执行单元可在管芯或集成电路上(例如,与解码单元一起)。执行单元还可被耦合以接收第一目的地存储器地址信息319和可选的第二目的地存储器地址信息320。例如,如果第一和/或可选的第二存储器地址信息被存储在其中,执行单元可与通用寄存器318耦合。当被部署在系统中时,执行单元可与系统主存储器或主要存储器328耦合。执行单元可响应于和/或由于开始存储器写日志指令而操作(例如,响应于从指令解码的一个或多个指令或控制信号,和/或响应于正被解码的指令,和/或响应于正提供给解码器的指令)而开始并继续将关于对存储器的至少一些写入的信息日志记录、记载或以其他方式存储到一个或多个日志,直到结束存储器写日志条件发生,所述对存储器的至少一些写入将在开始存储器写日志指令之后以原始程序顺序发生。

在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元和/或处理器可开始并继续为对对应的存储器数据项326(例如,高速缓存线)的至少所有初始写入323将存储器地址日志记录、记载或以其他方式存储到存储器地址日志332,直到结束存储器写日志条件发生,该所有初始写入323在开始存储器写日志指令之后以原始程序顺序发生。存储器地址日志可有效地日志记录、记载或存储什么或哪些数据项(例如,高速缓存线)至少由初始写入来写入(例如,修改)。合适的存储器地址日志的示例包括但不限于图4的专用存储器地址日志432和图5的组合的存储器地址和数据项日志554,尽管本发明的范围不限于此。

在一些实施例中,存储器地址日志的起始可对应于第一目的地存储器地址信息319。在图示的实施例中,存储器地址日志被可选地非临时地直接存储到绕过一个或多个高速缓存322的主存储器或主要存储器328(例如,dram或其他易失性存储器,可选地是表示主存储器或主要存储器的一部分的非易失性或持久性存储器,或者其组合)。在一个这样的实施例中,指令可能可选地具有一个或多个位或字段,以明确地指定或者可隐含地指示日志是否要被直接存储到非易失性或持久性存储器中(例如,如果可选地实行日志记录以帮助非易失性数据检查点,这可能是有利的)。在其他实施例中,存储器地址日志可被可选地临时存储在一个或多个高速缓存322中。在一个这样的实施例中,指令可能可选地具有一个或多个位或字段,以明确地指定或者可隐含地指示存储器地址日志要被存储到的存储器层级的级别(例如,高速缓存级别或直接到系统主/主要存储器)。在一个实施例中,如果日志要被存储在一个或多个高速缓存中,指令可能能够以类似的方式明确地指定或隐含地指示针对日志数据的同步或异步刷新属性(例如,是否它要留在高速缓存中或者可以通过正常的缓存行驱逐机制而被写入存储器)。替换地,这样的类型的信息中的一个或多个反而可以可选地存储在处理器的寄存器中(例如,存储器类型范围寄存器(mtrr)或者其他这样的控制或配置寄存器)。这些方面还可能可选地用于本文公开的其他类型的日志。

在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元和/或处理器可开始并继续为对存储器数据项的至少所有初始写入323将存储器数据项日志记录、记载或以其他方式存储到第二日志(例如,数据项日志),直到结束存储器写日志条件发生,该所有初始写入323在开始存储器写日志指令之后以原始程序顺序发生。在一些实施例中,存储器数据项可表示高速缓存线。替换地,存储器数据项可能可选地表示高速缓存线的至少一部分(例如,半个高速缓存线、高速缓存线的向量寄存器大小的部分、高速缓存线的独立数据元素)。例如,存储器地址日志可在由于初始写入而被改变之前日志记录、记载或存储数据项的初始值(例如,初始高速缓存线内容)。合适的数据项日志的示例包括但不限于图4的专用数据项日志436和图5的组合的存储器地址和数据项日志554,但是本发明的范围不限于此。

如所示的,在一些实施例中,数据项日志336可能可选地表示专用于存储数据项而不用于存储器地址的单独或截然不同的日志。在这样的实施例中,数据项日志的起始可对应于可选的第二目的地存储器地址信息320。如先前针对存储器地址日志所描述的,在各种实施例中,数据项日志可被可选地直接存储到主存储或主要存储328或者可被可选地存储在一个或多个高速缓存322中。在其他实施例中,数据项日志可能可选地表示用于存储存储器地址和数据项二者的组合的存储器地址和数据项日志。如本文所使用的,组合的存储器地址和数据项日志表示存储器地址日志和数据项日志。组合的存储器地址和数据项日志的起始可对应于第一目的地存储器地址信息319(例如,在寻址的第一目的地存储器位置330处开始,但是它可能最初可被高速缓存在一个或多个高速缓存中)。在这样的实施例中,可能可选地省略第二目的地存储器地址信息320(除非它可选地用于时间日志或日志记录其他类型的信息)。

初始写入323可表示对存储器数据项的首次或初始写入,首次或初始写入在开始存储器写日志指令之后(例如,在由于开始存储器写入日志指令而开始实行存储器写日志记录之后)以原始程序顺序发生,但是在由于开始存储器写日志指令的存储器写日志记录时段或操作内。初始写入与顺序写入324形成对比,也在由于开始存储器写日志指令的存储器写日志记录时段或操作内,该顺序写入324表示对相同存储器数据项的第二次或后续写入,其在开始存储器写日志指令之后以原始程序顺序发生。例如,在存储器数据项是高速缓存线的至少一部分的实施例中,初始写入可促使高速缓存线从干净状态(例如,mesi(修改的、独占的、共享的、无效的)和moesi(修改的、拥有的、独占的、共享的、无效的)高速缓存一致性协议中的共享或独占的状态)转变到脏状态(例如,mesi或moesi协议中的修改状态)。相比之下,后续写入可写入已经被写入的高速缓存线(例如,已经处于修改或其他脏状态)。

在一些实施例中,在由于开始存储器写日志记录指令的存储器写日志记录操作内,可仅为对数据项的所有初始写入日志记录或存储存储器地址和可选地日志记录或存储存储器数据项。对于这样的实施例,通常数据项可表示由于相关联的初始写入而在修改之前的初始/原始数据项(但是替换地,可能是由于相关联的初始写入而在修改之后的修改的数据项)。在这样的实施例中,在由于开始存储器写日志记录指令的存储器写日志记录操作内,对于对数据项的任何后续写入,既不存储存储器地址也不存储数据项。例如,在开始存储器写日志指令的存储器写日志记录操作内,可为首次或初始修改将多次修改的高速缓存线的存储器地址和原始高速缓存线内容仅日志记录一次。替换地,在其他实施例中,在由于开始存储器写日志记录指令的存储器写日志记录操作内,可能可选地为所有写入(例如,对数据项的所有初始写入以及对数据项的任何后续写入二者)日志记录或存储存储器地址和可选地日志记录或存储存储器数据项。在另外其他实施例中,可在日志记录时段结束之前仅为对数据项的最终或最后写入可选地日志记录或存储存储器地址和可选地日志记录或存储存储器数据项。在这样的实施例中,数据项可以是由最终或最后写入修改或至少由最终或最后写入存储的高速缓存线或其他数据项。例如,可在每次修改高速缓存线时存储高速缓存线的顺序修改版本。在一些实施例中,响应于该指令,可仅日志记录来自单个对应核、硬件线程或其他逻辑处理器的写入。在其他实施例中,可响应于指令来实行来自多个逻辑处理器的写入(例如,可在控制线程实行指令时启动日志记录,并且控制线程可用信号通知其他线程来协调日志记录)。

如本文所使用的,将存储器地址、数据项和其他数据存储到日志包括存储未改变或未变换的这样的数据以及存储变换的这样的数据两者,诸如例如通过压缩数据、加密数据、将奇偶或其他冗余数据添加到存储的数据等等。换句话说,即使存储器地址已经首先添加奇偶位,并且然后在存储之前已通过压缩算法压缩存储器地址和奇偶位,也仍然认为该日志存储存储器地址。在使用这样的数据变换的情况下,执行单元可将要被日志记录的数据引导到这样的变换逻辑(例如,加密逻辑、压缩逻辑、奇偶逻辑等)。

在一些实施例中,由开始存储器写日志指令开始或开启的存储器写日志记录可继续,直到结束存储器写日志条件发生。合适的结束存储器写日志条件的一个示例是如本文其他地方所公开的结束存储器写日志指令的实施例的实行。开始存储器写日志指令可通过开启存储器写日志记录机制或操作来有效地标记为了写入而要监视/跟踪的代码区域的开始,并且结束存储器写日志指令可有效地标记代码区域的结束。合适的结束存储器写日志条件的另一示例是缺少附加的可用资源以进一步实现存储器写日志记录(例如,缺少附加的可用资源以继续跟踪数据项的写入集和/或跟踪所有初始写入)。在一些实施例中,开始存储器写日志指令的执行单元和/或处理器可能能够确定是否/何时存在这样的附加的可用资源的缺少,并且当存在时结束存储器写日志记录。合适的结束存储器写日志条件的另外示例是给定数量的写入或初始写入(例如,固定的、指令隐含的或指令指定的数量)的实行,或者已经实行存储器写日志记录的给定时间量(例如,固定的、指令隐含的或指令指定的数量)的期满,或由于存储器访问违规或异常等。

执行单元316和/或处理器可包括特定或特别逻辑(例如,晶体管、集成电路、或者可能与固件组合的其他硬件(例如,存储在非易失性存储器中的指令)或可能可选的较少量的软件),该逻辑可操作以响应于和/或由于开始存储器写日志指令而实行开始存储器写日志指令和/或存储(一个或多个)日志。如本文所使用的术语“执行单元”广义地表示用于执行、实现或实行至少对应的指令的逻辑或逻辑集合。术语执行单元不暗示并且不限于用于实行所有操作以实现指令的单个离散单元。而是,这样的操作可以可能可由分布式逻辑(例如,其遍及在两个或更多个单元或组件分布或者跨处理器分布)实行,但是共同表示用于实行指令的执行单元。在一些实施例中,执行单元可包括针对图11-12中的任何一个或多个所示出和描述的逻辑,图11-12是合适的微架构布置的说明性示例,但是本发明的范围不限于此。典型地,对于开始存储器写日志指令,执行单元被包含在存储器执行单元和/或处理器的存储器子系统内。相应地,在一些实施例中,存储器执行单元和/或处理器的存储器子系统可被说成是用于执行或实行开始存储器写日志指令的实体。

一般地,应当在系统主存储器或主要存储器中为要被存储的一个或多个日志分配足够的空间,使得一个或多个日志不超过预期空间并覆盖非预期数据。在一些实施例中,对于应用程序可能可选地需要存储器空间的最小大小以使用开始存储器写日志指令。例如,可基于处理器标识信息(例如,cpuid指令)来确定最小大小,但这不是必需的。

为了避免模糊描述,已经示出和描述了相对简单的处理器300。然而,处理器可能可选地包括其他处理器组件。例如,各种实施例可包括针对图16-19中的任何一个示出和描述的组件的各种组合和配置。处理器的所有组件可被耦合在一起以允许它们按预期操作。通过示例的方式,考虑图17b,指令高速缓存单元1734中的任何一个或多个可高速缓存包括开始存储器写日志指令的指令,和/或指令提取单元1738可提取包括开始存储器写日志指令的指令,和/或调度器单元1756可调度与包括开始存储器写日志指令的指令相关联的操作,和/或引退单元1754可引退包括开始存储器写日志指令的指令。

图4是响应于和/或由于开始存储器写日志指令412的实施例而生成并存储专用存储器地址日志432的示例性实施例和专用数据项日志436的示例性实施例二者的执行单元416的实施例的框图。执行单元可开始实行开始存储器写日志指令。开始存储器写日志指令可指示对应于其中要存储专用存储器地址日志的第一起始存储器位置(p1)的第一目的地存储器地址信息,以及可选地对应于其中要存储专用数据项日志的第二起始存储器位置(p2)的第二目的地存储器地址信息。开始存储器写日志指令可促使执行单元开始并继续在该示例中为专用存储器地址日志中的初始存储器写入和专用存储器地址日志来日志记录信息,因为初始存储器写入随时间发生,直到结束存储器写日志条件446发生。

通过示例的方式,可对对应于第一高速缓存线或其他数据项(di1)的第一存储器地址(ma1)实行第一初始写指令423-1,然后可对对应于第二不同数据项(di2)的第二不同存储器地址(ma2)实行第二初始写指令423-2,然后可对对应于相同的第一数据项(di1)的相同的第一存储器地址(ma1)实行第三后续写指令424,然后可对对应于第三仍然不同的数据项(di3)的第三仍然不同的存储器地址(ma3)实行第四初始写指令423-4,依此类推,直到结束存储器写日志条件446发生(例如,在一些实施例中,实行可选的结束存储器写日志指令444)。写指令可表示写入存储器的各种不同类型的指令,该写入诸如例如标量写入、存储或移动到存储器指令、向量或打包数据存储指令、分散指令等等。开始实行开始存储器写日志指令与结束存储器写日志条件的发生之间的时间段表示用于开始存储器写日志指令的存储器写日志记录时段。

如由箭头447所示,执行单元416可操作以至少检测、观察、变得被通知(例如,被发信号通知关于)或者另外在该示例中变得知道对存储器的至少所有初始写入。在一些实施例中,执行单元可能可选地具有用于检测这些初始写入的初始写入检测逻辑448。执行单元可在存储器428中生成并存储专用存储器地址日志432和专用数据项日志436。专用存储器地址日志可专用于仅存储存储器地址(ma)。类似地,专用数据项日志可专用于仅存储数据项(di)。此外,在该示例性实施例中,专用存储器地址日志和专用数据项日志为所有初始写入(例如,第一423-1、第二423-2和第四423-4初始写指令)而不为任何后续写入(例如,不为第三后续写指令424)分别仅存储存储器地址和数据项,但是这对其他实施例不是必须的。注意:第一、第二和第四初始写指令各自对对应于不同数据项的不同存储器地址写入,而第三后续写指令对与第一初始写指令相同的第一存储器地址(ma1)和相同数据项写入。

如在图示的示例性实施例中所示,当实行第一初始写指令423-1时,执行单元可将第一存储器地址(ma1)存储到起始存储器位置p1处的专用存储器地址日志432,并将第一数据项(da1)存储到起始存储器位置p2处的专用数据项日志436。通常,第一数据项(da1)以及其他数据项可表示由于相关联的初始写入而在修改之前的初始/原始数据项。这可允许捕获初始/原始数据项。替换地,可代替地日志记录由于相关联的初始写入而在修改之后的修改的数据项。存储器地址(ma)中的每一个可具有以位计的大小(s1),诸如16位、32位或64位、或者另一合适的数量。类似地,数据项(di)中的每一个可具有以位计的大小(s2),诸如256位、512位、1024位、2048位或者另一合适的位数量(例如,用于高速缓存线)。随后,当实行第二初始写指令423-2时,执行单元可在日志432中的连续存储器位置p1+s1处附加或存储第二存储器地址(ma2),连续存储器位置p1+s1离p1偏移达存储器地址ma1的大小(s1)。类似地,当实行第二初始写指令423-2时,执行单元可在连续存储器位置p2+s2处附加或存储第二数据项(di2),连续存储器位置p2+s2离p2偏移达数据项di1的大小(s2)。在该仅对初始写入实行日志记录的实施例中,当对相同的第一存储器地址(ma1)实行第三后续写指令424时,执行单元可不再次存储第一存储器地址(ma1),并且可不再存储第一数据项(di1)。然后,当实行第四初始写指令423-4时,执行单元可在下一个连续存储位置p1+2s1处附加或存储第三存储器地址(ma3),并且可在下一个连续存储位置p2+2s2处附加或存储第三数据项(di3)。这一般可继续,直到结束存储器写日志条件446的发生。

注意:在一些实施例中,可能可选地在存储器地址日志中以与相关联的写入随时间发生的时间顺序相同的位置顺序来存储存储器地址(例如,可在存储器地址日志中以与适时实行第一、第二和第四初始写指令的时间顺序相同的位置顺序来存储ma1、ma2和ma3)。类似地,在一些实施例中,可能可选地在数据项日志中以与相关联的写入随时间发生的时间顺序相同的位置顺序来存储数据项。每次在存储器写日志时段期间发生初始写入时,可在存储器地址日志的运行结束处附加或以其他方式存储对应的存储器地址,并且可在数据项日志的运行结束处附加或以其他方式存储对应的原始/初始数据项。而且,在专用存储器地址日志的情况下(例如,其仅用于存储存储器地址),存储器地址可被连续地、一个接一个地附加或存储到连续的存储器位置,每个存储器位置具有与存储器地址相同的大小(s1)。例如,ma1的最高有效位可位于与ma2的最低有效位相邻的位位置中。类似地,在专用数据项日志的情况下(例如,其仅用于存储数据项),数据项可被连续地、一个接一个地附加或存储到连续的存储器位置,每个存储器位置具有与数据项相同的大小(s2)。

在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元还可操作以递增、递减或以其他方式更新第一指针、偏移或其他第一值,以考虑存储到专用存储器地址日志的每个存储器地址。在一些实施例中,执行单元可具有用于更新第一值的值更新逻辑450。第一值可指示和/或用于导出表示专用存储器地址日志的运行结束的其中要存储下一个存储器地址的运行存储器位置。最初,可从由开始存储器写日志指令指示的目的地存储器地址信息获得或导出对应于第一起始存储器位置p1的第一值。在一些实施例中,可将该初始第一值存储在第一存储位置452(例如,执行单元内或至少执行单元可访问的临时寄存器或其他存储位置)中。每次将附加存储器地址存储到存储器地址日志时,值更新逻辑450可依据存储器地址的大小使第一值递增、递减或以其他方式被更新。这可以不同的方式完成,诸如例如,通过将第一值改变64(对于64位)、8(对于8位)、4(对于4个半字)、2(对于2个字)或1(对于1个存储器地址)。例如,如图示中所示的,当存储ma1时,可将p1更新成(p1+s1),然后当存储ma2时,可将(p1+s1)更新成(p1+2s1),以及然后当存储ma3时,可将(p1+2s1)更新成(p1+3s1)。以这种方式,执行单元可维持与专用存储器地址日志的运行或前进结束一致的第一值,使得它知道在下一次初始写入时存储下一个存储器地址的位置。

类似地,在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元还可操作以递增、递减或以其他方式更新第二指针、偏移或其他第二值,以考虑存储到专用数据项日志的每个数据项。第二值可指示和/或用于导出表示专用数据项日志的运行或前进结束、其中要存储下一个数据项的存储器位置。最初,可从由开始存储器写日志指令指示的目的地存储器地址信息获得或导出对应于第二起始存储器位置p2的第二值。在一些实施例中,可将初始第二值存储在第二存储位置453(例如,执行单元内或至少执行单元可访问的第二临时寄存器或其他存储位置)中。每次将附加数据项存储到专用数据项日志时,可依据数据项的大小来更新第二存储位置中的第二值。例如,如图示中所示的,当存储di1时,可将p2更新成(p2+s2),然后当存储di2时,可将(p2+s2)更新成(p2+2s2),然后当存储di3时,可将(p2+2s2)更新成(p2+3s2)。以这种方式,执行单元可维持与专用数据项日志的运行或前进结束一致的第二值,使得它知道为下一个初始写入存储下一个数据项的位置。

图5是响应于和/或由于开始存储器写日志指令而可由执行单元和/或处理器存储的组合的存储器地址和数据项日志554的示例性实施例的框图。组合的存储器地址和数据项日志可被存储在存储器528中的起始存储器位置(p1)处,其可对应于由开始存储器写日志指令指示的目的地存储器地址信息。组合的存储器地址和数据项日志可存储第一大小(s1)的存储器地址(ma)和第二大小(s2)的数据项(di)。先前描述的大小是合适的但不是必需的。在一些实施例中,可能可选地仅对在存储器写日志时段内发生的所有初始写入实行日志记录。在其他实施例中,可能可选地对在存储器写日志时段内发生的所有初始写入和所有后续写入二者实行日志记录。

如图示的示例性实施例中所示,当实行最早的初始写指令时,第一对第一存储器地址(ma1)和第一对应数据项(da1)可被存储在起始存储器中位置p1处的组合的存储器地址和数据项日志中。随后,当实行下一个顺序初始写指令时,可在下一个连续存储器位置p1+s1+s2处附加或以其他方式存储第二对第二存储器地址(ma2)和第二对应数据项(da2)。p1+s1+s2是离p1达第一存储器地址(ma1)的第一大小(s1)和第一数据项(da1)的第二大小(s2)的组合的偏移。然后,当实行下一个顺序初始写指令时,可在连续存储位置p1+2(s1+s2)处附加或以其他方式存储第三对第三存储器地址(ma3)和第三对应数据项(da3)。该过程一般可继续,直到结束存储器写日志条件546的发生。在图示的示例中,首先存储存储器地址然后是数据项,但是也可能可选地使用相反的约定。注意:在一些实施例中,该对存储器地址对和对应数据项可被可选地在存储器地址日志中以与相关联的写入随时间发生的时间顺序相同的位置顺序来存储。而且,对应的成对存储器地址和数据项可被连续地、一个接一个地附加或存储到连续的存储器位置,每个存储器位置具有与存储器地址加上数据项的组合相同的大小。

在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元和/或处理器还可更新指针、偏移或其他值,以考虑存储的每个对应的成对的存储器地址和数据项。该值可指示和/或用于导出要存储下一对的存储器位置。这可基本上如先前所描述的那样进行,除了可根据用于存储的每对的存储器地址和数据项的组合大小(例如,s1+s2)来更新值。

图6是将存储器地址存储到存储器地址日志并且可选地将数据项存储到数据项日志的方法660的实施例的流程框图。在一些实施例中,可在开始存储器写日志指令的实行期间实行该方法。在一些实施例中,方法660可能可选地用于实现图2的块208和209,但是本发明的范围不限于此。

在块661处,可确定结束存储器写日志条件是否已经发生。如果它已经发生(即,确定是“是”),该方法可前进到块662。在块662处,该方法可停止存储存储器地址和数据项(如果它们可选地正被存储)。替换地,如果结束存储器写日志条件还未发生(即,确定是“否”),该方法可前进到块663。

在块663处,可确定是否正在对高速缓存线或其他数据项实行初始写入。在一些实施例中,这可包括区分初始写入和后续写入。如果未正在实行初始写入(即,确定是“否”),该方法可重新访问或返回到块661。替换地,如果正在实行初始写入(即,确定是“是”),该方法可前进到块664。

在块664处,可将用于对数据项的初始写入的存储器地址存储到存储器地址日志。在块665处,可能可选地将用于初始写入的数据项存储到数据项日志(如果可选地正在存储数据项)。如先前所提及的,通常所存储的数据项可能是由于相关联的初始写入而在修改之前的原始/初始数据项,但这不是必需的。先前描述的存储器地址日志和数据项日志是合适的,但不是必需的。

然后,在块666处,可更新一个或多个指针、偏移或其他值以考虑存储器地址,并且如果可选地被存储则考虑数据项。这可基本上如先前所述地实行。该方法然后可返回或重新访问块661。

图7是确定结束存储器写日志条件是否已经发生的方法768的实施例的流程框图。在一些实施例中,可在开始存储器写日志指令的实行期间实行该方法。在一些实施例中,方法768可能可选地用于实现图6的块661,但是本发明的范围不限于此。

在块769处,可确定是否正在实行结束存储器写日志指令。如果正在实行(即,确定是“是”),该方法可前进到块770。在块770处,可能可选地在架构可见的存储位置中存储日志记录由于结束存储器写日志指令正被实行而被停止的指示。合适的架构可见的存储位置的示例包括但不限于处理器的架构可见的寄存器(例如,通用寄存器,标志,状态,或者用于存储多个标志、状态位或条件代码位的条件代码寄存器)和主存储器中的存储器位置。作为一个示例,给定的标志(例如,或者新标志或者改换意图的现有标志)可被配置成第一值(例如,被设置成二进制一)以指示日志记录由于结束存储器写日志指令的实行而被停止。替换地,如果未正在实行结束存储器写日志指令(即,在块769处确定是“否”),该方法可前进到块771。

在块771处,可确定是否缺少可用于进一步跟踪所有初始写入的附加资源。这也可广泛地表示是否缺少继续实行开始存储器写日志指令的附加资源的确定。如果缺少附加资源(即,确定是“是”),该方法可前进到块772。在块772处,可在或者相同或者不同的架构可见的存储位置中存储日志记录由于缺少附加资源而被停止的指示。先前提及的类型的架构可见的存储位置是合适的但不是必需的。作为一个示例,可选地,相同的给定标志可被配置成第二不同值(例如,被清除成二进制零)以指示日志记录由于缺少资源而被停止。该方法然后可重新访问或返回到块769。

图8是实行开始存储器写日志指令的另一实施例的方法884的另一实施例的流程框图。在块885处,可提取或以其他方式接收开始存储器写日志指令。这可能可选地与先前针对图2的块207描述的类似或相同地实行。开始存储器写日志指令可指定或以其他方式指示至少一个目的地存储器地址信息。

该方法还包括:在块886处,为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志,该至少所有初始写入要在指令之后以原始程序顺序发生。存储器地址日志的起始可对应于由指令指示的目的地存储器地址信息。这些可与先前针对图2的块208描述的类似或相同地实行。

在块887处,可能可选地将指示至少所有初始写入何时发生的时间存储到时间日志。例如,用于开始存储器写日志指令的执行单元可在初始写入正被实行时(例如,紧接在之前、期间或紧接在之后)访问或以其他方式接收来自处理器的计时器的时间,并且将它们存储到时间日志。时间可被可选地或存储到组合的日志(例如,其还存储存储器地址和/或数据项)或专用于仅存储时间的专用时间日志。在后一种情况下,开始存储器写日志指令可指定或以其他方式指示对应于专用时间日志的起始的第二附加的目的地存储器地址信息。

存储时间的一个可能的优点是它们在分析定时相关方面时可能是有帮助的。作为一个示例,它们在日志用于调试由于多线程(例如,协作多线程)的意外程序状态改变时可能是有用的。通过示例的方式,如果第一线程错误地非原子地将共享变量的状态从a1修改成a2(例如a2=a1+1),并且如果另一线程然后在值a1的读取和a2的写入之间将共享变量的状态改成b,然后可以通过存储器地址识别该错误(buggy)状态转变(b→a2)。而且存储干净到脏的转变发生的时间可通过在此时间跨度期间启用与其他线程完成的工作的相关性来让调试器另外了解所发生的事情。

已经以相对基本的形式描述了该方法。然而,可能可选地从该方法中移除操作和/或向该方法添加操作。例如,在另一实施例中,可能可选地省略在块209处存储时间和/或可能可选地添加存储其他数据(例如,写入的对应数据项)。作为另一示例,块886和887的操作可能可选地由与图6的方法类似的方法来实行,除了在块665处可能可选地存储时间而不是数据项,但这不是必需的。在这样的示例中,块661处的操作可能可选地由图7的方法来实行,但这不是必需的。另外,虽然流程图示出根据实施例的操作的顺序,但是替换实施例可以不同顺序实行某些操作,组合某些操作,在临时地重叠某些操作等。

在各种实施例中,图6-8的方法可由处理器、指令处理装置、数字逻辑器件或集成电路实行。在一些实施例中,该方法可能可选地由图3的处理器300实行和/或与图3的处理器300一起实行。本文针对处理器300描述的组件、特征和特定可选细节也可能可选地应用于该方法。替换地,该方法可能可选地由类似或不同的处理器或装置实行和/或在其内实行。此外,300的处理器可能可选地实行与图6-8的方法相同、类似或不同的方法。

图9是专用时间日志988的示例性实施例的框图,在一些实施例中,该专用时间日志988可由执行单元和/或处理器响应于和/或由于开始存储器写日志指令的实施例而被存储。时间日志可被存储在存储器928中。在图示中,存储四个时间t1、t2、t3和t4以及可能更多时间,直到结束存储器写日志条件946发生。每个时间具有以位计的大小(s3)。每次将新时间存储到时间日志时,可依据大小s3来更新指针、偏移或其他值。

图10是组合的存储器地址和时间日志1089的示例性实施例的框图,在一些实施例中,该组合的存储器地址和时间日志1089可由执行单元和/或处理器响应于和/或由于开始存储器写日志指令的实施例而被存储。组合的存储器地址和时间日志可被存储在存储器1028中。在图示中,三对对应的存储器地址和时间ma1和t1、ma2以及t2、ma3和t3以及可能更多在结束存储器写日志条件1046发生之前被存储。每次将新的对存储到日志时,可依据组合的存储器地址的大小(s1)和时间的大小(s3)来更新指针、偏移或其他值。

以上已经示出和描述了存储在其中的日志和信息的特定示例,但是本发明的范围不限于此。在其他实施例中,除了上述信息之外和/或代替上述信息,可能可选地在一个或多个日志中存储其他类型的信息。例如,可能可选地存储用于写入的指令指针值、存储器地址上下文信息和/或存储器地址元数据、或者与写入相关联的其他数据。这样的存储器地址上下文或元数据的示例包括但不限于与写入相关联的页面目录基本信息、与写入相关联的过程上下文标识符(例如,实行写入的硬件线程的硬件线程标识符)、与写入相关联的逻辑(例如,虚拟)到物理地址转译信息等等。这样的信息或者可与本文公开的其他类型的信息组合在相同日志中,或者被存储在(一个或多个)单独的专用日志中。对于本领域且受益于本公开的技术人员而言,许多变化是预期的并且是显而易见的。

图11是用于执行或实行开始存储器写日志指令的实施例的执行单元1116的详细示例性实施例的框图。在一些实施例中,执行单元1116可能可选地用于图3的执行单元316。针对执行单元1116描述的组件、特征和特定可选细节也可能可选地应用于执行单元316。替换地,执行单元316可能可选地包括与执行单元1116类似或不同的执行单元。

示出一个或多个高速缓存1122以及一个或多个对应的高速缓存控制器1195。在各个方面,一个或多个高速缓存可包括l1高速缓存、可选的l2高速缓存和可选的l3高速缓存中的任何单个或任何组合。如所示的,在一些实施例中,可完全在一个或多个高速缓存以及一个或多个对应的高速缓存控制器内实现执行单元,但是本发明的范围不限于此。

执行单元包括用于开启和关闭存储器写日志记录的存储器写日志开/关控制1192。合适的存储器写日志开/关控制的示例包括但不限于位(例如,在处理器的控制或配置寄存器中)、用于执行单元的开/关切换或控制、用于状态机的开/关切换或控制、或者其他类型的开/关控制机制。开始存储器写日志指令的实行可开始或开启存储器写日志记录。当正在实行开始存储器写日志指令时,可将开启控制或信号1191发送或以其他方式提供给存储器写日志开/关控制。例如,微指令、微操作或者其他解码的指令或控制信号可在指令被解码之后开启存储器写日志开/关控制。一旦被开启,存储器写日志开/关控制可发信号或以其他方式控制要被开启和/或激活的执行单元的其他组件,使得存储器写日志记录继续,直到存储器写日志记录结束条件的发生。

如所示的,执行单元可能可选地包括初始写入检测逻辑1193。在存储器写日志记录时段期间,指定存储器地址的对存储器的写入1123可被引导到一个或多个高速缓存控制器以检查是否在一个或多个高速缓存中存储对应数据项。在一些实施例中,初始写入检测逻辑可操作以确定这些写入是初始写入还是后续写入。如所示的,在一些实施例中,初始写入检测逻辑可被部分地分布在一个或多个高速缓存与一个或多个高速缓存控制器之间。替换地,如果要对所有写入(例如,初始和后续二者)实行日志记录,可能可选地省略初始写入检测逻辑。

再次参考图11,执行单元还包括存储器写日志逻辑1194。存储器写日志逻辑可操作以存储与对一个或多个日志的至少所有初始写入相关联的信息。如所示的,存储器写日志逻辑可向一个或多个日志发送或以其他方式向写入1101提供这样的信息。可能可选地存储先前描述的信息的类型(例如,存储器地址、数据项、时间、存储器寻址上下文或元数据、或者与写入相关联的其他信息或数据)中的任何一个或多个或者任何组合。如果时间被存储,存储器写日志逻辑可与处理器的计时器1198(例如,时间戳计数器、性能监视计数器、周期精确时钟等)耦合以接收时间。计时器不是执行单元的一部分,而在于执行单元能够从计时器获得时间。在使用虚拟存储器的一些实施例中,对日志的写入可通过至少一个转译后备缓冲器(tlb)1199。tlb可实行虚拟或逻辑存储器地址到物理存储器地址转译。如果(一个或多个)日志跨越页面边界,转换可用于获得物理地址以继续用附加的写入或存储来扩展日志。

如所示的,执行单元还可包括日志跟踪逻辑的结束1196。日志跟踪逻辑的结束可被耦合以接收由开始存储器写日志指令所指示的至少一个目的地存储器地址信息提供或从其导出的一个或多个起始指针、偏移或其他值1197。日志跟踪逻辑的结束可操作以更新一个或多个值,以考虑存储到一个或多个日志的信息来跟踪一个或多个日志的(一个或多个)运行结束。这可基本上如先前所述地完成。可能存在与日志的数量相同数量的这样的值。存储器写日志逻辑1194与日志跟踪逻辑的结束耦合,以接收指示要存储附加信息的一个或多个日志的结束的当前值。存储器写日志逻辑可使用最新值来实行对(一个或多个)日志1101的写入。

执行单元及其任何组件可用硬件(例如,集成电路、晶体管等)、固件(例如,rom、eprom、闪速存储器或其他持久性或非易失性存储器和微代码、微指令或其中存储的其他较低级别指令)或其组合来实现。在图示的实施例中,执行单元的存储器写日志开/关控制1192、可选的初始写入检测逻辑1193、存储器写日志逻辑1194和日志跟踪逻辑的结束1196被包含在一个或多个高速缓存1122和一个或多个对应的高速缓存控制器1195内。即使这些组件的逻辑中的一些在实施方式中是分布式的和/或在物理上未被包含在一个或多个高速缓存和一个或多个高速缓存控制器内,这些组件也可由一个或多个高速缓存和一个或多个高速缓存控制器访问和/或由其使用,并且可在逻辑上表示一个或多个高速缓存和一个或多个高速缓存控制器的附加部分或扩展,以允许它们实行指令。在这样的实施例中,可以说一个或多个高速缓存和一个或多个高速缓存控制器包括和/或表示用于执行或实行开始存储器写日志指令的执行单元,和/或一个或多个高速缓存和一个或多个高速缓存控制器能够执行或实行开始存储器写日志指令和/或实行其操作。典型地,执行单元的逻辑以及一个或多个高速缓存和对应的高速缓存控制器也被包含在存储器执行单元1190和/或处理器的存储器子系统内。在这样的实施例中,可以说存储器执行单元和/或存储器子系统包括和/或表示用于执行或实行开始存储器写日志指令的执行单元,和/或一个或多个高速缓存和一个或多个高速缓存控制器能够执行或实行开始存储器写日志指令和/或实行其操作。

图12是用于执行或实行开始存储器写日志指令的实施例的执行单元1216的更详细示例性实施例的框图。在一些实施例中,执行单元1216可能可选地用于图3的执行单元316。针对执行单元1216描述的组件、特征和特定可选细节也可能可选地应用于执行单元316。替换地,执行单元316可能可选地包括与执行单元1216类似或不同的执行单元。

示出的是存储器执行单元1290、执行单元1216、一个或多个高速缓存1222、一个或多个对应的高速缓存控制器1295、一个或多个可选的其他高速缓存1202、tlb1299和计时器1298。执行单元包括:可接收开启控制1291的存储器写日志开开/关控制1292,用于检查对存储器1223的写入是初始还是后续写入的可选的初始写入检测逻辑1293,用于实行对一个或多个日志的写入1201的存储器写日志逻辑1294,以及最初可接收一个或多个起始值1297的日志跟踪逻辑的结束1296。除非以其他方式指定或以其他方式显而易见的,否则这些组件中的每一个可能可选地与先前针对图11所述的对应命名的组件类似或相同。为了避免模糊描述,将主要描述图12的实施例的不同和/或附加特征,而不重复已经描述的可能可选地相同或类似的所有细节。

在一些实施例中,(一个或多个)高速缓存可能可选地用于存储高速缓存线(例如,被组织为集合和方式而为简单起见未被示出)。如所示的,在一些实施例中,高速缓存线中的每一个可具有对应的写入位1203。高速缓存线中的每一个一般还具有多个一致性位1204、标记1205和数据1206。一致性位、标记和数据表示常规字段。一致性位可对应于实现的高速缓存一致性协议。合适的协议的示例包括但不限于mesi、mosi和moesi。mesi协议包括四种状态,即修改的(m)、独占的(e)、共享的(s)和无效的(i),它们由两个mesi高速缓存一致性协议位表示。mosi协议利用拥有的(o)状态代替独占的(e)状态,并且两个位用于指示状态。moesi协议利用独占的(e)和拥有的(o)状态。标签包含用于定位对应于对存储器地址的访问的高速缓存线的存储器地址信息。数据表示实际的缓存行或数据项。

执行单元包括可选地包括写集跟踪逻辑1207的可选的初始写入检测逻辑1293。在一些实施例中,写入位1203可用于指示对应的高速缓存线是否已被写入开始存储器写日志指令的存储器写日志记录时段内。在一些实施例中,初始写入检测逻辑1293和/或写集跟踪逻辑1207可操作以配置(例如,设置和清除)写入位。最初,当开始实行开始存储器写日志指令时,写集跟踪逻辑可将所有写入位配置成指示尚未实行写入的第一值(例如,被清除成二进制零)。然后,当对高速缓存线或其一部分进行写入时,写集跟踪逻辑可将对应的写入位配置成指示已实行写入的第二不同值(例如,设置成二进制一)。促使写入位从第一值转变到第二值的对存储器的每个写入可表示初始写入。这些可由初始写入检测逻辑和/或写集跟踪逻辑检测为初始写入。在对相同高速缓存线的第二次或后续写入时,写集跟踪逻辑和/或初始写入检测逻辑可检测对应的写入位已经具有第二值,并且可确定这些是后续写入。在存储器写日志记录时段结束时,写集跟踪逻辑可能可选地将所有写入位配置成具有第一值,但这不是必需的。尽管在本实施例中使用写入位,但在其他实施例中,一致性位1204(例如,它们是否指示修改的或其他脏状态)反而可以可选地用于由写集跟踪逻辑检测初始写入和/或用于写集跟踪。在另外其他实施例中,初始写入检测逻辑可能可选地包括一个或多个布隆(bloom)滤波器以跟踪初始写和/或写集。在一些实施例中,为了使用写入位和/或高速缓存一致性协议位进行跟踪,(一个或多个)高速缓存控制器可在存储器写日志记录时段期间将高速缓存保留在高速缓存层级中(例如,防止它们一直被驱逐到系统存储器)。

在一些实施例中,初始写入检测逻辑1293和/或写集跟踪逻辑1207可能可选地包括可用的写入位跟踪逻辑1208。可用的写入位跟踪逻辑表示附加资源跟踪逻辑的特定示例。可用的写入位跟踪逻辑可确定是否存在尚未被设置成第二值的任何附加写入位和/或是否存在尚未在开始存储器写日志记录指令的存储器写日志记录时段内被写入的任何附加高速缓存线。作为一个示例,可用的写入位跟踪逻辑可包括;用于逻辑与(and)所有写入位的逻辑与逻辑,或者用于逻辑或(or)所有写入位的逻辑或逻辑,并且从结果中进行确定。这可广泛地表示确定是否已经用尽了继续实现指令的硬件能力。例如,如果所有可用的写入位已被设置以指示对应的初始写入(例如,由返回值1的逻辑与检测),则写入位在被实行时可能不可用于记载或指示另一初始写入。这可表示缺少资源以进一步跟踪或监视所有初始写入和/或继续实行对开始存储器写日志指令的存储器写日志记录。在一些实施例中,这可表示存储器写日志结束条件。在这样的情况下,在一些实施例中,可用的写入位跟踪逻辑可向存储器写日志开/关控制提供关闭信号或控制以关闭存储器写日志。在一些实施例中,初始写入检测逻辑和/或执行单元可将值存储在架构可见的存储位置(例如,架构寄存器中的位)中以指示开始存储器写日志指令由于缺少资源而被停止。

在一些实施例中,初始写入检测逻辑1293和/或写集跟踪逻辑1207可能可选地利用或重新使用也用于硬件事务执行的至少一些逻辑。硬件事务执行有时也被称为硬件事务存储器。事务执行广泛地表示同步技术,其包括原子地实行一组指令作为事务。事务(也可被称为代码的关键或原子部分/区域的执行)包括要作为原子分组执行的指令或操作的分组。例如,指令或操作可用于划分或界定事务或关键部分。典型地,在事务的执行期间,不会使对存储器的更新全局可见,直到事务被提交。例如,对位置的事务写入对本地线程可能是可见的,但是响应于从另一线程的读取,不转发写入数据,直到包括事务写入的事务被提交。当事务仍处于未决状态时,跟踪从存储器加载和写入到存储器内的数据。一旦事务到达提交点,如果尚未检测到针对事务的冲突,则提交事务并且使在事务期间进行的更新原子地全局可见。然而,如果事务在其未决期间被无效,则事务被中止并可能重新启动,而不会使更新全局可见。与事务执行相反,典型地,对存储器的写入未由开始存储器写日志指令使得是事务的,而是被允许无条件地和非事务地一直进行到存储器而不需要事务地提交。在硬件事务存储器中,与纯软件相反,包括处理器(例如,管芯上)的硬件或逻辑以支持访问跟踪、冲突解决以及可能的其他事务任务。硬件事务执行的一个示例性实施方式是英特尔®事务同步扩展(英特尔®tsx)。如果期望的话,英特尔®tsx的进一步的详细信息在由英特尔公司于2017年7月发布的英特尔®64和ia-32架构软件开发人员手册1-3卷(参见例如,第16章)中以及由英特尔公司于2014年9月发布的英特尔®64和ia-32架构优化参考手册,订货号:248966-030(参见例如,第12章)中可得到。

事务执行常常已经包括创建和跟踪事务写集的能力。例如,这可由一个或多个事务执行启用的高速缓存及其高速缓存控制器(例如,能够英特尔®tsx的高速缓存或高速缓存层级)、事务执行引擎(例如,英特尔®tsx引擎)、用于事务执行的写集跟踪逻辑等等来实行。在一些实施例中,初始写入检测逻辑和/或写集跟踪逻辑可能可选地利用或重新使用该逻辑或/或能力中的至少一些来创建和跟踪用于事务执行的写集(例如,写集跟踪逻辑)。例如,用于事务执行的写集跟踪逻辑可被可选地重新用于初始写入检测逻辑和/或写集跟踪逻辑,但这不是必需的。有利地,如果处理器还支持事务执行,则利用或重新使用这样的逻辑和/或能力中的至少一些可有助于减少附加逻辑的量或者需要被添加以实现开始存储器写入逻辑指令的逻辑,这继而可有助于避免增加管芯面积和/或功耗。替换地,在其他实施例中,诸如如果处理器不支持事务执行,初始写入检测逻辑和/或写集跟踪逻辑可能可选地包括类似于这样的事务执行逻辑但可能比这样的事务执行逻辑更简单的至少一些逻辑或能力(例如,省略事务执行的冲突检测和事务提交/中止机制)。

再次参考图12,在一些实施例中,存储器写日志逻辑1294可能可选地包括用于将存储器地址存储到存储器地址日志的存储器地址存储逻辑1209,但这不是必需的。这样的逻辑可获得在(一个或多个)高速缓存控制器处接收的对应写入的存储器地址,并且使用存储器地址作为用于被寻址到存储器地址日志的运行结束的对应存储操作的数据,这可从来自日志跟踪逻辑的结束1296的信息中获得或从中导出。在一些实施例中,(一个或多个)高速缓存控制器的高速缓存一致性逻辑和/或窥探(snoop)逻辑可能可选地被稍微修改并被利用或重新使用以帮助实行对存储器地址的这些存储或写入,该存储器地址一直被存储到存储器地址日志。

在一些实施例中,存储器写日志逻辑1294可能可选地包括用于将高速缓存线存储到数据项日志的高速缓存线存储逻辑1210,但这不是必需的。这样的逻辑可获得在一个或多个高速缓存控制器(或者替换地,要存储在高速缓存线中的修改的数据)处接收的写入所暗示的初始/原始高速缓存线内容(例如,数据1206)并且用存储操作将其存储到表示数据项日志的运行结束的存储器地址,这可从来自日志跟踪逻辑的结束1296的信息中获得或导出。在一些实施例中,(一个或多个)高速缓存控制器的高速缓存线驱逐逻辑可以可选地略微修改和利用或重新使用以帮助实行对高速缓存线的这些存储或写入,该高速缓存线未被驱逐但被保留在高速缓存中,但是高速缓存线的初始副本要被存储到数据项日志。

在一些实施例中,存储器写日志逻辑1294可能可选地包括用于将存储器写入的时间存储到时间日志的时间存储逻辑1211,但这不是必需的。当在(一个或多个)高速缓存控制器处接收对应的写入时(例如,在其一个或者可能两个时钟周期内),这样的逻辑可从计时器1298获得时间,并用存储操作将其存储到表示时间日志的运行结束的存储器地址,这可从来自日志跟踪逻辑的结束1296的信息中获得或导出。如果通常实现逻辑1209、1210、1211中的两个或更多个,在主要是不同的数据有效载荷正用于存储的情况下可在它们之间重新使用或共享存储操作生成逻辑的大部分。

再次参考图12,在一些实施例中,日志跟踪逻辑的结束1296可能可选地包括用于存储一个或多个存储器地址信息(例如,存储器地址、存储器地址的部分、指针、偏移、或者可以从中生成存储器地址的其他值)的存储器地址信息存储1213)。合适存储的示例包括但不限于一个或多个临时寄存器,诸如静态ram(sram)之类的随机存取存储器(ram),闪速存储器,或者用于处理器寄存器、处理器高速缓存的其他类型的存储等等。在一些实施例中,存储器地址信息更新逻辑1212可基于存储的信息的大小、随着信息被存储到一个或多个日志而更新存储器地址信息。这可基本上如先前所述地实行。合适的存储器地址信息更新逻辑的示例包括但不限于一个或多个加法器、一个或多个增量器等等。来自存储器写日志开/关控制的开/关状态和来自日志跟踪逻辑的结束的(一个或多个)当前值可能可选地表示架构状态和/或在上下文切换时保存和恢复的状态,使得在线程抢占发生的操作系统环境中可暂停和恢复进行。

应理解:图11-12的执行单元仅仅是示例,并且可能可选地代替使用其他不同的执行单元。此外,在已经示出和描述多个组件的一些情况下,在适当的情况下,它们可被代替可选地集成在一起作为单个组件。在其他情况下,在已经示出和描述单个组件的情况下,在适当的情况下,它可被可选地分成两个或更多个组件。其他执行单元还可能可选地省略某些组件并添加附加组件。遍及存储器执行单元和/或处理器的存储器子系统的组件的其他分布也是可能的。

图13是处理器1300的实施例的框图,处理器1300可操作以实行结束存储器写日志指令1344的实施例。除了涉及结束存储器写日志指令而不是开始存储器写入日志指令的方面之外,处理器1300可能可选地与图3的处理器300类似或相同。为清楚起见,不要求处理器1300可操作以实行开始存储器写日志指令,尽管它通常具有这种能力。为了避免使描述模糊,将主要描述处理器1300的不同和/或附加特性,而不重复可能可选地与针对处理器300描述的那些特性相同或类似的所有特性。

处理器1300包括可操作以解码结束存储器写日志指令的解码单元1314。解码单元可与先前描述的解码单元314类似或相同。在一些实施例中,可包括单个解码单元以解码开始和结束存储器写日志指令二者,但这不是必需的。结束存储器写日志指令可明确地指定(例如,通过一个或多个字段或一组位)或以其他方式指示(例如,隐含地指示)至少一个目的地存储位置1328,或者在一些情况下可选地指示多个目的地存储位置。在各种实施例中,该至少一个目的地存储位置可能可选地在处理器的一个或多个寄存器(例如,一组通用寄存器1318中的一个或多个)中,可选地在主存储器或主要存储器中的一个或多个目的地存储器位置、或其他合适的存储位置、或者其组合中。通用寄存器1318可与通用寄存器318相同或类似。

执行单元1310与解码单元1314耦合以接收一个或多个解码的或以其他方式转换的指令或控制信号,其表示结束存储器写日志指令和/或从结束存储器写日志指令中导出。执行单元还可与至少一个目的地存储位置耦合。例如,如果目的地存储位置是通用寄存器之一,执行单元可与通用寄存器1318耦合。执行单元还可与至少一个存储位置1328(例如,临时寄存器或其他微架构存储位置)耦合。

响应于和/或由于结束存储器写日志指令而操作(例如,响应于从指令解码的一个或多个指令或控制信号和/或在响应于正被解码的指令和/或响应于正提供给解码器的指令),执行单元和/或处理器可操作以促使处理器停止存储器写日志记录(例如,由于较早的开始存储器写日志指令的实行),并在至少一个目的地存储位置1328中存储关于一个或多个日志的信息1329。例如,如果存储器写日志记录包括将第一类型的信息(例如,存储器地址)存储到第一日志(例如,存储器地址日志),则这样的将第一类型的信息存储到第一日志可被停止,并且关于第一日志的信息可被存储在目的地存储位置中。作为另一示例,如果存储器写日志记录包括将第一类型的信息(例如,存储器地址)存储到第一日志(例如,存储器地址日志)并且将第二类型的信息(例如,数据项)存储到第二日志(例如,数据项日志),则这样的将第一类型信息存储到第一日志并将第二类型信息存储到第二日志的日志可被停止,并且关于第一日志的信息可被存储在第一目的地存储位置中,并且关于第二日志的信息可被存储在第二目的地存储位置中。

在一些实施例中,关于一个或多个日志的信息1329可包括指示一个或多个日志的结束或范围或大小的信息。例如,该信息可指示在存储器写日志记录期间存储的最后存储器位置。这样的信息的合适示例包括但不限于指向最后存储器位置的存储器指针、最后存储器位置的存储器地址、离日志的起始的偏移(例如,如从由较早的开始存储器写日志指令提供的目的地存储器地址信息所测量的)、最终指针、偏移、或者如本文其他地方所讨论的在开始存储器写日志指令的实行期间更新的其他值等等。在一些实施例中,可从存储在至少一个存储位置1324(例如,其可用于存储指示一个或多个日志的一个或多个运行结束的一个或多个值)中的信息获得或导出这样的信息。存储位置1324的合适示例包括但不限于存储位置452、453和/或存储1213。

在一些实施例中,响应于和/或由于开始存储器写日志指令,执行单元和/或处理器可能可选地存储在架构可见的存储位置1323中停止日志记录的原因的指示1370。合适的架构可见的存储位置的示例包括但不限于处理器的架构可见的寄存器(例如,通用寄存器,用于存储多个标志、状态位或条件码位的标志、状态或条件代码寄存器)和主存储器中的存储器位置。作为一个示例,架构可见的存储位置(例如,标志)可被配置成用于指示由于结束存储器写日志指令的实行而停止日志记录的第一值(例如,设置为二进制一),而不是用于指示由于另一原因(例如,由于缺少资源)而停止日志记录的第二值(例如,被清除成二进制零)。在其他实施例中,结束存储器写日志指令的操作可被可选地结合到开始存储器写日志指令中(例如,当它由于除了结束存储器写日志指令之外的一个或多个不同原因而终止时,它可实行这样的操作。

如上所述,在一些实施例中,响应于开始存储器写日志指令,执行单元或处理器可跟踪或保持在存储器写日志记录时段期间更新和/或写入哪些高速缓存线或其他数据项的记载。例如,对此可使用写入位、修改的高速缓存一致性位或一些其他写集跟踪机制或逻辑。在一些实施例中,处理器或执行单元可在结束存储器写日志记录时使用该信息,以对在存储器写日志记录时段期间更新或写入的每个数据项实行附加操作。在一些实施例中,这可由开始存储器写日志指令的执行单元完成,作为结束存储器写日志记录的一部分。在其他实施例中,这可由结束存储器写日志指令的执行单元完成。

作为一个示例,在一些使用情况中,将这样更新或写入数据项保持在较低级别的高速缓存中或甚至高速缓存层级中可能没有用或者不重要。在这样的情况下,执行单元可通过写入的数据项循环并实行操作以使这些数据项中的每一个去优先级以用于高速缓存。这可包括鼓励或加速从较低级别的高速缓存向较高级别的高速缓存驱逐数据项,鼓励或加速从高速缓存层级向系统存储器驱逐数据项,或着促使或强制从高速缓存层级向系统存储器驱逐数据项。这可以各种方式完成,诸如例如,通过强制驱逐,影响高速缓存线驱逐算法或过程(例如,改变最近最少使用的位,因此高速缓存线看起来最近被使用得较少)。在另一示例中,执行单元可通过写入的数据项循环并实行操作以将高速缓存线或其他数据项写回系统存储器,同时将数据项保持在处于未修改状态的高速缓存层级中(例如,通过改变缓存一致性状态)。代替依靠对每个数据项的不同指令,这可作为实行开始和结束存储器写日志指令中任一个的一部分对所有数据项实行。

本文公开的开始和结束存储器写日志指令是具有一般有用性并且可用于各种目的的通用指令。本领域技术人员将设计各种方式来使用指令和/或一个或多个日志。本发明的范围不限于任何已知的用途。然而,为了进一步图示某些概念,将简要描述几个预期的用途。

这些指令和/或一个或多个日志可能非常有用的一个示例性区域是帮助数据备份和/或检查点。作为一个示例,它们可有助于加速原本需要使用昂贵的读取-复制-更新(rcu)模式的应用程序。rcu是可在需要在若干地点改变数据结构时采用的模式,并且它在数据结构中一次一个地查找、制作备份副本和更换独立项往往效率低下。本文公开的指令和/或日志有助于使rcu维护起来更简单。代替进行复制,可能继续进行原始数据结构,并且仅记载变化的部分(例如,日志存储器地址)及其在变化之前的部分(例如,初始数据项),使得在最后,如果你关心的话,你可以只在某个地方附加相对于原始的差异。如果你不关心,你可以通过从初始数据项复制回来而简单地撤销(undue)变化。换句话说,rcu的读取和复制部分可基本上透明地处理,使得rce主要包括更新部分。

作为另一示例,它们可有助于简化非易失性存储器(nvm)检查点。常常应用程序足以将数据异步写入到nvm中,但是维护正在进行什么变化的检查点,使得在讹误、中断或操作故障的情况下,可撤消变化并且可将来自较早的检查点的数据重新插入就位。跟踪软件中的这样的变化往往是单调乏味的,并且可能往往是不可靠的(例如,如果正在进行跟踪的软件模块停止、失败或遇到一些其他突然不确定因素(hiccup))。然而,通过应用由本文公开的指令保存在(一个或多个)日志中的差异,可以容易地向前滚动检查点。例如,对于nvm,可能在前台保持异步写入,日志记录从后台中的原始值更新到表示差异存储的(一个或多个)日志(例如,在低性能存储设备上),并从可以基于这两个来构建的最近的(一个或多个)日志的检查点恢复。

这些指令和/或一个或多个日志可能非常有用的另一示例性区域是帮助调试。在这样的用途中,一个或多个日志可用作调试中的事件日志,其对帮助分析和理解程序的操作和诊断问题是有用的。例如,它们可有助于扩展调试功能,以更好地调查可在使用协作多线程的程序中发生的原本复杂的问题(例如,同时管理来自若干线程的共享状态)。采用这样的协作多线程的这样的程序的常见问题是当程序没有采用适当的机制来保护对共享数据的访问时数据竞争的发生。检测共享状态的意外变化在软件中集成适当的跟踪以尝试识别根本原因可能往往是耗时的任务。软件中这样的跟踪也可能是不可靠的,因为它本质上可能是侵入性的并且可能以这样的方式扰乱定时,使得在使用跟踪时问题可能消失。然而,本文公开的日志可能潜在地有助于改进数据竞争检测和/或调试。在硬件中实行的跟踪一般往往具有低得多的开销,并且与可能错过高速缓存中的状态变化的软件方法相比,往往更可靠。相应地,日志可使得更容易检测和调试数据竞争条件。

指令集

指令集可包括一个或多个指令格式。给定的指令格式可定义用于除其他之外指定要实行的操作(例如操作码)和要对其实行操作的(一个或多个)操作数的各个字段(例如位的数量、位的位置)和/或(一个或多个)其他数据字段(例如掩码)。一些指令格式通过定义指令模板(或子格式)被进一步分解。例如,给定指令格式的指令模板可被定义成具有指令格式的字段的不同子集(所包括的字段典型地以相同的顺序,但是因为包括较少的字段,所以至少一些具有不同的位位置)和/或被定义成具有以不同方式解释的给定字段。因此,isa的每个指令使用给定指令格式(并且如果被定义的话,以该指令格式的指令模板中的给定的一个)来表达,并且包括用于指定操作和操作数的字段。例如,示范性add指令具有特定的操作码和指令格式,该指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地和源2)的操作数字段;并且该add指令在指令流中的出现将在选择特定操作数的操作数字段中具有特定内容。已经发布和/或公布了被称为高级向量扩展(advancedvectorextensions,avx)(avx1和avx2)并且使用向量扩展(vex)编码方案的一组simd扩展(例如,参见2014年9月的英特尔®64和ia-32架构软件开发人员手册;并且参见2014年10月的英特尔®高级向量扩展编程参考)。

示范性指令格式

可以不同格式来具体化本文描述的(一个或多个)指令的实施例。另外,下面详述示范性系统、架构和流水线。所述(一个或多个)指令的实施例可在这样的系统、架构和流水线上执行,但是不限于详述的那些。

通用向量友好指令格式

向量友好指令格式是适合于向量指令的指令格式(例如存在特定于向量操作的某些字段)。虽然描述其中通过向量友好指令格式来支持向量和标量操作二者的实施例,但是替换实施例仅使用向量友好指令格式的向量操作。

图14a-14b是图示根据本发明的实施例的通用向量友好指令格式及其指令模板的框图。图14a是图示根据本发明的实施例的通用向量友好指令格式及其a类指令模板的框图;而图14b是图示根据本发明的实施例的通用向量友好指令格式及其b类指令模板的框图。具体来说,通用向量友好指令格式1400,为其定义a类和b类指令模板,所述a类和b类指令模板二者都包括无存储器访问1405指令模板和存储器访问1420指令模板。在向量友好指令格式的上下文中的术语通用是指未绑定到任何特定指令集的指令格式。

虽然将描述本发明的实施例,即在所述实施例中向量友好指令格式支持以下:具有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字节向量操作数)。

图14a中的a类指令模块包括:1)在无存储器访问1405指令模板内,示出无存储器访问、全舍入控制类型操作1410指令模板和无存储器访问、数据变换类型操作1415指令模板;以及2)在存储器访问1420指令模板内,示出存储器访问、临时1425指令模板和存储器访问、非临时1430指令模板。图14b中的b类指令模块包括:1)在无存储器访问1405指令模板内,示出无存储器访问、写掩码控制、部分舍入控制类型操作1412指令模板和无存储器访问、写掩码控制、vsize类型操作1417指令模板;以及2)在存储器访问1420指令模板内,示出存储器访问、写掩码控制1427指令模板。

该通用向量友好指令格式1400包括下文按图14a-14b中图示的顺序列出的以下字段。

格式字段1440——该字段中的特定值(指令格式标识符值)唯一标识向量友好指令格式以及因此的指令以向量友好指令格式在指令流中的出现。照此,该字段在以下意义上是可选的,即该字段对于仅具有通用向量友好指令格式的指令集来说是不需要的。

基础操作字段1442——其内容区分不同的基础操作。

寄存器索引字段1444——其内容直接地或通过地址生成来指定源和目的地操作数的位置(无论它们是在寄存器中还是在存储器中)。这些包括足以从pxq(例如,32x512、16x128、32x1024、64x1024)寄存器文件选择n个寄存器的位数。虽然在一个实施例中n可以是高达三个源和一个目的地寄存器,但是替换实施例可支持更多或更少的源和目的地寄存器(例如,可支持高达两个源,其中这些源中的一个也充当目的地,可支持高达三个源,其中这些源中的一个也充当目的地,可支持高达两个源和一个目的地)。

修饰符字段1446——其内容将指定存储器访问的以通用向量指令格式的指令的出现与不指定存储器访问的那些指令的出现进行区分;也就是说,在无存储器访问1405指令模板和存储器访问1420指令模板之间进行区分。存储器访问操作读取和/或写入存储器层级(在一些情况下使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不读取和/或写入存储器层级(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段也在用于实行存储器地址计算的三种不同方式之间进行选择,但是替换实施例可支持用于实行存储器地址计算的更多、更少或不同的方式。

扩增操作字段1450——其内容区分除了基础操作之外要实行各种各样的不同操作中的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被划分成类别字段1468、α字段1452和β字段1454。扩增操作字段1450允许在单个指令而不是在2个、3个或4个指令中实行共同的操作分组。

比例字段1460——其内容允许对于存储器地址生成(例如,对于使用2比例*索引+基址的地址生成)的索引字段内容进行缩放。

位移字段1462a——其内容被用作存储器地址生成的一部分(例如,对于使用2比例*索引+基址+位移的地址生成)。

位移因数字段1462b(注意:位移字段1462a直接在位移因数字段1462b上的并置指示一个或另一个被使用)——其内容被用作地址生成的一部分;它指定要按存储器访问的大小(n)进行缩放的位移因数——其中n是存储器访问中的字节数(例如,对于使用2比例*索引+基址+经缩放的位移的地址生成)。忽略冗余低阶位并且因而使位移因数字段的内容乘以存储器操作数总大小(n)以便生成要在计算有效地址中使用的最终位移。由处理器硬件在运行时间基于全操作码字段1474(在本文中稍后描述)和数据操纵字段1454c来确定n的值。位移字段1462a和位移因数字段1462b在以下意义上是可选的,即它们不用于无存储器访问1405指令模板,和/或不同实施例可实现两个中的仅一个或者两个都不实现。

数据元素宽度字段1464——其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其他实施例中仅针对指令中的一些)。该字段在以下意义上是可选的,即如果仅支持一个数据元素宽度和/或使用操作码的一些方面来支持数据元素宽度则该字段是不需要的。

写掩码字段1470——其内容基于每数据元素位置来控制目的地向量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。a类指令模板支持归并写掩蔽,而b类指令模板支持归并写掩蔽和归零写掩蔽二者。当归并时,向量掩码允许目的地中的任何元素集受保护以免在(由基础操作和扩增操作指定的)任何操作的执行期间更新;在另一实施例中,保留目的地的每个元素的旧值,其中对应的掩码位具有0。相比之下,当归零时,向量掩码允许目的地中的任何元素集在(由基础操作和扩增操作指定的)任何操作的执行期间被归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设置成0。该功能性的子集是用于控制被实行的操作的向量长度的能力(即被修改的元素的跨距,从第一个到最后一个);然而,被修改的元素不一定是连续的。因此,写掩码字段1470允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述其中写掩码字段1470的内容选择包含要被使用的写掩码的多个写掩码寄存器之一(并且因此写掩码字段1470的内容间接地标识要实行的该掩蔽)的本发明的实施例,但是替换实施例替代地或附加地允许掩码写字段1470的内容直接指定要实行的掩蔽。

立即数字段1472——其内容允许对立即数的指定。该字段在以下意义上是可选的,即它在不支持立即数的通用向量友好格式的实施方式中是不存在的并且它在不使用立即数的指令中是不存在的。

类别字段1468——其内容在不同类别的指令之间进行区分。参考图14a-b,该字段的内容在a类和b类指令之间进行选择。在图14a-b中,使用圆角方形来指示在字段中存在特定值(例如,在图14a-b中分别对于类别字段1468的a类1468a和b类1468b)。

a类的指令模板

在a类的非存储器访问1405指令模板的情况下,α字段1452被解释为rs字段1452a,其内容区分要实行不同扩增操作类型中的哪一个(例如,为无存储器访问、舍入类型操作1410和无存储器访问、数据变换类型操作1415指令模板分别指定舍入1452a.1和数据变换1452a.2),而β字段1454区分要实行所指定的类型的操作中的哪一个。在无存储器访问1405指令模板中,不存在比例字段1460、位移字段1462a和位移比例字段1462b。

无存储器访问指令模板——全舍入控制类型操作

在无存储器访问全舍入控制类型操作1410指令模板中,β字段1454被解释为舍入控制字段1454a,其(一个或多个)内容提供静态舍入。虽然在本发明的所描述的实施例中,舍入控制字段1454a包括抑制所有浮点异常(sae)字段1456和舍入操作控制字段1458,但是替换实施例可支持可将这两个概念编码到相同字段中或者仅具有这些概念/字段中的一个或另一个(例如,可仅具有舍入操作控制字段1458)。

sae字段1456——其内容区分是否禁用异常事件报告;当sae字段1456的内容指示启用抑制时,给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。

舍入操作控制字段1458——其内容区分要实行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因此,舍入操作控制字段1458允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1450的内容覆写该寄存器值。

无存储器访问指令模板——数据变换类型操作

在无存储器访问数据变换类型操作1415指令模板中,β字段1454被解释为数据变换字段1454b,其内容区分要实行多个数据变换中的哪一个(例如,无数据变换、拌和、广播)。

在a类的存储器访问1420指令模板的情况下,α字段1452被解释为驱逐提示字段1452b,其内容区分要使用驱逐提示中的哪一个(在图14a中,为存储器访问、临时1425指令模板和存储器访问、非临时1430指令模板分别指定临时1452b.1和非临时1452b.2),而β字段1454被解释为数据操纵字段1454c,其内容区分要实行多个数据操纵操作(也被称为基元)中的哪一个(例如,无操纵;广播;源的向上转换;以及目的地的向下转换)。存储器访问1420指令模板包括比例字段1460、以及可选地位移字段1462a或位移比例字段1462b。

向量存储器指令在转换支持的情况下实行从存储器中的向量加载和至存储器的向量存储。就规则的向量指令来说,向量存储器指令以按数据元素的方式从存储器/向存储器传送数据,其中实际上传送的元素由被选择为写掩码的向量掩码的内容来决定。

存储器访问指令模板——临时

临时数据是可能很快地被再次使用以便受益于高速缓存的数据。然而,这是提示,并且不同的处理器可以不同的方式来实现它,包括完全地忽略该提示。

存储器访问指令模板——非临时

非临时数据是不太可能很快地被再次使用以受益于第一级高速缓存中的高速缓存并且应当被给予驱逐优先级的数据。然而,这是提示,并且不同的处理器可以不同的方式来实现它,包括完全地忽略该提示。

b类的指令模板

在b类的指令模板的情况下,α字段1452被解释为写掩码控制(z)字段1452c,其内容区分由写掩码字段1470控制的写掩蔽应当是归并还是归零。

在b类的非存储器访问1405指令模板的情况下,β字段1454的一部分被解释为rl字段1457a,其内容区分要实行不同扩增操作类型中的哪一个(例如,为无存储器访问、写掩码控制、部分舍入控制类型操作1412指令模板和无存储器访问、写掩码控制、vsize类型操作1417指令模板分别指定舍入1457a.1和向量长度(vsize)1457a.2),而β字段1454的其余部分区分要实行所指定的类型的操作中的哪一个。在无存储器访问1405指令模板中,不存在比例字段1460、位移字段1462a和位移比例字段1462b。

在无存储器访问、写掩码控制、部分舍入控制类型操作1410指令模板中,β字段1454的其余部分被解释为舍入操作字段1459a并且异常事件报告被禁用(给定指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。

舍入操作控制字段1459a——正如舍入操作控制字段1458,其内容区分要实行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和就近舍入)。因此,舍入操作控制字段1459a允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段1450的内容覆写该寄存器值。

在无存储器访问、写掩码控制、vsize类型操作1417指令模板中,β字段1454的其余部分被解释为向量长度字段1459b,其内容区分要实行多个数据向量长度中的哪一个(例如,128、256或512字节)。

在b类的存储器访问1420指令模板的情况下,β字段1454的部分被解释为广播字段1457b,其内容区分是否要实行广播类型数据操纵操作,而β字段1454的其余部分被解释成向量长度字段1459b。存储器访问1420指令模板包括比例字段1460、以及可选地位移字段1462a或位移比例字段1462b。

关于通用向量友好指令格式1400,示出包括格式字段1440、基础操作字段1442和数据元素宽度字段1464的全操作码字段1474。虽然示出其中全操作码字段1474包括所有这些字段的一个实施例,但是在不支持所有它们的实施例中,全操作码字段1474包括少于所有这些字段。全操作码字段1474提供操作代码(操作码)。

扩增操作字段1450、数据元素宽度字段1464和写掩码字段1470允许以通用向量友好指令格式基于每个指令来指定这些特征。

写掩码字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。

在a类和b类内找到的各种指令模板在不同情形下是有益的。在本发明的一些实施例中,不同处理器或处理器内的不同核可仅支持a类、仅支持b类或支持两个类别。例如,意图用于通用计算的高性能通用无序核可仅支持b类,意图主要用于图形和/或科学(吞吐量)计算的核可仅支持a类,并且意图用于二者的核可支持二者(当然,具有来自两个类别的模板和指令、但不是来自两个类别的所有模板和指令的某一混合的核在本发明的范围内)。而且,单个处理器可包括多个核,所述核的全部都支持相同的类别或者其中不同的核支持不同类别。例如,在具有单独图形和通用核的处理器中,意图主要用于图形和/或科学计算的图形核中的一个可仅支持a类,而通用核中的一个或多个可以是具有意图用于仅支持b类的通用计算的无序执行和寄存器重命名的高性能通用核。不具有单独图形核的另一处理器可包括支持a类和b类二者的一个或多个通用有序或无序核。当然,来自一个类别的特征在本发明的不同实施例中也可在另一个类别中被实现。以高级语言写的程序将会被安置(例如,仅仅适时编译或静态编译)成各种不同的可执行形式,包括:1)仅具有为了执行由目标处理器支持的(一个或多个)类别的指令的形式;或者2)具有使用所有类别的指令的不同组合写的替换例程并且具有选择例程用于基于由当前正执行代码的处理器支持的指令来执行的控制流代码的形式。

示范性特定向量友好指令格式

图15a是图示根据本发明的实施例的示范性特定向量友好指令格式的框图。图15a示出特定向量友好指令格式1500,其在该特定向量友好指令格式指定位置、大小、解释和字段顺序、以及用于那些字段中的一些的值的意义上是特定的。该特定向量友好指令格式1500可用于扩展x86指令集,并且因此所述字段中的一些与在现有x86指令集以及其扩展(例如,avx)中使用的那些是类似的或相同的。该格式保持与前缀编码字段、实操作码字节字段、modr/m字段、sib字段、位移字段和具有扩展的现有x86指令集的立即数字段一致。图示来自图14的字段,其中来自图15a的字段映射成所述来自图14的字段。

应当理解的是:尽管为了图示的目的在通用向量友好指令格式1400的上下文中参考特定向量友好指令格式1500描述本发明的实施例,但是本发明不限于该特定向量友好指令格式1500,除了被声明的地方之外。例如,该通用向量友好指令格式1400预期对于各种字段的各种各样的可能大小,而特定向量友好指令格式1500被示出为具有特定大小的字段。通过特定示例的方式,虽然数据元素宽度字段1464被图示为特定向量友好指令格式1500中的一位字段,但是本发明不限于此(也就是说,该通用向量友好指令格式1400预期数据元素宽度字段1464的其他大小)。

该通用向量友好指令格式1400包括下文按图15a中图示的顺序列出的以下字段。

evex前缀(字节0-3)1502——是以四字节形式编码的。

格式字段1440(evex字节0,位[7:0])——第一字节(evex字节0)是格式字段1440并且它包含0x62(在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。

第二至第四字节(evex字节1-3)包括提供特定能力的多个位字段。

rex字段1505(evex字节1,位[7-5])——由evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和1457bex字节1,位[5]-b)组成。evex.r、evex.x和evex.b位字段提供与对应的vex位字段相同的功能性,并且使用补充1的形式进行编码,即zmm0被编码为1111b,zmm15被编码为0000b。如本领域中已知的,指令的其他字段对寄存器索引的下三个位进行编码(rrr、xxx和bbb),使得可通过添加evex.r、evex.x和evex.b形成rrrr、xxxx和bbbb。

rex'字段1410——这是rex'字段1410的第一部分并且是用于对扩展的32寄存器集的上16或下16进行编码的evex.r'位字段(evex字节1,位[4]-r')。在本发明的一个实施例中,以位倒置格式存储该位连同如下文指示的其他位以便(以公知的x8632位模式)与bound指令区分,所述bound指令的实操作码字节是62,但是在(下文描述的)modr/m字段中不接受mod字段中的11的值;本发明的替换实施例不以倒置格式来存储该位以及下文指示的其他位。使用值1来对下16寄存器进行编码。换言之,通过组合evex.r'、evex.r和来自其他字段的其他rrr来形成r'rrrr。

操作码映射字段1515(evex字节1,位[3:0]-mmmm)——其内容对隐含前导操作码字节(0f、0f38或0f3)进行编码。

数据元素宽度字段1464(evex字节2,位[7]-w)——通过标号evex.w表示。evex.w用于定义数据类型的粒度(大小)(32位数据元素或者64位数据元素)。

evex.vvvv1520(evex字节2,位[6:3]-vvvv)——evex.vvvv的作用可包括以下内容:1)evex.vvvv对以倒置(补充1)形式指定的第一源寄存器操作数进行编码并且对于具有2个或更多源操作数的指令是有效的;2)evex.vvvv对以补充1形式为某些向量移位指定的目的地寄存器操作数进行编码;或者3)evex.vvvv不对任何操作数进行编码,字段被保留并且应当包含1111b。因此,evex.vvvv字段1520对以倒置(补充1)形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,使用额外的不同evex位字段来将指定符大小扩展至32个寄存器。

evex.u1468类别字段(evex字节2,位[2]-u)——如果evex.u=0,则它指示a类或者evex.u0;如果evex.u=1,则它指示b类或者evex.u1。

前缀编码字段1525(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前缀编码,并且因此不需要扩充。

α字段1452(evex字节3,位[7]-eh;也被称为evex.eh、evex.rs、evex.rl、evex.写掩码控制和evex.n;也用α图示)——如先前描述的那样,该字段是上下文特定的。

β字段1454(evex字节3,位[6:4]-sss,也被称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ图示)——如先前描述的那样,该字段是上下文特定的。

rex'字段1410——这是rex'字段的其余部分并且是可用于对扩展的32寄存器集的上16或下16进行编码的evex.v'位字段(evex字节3,位[3]——v')。以位倒置格式来存储该位。使用值1来对下16寄存器进行编码。换言之,通过组合evex.v'、evex.vvvv来形成v'vvvv。

写掩码字段1470(evex字节3,位[2:0]-kkk)——如先前描述的,其内容指定寄存器在写掩码寄存器中的索引。在本发明的一个实施例中,特定值evex.kkk=000具有暗示没有写掩码用于特别指令的特殊行为(这可以各种各样的方式(包括使用硬接线至所有的一的写掩码或绕过掩蔽硬件的硬件)来实现)。

实操作码字段1530(字节4)也被称为操作码字节。在该字段中指定操作码的部分。

modr/m字段1540(字节5)包括mod字段1542、reg字段1544和r/m字段1546。如先前描述的,mod字段1542的内容在存储器访问和非存储器访问操作之间进行区分。reg字段1544的作用可以被总结成两个情形:对目的地寄存器操作数或源寄存器操作数进行编码,或者被视为操作码扩展并且不用于对任何指令操作数进行编码。r/m字段1546的作用可包括以下内容:对参考存储器地址的指令操作数进行编码,或对目的地寄存器操作数或源寄存器操作数进行编码。

比例、索引、基址(sib)字节(字节6)——如先前描述的,比例字段1450的内容用于存储器地址生成。sib.xxx1554和sib.bbb1556——先前已经关于寄存器索引xxxx和bbbb参考了这些字段的内容。

位移字段1462a(字节7-10)——当mod字段1542包含10时,字节7-10是位移字段1462a,并且它与旧有32位位移(disp32)以相同方式工作并且以字节粒度工作。

位移因数字段1462b(字节7)——当mod字段1542包含01时,字节7是位移因数字段1462b。该字段的位置是与以字节粒度工作的旧有x86指令集8位位移(disp8)的位置相同的位置。因为disp8是符号扩展的,所以它可以仅在-128和127字节偏移之间寻址;就64字节高速缓存线来说,disp8使用可以被设置成仅四个真正有用的值-128、-64、0和64的8个位;因为常常需要更大的范围,所以使用disp32;然而,disp32需要4个字节。与disp8和disp32相比,位移因数字段1462b是disp8的重新解释;当使用位移因数字段1462b时,通过乘以存储器操作数访问的大小(n)的位移因数字段的内容来确定实际位移。这种类型的位移被称为disp8*n。这降低平均指令长度(用于位移但具有大得多的范围的单个字节)。这样的经压缩的位移是基于以下假设:有效位移是存储器访问的粒度的倍数,并且因而不需要对地址偏移的冗余低阶位进行编码。换言之,位移因数字段1462b代替旧有x86指令集8位位移。因此,以与x86指令集8位位移相同的方式来对位移因数字段1462b进行编码(所以modrm/sib编码规则没有变化),仅有的例外是使disp8过载成disp8*n。换言之,在编码规则或编码长度中不存在变化,但是仅在通过硬件对位移值的解释上存在变化(这需要使位移缩放存储器操作数的大小以获得按字节的地址偏移)。立即数字段1472如先前描述的那样操作。

全操作码字段

图15b是图示根据本发明的一个实施例的构成全操作码字段1474的特定向量友好指令格式1500的字段的框图。具体来说,全操作码字段1474包括格式字段1440、基础操作字段1442和数据元素宽度(w)字段1464。该基础操作字段1442包括前缀编码字段1525、操作码映射字段1515和实操作码字段1530。

寄存器索引字段

图15c是图示根据本发明的一个实施例的构成寄存器索引字段1444的特定向量友好指令格式1500的字段的框图。具体来说,寄存器索引字段1444包括rex字段1505、rex'字段1510、modr/m.reg字段1544、modr/m.r/m字段1546、vvvv字段1520、xxx字段1554和bbb字段1556。

扩增操作字段

图15d是图示根据本发明的一个实施例的构成扩增操作字段1450的特定向量友好指令格式1500的字段的框图。当类别(u)字段1468包含0时,它意味着evex.u0(a类1468a);当它包含1时,它意味着evex.u1(b类1468b)。当u=0并且mod字段1542包含11(意味着无存储器访问操作)时,α字段1452(evex字节3,位[7]-eh)被解释为rs字段1452a。当rs字段1452a包含a1(舍入1452a.1)时,β字段1454(evex字节3,位[6:4]-sss)被解释为舍入控制字段1454a。该舍入控制字段1454a包括一位sae字段1456和两位舍入操作字段1458。当rs字段1452a包含0(数据变换1452a.2)时,β字段1454(evex字节3,位[6:4]-sss)被解释为三位数据变换字段1454b。当u=0并且mod字段1542包含00、01或10(意味着存储器访问操作)时,α字段1452(evex字节3,位[7]-eh)被解释为驱逐提示(eh)字段1452b,并且β字段1454(evex字节3,位[6:4]-sss)被解释为三位数据操纵字段1454c。

当u=1时,α字段1452(evex字节3,位[7]-eh)被解释为写掩码控制(z)字段1452c。当u=1并且mod字段1542包含11(意味着无存储器访问操作)时,β字段1454的一部分(evex字节3,位[4]-s0)被解释为rl字段1457a;当它包含1(舍入1457a.1)时,β字段1454的其余部分(evex字节3,位[6-5]-s2-1)被解释为舍入操作字段1459a,而当rl字段1457a包含0(vsize1457.a2)时,β字段1454的其余部分(evex字节3,位[6-5]-s2-1)被解释为向量长度字段1459b(evex字节3,位[6-5]-l1-0)。当u=1并且mod字段1542包含00、01或10(意味着存储器访问操作)时,β字段1454(evex字节3,位[6:4]-sss)被解释为向量长度字段1459b(evex字节3,位[6:5]-l1-0)和广播字段1457b(evex字节3,位[4]-b)。

示范性寄存器架构

图16是根据本发明的一个实施例的寄存器架构1600的框图。在所图示的实施例中,存在具有512位宽的32个向量寄存器1610;这些寄存器被称为zmm0至zmm31。下16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。下16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。如在以下表中图示的那样,该特定向量友好指令格式1500对这些覆盖的寄存器文件进行操作:

换言之,该向量长度字段1459b在最大长度和一个或多个其他较短长度之间选择,其中每个这样的较短长度是在前长度的长度的一半;并且不具有向量长度字段1459b的指令模板对最大向量长度进行操作。此外,在一个实施例中,特定向量友好指令格式1500的b类指令模板对打包或标量单/双精度浮点数据以及打包或标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上实行的操作;取决于实施例,较高阶数据元素位置与它们在指令之前相同地在左侧或者被归零。

写掩码寄存器1615——在所图示的实施例中,存在8个写掩码寄存器(k0至k7),每个在大小上都是64位。在替换实施例中,写掩码寄存器1615在大小上是16位。如先前描述的,在本发明的一个实施例中,该向量掩码寄存器k0不可以被用作写掩码;当将会正常指示k0的编码用于写掩码时,它选择0xffff的硬接线写掩码,有效地禁用对于该指令的写掩蔽。

通用寄存器1625——在所图示的实施例中,存在连同现有的x86寻址模式一起用于对存储器操作数寻址的十六个64位通用寄存器。通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8至r15来参考这些寄存器。

标量浮点堆栈寄存器文件(x87堆栈)1645(其别名为mmx打包整数平面寄存器文件1650)——在所图示的实施例中,该x87堆栈是用于使用x87指令集扩展来对32/64/80位浮点数据实行标量浮点操作的八元素堆栈;而mmx寄存器用于对64位打包整数数据实行操作以及对于在mmx和xmm寄存器之间实行的一些操作保持操作数。

本发明的替换实施例可使用更宽或更窄的寄存器。另外,本发明的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。

示范性核架构、处理器和计算机架构

为了不同目的可以不同的方式并且在不同处理器中实现处理器核。例如,这样的核的实施方式可包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)意图主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实施方式可包括:1)包括意图用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核的cpu;以及2)包括意图主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)来自cpu的单独芯片上的协处理器;2)与cpu相同的封装中的单独管芯上的协处理器;3)与cpu相同的管芯上的协处理器(在这种情况下,这样的协处理器有时被称为专用逻辑(诸如集成图形和/或科学(吞吐量)逻辑),或被称为专用核);以及4)片上系统,其可在相同的管芯上包括所述cpu(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、上述协处理器和附加功能性。接下来描述示范性核架构,之后是示范性处理器和计算机架构的描述。

示范性核架构

有序和无序核框图

图17a是根据本发明的实施例的图示示范性有序流水线以及示范性寄存器重命名、无序发布/执行流水线二者的框图。图17b是根据本发明的实施例的图示有序架构核的示范性实施例以及要被包括在处理器中的示范性寄存器重命名、无序发布/执行架构核二者的框图。图17a-b中的实线框图示有序流水线和有序核,而虚线框的可选附加项图示寄存器重命名、无序发布/执行流水线和核。考虑到有序方面是无序方面的子集,将描述无序方面。

在图17a中,处理器流水线1700包括提取阶段1702、长度解码阶段1704、解码阶段1706、分配阶段1708、重命名阶段1710、调度(也已知为派遣或发布)阶段1712、寄存器读取/存储器读取阶段1714、执行阶段1716、写回/存储器写入阶段1718、异常处理阶段1722和提交阶段1724。

图17b示出处理器核1790,处理器核1790包括被耦合到执行引擎单元1750的前端单元1730,并且这两个单元都被耦合到存储器单元1770。核1790可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核或者混合或替换的核类型。作为又一选项,核1790可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等等。

前端单元1730包括分支预测单元1732,分支预测单元1732被耦合到指令高速缓存单元1734,指令高速缓存单元1734被耦合到指令转译后备缓冲器(tlb)1736,指令转译后备缓冲器(tlb)1736被耦合到指令提取单元1738,指令提取单元1738被耦合到解码单元1740。解码单元1740(或解码器)可解码指令,并生成解码自原始指令、或以其他方式反映原始指令、或导出自原始指令的一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同机制来实现解码单元1740。合适机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1790包括微代码rom或存储用于某些宏指令的微代码的其他介质(例如,在解码单元1740中或以其他方式在前端单元1730内)。解码单元1740被耦合到执行引擎单元1750中的重命名/分配器单元1752。

执行引擎单元1750包括重命名/分配器单元1752,其被耦合到引退单元1754和一组一个或多个调度器单元1756。(一个或多个)调度器单元1756表示任何数量的不同调度器,包括保留站、中央指令窗口等。(一个或多个)调度器单元1756被耦合到(一个或多个)物理寄存器文件单元1758。(一个或多个)物理寄存器文件单元1758中的每一个表示一个或多个物理寄存器文件,其中的不同物理寄存器文件存储一个或多个不同数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器文件单元1758包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元1758被引退单元1754重叠以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;使用寄存器映射和寄存器池等)。引退单元1754和(一个或多个)物理寄存器文件单元1758被耦合到(一个或多个)执行集群1760。(一个或多个)执行集群1760包括一组一个或多个执行单元1762以及一组一个或多个存储器访问单元1764。执行单元1762可实行各种操作(例如,移位、加法、减法、乘法)并且对各种数据类型(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种操作。虽然一些实施例可包括专用于特定功能或功能集的多个执行单元,但是其他实施例可包括全部实行所有功能的仅一个执行单元或多个执行单元。(一个或多个)调度器单元1756、(一个或多个)物理寄存器文件单元1758和(一个或多个)执行集群1760被示出为可能是复数的,因为某些实施例针对某些数据/操作类型创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,它们各自具有其自己的调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群——并且在单独的存储器访问流水线的情况下,实现其中该流水线的仅执行集群具有(一个或多个)存储器访问单元1764的某些实施例)。还应当理解的是:在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余部分的有序。

该组存储器访问单元1764被耦合到存储器单元1770,存储器单元1770包括数据tlb单元1772,数据tlb单元1772被耦合到数据高速缓存单元1774,数据高速缓存单元1774被耦合到2级(l2)高速缓存单元1776。在一个示范性实施例中,存储器访问单元1764可包括负载单元、存储地址单元和存储数据单元,它们中的每一个都被耦合到存储器单元1770中的数据tlb单元1772。指令高速缓存单元1734进一步被耦合到存储器单元1770中的2级(l2)高速缓存单元1776。l2高速缓存单元1776被耦合到高速缓存的一个或多个其他级并最终被耦合到主存储器。

通过示例的方式,示范性寄存器重命名、无序发布/执行核架构可如下实现流水线1700:1)指令提取1738实行提取和长度解码阶段1702和1704;2)解码单元1740实行解码阶段1706;3)重命名/分配器单元1752实行分配阶段1708和重命名阶段1710;4)(一个或多个)调度器单元1756实行调度阶段1712;5)(一个或多个)物理寄存器文件单元1758和存储器单元1770实行寄存器读取/存储器读取阶段1714;执行集群1760实行执行阶段1716;6)存储器单元1770和(一个或多个)物理寄存器文件单元1758实行写回/存储器写入阶段1718;7)在异常处理阶段1722中可涉及到各种单元;以及8)引退单元1754和(一个或多个)物理寄存器文件单元1758实行提交阶段1724。

核1790可支持一个或多个指令集(例如,x86指令集(具有已添加有较新版本的某些扩展);加利福尼亚州桑尼维尔的mips科技的mips指令集;加利福尼亚州桑尼维尔的arm控股公司的arm指令集(具有诸如neon之类的可选附加扩展)),包括本文描述的(一个或多个)指令。在一个实施例中,核1790包括用以支持打包数据指令集扩展(例如,avx1、avx2)的逻辑,从而允许使用打包数据来实行由许多多媒体应用使用的操作。

应当理解的是:核可支持多线程(执行两个或更多个并行的操作集或线程集),并且可以各种各样的方式来这样做,所述方式包括时间切片多线程、同时多线程(其中单个物理核为物理核正同时进行多线程的线程中的每一个提供逻辑核)或其组合(例如,时间切片提取和解码以及其后的同时多线程,诸如在英特尔®超线程技术中那样)。

虽然在无序执行的上下文中描述寄存器重命名,但是应当理解的是:寄存器重命名可用在有序架构中。虽然所图示的处理器的实施例还包括单独的指令和数据高速缓存单元1734/1774以及共享l2高速缓存单元1776,但是替换实施例可具有用于指令和数据二者的单个内部高速缓存,诸如例如,1级(l1)内部高速缓存或多级内部高速缓存。在一些实施例中,系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。替换地,所有高速缓存都可在核和/或处理器外部。

特定的示范性有序核架构

图18a-b图示更特定的示范性有序核架构的框图,其核将会是芯片中的(包括相同类型和/或不同类型的其他核的)若干逻辑块中的一个。逻辑块通过具有某些固定功能逻辑、存储器i/o接口以及其他必要i/o逻辑(取决于应用)的高带宽互连网络(例如,环形网络)进行通信。

图18a是根据本发明的实施例的单个处理器核、连同其到管芯上互连网络1802的连接以及其2级(l2)高速缓存的本地子集1804的框图。在一个实施例中,指令解码器1800支持具有打包数据指令集扩展的x86指令集。l1高速缓存1806允许到标量和向量单元中的对高速缓存存储器的低延迟访问。虽然(为了简化设计)在一个实施例中,标量单元1808和向量单元1810使用单独的寄存器集(分别为标量寄存器1812和向量寄存器1814)并且在它们之间传送的数据被写入到存储器并且然后从1级(l1)高速缓存1806读回,但是本发明的替换实施例可使用不同的方法(例如,使用单个寄存器集或包括允许在两个寄存器文件之间传送数据而无需写入和读回的通信路径)。

l2高速缓存的本地子集1804是被每个处理器核一个地划分成单独的本地子集的全局l2高速缓存的一部分。每个处理器核具有到其自己的l2高速缓存的本地子集1804的直接访问路径。由处理器核读取的数据被存储在其l2高速缓存子集1804中并且可以被快速访问,与其他处理器核访问它们自己的本地l2高速缓存子集并行地进行。由处理器核写入的数据被存储在其自己的l2高速缓存子集1804中并且如果必要的话从其他子集中被清除。环形网络确保对于共享数据的一致性。该环形网络是双向的以允许诸如处理器核、l2高速缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环形数据路径在每个方向上都是1024位宽。

图18b是根据本发明的实施例的图18a中的处理器核的部分的展开图。图18b包括l1数据高速缓存1806a(l1高速缓存1804的一部分)以及关于向量单元1810和向量寄存器1814的更多细节。具体来说,向量单元1810是16宽向量处理单元(vpu)(参见16宽alu1828),其执行整数指令、单精度浮动指令和双精度浮动指令中的一个或多个。vpu支持用拌和单元1820来拌和寄存器输入、用数值转换单元1822a-b来数值转换以及用复制单元1824来对存储器输入进行复制。写掩码寄存器1826允许预测所得到的向量写入。

图19是根据本发明的实施例的可具有多于一个核、可具有集成存储器控制器并且可具有集成图形装置的处理器1900的框图。图19中的实线框图示具有单个核1902a、系统代理1910、一组一个或多个总线控制器单元1916的处理器1900,而虚线框的可选添加图示具有多个核1902a-n、系统代理单元1910中的一组一个或多个集成存储器控制器单元1914以及专用逻辑1908的替换处理器1900。

因此,处理器1900的不同实施方式可包括:1)具有专用逻辑1908和核1902a-n的cpu,专用逻辑1908是集成图形装置和/或科学(吞吐量)逻辑(其可包括一个或多个核),核1902a-n是一个或多个通用核(例如,通用有序核、通用无序核、二者的组合);2)具有核1902a-n的协处理器,核1902a-n是意图主要用于图形和/或科学(吞吐量)的大量的专用核;以及3)具有核1902a-n的协处理器,核1902a-n是大量的通用有序核。因此,处理器1900可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量多集成核(mic)协处理器(包括30或更多个核)、嵌入式处理器等等。可在一个或多个芯片上实现处理器。处理器1900可以是一个或多个衬底的一部分,或者可使用多种工艺技术(诸如例如,bicmos、cmos或nmos)中的任何一种将处理器1900实现在一个或多个衬底上。

存储器层级包括核内的高速缓存的一个或多个级、一组一个或多个共享高速缓存单元1906以及被耦合到该组集成存储器控制器单元1914的外部存储器(未示出)。该组共享高速缓存单元1906可包括一个或多个中间级高速缓存,诸如2级(l2)、3级(l3)、4级(l4)或其他级的高速缓存、末级高速缓存(llc)和/或其组合。虽然在一个实施例中基于环形的互连单元1912互连集成图形逻辑1908(集成图形逻辑1908是专用逻辑的示例并且在本文中也被称为专用逻辑)、该组共享高速缓存单元1906以及系统代理单元1910/(一个或多个)集成存储器控制器单元1914,但是替换实施例可使用任何数量的公知技术来互连这样的单元。在一个实施例中,在一个或多个高速缓存单元1906和核1902a-n之间维持一致性。

在一些实施例中,核1902a-n中的一个或多个能够进行多线程。系统代理1910包括协调和操作核1902a-n的那些组件。系统代理单元1910可包括例如功率控制单元(pcu)和显示单元。pcu可以是或者包括调节核1902a-n和集成图形逻辑1908的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。

就架构指令集而言,核1902a-n可以是同构的或是异构的;即,核1902a-n中的两个或更多个可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅子集或者执行不同的指令集。

示范性计算机架构

图20-23是示范性计算机架构的框图。在针对膝上型计算机、台式计算机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的领域中已知的其他系统设计和配置也是合适的。一般来说,能够并入如本文公开的处理器和/或其他执行逻辑的大量的各种各样的系统或电子设备一般都是合适的。

现在参考图20,示出根据本发明的一个实施例的系统2000的框图。系统2000可包括一个或多个处理器2010、2015,它们被耦合到控制器集线器2020。在一个实施例中,控制器集线器2020包括图形存储器控制器集线器(gmch)2090和输入/输出集线器(ioh)2050(其可在单独的芯片上);gmch2090包括存储器和图形控制器,存储器2040和协处理器2045被耦合到所述存储器和图形控制器;ioh2050将输入/输出(i/o)设备2060耦合到gmch2090。替换地,存储器和图形控制器中的一个或二者被集成在(如本文描述的)处理器内,存储器2040和协处理器2045被直接耦合到处理器2010和与ioh2050在单个芯片中的控制器集线器2020。

在图20中用折线标明附加处理器2015的可选性质。每个处理器2010、2015可包括本文描述的处理核中的一个或多个并且可以是处理器1900的某一版本。

存储器2040可例如是动态随机存取存储器(dram)、相变存储器(pcm)或二者的组合。针对至少一个实施例,控制器集线器2020经由多点总线与(一个或多个)处理器2010、2015通信,所述多点总线诸如前侧总线(fsb)、点到点接口(诸如快速路径互连(qpi))或者类似连接2095。

在一个实施例中,协处理器2045是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。在一个实施例中,控制器集线器2020可包括集成图形加速器。

就包括架构、微架构、热学、功率消耗特性等等的优点的度量谱而言,在物理资源2010、2015之间可以有各种差异。

在一个实施例中,处理器2010执行控制通用类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器2010将这些协处理器指令识别为应当由附连的协处理器2045来执行的类型。相应地,处理器2010在协处理器总线或其他互连上将这些协处理器指令(或表示协处理器指令的控制信号)发布给协处理器2045。(一个或多个)协处理器2045接受并执行接收的协处理器指令。

现在参考图21,示出根据本发明的实施例的第一更特定的示范性系统2100的框图。如图21中所示,多处理器系统2100是点到点互连系统,并且包括经由点到点互连2150耦合的第一处理器2170和第二处理器2180。处理器2170和2180中的每一个可以是处理器1900的某一版本。在本发明的一个实施例中,处理器2170和2180分别是处理器2010和2015,而协处理器2138是协处理器2045。在另一实施例中,处理器2170和2180分别是处理器2010和协处理器2045。

处理器2170和2180被示出分别包括集成存储器控制器(imc)单元2172和2182。处理器2170还包括点到点(p-p)接口2176和2178作为其总线控制器单元的一部分;类似地,第二处理器2180包括p-p接口2186和2188。处理器2170、2180可使用p-p接口电路2178、2188经由点到点(p-p)接口2150交换信息。如图21中所示,imc2172和2182将处理器耦合到相应存储器,即存储器2132和存储器2134,它们可以是本地附连到相应处理器的主存储器的部分。

处理器2170、2180可使用点到点接口电路2176、2194、2186、2198经由独立的p-p接口2152、2154与芯片组2190交换信息。芯片组2190可经由高性能接口2192可选地与协处理器2138交换信息。在一个实施例中,协处理器2138是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等等。

共享高速缓存(未示出)可被包括在任一处理器中或者在两个处理器外部,又或者经由p-p互连与处理器连接,使得如果处理器被置入到低功率模式中则任一或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。

芯片组2190可经由接口2196被耦合到第一总线2116。在一个实施例中,第一总线2116可以是外围组件互连(pci)总线,或者是诸如pci快速总线或另一第三代i/o互连总线之类的总线,但是本发明的范围不限于此。

如图21中所示,各种i/o设备2114可被耦合到第一总线2116连同总线桥2118,总线桥2118将第一总线2116耦合到第二总线2120。在一个实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理器之类的一个或多个附加处理器2115被耦合到第一总线2116。在一个实施例中,第二总线2120可以是低引脚数(lpc)总线。各种设备可被耦合到第二总线2120,所述设备包括例如,键盘和/或鼠标2122、通信设备2127以及诸如盘驱动或其他大容量存储设备之类的存储单元2128,存储单元2128在一个实施例中可包括指令/代码和数据2130。此外,音频i/o2124可被耦合到第二总线2120。注意:其他架构也是可能的。例如,代替图21的点到点架构,系统可实现多点总线或其他这样的架构。

现在参考图22,示出根据本发明的实施例的第二更特定的示范性系统2200的框图。图21和22中的相似元件具有相似的附图标记,并且已经从图22中省略了图21的某些方面以便避免模糊图22的其他方面。

图22图示处理器2170、2180可分别包括集成存储器和i/o控制逻辑(“cl”)2172和2182。因此,cl2172、2182包括集成存储器控制器单元并且包括i/o控制逻辑。图22图示不仅存储器2132、2134被耦合到cl2172、2182,而且i/o设备2214也被耦合到控制逻辑2172、2182。旧有i/o设备2215被耦合到芯片组2190。

现在参考图23,示出根据本发明的实施例的soc2300的框图。图19中的类似元件具有相似的附图标记。而且,虚线框是更高级的soc上的可选特征。在图23中,(一个或多个)互连单元2302被耦合到:应用处理器2310,其包括包含高速缓存单元1904a-n的一组一个或多个核1902a-n以及(一个或多个)共享高速缓存单元1906;系统代理单元1910;(一个或多个)总线控制器单元1916;(一个或多个)集成存储器控制器单元1914;一组一个或多个协处理器2320,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元2330;直接存储器访问(dma)单元2332;以及用于耦合到一个或多个外部显示器的显示单元2340。在一个实施例中,(一个或多个)协处理器2320包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等等。

可以硬件、软件、固件或这样的实施方式方法的组合来实现本文公开的机制的实施例。本发明的实施例可被实现为计算机程序或程序代码,其在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行。

可应用诸如图21中图示的代码2130之类的程序代码来输入指令以实行本文描述的功能并生成输出信息。可以已知方式将输出信息应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,诸如例如:数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。

可以高级程序语言或面向对象的编程语言来实现程序代码以便与处理系统通信。如果期望的话,也可以汇编语言或机器语言来实现程序代码。事实上,本文描述的机制在范围上不限于任何特别的编程语言。在任何情况下,语言可以是编译语言或解释语言。

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

这样的机器可读存储介质可在没有限制的情况下包括由机器或设备制造或形成的非暂时性有形的制品布置,包括诸如硬盘之类的存储介质、任何其他类型的盘(包括软盘、光盘、紧凑盘只读存储器(cd-rom)、紧凑盘可重写设备(cd-rw)以及磁光盘)、半导体设备(诸如只读存储器(rom)、随机存取存储器(ram)(诸如动态随机存取存储器(dram)、静态随机存取存储器(sram))、可擦可编程只读存储器(eprom)、闪速存储器、电可擦可编程只读存储器(eeprom)、相变存储器(pcm))、磁卡或光卡、或者适合于存储电子指令的任何其他类型的介质。

相应地,本发明的实施例还包括包含指令或包含设计数据(诸如硬件描述语言(hdl))的非暂时性有形的机器可读介质,所述设计数据定义本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例也可被称为程序产品。

仿真(包括二进制转译、代码变形等)

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

图24是根据本发明的实施例的对照使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但是替换地,指令转换器可以软件、固件、硬件和其各种组合来实现。图24示出以高级语言2402形式的程序可使用x86编译器2404来编译以生成x86二进制代码2406,x86二进制代码2406可原生地由具有至少一个x86指令集核的处理器2416来执行。具有至少一个x86指令集核的处理器2416表示基本上可以通过兼容地执行或以其他方式处理以下内容来实行与具有至少一个x86指令集核的英特尔处理器相同的功能的任何处理器:(1)英特尔x86指令集核的指令集的实质部分或者(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便基本上实现与具有至少一个x86指令集核的英特尔处理器相同的结果。x86编译器2404表示可操作用于生成x86二进制代码2406(例如,目标代码)的编译器,二进制代码2406可在有附加链接处理或没有附加链接处理的情况下在具有至少一个x86指令集核的处理器2416上被执行。类似地,图24示出以高级语言2402形式的程序可使用替换指令集编译器2408来进行编译以生成替换指令集二进制代码2410,替换指令集二进制代码2410可原生地由不具有至少一个x86指令集核的处理器2414(例如,具有执行加利福尼亚州桑尼维尔的mips科技的mips指令集和/或执行加利福尼亚州桑尼维尔的arm控股公司的arm指令集的核的处理器)来执行。使用指令转换器2412来将x86二进制代码2406转换成可原生地由不具有x86指令集核的处理器2414来执行的代码。该经转换的代码不可能与替换指令集二进制代码2410相同,因为能够这样做的指令转换器难以制作;然而,经转换的代码将完成一般操作并且由来自替换指令集的指令构成。因此,指令转换器2412表示通过仿真、模拟或任何其他过程而允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2406的软件、固件、硬件或其组合。

针对图4-7和9-12中的任一个描述的特征和细节还可能可选地应用于图2、3和8中的任一个。本文公开的处理器(例如,处理器300)可能可选地实行本文公开的方法(例如,206、884)。本文描述的处理器中的任一个(例如,处理器300)在各实施例中可能可选地被包括在本文公开的系统中的任一个(例如,图20-23的系统中的任一个)中。

本文公开的处理器组件可被说和/或要求为操作的、可操作的、有能力的、能够、配置成、适配成或以其他方式实行操作。例如,解码器可被说和/或要求为解码指令,执行单元可被说和/或要求为存储日志或结果等等。如本文所使用的,这些表达是指当在断电状态时组件的特性、性质或属性,并且不暗示组件或者包括它们的设备或装置当前是通电的或正在操作。为清楚起见,应理解:如本文所要求保护的处理器和装置未通电或正在运行。

在说明书和权利要求书中,可能已经使用术语“耦合”和/或“连接”及其派生词。这些术语不打算作为彼此的同义词。而是,在实施例中,“连接”可用于指示两个或更多个元件彼此直接物理和/或电接触。“耦合”可意味着两个或更多个元件彼此直接物理和/或电接触。然而,“耦合”还可意味着两个或更多个元件彼此不直接接触,但仍然彼此协作或交互。例如,执行单元可通过一个或多个中间组件与寄存器和/或解码单元耦合。在图中,箭头用于示出连接和耦合。

可能已经使用术语“和/或”。如本文所使用的,术语“和/或”意味着一个或另一个或二者(例如,a和/或b表示a或b或a和b二者)。

在以上描述中,已经阐述了特定细节以便提供对实施例的透彻理解。然而,可在没有这些具体细节中的一些的情况下实践其他实施例。本发明的范围不是由以上提供的特定示例确定,而是仅由下面的权利要求确定。在其他实例中,已经以框图形式和/或没有细节地示出公知的电路、结构、设备和操作,以避免模糊对描述的理解。在许多情况下,已经在图中重复附图标记或其末端部分以指示对应或类似的元件,除非另外清楚地显而易见,否则该对应或类似的元件可能可选地具有类似或相同的特性。

某些操作可由硬件组件实行,或者可被体现在机器可执行或电路可执行指令中,该指令可用于促使和/或导致用指令编程的机器、电路或硬件组件(例如,处理器、处理器的部分、电路等)来实行操作。操作还可能可选地由硬件和软件的组合来实行。处理器、机器、电路或硬件可包括特定或特别电路,或者其他逻辑(例如,可能与固件和/或软件组合的硬件)可操作以执行和/或处理指令并且响应于指令来存储结果。

一些实施例包括制品(例如,计算机程序产品),其包括机器可读介质。介质可包括以由机器可读的形式提供(例如,存储)信息的机制。机器可读介质可提供指令或指令序列,或者已经在其上存储指令或指令序列,该指令或指令序列如果和/或当由机器执行时可操作以促使机器实行和/或导致机器实行本文公开的一个或多个操作、方法或技术。

在一些实施例中,机器可读介质可包括有形和/或非暂时性机器可读存储介质。例如,非暂时性机器可读存储介质可包括软盘、光存储介质、光盘、光数据存储设备、cd-rom、磁盘、磁光盘、只读存储器(rom)、可编程rom(prom)、可擦除和可编程rom(eprom)、电可擦除和可编程rom(eeprom)、随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非暂时性存储器、非暂时性数据存储设备等等。非暂时性机器可读存储介质不由暂时性传播的信号组成。在一些实施例中,存储介质可包括有形介质,其包括固态物质或材料,诸如例如半导体材料、相变材料、磁固体材料、固体数据存储材料等。替换地,可能可选地使用非有形的暂时性计算机可读传输介质,诸如例如电、光、声或其他形式的传播信号——诸如载波、红外信号和数字信号。

合适的机器的示例包括但不限于通用处理器、专用处理器、数字逻辑电路、集成电路等等。合适的机器的另外其他示例包括计算机系统或其他电子设备,其包括处理器、数字逻辑电路或集成电路。这样的计算机系统或电子设备的示例包括但不限于台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、服务器、网络设备(例如路由器和交换机)、移动互联网设备(mid)、媒体播放器、智能电视、桌面一体机、机顶盒、视频游戏控制台和自主驾驶交通工具。

遍及本说明书提到的“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”例如指示特别特征可被包括在本发明的实施例的实践中,但不一定必须这样。类似地,在描述中,为了简化本公开并帮助理解各种发明的方面的目的,各种特征有时被分组在单个实施例、图或其描述中。然而,公开的此方法不被解释为反映本发明要求比在每个权利要求中清楚叙述的更多的特征的意图。而是,如以下权利要求所反映,发明的方面在于少于单个公开的实施例的所有特征。因此,在具体实施方式之后的权利要求由此被清楚地合并到该具体实施方式中,其中每个权利要求独立作为本发明的单独实施例。

示例性实施例

以下示例涉及进一步的实施例。示例中的细节可在一个或多个实施例中的任何地方使用。

示例1是包括用于解码指令(例如,开始存储器写日志指令)的解码单元的处理器。指令要指示目的地存储器地址信息。处理器还包括与解码单元耦合的执行单元。响应于指令的解码,执行单元为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志,该至少所有初始写入要在指令之后以原始程序顺序发生。存储器地址日志的起始要对应于该目的地存储器地址信息。

示例2包括示例1的处理器,其中响应于指令的解码,执行单元要可选地在存储器地址日志中的位置中以与相关联的前述至少所有初始写入随时间发生的顺序相同的顺序存储存储器地址。

示例3包括示例2的处理器,其中响应于指令的解码,执行单元要可选地在存储器地址日志中的连续位置中存储存储器地址。

示例4包括示例3的处理器,其中当存储器地址中的每一个被存储到存储器地址日志时,响应于指令的解码,执行单元要可选地更新值以考虑存储器地址的大小。该值要指示存储器地址日志中要存储下一个存储器地址的存储器位置。

示例5包括示例1至4中任一个的处理器,其中响应于指令的解码,执行单元要可选地为至少所有初始写入将数据项存储到数据项日志。存储的该数据项可能可选地是由于前述至少所有初始写入而更新数据项之前的数据项。

示例6包括示例5的处理器,其中解码单元要解码要可选地指示第二目的地存储器地址信息的指令。响应于指令的解码,执行单元可能可选地将数据项存储到数据项日志。数据项日志的起始可能可选地对应于第二目的地存储器地址信息。

示例7包括示例5的处理器,其中响应于指令的解码,执行单元要可选地将存储器地址存储并将数据项存储到组合的存储器地址和数据项日志。组合的存储器地址和数据项日志的起始可能可选地对应于目的地存储器地址信息。对应的存储器地址和数据项可能可选地在组合的存储器地址和数据项日志中彼此交织。

示例8包括示例1至7中任一个的处理器,其中响应于指令的解码,执行单元可能可选地将指示何时实行前述至少所有初始写入的时间存储到时间日志。

示例9包括示例1至8中任一个的处理器,其中响应于指令的解码,执行单元可能可选地在结束存储器写日志条件发生时停止将存储器地址存储到存储器地址日志。

示例10包括示例9的处理器,其中响应于指令的解码,执行单元要可选地将结束存储器写日志条件的发生检测为缺少用于进一步跟踪前述至少所有初始写入的资源。在一些情况下,执行单元还可能可选地在架构可见的存储位置中存储检测到缺少资源的指示。

示例11包括示例1至9中任一个的处理器,其中解码单元还要解码要指示目的地存储位置的第二指令(例如,结束存储器写日志指令)。处理器可能可选地还包括与解码单元耦合的第二执行单元。响应于第二指令的解码,第二执行单元可能可选地促使处理器由于指令的实行而停止将存储器地址存储到存储器地址日志。可选地,第二执行单元可在存储器地址日志中存储指示最后存储器位置的信息,该信息在指令的实行期间被存储。这样的信息可被存储到指示的目的地存储位置。

示例12包括示例11的处理器,其中指示最后存储器位置的信息可选地或者是用于指向最后存储器位置的存储器指针,或者是离由指令指示的目的地存储器位置的偏移。

示例13包括示例11至12中任一个的处理器,其中响应于第二指令的解码,第二执行单元可选地在架构可见的存储位置中存储将存储器地址存储到存储器地址日志由于第二指令而被停止的指示。

示例14包括示例1至13中任一个的处理器,其中在将存储器地址存储到存储器地址日志之前,处理器要可选地变换存储器地址。可通过为存储器地址加密、压缩和添加冗余数据中的至少一个来不同地变换存储器地址。

示例15包括示例1至14中任一个的处理器,其中数据项可选地是高速缓存线。

示例16包括示例1至15中任一个的处理器,其中响应于指令的解码,执行单元可选地不为对数据项的后续写入将存储器地址存储到存储器地址日志,该对数据项的后续写入在对数据项的初始写入之后发生。

示例17包括示例1至16中任一个的处理器,其中执行单元可选地包括用于跟踪在实行指令的同时写入的数据项的事务执行写集跟踪逻辑。

示例18是一种由处理器执行的方法,该方法包括在处理器处接收指令(例如,开始存储器写日志指令)。该指令指示目的地存储器地址信息。该方法还包括:响应于指令,为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志,该至少所有初始写入在指令之后以原始程序顺序发生。存储器地址日志的起始对应于目的地存储器地址信息。

示例19包括示例18的方法,进一步包括:响应于指令,为至少所有初始写入可选地将数据项存储到数据项日志。存储的数据项可能可选地是由于至少所有初始写入而更新数据项之前的数据项。

示例20包括示例18至19中任一个的方法,进一步可选地包括:响应于指令,将指示何时实行前述至少所有初始写入的时间存储到时间日志。

示例21包括示例18至20中任一个的方法,进一步可选地包括在处理器处接收第二指令(例如,结束存储器写日志指令)。第二指令可选地指示目的地存储位置。响应于第二指令,促使处理器由于指令的实行而停止将存储器地址存储到存储器地址日志。可选地,在指令的实行期间在存储器地址日志中存储的指示最后存储器位置的信息可被存储在可选地指示的目的地存储位置中。

示例22是一种用于处理指令的系统,包括互连和与互连耦合的处理器。处理器可接收指令(例如,开始存储器写日志指令)。指令可指示目的地存储器地址信息。响应于指令,处理器可为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志,该至少所有初始写入在指令之后以原始程序顺序发生。存储器地址日志的起始可对应于目的地存储器地址信息。系统还可包括与互连耦合的动态随机存取存储器(dram)。

示例23包括示例22的系统,其中响应于指令,处理器在数据项由于前述至少所有初始写入而被更新之前要可选地为前述至少所有初始写入将数据项存储到数据项日志。

示例24是一种包括非暂时性机器可读存储介质的制品。非暂时性机器可读存储介质存储包括指令(例如,开始存储器写日志指令)的多个指令。指令可指示目的地存储器地址信息。指令如果由机器执行则要促使机器实行操作,该操作包括为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志,该至少所有初始写入在指令之后以原始程序顺序发生。存储器地址日志的起始可对应于目的地存储器地址信息。

示例25包括示例24的制品,其中指令如果由机器执行则要进一步促使机器实行操作,该操作可选地包括在数据项由于前述至少所有初始写入而被更新之前为前述至少所有初始写入将数据项存储到数据项日志。

示例26是一种包括用于解码指令的解码单元的处理器,该指令指示目的地存储位置。处理器还包括与解码单元耦合的执行单元。响应于指令的解码,执行单元要促使处理器由于指令的实行而停止将存储器地址存储到存储器地址日志,并且在存储器地址日志中存储指示最后存储器位置的信息,该信息在指令的实行期间被存储到指示的目的地存储位置。

示例27包括示例26的示例,其中该信息可选地或者是用于指向最后存储器位置的存储器指针,或者是离由指令指示的目的地存储器位置的偏移。

示例28包括示例26至27中任一个的示例,其中执行单元还可能可选地在架构可见的存储位置中存储将存储器地址存储到存储器地址日志由于第二指令而被停止的指示。

示例29包括示例1至17和26中任一个的处理器,进一步包括:用于预测分支的可选的分支预测单元,以及与分支预测单元耦合的可选的指令预取单元,用于预取包括指令的指令的指令预取单元。处理器还可能可选地包括:与指令预取单元耦合的可选的一级(l1)指令高速缓存,用于存储指令的l1指令高速缓存,用于存储数据的可选的l1数据高速缓存,以及用于存储数据和指令的可选的二级(l2)高速缓存。处理器还可能可选地包括:与解码单元、l1指令高速缓存和l2高速缓存耦合的指令获取单元,以在一些情况下从l1指令高速缓存和l2高速缓存之一提取指令,并向解码单元提供指令。处理器还可能可选地包括:用于重命名寄存器的寄存器重命名单元,用于调度已经从用于执行的指令解码的一个或多个操作的可选的调度器,以及用于提交指令的执行结果的可选的提交单元。

示例30包括一种片上系统,其包括:至少一个互连,与至少一个互连耦合的示例1至17和26中任一个的处理器,与至少一个互连耦合的可选的图形处理单元(gpu),与至少一个互连耦合的可选的数字信号处理器(dsp),与至少一个互连耦合的可选的显示控制器,与至少一个互连耦合的可选的存储器控制器,与至少一个互连耦合的可选的无线调制解调器,与至少一个互连耦合的可选的图像信号处理器,与至少一个互连耦合的可选的通用串行总线(usb)3.0兼容控制器,与至少一个互连耦合的可选的蓝牙4.1兼容控制器,以及与至少一个互连耦合的可选的无线收发器控制器。

示例31是一种可操作以实行示例18至21中任一个的方法的处理器或其他装置。

示例32是一种处理器或其他装置,其包括用于实行示例18至21中任一个的方法的部件(means)。

示例33是一种处理器或其他装置,其包括可操作以实行示例18至21中任一个的方法的模块和/或单元和/或逻辑和/或电路和/或部件的任何组合。

示例34是一种可选地非暂时性和/或有形的机器可读介质,其可选地存储或以其他方式提供包括第一指令的指令,第一指令如果和/或当由处理器、计算机系统、电子设备或其他机器执行时可操作以促使机器实行示例18至21中任一个的方法。

示例35是一种计算机系统或其他电子设备,其包括具有解码单元的处理器,该解码单元可操作以解码第一指令集的指令。处理器还具有一个或多个执行单元。电子设备还包括与处理器耦合的存储设备。存储设备可操作以存储第一指令,第一指令可以是基本上如本文所公开的指令的任何实施例(例如,开始或结束存储器写日志指令),并且其将是第二不同指令集。存储设备还可操作以存储用于将第一指令转换为第一指令集的一个或多个指令的指令。当由处理器实行时,第一指令集的一个或多个指令可操作以促使处理器存储如本文其他地方描述的一个或多个日志。

示例36是一种处理器,其包括用于在处理器处接收指令的部件。该指令指示目的地存储器地址信息。处理器还包括:用于响应于指令为对对应数据项的至少所有初始写入将存储器地址存储到存储器地址日志的部件,该至少所有初始写入在指令之后以原始程序顺序发生。存储器地址日志的起始要对应于目的地存储器地址信息。

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