跟踪指令的控制流程的制作方法

文档序号:6540631阅读:274来源:国知局
跟踪指令的控制流程的制作方法
【专利摘要】本申请公开了跟踪指令的控制流程。公开了一种用于跟踪应用中的指令的控制流程以及基于所述应用中的所述指令的所述控制流程来执行处理设备的一次或多次优化的机制。生成控制流程数据以指示应用中的指令块的控制流程。控制流程数据可以包括指示是否可以对不同的指令块执行优化的注释。也可以使用控制流程数据来跟踪指令的执行,以判断是否将指令块中的指令分配给处理器的线程、进程和/或执行核,并判断在所述指令的执行过程中是否发生了错误。
【专利说明】跟踪指令的控制流程

【技术领域】
[0001]此处所描述的各实施例一般涉及处理设备,更具体而言,涉及跟踪指令的控制流程。
[0002]背景
[0003]当应用的指令由处理设备(例如,处理器)执行时,许多应用(例如,程序)表现出阶段行为。随着应用的执行在指令的不同的区域和/或块之间移动,处理设备可以具有不同的行为特征。例如,某一指令块可以包含不相关的指令,并可以允许多个指令同时执行。在另一个示例中,某一指令块可以更经常地使用处理设备的某些组件(例如,可以更经常地使用算术逻辑单元和/或存储器寄存器)。
[0004]附图简述
[0005]通过下面给出的详细描述以及本发明的各实施例的各个附图,将可更加完全地理解本发明。然而,附图不应该被理解为将本发明限制于特定实施例,而只是为了说明和理解的目的。
[0006]图1是根据本发明的一个实施例的包括控制流程模块以及用于跟踪应用中的指令的执行的控制流程的跟踪模块的系统体系结构的框图。
[0007]图2是示出了根据本发明的一个实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表。
[0008]图3是示出了根据本发明的另一实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表。
[0009]图4是示出了根据一个实施例的指令块中的指令向一个或多个执行单元的示例分配的框图。
[0010]图5是示出了根据本发明的再一个实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表。
[0011]图6是示出了根据本发明的实施例的生成控制流程数据的控制流程模块的框图。
[0012]图7是示出了根据本发明的实施例的跟踪执行指令和/或修改处理模块所使用的资源的跟踪模块的框图。
[0013]图8是根据本发明的一个实施例的跟踪指令的控制流程的方法的流程图。
[0014]图9是根据本发明的另一实施例的跟踪指令的控制流程的方法的流程图。
[0015]图10是根据本发明的实施例的芯片上系统(SoC)的框图。
[0016]图11是根据本发明的芯片上系统(SoC)设计的实施例的框图。
[0017]图12示出了计算机系统的示例形式的机器的示意图,在该计算机系统内,可以执行用于使机器执行此处所讨论的方法中的任何一个或多个的一组指令。
[0018]图13是根据一个实现的计算机系统的框图。
[0019]图14是示出了通过图14的处理设备1400来实现的有序流水线和寄存器重命名级、无序发布/执行流水线的框图。
[0020]图15是示出了根据本发明的至少一个实施例的要包括在处理器中的有序体系结构核和寄存器重命名逻辑、无序发布/执行逻辑的框图。
[0021]图16根据本发明的一个实施例的包括执行指令的逻辑电路的处理器200的微型体系结构的框图。

