在64位机器上运行32位操作系统背景
当提及处理器为64位或32位时,这通常指的是寄存器的宽度(即,软件可见寄存器的宽度),以及当提及操作系统为64位或32位时,这指的是虚拟存储地址的宽度。具有64位存储地址的处理器因此能够直接访问264字节的字节可寻址存储器。大部分新处理器为64位的,并且这种处理器当运行64位软件的时候执行得最有效率。然而,64位处理器是向下兼容的,以及大部分可以运行大部分32位软件,但这个效率低,因为32位软件在64位处理器中不使用所有的硬件。
下面描述的实施方式不受解决已知处理器结构的任何或所有缺点的实现的限制。
发明内容
本发明内容被提供以简化形式来介绍一系列概念,这些概念在具体实施方式中有进一步的描述。该发明内容并不打算表明所主张的主题的关键特征或本质特征,其也不打算用作在确定所主张的主题的范围时的帮助。
描述了在64位处理器上有效运行32位操作系统的方法。在一个实施方式中,处理器包括64位硬件,并且当运行64位操作系统时,处理器起单线程处理器的作用。然而,当运行32位操作系统(其可能为运行在虚拟机上的客户操作系统)时,处理器起双线程核的作用。寄存器文件在逻辑上被分为两个部分,每个线程一个部分,且功能单元内的逻辑可在线程之间被分割、线程之间被共享或被复制以便为每个线程提供逻辑的实例。配置位(configurationbits)可被设置成指示处理器是应该起单线程还是多线程设备的作用。
第一方面提供具有第一和第二操作模式的处理器,处理器包括:一个或多个配置寄存器,其被安排成存储配置参数,配置参数表明软件可见寄存器的宽度;寄存器文件,其包括多个通用寄存器;控制逻辑,其与寄存器文件相联系并在第二操作模式中安排成逻辑上将寄存器文件分为多个部分并控制对部分的访问,每个部分被安排成存储用于软件的多个线程中的一个的数据;以及一个或多个功能单元,其被安排成在第一操作模式中执行来自单线程的指令并在第二操作模式中执行来自多线程的指令,其中取指级、控制逻辑和功能单元中每个被安排成根据配置参数的值在第一和第二操作模式之间转换。
第二方面提供一种操作处理器的方法,其包括设置一个或多个配置寄存器来指示软件可读寄存器的宽度;以及根据配置寄存器在第一和第二操作模式之间转换,其中在第一模式中,处理器起单线程处理器的作用,并在第二模式中,处理器起多线程处理器的作用。
另外的方面提供了计算机可读存储介质,其具有在其上编码的用于产生如本文中所述的处理器的计算机可读程序代码;计算机可读存储介质,其具有在其上编码的用于产生配置成执行本文描述的方法的处理器的计算机可读程序代码。
本文描述的方法可由配置有软件的计算机执行,软件以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式、或以包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码工具的计算机程序的形式,且其中的计算机程序可体现在计算机可读存储介质上。有形(或非暂时性)存储介质的例子包括磁盘、拇指驱动器、存储卡等,且并不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可由非暂时性计算机可读存储介质产生,非暂时性计算机可读存储介质具有在其上编码的计算机可读程序代码。
这确认了固件和软件可被单独使用,且是有价值的。预期包含软件,软件运行于或控制“哑”或标准硬件,以执行期望功能。还预期包括“描述”或定义硬件配置的软件,例如,如用于设计硅片或用于配置通用可编程芯片的HDL(硬件描述语言)软件,以执行期望功能。
如将对技术人员明显的是,优选的特征可在适当时被组合,并可与本发明的任何方面组合。
附图说明
将参考下面的附图以例子的方式描述本发明的实施方式,其中:
图1示出示例性乱序处理器的原理图;
图2示出算术逻辑单元(ALU)里的加法器功能的三个原理图;
图3示出第一和第二操作模式中的示例性功能单元的两个原理图;
图4为操作如图1所示的处理器的示例性方法的流程图;以及
图5是示例性有序处理器的原理图。
在全部附图中使用共同的参考数字来指示类似的特征。
具体实施方式
下面仅以例子的方式描述本发明的实施方式。这些例子代表申请人当前已知的实施本发明的最佳方式,但是其不是可实现本发明的唯一方式。该描述阐述例子的功能和用于构造和操作例子的步骤序列。然而,可通过不同的例子来实现相同或等效的功能和序列。
如上所述,尽管诸如32位操作系统(OS)的32位软件能够在64位硬件上运行,但是32位软件不利用64位处理器中的额外的硬件。本文描述了处理器结构和操作处理器的方法,其使得64位硬件能够对运行在该硬件上的32位软件表现为双线程32位核,对64位软件表现为单线程64位核。例如,32位软件可以是运行在64位管理程序(或虚拟机监视程序)上的客户OS,或者可选择地,处理器可被设计成被启动到64位模式或32位模式。通过在起双线程32位处理器(如本文所述的)作用的64位硬件上运行32位软件,与将32位软件运行在标准的64位处理器上相比,提高了软件的性能。而且,在使用虚拟化的情况下(例如,32位软件为运行在64位管理程序上的客户OS的情况下),硬件能以对于客户OS透明的方式在两种操作模式(单线程64位和双线程32位)之间转换,并且可根据硬件上正运行什么(例如,客户OS是32位还是64位)来动态地做到这点。本文所描述的硬件操作对于64位软件是不变的,但是对于32位软件有差异地运行。
存在为什么用户可能希望在64位硬件上运行32位软件的许多原因。不是所有的操作需要64位软件的额外的容量,且具有大量的遗留32位软件。在不同示例中,用户可能使用虚拟化来在根OS的顶上托管客户OS,其中根OS是64位软件,且客户OS可以是32位或64位软件。在不同示例中,除了客户OS在进行大的乘法之外,可能不需要64位,因此用户可只使用32位客户OS或可在64位客户OS和32位客户OS之间转换。在一些示例中,用户可在根OS的顶上运行两个或多于两个客户操作系统(例如,工作OS和家庭OS),其中一个或两个均可以是32位OS。与在64位硬件上的单一32位线程相比,可通过以两个32位线程运行的这种方式来获得性能的提高。
为了起双线程核的作用,当运行32位软件的时候,处理器中(例如,在处理器中的寄存器文件中)的通用寄存器(GPR)在逻辑上被分为两个部分,其中每个线程使用GPR的两个部分中的一个部分。例如,第一线程(线程0)可使用每个GPR的下半部分(例如,GPR[0]的下半部分、GPR[1]的下半部分等),且第二线程(线程1)可使用每个GPR的上半部分(例如,GPR[0]的上半部分、GPR[1]的上半部分等)。此外,处理器中的一些算术逻辑单元(ALU)可被设计,从而可将64位ALU使用于并行实施两个32位操作。可在线程之间共享或者复制其他ALU,以为每个线程提供逻辑实例。
尽管方法和硬件在本文中被描述为用于在64位硬件上运行32位软件,但是本技术也可被使用于:在128位硬件上运行32位软件(这种情况下,硬件作为四线程32位处理器);在128位硬件上运行64位软件(这种情况下,硬件作为双线程64位处理器);在96位硬件上运行32位软件(这种情况下,硬件作为三线程32位处理器)等等。总之,本文所述的方法和硬件可被使用于在(n.X)位硬件上(其中n为大于1的正整数)运行X位软件(其中,例如,X=32、64等),其中该(n.X)位硬件作为n线程X位处理器。产生的硬件具有多个操作模式:第一模式,其中它作为单线程(n.X)位核;以及至少一个额外的模式,其中它作为n线程X位处理器(其中每个GPR被分为n个部分,每个线程使用GPR的部分中的一个)。
在不同示例中,硬件可具有多于两个的操作模式,例如,128位硬件可在第一模式中作为单线程128位处理器、在第二模式中作为双线程64位处理器和在第三模式中作为四线程32位处理器操作。通常,硬件至少有两个操作模式。在一个模式中,它作为单线程核(且这个可被称为操作的“普通模式”),以及在每个额外的模式中,它作为多线程核(且额外的模式可被称为操作的“多线程模式”)。
图1示出示例性乱序处理器100的原理图,乱序处理器100中可实现本文所述的方法。尽管图1示出了乱序处理器,该方法也可以在如图5所示的有序处理器(即,不乱序地处理指令的处理器)中实现。在此示例中,处理器100为单线程处理器;然而,该方法也可被使用于多线程处理器,且在多线程处理器中,该方法可被使用于所有线程(例如,双线程64位核可使用本文所述方法来在四线程32位模式中操作,或者用于线程的只有一个(合适的)子集(例如,双线程64位核能使用本文所述的方法来在双线程32位模式中使用一个线程操作以及在单线程64位模式中使用另一个线程))。
处理器100包括取指级102、解码和重命名级104、重排序缓冲器106、提交级108、一个或多个功能单元110和寄存器文件(RF)116,每个功能单元110包括一个或多个执行管道。图1的下半部分示出寄存器文件116和功能单元110的部分的展开图。
取指级102被配置成按程序计数器(PC)所指示地从程序中(以程序顺序)提取指令。当在64位硬件上运行64位软件时,取指级102正常运行;然而,当在64位硬件上运行32位软件时,取指级102为两个线程提取指令。例如,取指级102可选择地为两个线程提取指令,或可使用任何技术来确定是为第一线程(线程0)提取指令,还是为第二线程(线程1)提取指令。在不同示例中,取指级102可能包括额外的逻辑103,逻辑103确定是将处理器运行在第一模式(对于64位软件是单线程的)中,还是在第二模式(对于32位软件是双线程的)中,并且这个可是基于一个或多个配置寄存器105的值确定的,其中配置寄存器105指示软件可读寄存器的宽度(例如,对于32位软件为32位宽度)。在一个示例中,可能具有表示操作系统是64位或32位的单一配置位,以及在一个示例中,对于64位可将其设为“1”,对于32位可将其设为“0”。尽管在图1中将配置寄存器105示为独立于RF116,在其他示例中它们可以是RF的一部分。
取指级102中的额外逻辑103使得取指级能够处理来自双线程的指令,尤其是当可能在线程之间共享PC时(例如,以对GPR的相似方式,因为PC的宽度与GPR的相同,例如对于线程0为31:0和对于线程1为63:32)。该额外逻辑103选择从哪个线程取指(例如,对于在32位模式中运行的64位硬件是线程0还是线程1)。
在使用虚拟化和根OS是64位OS的情况下,配置寄存器105只被硬件使用,以识别客户环境是32位还是64位软件。配置寄存器105可被管理程序设置(例如,当在客户OS的环境中转换)。然而,在整个核被启动到第一操作模式(64位操作)或第二操作模式(双线程32位操作)的情况下,CPU之外的某物可以设置配置参数。在各种示例中,可在外部引脚上设置配置参数,如果不重启核,配置参数将不改变。
一旦提取了指令,就向解码和重命名级104提供该指令,解码和重命名级104被安排成解释该指令并进行寄存器重新命名。具体地,每个指令可包括:寄存器写入操作;一个或多个寄存器读取操作;和/或算术操作或逻辑操作。寄存器写入操作向目标寄存器写入,以及寄存器读取操作从源寄存器读取。在寄存器重新命名期间,指令中所引用的每个结构寄存器(例如,每个源和目标寄存器)用物理寄存器替代(或重命名)。
对于寄存器写入操作,所引用的结构寄存器(例如,目标寄存器)被分配未使用的(或可用的)物理寄存器。任何分配可被存储在寄存器重新命名表格中,其中寄存器重新命名表格为数据结构,该数据结构示出每个结构寄存器和在程序流中分配给该指令的物理寄存器之间的映射。对于寄存器读取操作,用于特定结构寄存器(例如,源寄存器)的正确物理寄存器可从由结构寄存器索引的寄存器重新命名表格中的条目确定。
在指令通过解码和重命名级104之后,其被插入重排序缓冲器106(ROB)并派给功能单元110,以便执行。指令被派给的功能单元110可基于指令的类型。重排序缓冲器106为使得指令能够乱序地被执行、但有序地被提交的缓冲器。重排序缓冲器106以程序顺序保持被插入其中的指令,但是ROB106里的指令可由功能单元110失序地执行。在一些示例中,重排序缓冲器106可被形成为循环缓冲器,其具有指向ROB106中的最旧的指令的头和指向ROB106中的最新的指令的尾。将指令从重排序缓冲器106以程序的顺序输出到提交级108。换言之,当已经执行了指令时,将指令从ROB106的头输出,并且将头增加到ROB106中的下个指令。将输出自重排序缓冲器106的指令提供给提交级108,提交级108将指令的结果提交给寄存器/存储器。
每个功能单元110负责执行指令,并且可被配置成执行特定类型的指令。功能单元110可包括:一个或多个存取单元;整数单元;浮点单元(FPU);数字信号处理(DSP)/单指令多数据(SIMD)单元;或乘积累加(MAC)单元。存取单元将数据读给L1缓存和超过其的内存,且从L1缓存和超过其的内存写入数据。在一些实例中,存取单元可计算地址,且它可能(或可能不)包含L1缓存,并进行数据/标签RAM查找。当在多线程模式中运行的时候,L1缓存本身可以“硬”和“软”的方式在线程之间被分开(但是当在普通模式中以只有一个线程运行时候不被分开)。在硬分割中,每个缓存被分割成使得物理缓存的部分专用于每个线程,以及在不刷新缓存的情况下不能改变分区的尺寸,例如基于索引划分L1缓存。在软分割中,缓存被分割成使得运行时候可以改变分区的尺寸。在不同示例中,可基于使用任何合适的方法的方式(对于相关缓存)来分割L1缓存,且可根据所用方法将其视为硬或软分割。整数单元执行整数指令,FPU执行浮点指令,DSP/SIMD单元具有对多个数据点同时执行相同操作的多个处理元件,以及MAC单元计算两个数字的乘积并将该乘积加到累加器中。功能单元内的管道可具有不同的长度和/或复杂度。例如,FPU管道通常长于整数执行管道,因为它通常执行更复杂的操作。
当执行接收自解码和重命名级104的指令时,每个功能单元110对一个或多个共享的寄存器文件116中的物理寄存器执行读取和写入。当在64位硬件上运行32位软件时(第二操作模式),寄存器文件116(和具体地RF里的GPR)在逻辑上被分成两个部分120、122,寄存器文件116在不同示例中可被安排成存储32个64位地址。第一部分RF-A120被第一线程(线程0)使用,并且其尺寸为32x32位。第二部分RF-B122被第二线程(线程1)使用,并且其尺寸也为32x32位。相比之下,当运行64位软件时(第一操作模式),单线程从RF-A120读取GPR的底部32位并从RF-B122读取GPR的顶部32位,表现出具有包含全部32x64位的单一寄存器文件116。
以这种方式分割RF可能只涉及到RF中的GPR。然而,在不同示例中,如果RF中具有其中要存储的值在多线程模式中也比在普通操作模式中的小的其他寄存器,这些寄存器也可在线程之间被分割。
如图1的下半部分中所示,功能单元110包括逻辑124、126(其可被称为“解码逻辑”),逻辑124、126驱动RF116内的寄存器(例如,触发器)和多工器。在第一操作模式中(例如,当运行64位软件时),这些元件124和126均接收指令并以相同信息驱动RF116的两个部分(即,RF-A120和RF-B122)(例如,两个部分均从每个各自的部分提取GPR1和2)。如图1所示,ALU124中的操作结果也被写回到RF的两个部分120、122。结果的底部32位被写回到RF-A120中,以及结果的顶部32位被写回到RF-B122中。在第二操作模式中(例如,当运行2个32位线程),这些逻辑元件的第一个124接收与线程0相关的指令,并驱动RF116的第一部分RF-A120。相似地,这些逻辑元件的第二个126接收与线程1相关的指令,并驱动RF116的第二部分RF-B122。如图1所示,ALU124中的操作结果也被写回到RF的两个部分120、122。与第一线程相关的结果被写回到第一部分RF-A120,且与第二线程相关的结果被写回到第二部分RF-B122。
通过逻辑上以这种方式分割RF116,相同的RF可被用于64位或32位操作。此外,当与虚拟化一起使用时,根OS(其为64位软件)将寄存器视为全部64位宽的32条目,而不考虑客户OS是64位还是32位,并且如果需要时(例如,当环境转换时)将把RF116中的所有数据存入存储器,而不需要任何额外的逻辑或指令的变化。
在功能单元中(例如,在ALU124中),可能具有能在两个线程之间划分的逻辑的部分、可被复制的逻辑的部分和可在线程之间共享的逻辑的部分。
图2示出ALU中的加法器功能的三张原理图21-23。如在第一张图21中所示,64位加法器可从两个32位加法器202形成,且进位信号从一个32位加法器传输到另一个。通过将逻辑加入进位路径(例如,如图2中的第二张图22所示的“与”门204),配置位(例如,对于64位软件设置为1,对32位软件设置为0)可被使用于控制进位是从一个32位加法器传到另一个(例如,对于64位操作)还是不从一个32位加法器传到另一个(例如,对于双线程32位操作)。配置位可被存储于图1所示的配置寄存器105中。当配置位堵住进位路径,两个加法器202独立运行。第一加法器202然后可被用于第一线程,且第二加法器202可被用于第二线程。如第三张图23中所示,另一个实现可通过具有65位加法器206来做相似的事情,65位加法器206中位32(由箭头208和210表示)针对一个输入运算对象,与配置位相关联,针对第二输入运算对象,与0相关联,且在输出端被忽略。在此示例中,具有值1的配置位将导致在底部32位的任何溢值被传到顶部32位,而不明确地需要进位脉动型加法器(carry-ripplestyleadder)。图21-23中所示的对此的相似的实现可被用于ALU中的诸如倍增器的其他数学功能,其中两个块在第一模式中一起工作(并可能以某种方式关联,例如,类似于整数SIMD倍增器的方式),并在第二模式中两个块独立工作。
图3示出第一和第二操作模式中的示例性功能单元的两个原理图31、32。功能单元包括逻辑功能A,接下来是逻辑功能B302,以及然后是逻辑功能C304。在第一操作模式中(例如,当运行64位软件时),以与图2中前两张图中所示的加法器相似的方式,逻辑功能A由两个连接的块A1306、A2308组成。为了能够也在第二操作模式(两个32位线程)中运行,将逻辑310的部分在两个线程之间划分(例如,逻辑A1306和A2308),复制逻辑312的部分(例如,逻辑B302),并将逻辑314的部分(例如,逻辑C304)在线程之间共享,且逻辑316在线程间仲裁,以确定在任一时刻哪个线程使用逻辑。在第一操作模式中(如图31中所示),不使用复制的逻辑B和仲裁逻辑316。这是示出不同可能的情况的示例,其他实现可使用划分的/复制的/共享的逻辑的组合,产生或更多或更少的额外的逻辑。
尽管诸如加法器或倍增器的一些逻辑功能可轻易地在两个线程之间被分割(如图2和3中所示),可具有诸如除法器的其他逻辑功能,其不能被轻易地分割,且这种逻辑功能可被复制(正如图3中逻辑B)或在线程之间被共享(正如图3中逻辑C)。相似地,如果功能单元(例如,FPU)在两种版本的软件(例如,32位版本和64位版本)中具有相同的寄存器宽度,那么不能为多线程操作将其分割。如果不能分割功能单元,线程可能暂时共用该功能单元(例如,在一个循环上线程0使用它,在下一个循环上线程1使用它,在下一个循环上线程0使用它,等等,正如取指级102)。
处理器100还可包括除图1所述的那些之外的功能元件。例如,处理器可还包括分支预测器,分支预测器被配置成在已知导致可能的流变化的指令(诸如分支指令)的情况下预测程序流将采取哪个方向。分支预测是有用的,因为它使得指令在知道分支指令的结果之前能够被处理器100推测地执行。当分支预测器精确地预测程序流,这提高处理器100的性能。然而,如果分支预测器没有正确地预测分支方向,那么出现程序能继续进行之前需要被纠正的误预测。为了纠正误预测,丢弃发送给ROB106的推测性指令,且取指级102开始从正确的程序分支提取指令。
应理解,其它处理器可能不包括图1中所示的所有的功能元件(即,可省略图1中所示的一个或多个功能元件),且在一些实施例中,可包括图1中未示出的额外的功能元件。
图4为操作如图1所示的操作处理器的示例性方法的流程图。如上所述,设置配置寄存器105(块402),其确定处理器的操作模式(块404中)。在第一操作模式中,处理器起单线程64位设备的作用:提取指令(块406)、解码并重命名那些指令(块408)、将指令传输给ROB(块410)、执行指令(块412)、并在提交指令(块414)之前,将它们重排序至PC顺序(块413)。在第二操作模式中,处理器起双线程32位设备的作用,并从两个线程提取指令(块416),例如,可以轮流从线程0和线程1提取指令。所提取的指令被解码并重命名(块418),并被传输至ROB(块420)。如上所述,然后执行指令(块422),且来自第一线程的指令从寄存器文件的第一部分读取并向寄存器的第一部分写入,来自第二线程的指令从寄存器文件的第二部分读取并向寄存器的第二部分写入。如图3所示和上述描述,可并行进行执行的一些方面(例如,从而使得来自线程0的第一指令可与来自线程1的第二指令至少部分并行地执行),以及执行的其他方面可被串行执行,其中仲裁逻辑确定任意时刻哪个线程具有优先级。最后,在将两个线程的指令结果提交给存储器(块424)之前,来自每个线程的指令被重排序到PC顺序(块423)。
除在第二操作模式中分割RF116(如图1所示)之外,如图1所示,在第二操作模式中还可在两个线程之间分割ROB106(ROB-A106A、ROB-B106B)。提交单元118也可被修改成适应两个线程。提交单元118是通过在执行后从ROB106中读取来恢复指令顺序、并处理提交级108(例如,在块413中)的单元。对提交单元118的修改使其能够在第二操作模式中独立地对来自两个线程的指令进行重排序(例如,在块423中)。
在实施本文所述的方法的处理器中的逻辑的复制量可以是应用专有的。大量的复制将导致更大幅度的性能提高(与运行在标准64位硬件上的32位软件相比),但增大设备的区域。在不同示例中,处理器可在ALU中包括用于关键特性的复制的逻辑,但其他特性可被共用。
如上所述,可在处理器中实施方法,处理器可还包括分支预测器,分支预测器被配置成在已知导致可能的流变化的指令(诸如分支指令)的情况下预测程序流将采取哪个方向。如果分支预测器没有正确地预测分支方向,那么出现程序能继续进行之前需要被纠正的误预测。为了纠正误预测,丢弃发送给ROB106的推测性指令,且取指级102开始从正确的程序分支提取指令。当运行在第二操作模式中时(例如,运行32位软件),在两个线程中任一线程(例如,线程0或线程1)中的误预测可导致刷新来自功能单元110的两个线程中的误预测的指令和所有接下来的指令。在这种示例中,取指单元102然后又开始为两个线程提取指令。然而可选地,用于在处理器误预测的情况下刷新功能单元的逻辑可被修改/复制,从而使得在32位线程中的一个(例如,线程0)中的误预测只导致刷新来自该线程的指令,而不需要刷新来自其他线程(例如,线程1)的任何指令。用于刷新功能单元的逻辑遍布功能单元,例如在功能单元中的寄存器级上(例如,以实现“如果(刷新)寄存器.有效=0”)。可增加额外的逻辑,以有选择性地刷新管道,该逻辑进行额外的比较(对线程号)以查看是否需要刷新该级(例如,“如果(刷新和刷新.线程==寄存器.线程)寄存器.有效=0”)。
可结合虚拟化使用本文所述的方法。在这种示例中,管理程序/根OS是64位软件,且客户OS可以是32位或64位。
如上所述,处理器可在操作模式之间动态转换。在使用虚拟化的情况下,当启动不同的客户OS时可能发生转换,且在未使用虚拟化的情况下,当启动处理器时发生转换。可在硬件或软件中进行对配置位的设置,该配置位控制处理器运行于其中的操作模式。
尽管上述说明指的是乱序处理器,该方法也可以在如图5所示的有序处理器500中使用。有序处理器包括取指级102、解码级504、一个或多个功能单元110和寄存器文件116。应理解,其它有序处理器可能不包括图5中所示的所有的功能元件(即,可省略图5中所示的一个或多个功能元件),且在一些实施例中,可包括图5中未示出的额外的功能元件。在有序处理器500中实现该方法的情况下,具有一些在乱序处理器中未使用的额外的变化。例如,可提供额外的逻辑(在取指或解码级102、104中),以刷新被封住的线程(当运行于多线程模式中时),从而另一个线程可以通到功能(或执行)单元110。
尽管许多上述示例涉及在提供更宽的寄存器(例如,如由64位硬件提供的64位软件)的硬件上运行具有减少的宽度的软件可见寄存器的OS(例如,32位OS),应理解,操作系统只是能使用本文所述的方法的软件类型的一个示例(例如,该方法可被用于软件为固件而不是完全的OS的情况)。
尽管所描述的处理器100、500包括在多线程操作模式中在线程之间共用的RF,在不同示例中,处理器可包括在多线程操作模式中在线程之间共用的额外的级和/或缓冲器。
术语“处理器”和“计算机”在本文用于指代具有使其可执行指令的处理能力的任何设备或其部分。例如,术语“处理器”可包含中央处理器(CPU)、图形处理器(GPU或VPU)、物理处理器(PPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、设计成在CPU外部加速任务的任何处理单元等。本领域中的技术人员将认识到,这样的处理能力合并到很多不同的设备中,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的例子。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需要下载软件的片段,或在本地终端处执行一些软件指令和在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路例如DSP、可编程逻辑阵列等执行。
存储用于实现所公开的方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的例子包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的例子包括光学和磁性存储器技术、闪存、相变存储器、电阻性RAM。
对“逻辑”的特定提及指执行一种或多种功能的结构。逻辑的例子包括布置成执行那些功能的电路系统。例如,这样的电路系统可包括晶体管和/或在制造过程中可用的其它硬件元件。作为例子,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器例如寄存器、触发器或锁存器、逻辑运算器例如布尔运算、数学运算器例如加法器、乘法器或移位器和互连的电路系统或结构。这样的元件可被提供为定制电路或标准单元库、宏或以其它抽象级来提供。可以特定的布置使这样的元件互连。逻辑可包括固定功能的电路系统,且电路系统可被编程以执行一种或多种功能;这样的编程可从固件或软件更新或控制机制提供。被识别为执行一种功能的逻辑也可包括实现组成部分的功能或子过程的逻辑。在例子中,硬件逻辑具有实现固定功能操作或多个固定功能操作、状态机或过程的电路系统。
本文给出的任何范围或设备值可扩展或改变而不失去所寻求的效应,这对技术人员将是明显的。
将理解,上面描述的益处和优点可涉及一个实施方式或可涉及几个实施方式。实施方式不限于解决任何或所有所陈述的问题的那些实施方式或具有任何或全部所陈述的益处和优点的那些实施方式。
对“一个”项目的任何提及指那些项目中的一个或多个。术语“包括”在本文用于意指包括所标识的方法框或元件,但这样的框或元件并不包括排他列表,且装置可包含附加框或元件,以及方法可包含附加操作或元件。此外,框、元件和操作本身并不隐含地是封闭的。
本文描述的方法的步骤可在适当时以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或并行的多个步骤的执行。此外,单独的框可从任何方法删除而不偏离本文描述的主题的精神和范围。上面描述的任何例子的方面可与所描述的其它例子中的任一个的方面组合以形成另外的例子,而不失去所寻求的效应。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流向。元件之间的流向可以在任一方向上或在两个方向上。
将理解,优选实施方式的上述描述仅作为例子被给出,以及各种修改可由本领域中的技术人员做出。虽然上面以某个详细程度或参考一个或多个单独的实施方式描述了各种实施方式,但是本领域中的技术人员可对所公开的实施方式进行很多变更而不偏离本发明的精神或范围。