【具体实施方式】
[0022]如上文所讨论的,当应用的指令由处理设备执行时,许多应用(例如,程序)表现出阶段行为。分析指令的区域或块可以使处理设备提高和/或优化指令的每一个单个区域或块的性能和/或功率使用。标识指令的区域或块的一种可能的硬件解决方案将是提供对应于阶段-过渡的指令地址的按内容寻址的存储器(CAM)。当处理设备执行每一指令时,处理设备可以访问CAM以判断是否正在进入/退出新代码区域以及是否需要激活优化。然而,一旦CAM的大小超出几个条目,CAM就功率消耗而言效率低。另外,编程器和/或编译器可以将额外的指令插入到应用本身中(例如,在编译时),以输出关于应用的哪一个指令当前正在执行的信息。然而,这可能会减慢应用的执行,并可能添加大量开销。
[0023]本发明的各实施例可以跟踪应用中的指令的控制流程,并基于应用中的指令的控制流程,执行处理设备的一次或多次优化。在一个实施例中,生成控制流程数据以指示应用中的指令块的控制流程。控制流程数据可以包括指示是否可以对不同的指令块执行优化的注释。也可以使用控制流程数据来跟踪指令的执行,以判断指令块中的指令是否分配给处理器的线程、进程和/或执行核,并判断在所述指令的执行过程中是否发生了错误。处理设备和/或耦合到处理设备的跟踪模块可以跟踪指令的执行和/或基于控制流程数据来优化处理设备的操作。在一个实施例中,控制流程数据可以使用表来表示,该表可以使处理设备和/或跟踪模块来有效率地索引到表中的单个位置或条目。
[0024]虽然可以参考特定集成电路(诸如在计算平台或微处理器中)来描述下列实施例,但其他实施例也适用于其他类型的集成电路和逻辑设备。可以将此处所描述的各实施例的类似的技术和原理应用于其他类型的电路或半导体器件。例如,所公开的各实施例不仅限于台式计算机系统或Ultrabooks?。也可以用于诸如手持式设备、平板、其他薄的笔记本、芯片上系统(SOC)设备以及嵌入式应用之类的其他设备中。手持式设备的某些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)以及手持式PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机,或能够执行下面教导的功能和操作的任何其他系统。
[0025]虽然将参考处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑设备。可以将本发明的各实施例的类似的技术和原理应用于可以得益于较高流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本发明的各实施例的原理适用于执行数据操纵的任何处理器或机器。然而,本发明不仅限于执行512比特、256比特、128比特、64比特、32比特或16比特数据操作的处理器或机器,并可以应用于其中执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,出于说明的目的,各个附图示出了各种示例。然而,这些示例不应该以限制的意义来解释,因为它们只是为了提供本发明的各实施例的示例,而并非提供本发明的各实施例的所有可能的实现的详尽清单。
[0026]图1是根据本发明的一个实施例的系统体系结构100的框图,该系统体系结构100包括控制流程模块140以及用于跟踪应用中的指令的执行的控制流程的跟踪模块150。该系统体系结构还包括应用110、编译器120、二进制分析器130、运行时配置文件135、控制流程数据145,以及处理模块160。
[0027]应用110可以是程序、软件模块、软件组件,和/或可以由处理模块160执行的其他软件元件。应用110可以包括多个指令。指令可以包括使处理模块160执行诸如但不仅限于读取数据、写入数据、处理数据、形成数据、转换数据、变换数据等等之类的活动的程序代码。例如,应用110可以是包括使处理模块160执行媒体播放器以播放媒体项(诸如数字视频、数字音乐)或使处理模块160执行web浏览器的指令的二进制文件和/或可执行文件。应用110中的指令可以被分成指令块(例如,指令系列或组),诸如指令块115A到115X。
[0028]指令块115A到115X可以包括各种不同的指令(例如,程序指令)。例如,指令块115A到115X可以包括ADD指令(以添加两个或更多值)、MULT指令(乘以两个或更多值)、X0R(异-或)指令(对两个或更多值进行异-或运算)、AND (与)指令(对两个或更多值执行逐比特与运算)、存储指令(将值存储在诸如寄存器之类的存储器位置)、JUMP (转移)指令(将指令的执行流程定向到特定指令)、BRANCH (分支)指令(基于一个或多个条件,等等,将指令的执行流程定向到特定指令)。在一个实施例中,指令块115A到115X可以是基本块。基本块可以是具有一个入口点(例如,基本块中的一个指令是JUMP和/或BRANCH指令的目的地)和一个出口点(例如,最后一个指令可以是到不同的基本块的JUMP或BRANCH指令)的指令的组(例如,块)。
[0029]处理模块160可以执行应用110的指令。指令可以包括使处理模块160执行诸如,但不仅限于,读取数据、写入数据、处理数据、制定数据、转换数据、变换数据等等之类的活动的程序代码。作为一个说明性示例,处理模块160可以包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、多核处理器、多线程处理器、超低电压处理器、嵌入式处理器、实现指令集的组合的处理器和/或任何其他处理器设备,诸如例如数字信号处理器。处理模块160可以是诸如位于加利福尼亚州圣克拉拉市的英特尔公司所提供的Core?i3、i5、i7、2Duo以及Quad、Xeon?、Itanium?、XScale?、或StrongARM?之类的通用处理器。可另选地,处理模块160可以来自另一公司,诸如ARMHo I dings,Ltd, MIPS,等等。处理模块160可以是专用的处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、专用集成电路(ASIC)JI场可编程门阵列(FPGA)、数字信号处理器(DSP)等等。处理模块160可以在一个或多个芯片上实现。处理模块160可以是一个或多个衬底的一部分和/或可以使用若干种处理技术(诸如,例如,BiCMOS、CMOS,或NMOS)中的任何一种在一个或多个衬底上实现。
[0030]在一个实施例中,当指令块115A到115X中的一个或多个由处理模块160执行时,处理模块160可以表现出不同的行为、特征,可以更加经常地使用处理模块160的某些组件(例如,处理模块160内的某些电路),和/或可以以某种方式起作用。例如,指令块115A可以包括执行算术和/或逻辑函数(诸如X0R、ADD、MULT等等)的各种指令(例如,程序指令)。当与其他指令块相比时,当执行指令块115A中的指令时,处理模块160可以更多地使用算术和逻辑单元(ALU)。在另一个示例中,指令块115B可以包括不相关的指令(例如,不取决于指令块115B中的其他指令的指令)。不相关的指令可以允许多个指令同时由处理模块160执行。在一个实施例中,指令级并行性(ILP)可以是处理模块160可以同时执行多少指令的度量。由于指令块115中的指令确实不相关(例如,指令不依赖于其他指令的结果),因此指令块115B可以比其他指令块允许较高量的ILP。
[0031]在一个实施例中,编译器120可以基于源代码来生成应用110。源代码可以是使用某些人类可读的语言(例如,诸如JAVA、C++、C、C#等等之类的编程语言)编写的一个或多个计算机指令。编译器120可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的任何处理逻辑,该处理逻辑可以在有或者没有额外的链接处理的情况下生成由处理模块160执行的指令(例如,二进制代码、目标代码、程序指令等等)。在另一个实施例中,编译器120可以是即时(JIT)编译器。JIT编译器可以是从源代码生成字节代码的编译器。字节代码可以是由虚拟机转换和/或解释为可以由处理模块160来执行的指令(例如,二进制代码、目标代码、程序指令等等)的中间表示。由JIT编译器所生成的字节代码可以在不同的计算机体系结构之间可移植。与每一个不同的计算机体系结构相关联的虚拟机都可以将字节代码转换为和/或解释为计算机体系结构所使用的指令。
[0032]在一个实施例中,二进制分析器130可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑,该处理逻辑可以在应用Iio被处理模块160执行时(例如,当指令和/或指令块115A到115X被执行时)分析应用110。二进制分析器130可以标识应用110中的BRANCH和/或JUMP指令,可以标识BRANCH和/或JUMP指令的目的地,可以标识指令块115A到115X中的指令的类型(例如,访问存储器或寄存器的指令、算术或逻辑运算指令等等),可以标识应用110中的指令所使用的存储器位置(例如,寄存器)等等。二进制分析器130还可以标识应用110中的指令块115A到115X (例如,基本块)。例如,二进制分析器130可以将应用110的多个指令组合为指令块115C。在一个实施例中,二进制分析器130可以从处理模块接收关于应用110的指令的执行的数据。二进制分析器130可以在运行时配置文件135中记录和/或存储关于应用110的指令的执行的数据。运行时配置文件135可以包括诸如BRANCH和/或JUMP指令的位置、采用BRANCH指令的每一路径的次数,指令所使用的和/或被指令访问的存储器位置,指令的类型等等之类的数据。在一个实施例中,运行时配置文件135可以是指示应用110的指令曾如何被执行的数据和/或应用110的指令所使用的资源(例如,存储器寄存器、处理模块160的电路和/或组件)。运行时配置文件还可以包括指示指令、操作、函数和/或其他动作需要多长时间来执行的数据。例如,运行时配置文件135可以包括指示处理模块160需要花费多长时间来执行特定指令和/或指令块的数据。运行时配置文件135还可以被称为跟踪或指令跟踪。
[0033]在一个实施例中,控制流程模块140可以为应用110生成控制流程数据145。控制流程模块140可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑。控制流程数据145可以包括诸如指令块115A到115X的标识符、目的地标识符(例如,第一指令块可以分支到和/或跳转到的一个或多个指令块的标识符)、和/或指令块115A到115X中的一个或多个的注释之类的数据和/或信息。下面结合图2、3以及5比较详细地讨论了控制流程数据145。控制流程模块140可以分析由编译器120所生成的应用110以生成控制流程数据145。控制流程模块140可以从应用110中的指令来标识指令块(例如,指令块115A到115X)。例如,编译器120可以将应用110的多个指令组合为指令块115D。控制流程模块140还可以标识BRANCH和/或JUMP指令的目的地指令块。例如,指令块115A可以包括取决于是否满足与BRANCH指令相关联的条件而移动到指令块115B或指令块115D的BRANCH指令。
[0034]在一个实施例中,控制流程模块140可以将间接BRANCH指令转换为一系列COMPARE指令和JUMP指令。间接BRANCH指令可以是指定地址位于哪里而并非指定要执行的下一指令的地址的指令。控制流程模块140可以为间接BRANCH的每一个目标生成一对COMPARE和JUMP指令。例如,如果间接BRANCH指令具有第一目标和第二目标,则控制流程模块可以生成第一 COMPARE指令和第一 JUMP指令,该第一 COMPARE指令判断下一指令地址是否等于第一目标,以及如果第一目标等于下一指令地址则执行第一 JUMP指令;该控制流程模块并且可以生成第二 COMPARE指令和第二 JUMP指令,该第二 COMPARE指令判断下一指令地址是否等于第二目标的,以及如果第二目标等于下一指令地址则执行第二 JUMP指令。优化可以用于返回(return),返回是一种形式的间接BRANCH。对于返回,编译器120可能知道返回将控制转移到其对应的调用之后的指令。除控制流程表之外,还可以通过维护调用/返回块的层叠,来发现返回指令的目标指令。
[0035]在一个实施例中,控制流程模块140可以为指令块115A到115X中的一个或多个生成注释。注释可以被包括在控制流程数据145中。注释可以包括可以被用来跟踪应用110中的指令的执行、可以被用来修改处理模块160所使用的资源、可以被用来使处理模块160更有效率地操作和/或可以被用来优化处理模块160的操作的数据。例如,注释可以包括诸如在指令块中可能的ILP的量之类的信息。在另一个示例中,注释可以包括诸如指令块中的指令的数量之类的信息。此信息可以被用来标识硬错误(例如,诸如寄存器之类的存储器中的物理或硬件错误)和/或软错误(例如,可能改变指令和/或数据值的信号或数据中的错误)。
[0036]在一个实施例中,当生成控制流程数据145时,控制流程模块140可以与编译器120进行通信(例如,向其传输数据和/或从其接收数据)。例如,当编译器120编译源代码以生成应用110的指令时,编译器120可以向控制流程模块140提供指令,并且控制流程模块140可以分析指令以生成控制流程数据145。在另一个实施例中,可以包括控制流程模块140,作为编译器120的组件和/或作为编译器120的一部分。例如,控制流程模块140可以是当编译器120生成应用110的指令时编译器120所使用的软件模块和/或组件。编译器120可以在编译器120生成应用110的指令(例如,生成应用110)的同时或大约同时生成控制流程数据145。
[0037]在一个实施例中,当生成控制流程数据145时,控制流程模块140可以与二进制分析器130进行通信(例如,向其传输数据和/或从其接收数据)。例如,二进制分析器可以生成运行时配置文件135,并可以向控制流程模块140提供运行时配置文件135。控制流程模块140可以分析运行时配置文件135以生成控制流程数据145。在另一个实施例中,可以包括控制流程模块140,作为二进制分析器的组件和/或作为二进制分析器的一部分。例如,二进制分析器130可以在二进制分析器130生成运行时配置文件135的同时或大约同时生成控制流程数据145。
[0038]在一个实施例中,跟踪模块150可以跟踪应用110中的一个或多个指令的执行,可以允许处理模块160更有效率地操作,和/或可以使用控制流程数据145来优化处理模块的操作。跟踪模块150可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑。例如,跟踪模块150可以是以硬件实现的有限状态机。有限状态机包括可编程逻辑器件、可编程逻辑控制器、逻辑门、触发器和/或继电器。有限状态机还可以包括存储状态变量的一个或多个存储器和/或寄存器。有限状态机还可以包括组合逻辑的判断是否应该发生状态转换的一个或多个块,以及组合逻辑的确定有限状态机的输出的一个或多个块。在一个实施例中,跟踪模块150可以是处理模块160的一部分。例如,跟踪模块150可以是处理模块160内的电路。
[0039]在一个实施例中,跟踪模块150可以修改处理模块160所使用的资源,和/或可以基于控制流程数据145来优化处理模块160的操作。例如,跟踪模块150可以确定指令块115A具有低ILP。处理模块160可以包括多个执行核(例如,四个执行核、八个执行核等等),跟踪模块150可以指示处理模块160停用、断电和/或避免使用某些执行核,以减少处理模块160所使用的电量。在另一个示例中,跟踪模块150可以确定指令块(例如,指令块115C)主要包括算术和逻辑运算指令(例如,ADD、X0R等等)。跟踪模块150可以指示处理模块160准备好对于即将来临的指令块中的指令执行算术和逻辑操作的电路、组件和/或模块。
[0040]在一个实施例中,跟踪模块150可以判断对处理模块160所使用的资源的修改是否对处理模块160的操作具有效果。例如,跟踪模块150可以判断使处理模块160中的一个或多个组件断电或停用是否使计算设备节省电能(例如,使用较少的能量或电池电量)。在另一个示例中,跟踪模块150可以判断准备好处理模块160的即将来临的指令块所使用的电路、组件和/或模块是否提高应用110中的指令的执行的速度。在一个实施例中,如果跟踪模块150确定对处理模块160所使用的资源的修改对处理模块160的操作没有效果,则跟踪模块150可以更新控制流程数据145,以指示不应该执行对资源的修改(例如,指示不应该执行优化)。例如,跟踪模块150可以删除注释(该注释可以包括表示优化的数据),或可以向注释中添加指示不应该执行对资源的修改的数据。
[0041]在另一个实施例中,跟踪模块150可以使用控制流程数据145来跟踪应用110中的指令的执行。例如,处理模块160可以确定处理模块160正在执行指令块115A,指令块115A包括十二个指令。如果处理模块160在执行少于十二个指令之后转移到在另一指令块(例如,指令块11OT)中执行指令,则跟踪模块可以确定发生了错误(例如,硬错误和/或软错误),因为在执行来自其他指令块的指令之前,执行了少于十二个指令。跟踪模块150可以发送或产生错误标记,处理模块160可以基于错误标记来执行额外的操作(例如,可以结束应用110的指令的执行)。在另一个示例中,处理模块160可以使用不同的进程、线程和/或执行核来执行指令块中的指令。当处理模块160执行来自指令块的指令时,处理模块160可以将指令分配到进程、线程和/或执行核。跟踪模块150可以向控制流程数据145添加注释和/或更新注释,以指示将指令块中的指令分配到哪一个进程、线程和/或执行核。
[0042]在一个实施例中,编译器120、二进制分析器130、控制流程模块140以及跟踪模块150中的一个或多个可以驻留在处理模块160所驻留的同一个计算设备中。例如,编译器120、跟踪模块150以及处理模块160可以驻留在同一个计算设备上。在另一个示例中,二进制分析器130、控制流程模块140以及跟踪模块150可以驻留在处理模块160所驻留的同一个计算设备中。计算设备的示例可以包括但不仅限于诸如蜂窝式手持终端(例如,蜂窝电话)或智能电话之类的移动通信设备、诸如平板电脑、上网本、笔记本电脑、膝上型计算机之类的移动计算设备、台式计算机、服务器计算机等等。
[0043]图2是示出了根据本发明的一实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表290。如上文所讨论的,跟踪模块可以使用表290(例如,控制流程数据)来修改处理模块(例如,处理器)所使用的资源,以允许处理模块更有效率地操作,和/或优化处理模块的操作。虽然以表(例如,表290)的形式示出了控制流程数据,但是,应该理解,控制流程数据可以使用各种其他数据结构和/或表示来表示。例如,控制流程数据可以使用图、树、列表等等来表示。
[0044]表290包括四列。第一列标记为“当前块”,并包括六个不同的指令块(例如,基本块)的标识符(例如,块标识符)。回头参考图1,指令块115A可以使用标识符“I”来标记,指令块115B可以使用标识符“2”来标记,指令块115C可以使用标识符“3”来标记,等等。应该理解,在其他实施例中,标识符可以是可以被用来标识指令块(例如,基本块)的任何字母数字值、字符串、数字和/或其他值。第二列标记为“不采用”,并包括当不采用BRANCH指令时目的地指令块的标识符。例如,指令块“ I ”中的最后一个指令可以是BRANCH指令,在执行过程中,可能不满足BRANCH指令的条件。当不满足BRANCH指令的条件时,处理模块可以转移和/或前进到指令块“6”中的指令。在一个实施例中,表290可以指示,指令块不包括带有条件的BRANCH指令。例如,指令块“3”对于“不采用”列,具有值“N/A (不适用)”。这可以指示,指令块“3”中的最后一个指令是无条件BRANCH或JUMP指令。第三列标记为“采用”,并包括当采用BRANCH指令时目的地指令块的标识符。例如,指令块“I”中的最后一个指令可以是BRANCH指令,在执行过程中,可能满足BRANCH指令的条件。当满足了 BRANCH指令的条件时,处理模块可以转移和/或前进到指令块“2”中的指令。第四列被标记为“注释”,并包括“当前块”列中标识的指令块的一个或多个注释。
[0045]表290的每一行都包括:当前指令块的标识符(例如,包含当前正在执行的指令的指令块的标识符);在不采用BRANCH指令时的目的地指令块的第一标识符;在采用BRANCH指令的时的目的地指令块的第二标识符;以及当前块(例如,当前指令块或当前基本块)的注释。例如,表290的第一行指示,如果在指令块“I”末尾处不采用BRANCH指令,则指令块“ I ”将转移到指令块“6”,如果在指令块“2”的末尾处采用BRANCH指令,则将转移到指令块“2”。表的第一行还包括注释“TAKEN:2-WIDE (采用:2-宽度)”。此注释可以指示当处理模块执行来自指令块“2”的指令时可能的ILP的量或级别。例如,注释“TAKEN:2-WIDE”可以指示,当执行来自指令块“2”的指令时,处理模块能够同时执行多达两个指令。跟踪模块可以基于指令块“I”的注释,指示处理模块来使用两个执行核并使其他执行核断电。在另一个示例中,表290的第五行的注释“Not-Taken:4-WIDE (未采用:4_宽度)”可以指示,当执行来自指令块“6”的指令时,处理模块能够同时执行四个指令。跟踪模块可以基于指令块5的注释,指示处理模块使用四个执行核。在其他实施例中,指令块的注释可以包括任何字母数字值、文本值和/或数字值。
[0046]在一个实施例中,表290使跟踪模块通过索引到表290中的单个条目和/或位置,来跟踪指令块的执行。这可使跟踪模块比使用CAM (将需要查询整个CAM)更有效率地操作,以跟踪指令块的执行。
[0047]图3是示出了根据本发明的另一实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表300。如上文所讨论的,跟踪模块可以使用表300 (例如,控制流程数据)来跟踪由处理模块执行的指令。虽然以表(例如,表300)的形式示出了控制流程数据,但是,应该理解,控制流程数据可以使用各种其他数据结构和/或表示来表示。例如,控制流程数据可以使用图、树、列表等等来表示。
[0048]表300包括四列。第一列标记为“当前块”,并包括六个不同的指令块(例如,基本块)的标识符(例如,块标识符)。第二列标记为“不采用”,并包括当不采用BRANCH指令时目的地指令块的标识符。在一个实施例中,表300可以指示,指令块不包括带有条件的BRANCH指令。例如,指令块“4”具有对于“不采用”列的值“N/A”,这可以表示指令块“4”中的最后一个指令是无条件BRANCH或JUMP指令。第三列标记为“采用”,并包括当采用BRANCH指令时目的地指令块的标识符。在其他实施例中,标识符可以是可以被用作标识指令块(例如,基本块)的标识符的任何字母数字值、字符串、数字和/或其他值。第四列被标记为“注释”,并包括“当前块”列中标识的指令块的一个或多个注释。
[0049]表300的每一行都包括:当前指令块的标识符(例如,包含当前正在执行的指令的指令块的标识符);在不采用BRANCH指令时的目的地指令块的第一标识符;在采用BRANCH指令时的目的地指令块的第二标识符;以及当前块(例如,当前指令块或当前基本块)的注释。例如,表300的第二行指示,如果在指令块“4”末尾处不采用BRANCH指令,则指令块“2”将转移到指令块“ 3 ”,如果在指令块“ 3 ”的末尾处采用BRANCH指令,将转移到指令块“ 2 ”。表的第二行还包括注释“指令计数:3”。注释可以表示,指令块“2”包括三个指令。基于该注释,跟踪模块可以跟踪指令块中的指令的执行以判断是否发生了软错误和/或硬错误。例如,跟踪模块可以确定,发生了软错误,因为当执行指令块“2”时处理模块执行少于三个指令。在其他实施例中,指令块的注释可以包括任何字母数字值、文本值和/或数字值,以表示指令块中的指令的数量。
[0050]在一个实施例中,表300使跟踪模块通过索引到表300中的单个条目和/或位置,来跟踪指令块的执行。这可使跟踪模块比使用CAM (将需要查询整个CAM)更有效率地操作,以跟踪指令块的执行。
[0051]图4是示出了根据一实施例的将指令块中的指令向一个或多个执行单元的示例分配400的框图。分配400包括指令块405、线程分配410以及线程分配415。指令块405包括XOR指令,接下来是AND指令,接下来是SHIFT指令,接下来是OR指令,接下来是MULT指令,接下来是AND指令,接下来是SHIFT指令,接下来是BRANCH指令。如上文所讨论的,指令块(例如,指令块405 )中的单个指令可以被分配给不同的执行单元(例如,不同的线程和/或不同的进程)或处理器的不同的执行核。例如,可以将指令块405中的各个指令分配给一个或多个线程。在另一个示例中,可以将指令块405中的各个指令分配给一个或多个进程。在另一个示例中,可以将指令块405中的各个指令分配给不同的执行核(例如,图10中所示出的核1002A和图11中所示出的核1106和1107)。
[0052]如图4所示,可以将指令块405中的指令分配给一个或多个线程(例如,执行单元)。线程分配410可指示指令是否将由第一线程来执行,而线程分配415可以指示指令是否将由第二线程来执行。“I”值表示线程将执行指令,“O”值表示线程将不会执行指令。例如,XOR指令被分配到第一线程,MULT指令被分配到第二线程,而OR指令被分配到第一线程和第二线程两者。
[0053]图5是示出了根据本发明的再一个实施例的用于跟踪应用中的指令的执行的控制流程的示例控制流程数据的表500。如上文所讨论的,跟踪模块可以使用表500(例如,控制流程数据)来跟踪由处理模块执行的指令。虽然以表(例如,表500)的形式示出了控制流程数据,但是,应该理解,控制流程数据可以使用各种其他数据结构和/或表示来表示。例如,控制流程数据可以使用图、树、列表等等来表示。
[0054]表500包括四列。第一列标记为“当前块”,并包括六个不同的指令块(例如,基本块)的标识符(例如,块标识符)。第二列标记为“不采用”,并包括当不采用BRANCH指令时目的地指令块的标识符。在一个实施例中,表500可以指示,指令块不包括带有条件的BRANCH指令。例如,指令块“4”具有“未采用”列的值“N/A”,可以表示,指令块“4”中的最后一个指令是无条件BRANCH或JUMP指令。第三列标记为“采用”,并包括当采用BRANCH指令时目的地指令块的标识符。在其他实施例中,标识符可以是可以被用作标识指令块(例如,基本±夹)的标识符的任何字母数字值、字符串、数字和/或其他值。第四列被标记为“注释”,并包括“当前块”列中标识的指令块的一个或多个注释。
[0055]表500的每一行都包括:当前指令块的标识符(例如,包含当前正在执行的指令的指令块的标识符);在不采用BRANCH指令时的目的地指令块的第一标识符;在采用BRANCH指令时的目的地指令块的第二标识符;以及当前块(例如,当前指令块或当前基本块)的注释。例如,表500的第一行指示,如果在指令块“I”末尾处不采用BRANCH指令,则指令块“I”将转移到指令块“6”,如果在指令块“ I ”的末尾处采用BRANCH指令,将转移到指令块“2”。表500的第一行还包括注释“TO: 11010101/T1:01111010”。指令块“I”的注释可以表示是否将来自指令块“I”的指令分配给第一线程T0、第二线程Tl或两者。回头参考图4,指令块“I”可以包括指令块405中所示出的八个指令。注释“T0:11010101/T1:01111010”表示,将指令块“I”(例如,指令块405)中的第一、第二、第四、第六以及第八指令分配给线程Τ0,而将指令块“I”中的第二、第三、第四、第五以及第七指令分配给线程Tl。
[0056]在一个实施例中,表500允许跟踪模块通过索引到表500中的单个条目和/或位置,来跟踪指令块的执行。这可使跟踪模块比使用CAM (将需要查询整个CAM)更有效率地操作,以跟踪指令块的执行。
[0057]图6是示出了根据本发明的一实施例的生成控制流程数据的控制流程模块140的框图。控制流程模块140包括指令模块605、注释模块610以及配置文件模块615。控制流程模块140可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑。在控制流程模块140中可包括更多或更少组件,而不失一般性。例如,两个模块可以合并成单个模块,或一个模块可以被分成两个或更多模块。在一个实施例中,控制流程模块140可以生成控制流程数据(如上文结合图1,2,3,以及5所讨论)。
[0058]在一个实施例中,指令模块605可以分析应用(由编译器所生成的)。指令模块605可以标识应用中的指令中的指令块(例如,基本块)。指令模块605还可以标识应用的指令块中的BRANCH和/或JUMP指令的目的地指令块。指令模块605在生成控制流程数据145时,可以与编译器进行通信(例如,向其传输数据和/或从其接收数据)。例如,当编译器编译源代码以生成应用时,编译器可以向指令模块605提供指令,并且指令模块605可以分析指令以生成控制流程数据。
[0059]在一个实施例中,配置文件模块615可以与二进制分析器进行通信(例如,向其传输数据和/或从其接收数据)。例如,二进制分析器可以生成运行时配置文件,并可以向配置文件模块615提供运行时配置文件。配置文件模块615可以基于运行时配置文件来标识应用中的指令中的指令块(例如,基本块)。配置文件模块615还可以基于运行时配置文件来标识应用的指令块中的BRANCH和/或JUMP指令的目的地指令块。配置文件模块615可以分析运行时配置文件来生成控制流程数据。
[0060]在一个实施例中,注释模块610可以为指令中的一个或多个生成注释。注释可以被包括在控制流程数据中。注释可以包括可以被用来跟踪应用中的指令的执行的数据,如上文所示以及结合图3-5所讨论的。注释还可以包括可以被用来修改处理模块所使用的资源以使处理模块更有效率地操作、和/或可以被用来优化处理模块的操作的数据。例如,注释可以包括诸如在指令块中可能的ILP的量之类的信息。在另一个示例中,注释还可以包括有关指令块可以使用处理设备的哪些类型的组件和/或单元的信息。这可以允许处理模块准备好指令所使用的组件和/或单元。
[0061]图7是示出了根据本发明的一实施例的跟踪指令的执行和/或修改处理模块所使用的资源的跟踪模块150的框图。跟踪模块150可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑。在一个实施例中,跟踪模块150可以跟踪应用中的一个或多个指令的执行,可以使处理模块更有效率地操作和/或可以优化处理模块的操作。跟踪模块150可以是可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑。在跟踪模块150中可包括更多或更少组件,而不失一般性。例如,两个模块可以合并成单个模块,或一个模块可以被分成两个或更多模块。
[0062]在一个实施例中,目的地模块705可以确定正在在处理模块上执行的当前指令块的目的地指令块。例如,目的地模块705可以与处理模块进行通信,以确定BRANCH指令的结果。在另一个示例中,目的地模块705可以确定JUMP指令的目的地。
[0063]在一个实施例中,处理设备工具715可以修改处理模块160所使用的资源,和/或可以基于控制流程数据145来优化处理模块160的操作。例如,处理设备工具715可以指示处理模块去停用、断电和/或避免使用某些执行核,以减少处理模块所使用的电量。在另一个示例中,处理设备工具715可以指示处理模块160准备好即将来临的指令块中的指令所使用的电路、组件和/或模块。在一个实施例中,处理设备工具715可以判断对处理模块160所使用的资源的修改是否对处理模块的操作具有效果。如果处理设备工具715确定对处理模块所使用的资源的修改对处理模块的操作没有效果,则处理设备工具715可以更新控制流程数据,以指示不应该执行对资源的修改。
[0064]在另一个实施例中,处理设备工具715可以使用控制流程数据来跟踪应用中的指令的执行。例如,处理设备工具715可以确定处理模块正在执行包括十个指令的指令块。如果处理模块在执行少于十二个指令之后转移到另一指令,则跟踪模块可以确定发生了错误(例如,硬错误和/或软错误)。在另一个示例中,处理模块可以使用不同的进程、线程和/或执行核来执行指令块中的指令。当处理模块执行来自指令块的指令时,处理模块可以将指令分配到进程、线程和/或执行核。处理设备工具715可以向控制流程数据添加注释和/或更新注释,以指示将指令块中的指令分配到哪一个进程、线程和/或执行核。
[0065]图8是示出了根据一实施例的跟踪指令的执行的方法800的流程图。方法800可以通过可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑来执行。在一个实施例中,方法800可以通过控制流程模块140和跟踪模块150中的一个或多个来执行,如图1,6,以及7所示。
[0066]参考图8,方法800从框805开始,在那里,方法800生成控制流程数据(例如,生成如图2,4,以及5所示的表)。在一个实施例中,当编译应用的源代码时,方法800可以生成控制流程数据。在另一个实施例中,当运行应用时,方法800可以生成控制流程数据。例如,当指令由处理模块执行时,方法800可以分析应用的指令。在又一实施例中,方法800可以基于运行时配置文件来生成控制流程数据。在框810,方法800确定当前执行的指令块的目的地标识符。例如,回头参考图2,当前执行的指令块可以是指令块“1”,方法800可以确定指令块“I”将分支或转移到指令块“2”。方法800标识与当前执行的指令块相关联的注释(在框815)。在框820,方法800基于控制流程数据修改处理模块所使用的资源和/或跟踪指令的执行。例如,方法800可以停用处理模块中的组件和/或电路。在另一个示例中,方法800可以跟踪其中被分配有指令的线程、进程和/或执行核。在另一个示例中,方法800可以跟踪指令块(例如,基本块)中的指令的数量。在框820之后,方法800结束。
[0067]图9是示出了根据另一实施例的跟踪指令的执行的方法900的流程图。方法900可以通过可以包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等等)、软件(诸如在处理设备上运行的指令)、固件或其组合的处理逻辑来执行。在一个实施例中,方法900可以通过控制流程模块140和跟踪模块150中的一个或多个来执行,如图1,6,以及7所示。
[0068]参考图9,方法900从框905开始,在那里,方法900确定当前执行的指令块的目的地标识符。例如,回头参考图2,当前执行的指令块可以是指令块“5”,方法800可以确定指令块“5”将分支或转移到指令块“6”。方法900标识与当前执行的指令块相关联的注释(在框910)。在框915,方法900基于控制流程数据修改处理模块所使用的资源和/或跟踪指令的执行。例如,方法900可以停用处理模块中的组件和/或电路。在另一个示例中,方法900可以跟踪其中被分配有指令的线程、进程和/或执行核。在另一个示例中,方法900可以跟踪指令块(例如,基本块)中的指令的数量。
[0069]在框920,方法900可以判断修改处理模块所使用的资源是否有用(例如,修改处理模块所使用的资源是否影响处理模块如何操作)。例如,方法900可以判断停用处理模块中的一个或多个电路是否节省电能。在另一个示例中,方法900可以判断准备好处理模块的某些组件和/或电路为即将来临的指令块中的指令作准备是否加快指令的执行。如果修改资源有用,则方法900结束。如果修改资源没有用,则方法900前进到框925,在那里,方法900更新注释以指示不应该修改资源。例如,方法900可以删除注释,或可以向注释添加数据,指示不应该修改资源。在框925之后,方法900结束。
[0070]图10是根据本发明的实施例的S0ClOOO的框图。虚线框是比较先进的SoC上的可选的特征。在图10中,互连单元1012耦合到:包括一组一个或多个核1002A-N和共享高速缓存器单元1006的应用处理器1020 ;系统代理单元1010 ;总线控制器单元1016 ;集成存储器控制器单元1014 组或一个或多个媒体处理器1018,可以包括集成的图形逻辑1008、用于提供静止和/或视频摄像机功能的图像处理器1024、用于提供硬件音频加速的音频处理器1026、以及用于提供视频编码/解码加速的视频处理器1028 ;静态随机存取存储器(SRAM)单元1030 ;直接存储器访问(DMA)单元1032 ;以及,用于耦合到一个或多个外部显示器的显示单元1040。
[0071]存储器层次结构包括核内的一级或多级高速缓存,一组或一个或多个共享高速缓存器单元1006,以及耦合到集成的存储器控制器单元1014组的外部存储器(未示出)。共享高速缓存器单元1006组可以包括一个或多个中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4),或其他级别的高速缓存、末级高速缓存(LLC)和/或其组合。
[0072]在某些实施例中,核1002A-N中的一个或多个能够进行多线程处理。
[0073]系统代理1010包括用于协调和操作核1002A-N的那些组件。系统代理单元1010可以包括,例如,电源控制单元(P⑶)和显示单元。P⑶可以是或包括调节核1002A-N和集成的图形逻辑10010的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个从外部连接的显示器。
[0074]就体系结构和/或指令集而言,核1002A-N可以是同质的或异构的。例如,核1002A-N中的某些可以是有序的,而其他的是无序的。作为另一个示例,核1002A-N中的两个或更多可以能够执行相同的指令集,而其他的可以能够只执行该指令集的子集或不同的指令集。
[0075]应用处理器1020可以是诸如位于加利福尼亚州圣克拉拉市的英特尔公司所提供的 Core?i3、i5、i7、2Duo 以及 Quad、Xeon?、Itanium?、XScale?、或 StrongARM? 之类的通用处理器。另选地,应用处理器1020可以来自另一公司,诸如ARM Holdings, Ltd, MIPS,等等。应用处理器1020可以是专用的处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。应用处理器1020可以在一个或多个芯片上实现。应用处理器1020可以是一个或多个衬底的一部分和/或可以使用若干种处理技术(诸如,例如,BiCMOS、CMOS,或NMOS)中的任何一种在一个或多个衬底上实现。
[0076]图11是根据本发明的芯片上系统(SoC)设计的实施例的框图。作为特定说明性示例,SOCl 100被包括在用户设备(UE)中。在一个实施例中,UE是指被最终用户用来进行通信的任何设备,诸如手持式电话、智能电话、平板电脑、超薄型的笔记本、带有宽带适配器的笔记本或任何其他类似的通信设备。UE常常连接到基站或节点,该基站或节点潜在地本质上对应于GSM网络中的移动站(MS)。
[0077]这里,S0C1100包括2个核-1106和1107。核1106和1107可以符合指令集体系结构,诸如基于丨ntel? Architecture Core? 的处理器、Advanced Micro Devices, Inc.(AMD)处理器、基于MIPS的处理器、基于ARM或其顾客的处理器设计,以及它们的被许可方或采用者。核1106和1107耦合到与总线接口单元1109和L2高速缓存1110相关联的高速缓存控件1107,以与系统1100的其他部分进行通信。互连1110包括芯片内互连,诸如IOSF, AMBA,或上文所讨论的其他互连,它们潜在地实现所描述的公开的一个或多个方面。
[0078]接口 1110提供到其他组件的通信信道,其他组件诸如与SM卡连接的用户标识模块(SIM) 1130、保存供核1106和1107执行以初始化和引导S0C1100的引导代码的引导ROMl 135、与外部存储器(例如,DRAMl 160 )连接的SDRAM控制器1140、与非易失性存储器(例如,闪存1165)连接的闪存控制器1145、与外围设备连接的外围控制器1150 (例如,串行外围接口)、显示和接收输入(允许触摸的输入)的视频编解码器1120和视频接口 1125、用于执行图形相关的计算的GPU1115等等。这些接口中的任何一种可以包括此处所描述的本发明的各方面。
[0079]另外,系统1100示出了用于通信的外围设备,诸如蓝牙模块1170、3G调制解调器1175、GPS1180以及W1-Fill85。请注意,如上所述,UE包括用于通信的无线装置。结果,这些外围通信模块不是都需要的。然而,在UE中,包括了某种形式的用于外部通信的无线装置。
[0080]图12示出了计算机系统1200的示例形式的机器的示意图,在该计算机系统1200内,可以执行用于使机器执行此处所讨论的方法中的任何一个或多个的一组指令。在替换实施例中,机器可以连接(例如,联网)到LAN、内联网、外部网或因特网中的其他机器。机器可以在客户机-服务器网络环境中作为服务器或客户机设备,或在对等(或分布式)网络环境中作为对等机器来操作。机器可以是个人计算机(PO、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web设备、服务器、网络路由器、交换机或桥接器,或执行指定要由该机器所采取的动作的一组指令(连续的或以别的方式)的任何机器。进一步地,尽管只示出了单个机器,但是,术语“机器”也应该被视为包括分别地或联合地执行一组(或多组)指令以执行此处所讨论的方法中的任何一个或多个的机器的任何集合。
[0081]计算机系统1200包括处理设备1202、主存储器1204 (例如,只读存储器(ROM)、闪存、动态随机存取存储器(DRAM)(诸如同步DRAM (SDRAM)或Rambus DRAM (RDRAM)等等)、静态存储器1206(例如,闪存、静态随机存取存储器(SRAM),等等),以及数据存储设备1218,它们通过总线1230相互进行通信。
[0082]处理设备1202表示诸如微处理器、中央处理单元等等之类的一个或多个通用处理设备。更具体而言,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器、或实现其他指令集的处理器、或实现指令集的组合的处理器。处理设备1202还可以是一个或多个专用的处理设备,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等等。在一个实施例中,处理设备1202可以包括一个或多个处理核。处理设备1202被配置成执行用于执行此处所讨论的操作的指令1226。
[0083]计算机系统1200还可以包括以通信方式耦合到网络1220的网络接口设备1208。计算机系统1200还可以包括视频显示单元1210 (例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备1212 (例如,键盘)、光标控制设备1214 (例如,鼠标)、信号生成设备1216(例如,扬声器),或其他外围设备。此外,计算机系统1200还可以包括图形处理单元1222、视频处理单元1228以及音频处理单元1232。在另一个实施例中,计算机系统1200可以包括芯片组(未示出),芯片组是指被设计为与处理设备1202—起协作并控制处理设备1202和外部设备之间的通信的一组集成电路或芯片。例如,芯片组可以是主板上的一组芯片,该组芯片将处理设备1202链接到非常高速度的设备(诸如主存储器1204和图形控制器),以及将处理设备1202链接到较低速度的外围设备的外围总线(诸如USB、PCI或ISA总线)。
[0084]数据存储设备1218可以包括计算机可读取的存储介质1224,在其上面存储了实现此处所描述的功能的方法中的任何一个或多个的指令1226。指令1226还可以在由计算机系统1200执行过程中完全地或至少部分地驻留在主存储器1204内和/或在处理设备1202内;主存储器1204和处理设备1202还构成计算机可读取存储介质。
[0085]计算机可读取存储介质1224也可以被用来使用诸如参考图1、6以及7所描述的控制流程模块140和/或跟踪模块150来存储指令1226和/或包含调用上面的应用的方法的软件库。尽管计算机可读取存储介质1224在一示例实施例中被示为单个介质,但是术语“计算机可读取存储介质”应该被视为包括存储一个或多个指令集的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“计算机可读取存储介质”还应该被视为包括能够存储、编码或携带由机器执行的一组指令并且使机器执行各实施例的方法中的任何一个或多个的任何介质。术语“计算机可读取存储介质”应该相应地被视为包括但不局限于固态存储器以及光学和磁性介质。
[0086]图13是根据一个实现的多处理器系统1300的框图。如图13所示,多处理器系统1300是点对点互连系统,并包括通过点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一个都可以是图6的处理设备602的某种版本。如图13所示,处理器1370和1380中的每一个都可以是多核处理器,包括第一和第二处理器核(即,处理器核1374a和1374b,处理器核1384a和1384b),虽然潜在地更多核可以存在于处理器中。处理器核还可以被称为执行核。每一个处理器都可以包括根据本发明的实施例的混合型写入模式逻辑。在一个实施例中,处理器1370和1380中的一个或多个可以执行控制流程模块(例如,图1中所示出的控制流程模块140)。在另一个实施例中,跟踪模块(例如,图1中所示出的跟踪模块150)可以被包括在处理器1370和1380中的一个或多个之中,或者也可以是处理器1370和1380中的一个或多个的一部分。
[0087]尽管示为带有两个处理器1370、1380,但是,可以理解,本发明的范围不仅限于此。在其他实现中,一个或多个额外的处理器可以存在于给定处理器中。
[0088]处理器1370和1380被示为分别包括集成存储器控制器单元1372和1382。处理器1370还包括点对点(P-P)接口 1376和1378,作为其总线控制器单元的一部分;类似地,第二处理器1380包括P-P接口 1386和1388。处理器1370、1380可以使用P-P接口电路1378、1388通过点对点(P-P)接口 1350来交换信息。如图13所示,MC1372和1382将处理器耦合到相应的存储器,即存储器1332和存储器1334,它们可以是本地连接到相应的处理器的主存储器的一部分。在一个实施例中,控制流程数据(例如,图2、3以及5中所示出的表200、300以及500)可以存储在存储器1332和1334中的一个或多个中。
[0089]处理器1370、1380中的每一个都可以使用点对点的接口电路1376、1394、1386以及1398通过各个P-P接口 1352,1354与芯片组1390交换信息。芯片组1390还可以通过高性能的图形接口 1339与高性能的图形电路1338交换信息。
[0090]共享高速缓存器(未示出)可以被包括在任一处理器中或者两个处理器的外面,通过P-P互连与处理器相连接,以便处理器中的任何一个或两者的本地缓存信息可以存储在共享高速缓存器中(如果处理器被置于低功率模式下)。
[0091]芯片组1390可以通过接口 1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(PCI)总线,或诸如PCI Express总线之类的总线,或另一第三代I/O互连总线,虽然本发明的范围不仅限于此。
[0092]如图13所示,各种I/O设备1314可以耦合到第一总线1316,以及将第一总线1316耦合到第二总线1320的总线桥接器1318。在一个实施例中,第二总线1320可以是低管脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1320,包括例如键盘和/或鼠标1322、通信设备1327和存储单元1328 (诸如磁盘驱动器或可以包括指令/代码和数据1330的其他大容量存储设备)。进一步地,音频1/01324可以耦合到第二总线1320。请注意,其他体系结构也是可以的。例如,代替图13的点对点体系结构,系统可以实现多点分支总线或其他这样的体系结构。
[0093]图14是示出了通过图14的处理设备1400来实现的有序流水线和寄存器重命名级、无序发布/执行流水线的框图。图14是示出了根据本发明的至少一个实施例的要包括在处理器中的有序体系结构核和寄存器重命名逻辑,无序发布/执行逻辑的框图。图14中的实线框示出了有序流水线,而虚线框示出了寄存器重命名、无序发布/执行流水线。类似地,图14中的实线框示出了有序体系结构逻辑,而虚线框示出了寄存器重命名逻辑和无序发布/执行逻辑。在图14中,处理器流水线1400包括获取级1402、长度解码级1404、解码级1406、分配级1408、重命名级1410、调度(也称为分派或发布)级1412、寄存器读取/存储器读取级1414、执行级1416、写回/存储器写入级1418、异常处理级1422以及提交级1424。
[0094]图15是示出了根据本发明的至少一个实施例的要包括在处理器中的有序体系结构核和寄存器重命名逻辑、无序发布/执行逻辑的框图。在图15中,箭头表示两个或更多单元之间的耦合,箭头的方向指示那些单元之间的数据流动的方向。图15示出了处理器核1590,包括耦合到执行引擎单元1550的前端单元1530,前端单元1530和执行引擎单元1550两者都耦合到存储器单元1570。在一个实施例中,控制流程数据(例如,图2、3以及5中所示出的表200、300以及500)可以存储在存储器单元1570中。
[0095]核1590可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合型或替代核类型。作为另一种选项,核1590可以是专用的核,诸如例如网络或通信核、压缩引擎、图形核等等。在一个实施例中,核1590可以执行控制流程模块(例如,图1中所示出的控制流程模块140)。在另一个实施例中,跟踪模块(例如,图1中所示出的跟踪模块150)可以被包括在核1590中,或者也可以是核1590的一部分。例如,跟踪模块可以是前端单元1530和/或执行引擎单元1550的一部分。
[0096]前端单元1530包括稱合到指令高速缓存单元1534的分支预测单元1532,指令高速缓存单元1534耦合到指令转换后备缓冲器(TLB) 1536,指令转换后备缓冲器1536耦合到指令获取单元1538,指令获取单元1538耦合到解码单元1540。解码单元或解码器可以解码指令,并生成一个或多个微操作、微代码入口点、微指令,其他指令或其他控制信号作为输出,它们从原始指令解码而来、或以别的方式反映原始指令、或从原始指令中导出。解码器可以使用各种不同的机制来实现。合适的机制的示例包括但不仅限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令高速缓存单元1534进一步耦合到存储器单元1570中的2级(L2)高速缓存单元1576。解码单元1540耦合到执行引擎单元1550中的重命名/分配器单元1552。
[0097]执行引擎单元1550包括耦合到隐退单元1554的重命名/分配器单元1552和一组一个或多个调度器单元1556。调度器单元1556表示任意数量的不同的调度器,包括预留站、中心指令窗口等等。调度器单元1556耦合到物理寄存器文件单元1558。物理寄存器文件单元1558中的每一个都表示一个或多个物理寄存器文件,其中不同的文件存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点等等、状态(例如,是要被执行的下一指令的地址的指令指针)等等。物理寄存器文件单元1558与隐退单元1554重叠,以示出可以实现寄存器重命名和无序执行的各种方式(例如,使用重新排序缓冲器和隐退寄存器文件,使用未来的文件,历史缓冲器,以及隐退寄存器文件;使用寄存器映射和寄存器池;等等)。一般而言,体系结构寄存器从处理器的外部或从编程器的角度可见。寄存器不仅限于任何已知的特定类型的电路。各种不同类型的寄存器都是合适的,只要它们能够存储和提供如此处所描述的数据。合适的寄存器的示例包括但不仅限于专用物理寄存器、使用寄存器重命名的动态地分配的物理寄存器、专用和动态地分配的物理寄存器的组合,等等。隐退单元1554和物理寄存器文件单元1558耦合到执行群集1560。执行群集1560包括一组一个或多个执行单元162和一组一个或多个存储器访问单元1564。执行单元1562可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种操作(例如,位移、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能组的若干个执行单元,但是,其他实施例可以只包括一个执行单元或所有都执行所有功能的多个执行单元。调度器单元1556、物理寄存器文件单元1558,以及执行群集1560被示为可能是多个,因为某些实施例对于某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,每一个流水线都具有它们自己的调度器单元、物理寄存器文件单元和/或执行群集一一并且在单独的存储器访问流水线的情况下,实现了其中只有此流水线的执行群集具有存储器访问单元1564的某些实施例)。还应该理解,在使用单独的流水线的场合,这些流水线中的一个或多个可以是无序发布/执行,其余的是有序的。
[0098]存储器访问单元组1564耦合到存储器单元1570,该存储器单元1570包括耦合到数据高速缓存单元1574的数据TLB单元1572,该数据高速缓存单元1574耦合到2级(L2)高速缓存单元1576。在一个示例性实施例中,存储器访问单元1564可以包括加载单元、存储地址单元以及存储数据单元,其中每一个都耦合到存储器单元1570中的数据TLB单元1572。L2高速缓存单元1576耦合到一个或多个其他级别的高速缓存,最终耦合到主存储器。
[0099]作为示例,示例性寄存器重命名、无序发布/执行核体系结构可以按如下方式实现流水线1400:1)指令获取1538执行获取和长度解码级1402以及1404 ;2)解码单元1540执行解码级1406 ;3)重命名/分配器单元1552执行分配级1408和重命名级1410 ;4)调度器单元1556执行调度级1412 ;5)物理寄存器文件单元1558和存储器单元1570执行寄存器读取/存储器读取级1414 ;执行群集1560执行“执行级1416”;6)存储器单元1570和物理寄存器文件单元1558执行写回/存储器写入级1418 ;7)各种单元都可以涉及异常处理级1422 ;以及,8)隐退单元1554和物理寄存器文件单元1558执行提交级1424。
[0100]核1590可以支持一个或多个指令集(例如,x86指令集(带有已添加较新的版本的某些扩展);位于美国加州Sunnyvale的MIPS Technologies的MIPS指令集;位于美国加州Sunnyvale的ARM Holdings的ARM指令集(带有诸如NEON之类的可选的额外的扩展)。
[0101]应该理解,核可以支持多线程(执行操作或线程的两个或更多并行组),并可以以各种方式达到这一目的,包括时间切片多线程、同时的多线程(其中,单个物理核为物理核同时正在多线程处理的每一个线程提供一种逻辑核),或其组合(例如,时间切片获取和解码和此后的同时的多线程处理,诸如按照Intel? Hyperthreading技术)。
[0102]尽管在无序执行的上下文中描述寄存器重命名,但是,应该理解,寄存器重命名可以用于有序体系结构中。尽管处理器的所示出的实施例还包括单独的指令和数据高速缓存单元1534/1574和共享的L2高速缓存单元1576,但是替代实施例对于指令和数据两者可以具有单个内部高速缓存,诸如例如I级(LI)内部高速缓存或多级内部高速缓存。在某些实施例中,系统可以包括内部高速缓存和核和/或处理器外部的外部高速缓存的组合。可另选地,全部高速缓存都可以位于核和/或处理器外部。
[0103]图16根据本发明的一个实施例的包括执行指令的逻辑电路的处理器200的微型体系结构的框图。在某些实施例中,根据一个实施例的指令可被实现为对具有字节、字、双字、四倍字等等的大小以及诸如单个和双精度整数和浮点数据类型之类的数据类型的数据元素进行操作。在一个实施例中,处理器200可以执行控制流程模块(例如,图1中所示出的控制流程模块140)。在一个实施例中,处理器200还可以包括跟踪模块(例如,图1中所示出的跟踪模块150)。例如,跟踪模块可以是前端201和/或无序引擎203的一部分。在一个实施例中,有序前端201是获取要被执行的指令并将它们准备好以供稍后在处理器流水线中使用的处理器200的一部分。前端201可以包括多个单元。在一个实施例中,指令预取器226从存储器中获取指令,并将它们馈送到指令解码器228,该指令解码器228又解码或解释它们。例如,在一个实施例中,解码器将接收到的指令解码为机器可以执行的一个或多个叫做“微指令”或“微操作”(也称为微操作或uop)的操作。在其他实施例中,解码器将指令解析为微型体系结构用来执行根据一个实施例的操作的操作码和对应的数据和控制字段。在一个实施例中,跟踪高速缓存230获取已解码的uops,并将它们组装为程序有序序列或uop队列234中的跟踪(trace)以供执行。当跟踪高速缓存230遇到复杂指令时,微代码R0M232提供完成操作所需的uops。
[0104]某些指令被转换为单个微操作,而其他指令需要多个微操作才能完成完全操作。在一个实施例中,如果需要四个以上的微操作才能完成指令,则解码器228访问微代码R0M232来执行指令。对于一个实施例,指令可以被解码为少量的微操作,用于在指令解码器228处进行处理。在另一个实施例中,指令可以存储在微代码R0M232内,以防需要若干个微操作才能完成。跟踪高速缓存230引用入口点可编程逻辑阵列(PLA)来确定用于从微代码R0M232中读取微代码序列的正确的微指令指针,以完成根据一个实施例的一个或多个指令。在微代码R0M232完成排序指令的微操作之后,机器的前端201恢复从跟踪高速缓存230获取微操作。
[0105]无序执行引擎203是准备指令以供执行的地方。无序执行逻辑具有多个缓冲器,以平缓和重新排序指令的流,以在它们走下流水线并被调度供执行时优化性能。分配器逻辑分配每一个UOP需要的以便执行的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名为寄存器文件中的条目。分配器还在指令调度器一存储器调度器、快速调度器202、慢/ 一般浮点调度器204以及简单浮点调度器206——的前面,为两个uop队列中的一个中的每一个uop分配条目,一个用于存储器操作,一个用于非存储器操作。uop调度器202、204、206基于它们的依赖的输入寄存器操作数源的就绪状态以及uops完成它们的操作所需的执行资源的可用性,来确定uop何时准备执行。一个实施例的快速调度器202可以在主时钟周期的每一半调度,而其他调度器只能每个主处理器时钟周期调度一次。调度器仲裁分派端口,来调度Uops供执行。
[0106]寄存器文件208、210位于调度器202,204,206和执行块211中的执行单元212,214,216,218,220,222,224之间。对于整数和浮点运算,分别有单独的寄存器文件208,210。一个实施例的每一个寄存器文件208,210还包括旁路网络,该旁路网络可以将还没有被写入到寄存器文件中的刚刚完成的结果旁路或转发到新的依赖的uops。整数寄存器文件208和浮点寄存器文件210还能够与其他文件进行数据交换。对于一个实施例,整数寄存器文件208被拆分成两个单独的寄存器文件,一个寄存器文件用于低阶32比特的数据,第二寄存器文件用于高阶32比特的数据。一个实施例的浮点寄存器文件210具有128比特宽的条目,因为浮点指令通常具有宽度从64到128比特的操作数。
[0107]执行块211包含其中实际执行指令的执行单元212,214,216,218,220,222,224。此部分包括寄存器文件208,210,这些寄存器文件208,210存储执行微指令所需的整数和浮点数据操作数值。一个实施例的处理器200包括若干个执行单元:地址生成单元(AGU)212、AGU214、快速ALU216、快速ALU218、慢速ALU220、浮点ALU222、浮点移动单元224。对于一个实施例,浮点执行块222、224执行浮点、MMX、SIMD,以及SSE或其他操作。一个实施例的浮点ALU222包括64比特x64比特浮点除法器,以执行除法、平方根以及剩余微操作。对于本发明的各实施例,可以利用浮点硬件来处理涉及浮点值的指令。在一个实施例中,ALU运算进入高速ALU执行单元216、218。一个实施例的快速ALU216、218可以执行快速的操作,带有一半时钟周期的有效延迟。对于一个实施例,大多数复杂的整数操作进入慢速ALU220,因为慢速ALU220包括用于长延迟类型的操作的整数执行硬件,诸如乘法器、移位器、标记逻辑以及分支处理。存储器加载/存储操作是由AGU212、214执行的。对于一个实施例,整数ALU216、218、220是在对64比特数据操作数执行整数操作的上下文中描述的。在替代实施例中,ALU216,218,220,可被实现为支持各种数据比特,包括16,32,128,256,等等。类似地,浮点单元222、224可被实现为支持具有各种宽度的比特的操作数的范围。对于一个实施例,浮点单元222、224可以结合SMD和多媒体指令,对128比特宽的打包数据操作数进行操作。
[0108]在一个实施例中,uops调度器202,204,206在父加载完成执行之前,分派依赖的操作。由于uops是在处理器200中投机性地调度和执行的,因此,处理器200还包括处理存储器未命中的逻辑。如果数据加载在数据缓存中未命中,则在流水线中可能会有带有临时不正确的数据的离开调度器的正在运行的依赖的操作。重播机制跟踪并重新执行使用不正确的数据的指令。只有依赖的操作需要被重播,而独立的操作被允许完成。处理器的一个实施例的调度器和重播机制还被设计为捕捉用于文本字符串比较操作的指令序列。
[0109]术语“寄存器”可以表示被用作标识操作数的指令的一部分的板上的处理器存储器位置。换言之,寄存器可以是从处理器外部可使用的那些处理器存储器位置(从编程器的角度来看)。然而,实施例的寄存器在特定类型的电路的意义上不应该受限制。相反,实施例的寄存器能够存储和提供数据,并执行此处所描述的功能。此处所描述的寄存器可以通过处理器内的电路使用任意数量的不同的技术来实现,诸如专用物理寄存器、使用寄存器重命名的动态地分配的物理寄存器、专用和动态地分配的物理寄存器的组合等等。在一个实施例中,整数寄存器存储32比特整型数据。一个实施例的寄存器文件还包含用于打包数据的八个多媒体SMD寄存器。对于下面的讨论,寄存器被理解为是被设计为保存打包数据的数据寄存器,诸如利用加利福尼亚州圣克拉拉市的英特尔公司的MMX技术实现的微处理器中的64比特宽MMXTM寄存器(在某些情况下,也简称为“mm”寄存器)。以整数和浮点形式存在的这些MMX寄存器可以与伴随SMD和SSE指令的打包的数据元件一起操作。类似地,也可以使用涉及SSE2、SSE3、SSE4或以外的(一般地称为“SSEx”)技术的128比特宽的XMM寄存器来保存这样的打包的数据操作数。在一个实施例中,在存储打包的数据和整型数据时,寄存器不需要区分两种数据类型。在一个实施例中,整数和浮点包含在同一个寄存器文件或者不同的寄存器文件中。此外,在一个实施例中,浮点和整型数据可以存储在不同的寄存器中或相同寄存器中。
[0110]下列示例涉及进一步的实施例。
[0111]示例I是一种装置,具有:存储器模块,用于存储控制流程数据,控制流程数据包括指令块的多个块标识符、指令块中的一个或多个指令块的目的地标识符、以及指令块的注释;以及处理器,通信地耦合到存储器模块。处理器被配置成接收控制流程数据,基于控制流程数据来确定当前指令块的目的地标识符,基于控制流程数据标识与当前指令块相关联的注释,以及基于注释或目的地标识符中的一个或多个执行修改处理器所使用的资源的操作或跟踪指令块的执行的操作中的至少一项操作。
[0112]示例2可以可任选地扩展示例I的主题。在示例2中,处理器进一步被配置成在包括所述指令块的应用的编译时或运行时中的一项或多项过程中生成所述控制流程数据。
[0113]示例3可以可任选地扩展示例I和2中的任何一个的主题。在示例3中,处理器进一步被配置成获取包括指令块的应用的运行时配置文件;以及基于所述运行时配置文件生成所述控制流程数据。
[0114]示例4可以可任选地扩展示例1-3中的任何一个的主题。在示例4中,控制流程数据包括表、列表、图或树中的一项或多项。
[0115]示例5可以可任选地扩展示例1-4中的任何一个的主题。在示例5中,处理器通过基于注释检测存储器中的硬错误或在执行指令块时的软错误中的一个或多个来跟踪指令块的执行,其中注释指示当前指令块内的指令的数量。
[0116]示例6可以可任选地扩展示例1-5中的任何一个的主题。在示例6中,处理器通过基于注释来减少处理器所使用的组件的数量,来修改处理器所使用的资源。
[0117]示例7可以可任选地扩展示例1-6中的任何一个的主题。在示例7中,处理器通过标识其中被分配有来自当前指令的指令的线程、进程或执行核中的一个或多个,并利用标识其中被分配有来自当前指令的指令的线程、进程或执行核中的一个或多个的数据来更新注释,来跟踪指令块的执行。
[0118]示例8可以可任选地扩展示例1-7中的任何一个的主题。在示例8中,生成控制流程数据包括将间接分支指令转换为比较指令或转移指令中的一个或多个。
[0119]示例9可以可任选地扩展示例1-8中的任何一个的主题。在示例8中,处理器进一步被配置成判断修改处理器所使用的资源是否影响处理器的操作,以及在修改资源不影响处理器的所述操作时,,更新注释以指示处理器所使用的资源不应该被优化。
[0120]示例10可以可任选地扩展示例1-9中的任何一个的主题。在示例10中,处理器进一步被配置成基于控制流程数据来确定第二当前指令块的第二目的地标识符,基于控制流程数据标识与第二当前指令块相关联的第二注释,以及,基于第二注释或第二目的地标识符中的一个或多个执行修改处理器所使用的资源或跟踪指令块的执行中的一项或多项。
[0121]示例11是一种方法,包括:接收控制流程数据,该控制流程数据包括指令块的多个块标识符、指令块中的一个或多个指令块的目的地标识符、以及指令块的注释;基于控制流程数据,确定当前指令块的目的地标识符;基于控制流程数据,标识与当前指令块相关联的注释;以及,基于注释或目的地标识符中的一个或多个,执行修改处理器所使用的资源或跟踪指令块的执行中的至少一项。
[0122]示例12可以可任选地扩展示例12的主题。在示例12中,方法还包括在包括所述指令块的应用的编译时或运行时中的一项或多项过程中生成所述控制流程数据。
[0123]示例13可以可任选地扩展示例11-12中的任何一个的主题。在示例13中,方法还包括获取包括指令块的应用的运行时配置文件,以及基于所述运行时配置文件生成所述控制流程数据。
[0124]示例14可以可任选地扩展示例11-13中的任何一个的主题。在示例14中,控制流程数据包括表、列表、图或树中的一项或多项。
[0125]示例15可以可任选地扩展示例11-14中的任何一个的主题。在示例15中,跟踪指令块的执行包括基于注释检测存储器中的硬错误或在执行指令块时的软错误中的一个或多个,其中注释指示当前指令块内的指令的数量。
[0126]示例16可以可任选地扩展示例11-15中的任何一个的主题。在示例16中,修改处理器所使用的资源包括基于注释来减少处理器所使用的组件的数量。
[0127]示例17可以可任选地扩展示例11-16中的任何一个的主题。在示例17中,跟踪指令块的执行包括标识其中被分配有当前指令的指令的线程、进程或执行核中的一个或多个,以及利用标识其中被分配有当前指令的指令的线程、进程或执行核中的一个或多个的数据来更新注释。
[0128]示例18可以可任选地扩展示例11-17中的任何一个的主题。在示例18中,生成控制流程数据包括将间接分支指令转换为比较指令或转移指令中的一个或多个。
[0129]示例19可以可任选地扩展示例11-18中的任何一个的主题。在示例19中,方法还包括判断修改处理器所使用的资源是否影响处理器的操作,以及当修改资源不影响处理器的所述操作时,更新注释以指示处理器所使用的资源不应该被优化。
[0130]示例20可以可任选地扩展示例11-19中的任何一个的主题。在示例20中,方法还包括基于控制流程数据来确定第二当前指令块的第二目的地标识符,基于控制流程数据标识与第二当前指令块相关联的第二注释,以及基于第二注释或第二目的地标识符中的一个或多个,执行修改处理器所使用的资源或跟踪指令块的执行中的一项或多项。
[0131]示例21是一种包含数据的非瞬态的机器可读存储介质,所述数据在被处理器访问时,使所述处理器执行包括下列各项的操作:接收控制流程数据,该控制流程数据包括指令块的多个块标识符、指令块中的一个或多个指令块的目的地标识符、以及指令块的注释;基于控制流程数据确定当前指令块的目的地标识符;基于控制流程数据标识与当前指令块相关联的注释;以及,基于注释或目的地标识符中的至少一项,执行修改处理器所使用的资源或跟踪指令块的执行中的至少一项。
[0132]示例22可以可任选地扩展示例21的主题。在示例22中,操作还包括在包括所述指令块的应用的编译时或运行时中的一项或多项过程中生成所述控制流程数据。
[0133]示例23可以可任选地扩展示例20-22中的任何一个的主题。在示例23中,操作还包括获取包括指令块的应用的运行时配置文件,以及基于所述运行时配置文件生成所述控制流程数据。
[0134]示例24可以可任选地扩展示例20-23中的任何一个的主题。在示例24中,控制流程数据包括表、列表、图或树中的一项或多项。
[0135]示例25可以可任选地扩展示例20-24中的任何一个的主题。在示例25中,跟踪指令块的执行包括基于注释检测存储器中的硬错误或在执行指令块时的软错误中的一个或多个,其中注释指示当前指令块内的指令的数量。
[0136]示例26可以可任选地扩展示例20-25中的任何一个的主题。在示例26中,修改处理器所使用的资源包括基于注释来减少处理器所使用的组件的数量。
[0137]示例27可以可任选地扩展示例20-26中的任何一个的主题。在示例27中,跟踪指令块的执行包括标识其中被分配有来自当前指令的指令的线程、进程或执行核中的一个或多个,以及利用标识其中被分配有当前指令的线程、进程或执行核中的一个或多个的数据来更新注释。
[0138]示例28可以可任选地扩展示例20-27中的任何一个的主题。在示例28中,生成控制流程数据包括将间接分支指令转换为比较指令或转移指令中的一个或多个。
[0139]示例29可以可任选地扩展示例20-28中的任何一个的主题。在示例29中,操作还包括判断修改处理器所使用的资源是否影响处理器的操作,以及在修改资源不影响处理器的所述操作时,更新注释以指示处理器所使用的资源不应该被优化。
[0140]示例30可以可任选地扩展示例20-29中的任何一个的主题。在示例30中,操作还包括基于控制流程数据来确定第二当前指令块的第二目的地标识符,基于控制流程数据标识与第二当前指令块相关联的第二注释,以及基于第二注释或第二目的地标识符中的一个或多个,执行修改处理器所使用的资源或跟踪指令块的执行中的一项或多项。
[0141]示例31是一种装置,包括:用于存储控制流程数据,该控制流程数据包括指令的块的多个块标识符、指令的一个或多个块的目的地标识符、以及指令的块的注释;用于接收控制流程数据的装置;用于基于控制流程数据确定当前指令块的目的地标识符的装置;用于基于控制流程数据标识与当前指令块相关联的注释的装置;以及,用于基于第二注释或第二目的地标识符中的至少一个,执行修改处理器所使用的资源或跟踪指令块的执行中的至少一项的装置。
[0142]示例32可以可任选地扩展示例31的主题。在示例32中,如示例31所述的设备还包括用于在包括指令块的应用的编译时或运行时中的一项或多项过程中,生成控制流程数据的装置。
[0143]示例33可以可任选地扩展示例31-32中的任何一个的主题。在示例33中,设备还包括用于获取包括指令块的应用的运行时配置文件的装置,以及用于基于运行时配置文件生成控制流程数据的装置。
[0144]示例34可以可任选地扩展示例31-33中的任何一个的主题。在示例34中,控制流程数据包括表、列表、图或树中的一项或多项。
[0145]示例35可以可任选地扩展示例31-34中的任何一个的主题。在示例35中,跟踪指令块的执行包括基于注释检测存储器中的硬错误或在执行指令块时的软错误中的一个或多个,其中注释指示当前指令块内的指令的数量。
[0146]示例36可以可任选地扩展示例31-35中的任何一个的主题。在示例36中,修改处理器所使用的资源包括基于注释来减少处理器所使用的组件的数量。
[0147]示例37可以可任选地扩展示例31-36中的任何一个的主题。在示例37中,跟踪指令块的执行包括标识其中被分配有来自当前指令的指令的线程、进程或执行核中的一个或多个,以及利用标识其中被分配有该指令的线程、进程或执行核中的一个或多个的数据来更新注释。
[0148]示例38可以可任选地扩展示例31-37中的任何一个的主题。在示例38中,生成控制流程数据包括将间接分支指令转换为比较指令或转移指令中的一个或多个。
[0149]示例39可以可任选地扩展示例31-38中的任何一个的主题。在示例39中,设备还包括用于判断修改处理器所使用的资源是否影响处理器的操作的装置,以及用于在修改资源不影响处理器的操作时,更新注释以指示处理器所使用的资源不应该被优化的装置。
[0150]示例40可以可任选地扩展示例31-39中的任何一个的主题。在示例40中,设备还包括:用于基于控制流程数据来确定第二当前指令块的第二目的地标识符的装置;用于基于控制流程数据标识与第二当前指令块相关联的第二注释的装置;以及用于基于第二注释或第二目的地标识符中的一个或多个,执行修改处理器所使用的资源或跟踪指令块的执行中的一项或多项的装置。
[0151]在上面的描述中,阐述了很多细节。然而,对那些精通本技术的人显而易见的是,可以在没有这些具体细节的情况下实施各实施例。在某些情况下,以框图形式,而不是详细地示出已知的结构和设备,以便不至于使描述变得模糊。
[0152]详细描述的某些部分以算法、和对计算机存储器内的数据位的操作的符号表示法的形式存在。这些算法描述和表示法是那些精通数据处理技术的人所使用的最有效地将他们的工作的实质传递到精通技术的其他人的手段。算法,这里一般是指导致所希望的结果的操作的独立的序列。操作是那些需要对物理量进行物理操纵的操作。尽管不是必然,但通常这些量呈现电的和/或磁性信号的形式,这些信号能够被存储、传输、组合、比较以及以别的方式操纵。已经证明,有时,主要由于共同的用途原因,将这些信号称为比特、值、元素、符号、字符、术语、数字等等比较方便。此处所描述的块可以是硬件、软件、固件或其组合。
[0153]然而,应该记住,所有这些和/或类似的术语将与适当的物理量关联,仅仅是应用于这些量的方便的标记。除非特别声明,从上文的讨论中显而易见地看出,应该理解,在整个本说明书中,利用诸如“接收”、“标识”、“确定”、“执行”、“跟踪”、“修改”、“获取”、“生成”、“检测” “减少”、“更新”、“转换”等等之类的的术语的讨论指代计算机系统和/或类似的电子计算设备的动作和/或进程,它们操纵和/或转换表示为计算机系统的寄存器和存储器内的物理(例如,电子)量的数据,将这些数据转换为类似地表示为计算机系统存储器或寄存器和/或其他这样的信息存储器、传输和/或显示设备内的物理量的其他数据。
[0154]在此可使用词语“示例”或“示例性”意指用作示例、实例或说明。本文中被描述为“示例”或“示例性”的任何方面或设计不一定被解释为优选于或更优于其他方面或设计。相反,使用词语“示例”或“示例性”旨在以具体的方式呈现各个概念。如本申请中所使用的,术语“或”意指包括性“或”而非互斥性“或”。即,除非另有指定或从上下文可以明确,“X包括A或B”意指任何自然的包括性排列。S卩,如果X包括A ;X包括B ;或X包括A和B两者,则在任何以上情况下,都满足“X包括A或B。”此外,本申请中和所附权利要求书所使用的冠词“一”和“一个”一般应解释为“一个或多个”,除非另有指定或从上下文将明确是指单数形式。此外,术语“实施例”或“一个实施例”或“实现”或“一个实现”不旨在意指同一个实施例或实现,除非这样描述。此外,如此处所使用的术语“第一”、“第二”、“第三”、“第四”等等旨在用作区别不同的元件的标记,可以不一定具有根据它们的数字表示的序数含义。
[0155]此处所描述的各实施例还可以涉及用于执行此处的操作的装置。可以为所需的用途专门地设计此装置,也可以包括由存储在计算机中的计算机程序有选择地激活和/或重新配置的通用计算机。这样的计算机程序可以存储在非瞬态的计算机可读取存储介质上,诸如,但不仅限于,任何类型的磁(光)盘,包括软盘、光盘、CD-ROM,以及磁性光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPR0M、磁卡或光卡,闪存,或适于存储电子指令的任何类型的介质。术语“计算机可读取存储介质”应该被视为包括存储一个或多个指令集的单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的缓存和服务器)。术语“计算机可读介质”还应该被视为包括能够存储、编码或携带由机器执行的一组指令并且使机器执行各实施例的方法中的任何一个或多个的任何介质。术语“计算机可读取存储介质”相应地应该被视为包括,但不局限于,固态存储器、光学介质、磁性介质、能够存储由机器执行的一组指令并且使机器执行各实施例的方法中的任何一个或多个的任何介质。
[0156]此处呈现的算法和/或显示不固有地涉及任何特定计算机或其他设备。各种通用系统可以与根据此处的原理编写的程序一起使用,或者构建更加专门的设备来执行操作也是比较方便的。根据下面的描述,这些系统中的各种系统的所需的结构将变得显而易见。另夕卜,没有参考任何特定编程语言来描述各实施例。应该理解,可以使用各种编程语言来实现此处所描述的各实施例的各实施例的原理。
[0157]上面的描述阐述了诸如特定系统、组件、方法等等的示例之类的很多具体细节,以便提供对多个实施例的更全面的理解。然而,对本领域普通技术人员显而易见的是,可以在没有这些具体细节的情况下实施至少一些实施例。在其他情况下,没有详细示出或以简单框图格式来呈现已知的组件或方法,以便避免对各实施例造成不必要的模糊。如此,上文阐述的具体细节只是示例性的。特定实现可能不同于这些示例性细节,仍在各实施例的范围内。
[0158]可以理解,上文的描述只是说明性的,而不是限制性的。在阅读和理解上面的描述之后,许多其他实施例对本领域的技术人员是显而易见的。各实施例的范围完全由所附权利要求书以及这些权利要求被赋予的等效技术方案的完整范围来确定。
【权利要求】
1.一种设备,包括: 存储器模块,用于存储控制流程数据,所述控制流程数据包括指令块的多个块标识符、所述指令块中的一个或多个指令块的目的地标识符、以及所述指令块的注释;以及处理器,通信地耦合到所述存储器模块,所述处理器用于: 接收所述控制流程数据; 基于所述控制流程数据,确定当前指令块的目的地标识符; 基于所述控制流程数据,标识与所述当前指令块相关联的注释;以及 执行下列各项中的至少一项: 修改所述处理器所使用的资源;或 基于所述注释或所述目的地标识符中的一个或多个,跟踪所述指令块的执行。
2.如权利要求1所述的设备,其特征在于,所述处理器进一步用于: 在包括所述指令块的应用的编译时或运行时中的一项或多项过程中,生成所述控制流程数据。
3.如权利要求1所述的设备,其特征在于,所述处理器进一步用于: 获取包括所述指令块的应用的运行时配置文件;以及 基于所述运行时配置文件,生成所述控制流程数据。
4.如权利要求1所述的设备,其特征在于,所述控制流程数据包括表、列表、图或树中的一项或多项。
5.如权利要求1所述的设备,其特征在于,所述处理器通过以下操作跟踪所述指令块的执行: 基于所述注释,检测所述存储器中的硬错误或在执行所述指令块时的软错误中的一个或多个,其中所述注释指示所述当前指令块内的指令的数量。
6.如权利要求1所述的设备,其特征在于,所述处理器通过以下操作修改所述处理器所使用的所述资源: 基于所述注释,减少所述处理器所使用的组件的数量。
7.如权利要求1所述的设备,其特征在于,所述处理器通过以下操作跟踪所述指令块的执行: 标识其中被分配有来自所述当前指令的指令的线程、进程或执行核中的一个或多个;以及 利用标识其中被分配有所述指令的所述线程、所述进程或所述执行核中的一个或多个的数据来更新所述注释。
8.如权利要求2所述的设备,其特征在于,生成所述控制流程数据包括: 将间接分支指令转换为比较指令或转移指令中的一个或多个。
9.如权利要求1所述的设备,其特征在于,所述处理器进一步用于: 判断修改所述处理器所使用的所述资源是否影响所述处理器的操作;以及 当修改所述资源不影响所述处理器的操作时,更新所述注释以指示所述处理器所使用的所述资源不应该被优化。
10.如权利要求1所述的设备,其特征在于,所述处理器进一步用于: 基于所述控制流程数据,确定第二当前指令块的第二目的地标识符;基于所述控制流程数据,标识与所述第二当前指令块相关联的第二注释;以及基于所述第二注释或所述第二目的地标识符中的一个或多个,执行修改所述处理器所使用的资源或跟踪所述指令块的执行中的一项或多项。
11.一种方法,包括: 接收控制流程数据,所述控制流程数据包括指令块的多个块标识符、所述指令块中的一个或多个指令块的目的地标识符、以及所述指令块的注释; 基于所述控制流程数据,确定当前指令块的目的地标识符; 基于所述控制流程数据,标识与所述当前指令块相关联的注释;以及 执行下列各项中的至少一项: 修改处理器所使用的资源;或 基于所述注释或所述目的地标识符中的一个或多个,跟踪所述指令块的执行。
12.如权利要求11所述的方法,其特征在于,所述方法进一步包括: 在包括所述指令块的应用的编译时或运行时中的一项或多项的过程中,生成所述控制流程数据。
13.如权利要求11所述的方法,其特征在于,所述方法进一步包括: 获取包括所述指令块的应用的运行时配置文件;以及 基于所述运行时配置文件,生成所述控制流程数据。
14.如权利要求11所述的方法,其特征在于,所述控制流程数据包括表、列表、图或树中的一项或多项。
15.如权利要求11所述的方法,其特征在于,跟踪所述指令块的执行包括: 基于所述注释,检测存储器中的硬错误或在执行所述指令块时的软错误中的一个或多个,其中所述注释指示所述当前指令块内的指令的数量。
16.如权利要求11所述的方法,其特征在于,修改所述处理器所使用的所述资源包括: 基于所述注释,减少所述处理器所使用的组件的数量。
17.如权利要求11所述的方法,其特征在于,跟踪所述指令块的执行包括: 标识其中被分配有来自所述当前指令的指令的线程、进程或执行核中的一个或多个;以及 利用标识其中被分配有所述指令的所述线程、所述进程或所述执行核中的一个或多个的数据来更新所述注释。
18.如权利要求12所述的方法,其特征在于,生成所述控制流程数据包括: 将间接分支指令转换为比较指令或转移指令中的一个或多个。
19.如权利要求11所述的方法,其特征在于,所述方法进一步包括: 判断修改所述处理器所使用的所述资源是否影响所述处理器的操作;以及 当修改所述资源不影响所述处理器的所述操作时,更新所述注释以指示所述处理器所使用的所述资源不应该被优化。
20.如权利要求11所述的方法,其特征在于,所述方法进一步包括: 基于所述控制流程数据,确定第二当前指令块的第二目的地标识符; 基于所述控制流程数据,标识与所述第二当前指令块相关联的第二注释;以及 基于所述第二注释或所述第二目的地标识符中的一个或多个,执行修改所述处理器所使用的资源或跟踪所述指令块的执行中的一项或多项。
21.一种包括数据的非瞬态机器可读存储介质,所述数据在被处理器访问时使所述处理器执行如权利要求11-20中的任一项所述的方法。
22.—种设备,包括: 用于存储控制流程数据的装置,所述控制流程数据包括指令块的多个块标识符、所述指令块中的一个或多个指令块的目的地标识符、以及所述指令块的注释; 用于接收所述控制流程数据的装置; 用于基于所述控制流程数据确定当前指令块的目的地标识符的装置; 用于基于所述控制流程数据标识与所述当前指令块相关联的注释的装置;以及 用于执行下列各项中的至少一项的装置: 修改处理器所使用的资源;或 基于所述注释或所述目的地标识符中的一个或多个,跟踪所述指令块的执行; 用于基于所述运行时配置文件生成所述控制流程数据的装置。
23.如权利要求22所述的设备,其特征在于,跟踪所述指令块的执行包括: 基于所述注释,检测存 储器中的硬错误或在执行所述指令块时的软错误中的一个或多个,其中所述注释指示所述当前指令块内的指令的数量。
24.如权利要求22所述的设备,其特征在于,修改所述处理器所使用的所述资源包括: 基于所述注释,减少所述处理器所使用的组件的数量。
25.如权利要求22所述的设备,其特征在于,跟踪所述指令块的执行包括: 标识其中被分配有来自所述当前指令的指令的线程、进程或执行核中的一个或多个;以及 利用标识其中被分配有所述指令的所述线程、所述进程或所述执行核中的一个或多个的数据来更新所述注释。
【文档编号】G06F9/30GK104049941SQ201410095950
【公开日】2014年9月17日 申请日期:2014年3月14日 优先权日:2013年3月15日
【发明者】J·鲍巴, R·萨桑卡, J·J·库克, A·达斯, A·克里希纳斯瓦米, D·J·萨格, J·M·艾戈伦 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1