支持单线程应用程序的时分多路复用推理性多线程的制作方法

文档序号:6403721阅读:143来源:国知局
专利名称:支持单线程应用程序的时分多路复用推理性多线程的制作方法
技术领域
本发明涉及提高计算机系统性能的技术。更具体地,本发明涉及支持单处理器流水线内的一个非推理性线程和相关推理性线程的交替执行的方法和设备。
背景技术
随着微处理器的时钟速度继续以指数速度增长,要设计能跟上这些更快的时钟速度的处理器流水线正变得越来越难,因为在每个流水线阶段,可用来执行所需计算操作的时间更少。为了处理这个问题,有些设计人员已经开始研究在单处理器流水线内以循环方式静态地交替执行无关的处理器线程的可能性。在这种方法中,如果N个无关的线程交替,那么对于每N个连续的流水线阶段,给定线程的指令只出现一次。因此,N个线程中的每一个都在处理器本地时钟频率的第1/N处运行。例如,4个线程,每个都在3GHz运行,可以共同在12GHz处理器上运行。
这种交替技术放宽了等待时间的需求,这使得设计高速处理器流水线容易得多。例如,如果4个无关的线程交替,那么数据缓存访问(或者加法操作)可以占用4个流水线阶段而不会对给定线程的性能带来负面影响。
单流水线内多线程的交替执行有许多的优点。与在独立的流水线中执行线程相比,它节省电力和面积。它还为单流水线提供大的总处理能力。
但是,不能多线程执行的应用程序或基准程序则不能从这种交替技术中获益。这是个问题,因为单线程性能对于购买计算机系统的众多顾客来说是重要的。因此,顾客用来比较计算机系统性能的基准程序通常测量单线程性能。
因此,所需要的是为单线程应用程序提供多线程的静态时分多路执行优势的方法和设备。

发明内容
本发明的一个实施例提供一个使单处理器流水线内的头线程和推理性线程的交替执行更容易的系统。该系统的运行是通过使用头线程来执行程序指令,并通过使用推理性线程在头线程之前推理性地执行程序指令,其中头线程和推理性线程通过单处理器流水线内的时分多路复用交替来并发执行。
在该实施例的一个变化中,推理性线程包括一个或多个推理性线程。
在该实施例的一个变化中,当头线程到达推理性线程开始执行的程序点时,系统就在头线程和推理性线程之间执行连接操作。
在进一步的变化中,头线程在存储单元的主版本上运行,推理性线程在存储单元的时空维版本上运行(由相同发明人在美国专利号6,353,881中作为紧急申请完成,标题为“Supporting Space-TimeDimensional Program Execution by Selectively Versioning MemoryUpdates”)。在这个变化中,执行连接操作包括把存储单元的时空维版本并入存储单元的主版本中,以使对存储单元的时空维版本的更新被合并到相应的存储单元的主版本中。
在进一步的变化中,如果推理性线程对存储单元执行读操作,那么该系统要确定该存储单元的时空维版本是否存在。如果存在,该系统就读取该存储单元的时空维版本。如果不存在,该系统就读取该存储单元的主版本。该系统还更新与该存储单元相关联的状态信息,以指出该存储单元已经被推理性线程读取。
在进一步的变化中,如果推理性线程对存储单元执行写操作,那么该系统要确定该存储单元的时空维版本是否存在。如果不存在,该系统就创建该存储单元的时空维版本,并对该存储单元的时空维版本执行写操作。
在进一步的变化中,如果头线程对存储单元执行读操作,那么该系统对该存储单元的主版本执行读操作。
在进一步的变化中,如果头线程对存储单元执行写操作,那么该系统对该存储单元的主版本执行写操作。该系统还检查与该存储单元相关的状态信息,以确定该存储单元是否已经被推理性线程读取。如果已读取,该系统就使推理性线程回滚,以使推理性线程可以读取写操作的结果。如果未读取,该系统就对该存储单元的时空维版本执行写操作,如果该时空维版本存在的话。
在进一步的变化中,存储单元包括在面向对象编程系统中定义的对象。
在该实施例的一个变化中,头线程与推理性线程访问独立的硬件寄存器文件。


图1说明了根据本发明实施例的计算机系统。
图2A说明了通过单线程进行方法的顺序执行。
图2B根据本发明实施例说明了方法的空间和时间维执行。
图3根据本发明实施例说明了在方法的空间和时间维执行过程中的系统栈的状态。
图4根据本发明实施例说明了存储器如何在栈和堆之间分区。
图5根据本发明实施例说明了对象的时空维版本和主版本的结构。
图6根据本发明实施例说明对象的状态字的结构。
图7表示一个流程图,根据本发明实施例说明了与头线程对存储单元执行写入有关的操作。
图8表示一个流程图,根据本发明实施例说明了与推理性线程从存储单元读取有关的操作。
图9表示一个流程图,根据本发明实施例说明了与推理性线程对存储单元执行写入有关的操作。
图10表示一个流程图,根据本发明实施例说明了与推理性线程和头线程之间执行连接有关的操作。
图11表示一个流程图,根据本发明另一个实施例说明了与推理性线程和头线程之间执行连接有关的操作。
图12表示一个流程图,根据本发明实施例说明了一个头线程和相关推理性线程的交替执行。
具体实施例方式
以下给出的描述可以使本领域的任何技术人员制作和使用本发明,而且是在特定应用及其需求的背景下给出的。对本领域的技术人员来说,对所公开的实施例进行各种修改是显而易见的,而且此处定义的通用原则在不脱离本发明的精神和范围的情况下可以应用于其他的实施例和应用。因此,并无意将本发明局限于所示实施例,而是要将符合此处所公开的原则和特征的最广泛的范围给予本发明。
此详细描述中所介绍的数据结构和代码通常储存在计算机可读存储介质上,其可以是任何供计算机系统使用的存储代码和/或数据的设备或介质。这包括,但不局限于,磁存储设备和光存储设备例如磁盘驱动器、磁带、CD(压缩光盘)、DVD(数字多用途光盘或数字视频光盘),以及嵌于传输介质(具有或者不具有信号在其上调制的载波)中的计算机指令信号。例如,传输介质可能包括通信网络,例如因特网。
计算机系统图1说明了根据本发明实施例的计算机系统。在图1所示的实施例中,硅片100包括至少一个中央处理单元(CPU)102。CPU 102通常可以包括任何允许多线程并发执行的计算设备。
CPU 102包括指令高速缓存112和数据高速缓存106,其中指令高速缓存112包括由CPU 102执行的指令,数据高速缓存106包括由CPU102操作的数据。在本发明的一个实施例中,数据高速缓存106是具有64字节高速缓存线的64KB 4路组关联数据高速缓存。
数据高速缓存106和指令高速缓存112与二级高速缓存(L2)连接,而L2又与存储控制器111连接。存储控制器111与位于芯片之外的动态随机存储器(DRAM)108连接。
指令高速缓存112将指令输送到与4个独立的执行线程相关联的4个独立的指令队列114~117中。来自指令队列114~117的指令通过多路复用器109输送,而在来自指令队列114~117的指令输送给执行流水线107之前,多路复用器109以循环的方式交替这些指令。如图1所示,来自给定指令队列的指令在执行流水线107中占用1/4的指令时间片。注意,处理器102的其他实现可能能够交替来自多于4个队列的指令,或者是少于4个队列的指令。
由于流水线时间片在不同的线程之间轮换,因而可以放宽等待时间。例如,从数据高速缓存106载入可以占用多至4个流水线阶段,或者算术操作可以占用多至4个流水线阶段而不会造成流水线停止。在本发明的一个实施例中,这种交替是“静态”的,这意味着每个指令队列与执行流水线107中的每1/4指令时间片相关联,而且这种关联并不随时间动态地变化。
指令队列114~117分别与相应的寄存器文件118~121相关联,而寄存器文件118~121包括由来自指令队列114~117的指令处理的操作数。注意,执行流水线107中的指令可以使数据在数据高速缓存106和寄存器文件118~119之间转移。(在本发明的另一个实施例中,寄存器文件118~121被合并成一个单独的大型多端口寄存器文件,该文件在与指令队列114~117相关联的独立线程之间分割。)注意,本发明一般应用于任何支持在单流水线中多线程的并发交替执行的计算机系统,而且并不限于所说明的计算机系统。例如,本发明并不局限于以上所述的固定交替循环调度方案,而是可以一般地应用于交替来自指令队列的指令的任何时分多路复用调度方案。
方法的时空维执行图2A说明了通过单个头线程202在常规的计算机系统中进行方法的顺序执行。在执行程序的过程中,头线程202顺序执行许多方法,包括方法A 204、方法B 206和方法C 208。
与之相反,图2B根据本发明实施例说明了方法的空间和时间维的执行。在图2B中,头线程202首先执行方法A 204,然后执行方法B 206。(对于本例,假设方法B 206不返回值或者返回的某些其他不为方法C208所用的值。或者,如果方法C 208使用由方法B 206返回的值,那么假设方法C 208使用方法B 206的预计返回值。)当头线程202执行方法B 206时,推理性线程203在堆的独立时空维中执行方法C 208。如果头线程202成功地执行了方法B 206,推理性线程203就被连接到头线程202。该连接操作包括使与推理性线程203关联的状态和与头线程202关联的状态合并,以及堆的时空维的崩溃。
如果由于某种原因,推理性线程203在执行方法C 208中遇到问题,那么推理性线程203进行回滚操作。该回滚操作允许推理性线程203再次尝试执行方法C 208。或者,头线程202可以非推理性地执行方法C 208,推理性线程203可以执行后续的方法。
有许多原因使推理性线程203在执行方法C 208的过程中遇到问题。在推理性线程203读取存储单元之后,执行方法B 206的头线程202向同一个存储单元(对象)写入值时就会发生一个问题。在读取时,当堆的两个时空维在该存储单元中崩溃时,推理性线程203可以读取同一个存储单元。在这种情况下,推理性线程203应该读取由头线程202写入的值,但它读取的是先前的值。在这种情况下,系统使推理性线程203回滚,以致推理性线程203可以读取由头线程202写入的值。
注意,术语“存储单元”通常指的是可以被计算机程序存取的任何存储器单元。例如,术语“存储单元”可以指位、字节或字存储器,以及在面向对象的编程系统中定义的数据结构或对象。
图3根据本发明实施例说明了在方法的空间和时间维执行过程中的系统栈的状态。注意,由于编程语言如Java编程语言不允许一个方法修改另一个方法的栈桢,所以系统栈在执行方法B 206之前和在执行方法C 208之前通常是相同的。(如果方法B 206通过系统栈返回参数,那么这种情况就不成立了。但是正如下面要描述的,返回参数可以被显式处理。)参见图3,在方法A 204执行时,栈300包括方法A桢302。当方法A 204返回时,方法B 206开始执行,且方法A桢302由方法B桢304取代。最后,当方法B 206返回时,方法C 208开始执行,且方法B桢304由方法C桢306取代。注意,由于栈300在方法B 206执行之前与在方法C 208执行之前是相同的,所以就有可能不首先执行方法B 206,就用栈300的拷贝执行方法C 208。
为了撤消推理性执行操作的结果,需要对存储器的更新进行版本控制。由于增加的存储需求、下降的高速缓存性能和进行版本控制所需的额外硬件,与存储器的所有更新的版本控制有关的开销会相当大。
庆幸的是,并非对存储器的所有更新都需要进行版本控制。例如,在系统栈上对局部变量的更新——比如循环计数器——一般只与正在更新该局部变量的线程有关。因此,甚至对于推理性线程来说,也没有必要对这些局部变量的更新进行版本控制。
当执行用诸如C语言之类的传统编程语言编写的程序时,一般不可能确定哪些更新与堆有关,哪些更新与系统栈有关。这些程序通常是从高级语言表示形式编译成特定计算机架构的可执行代码。这种编译过程一般将堆更新和系统栈更新之间的区别清除掉。
而对于新的与平台无关的计算机语言,例如由加尼福利亚州帕洛阿尔托的太阳微系统公司发布的Java编程语言,就不是这种情况(Sun、Sun标志、Sun Microsystems和Java是太阳微系统公司在美国和其他国家的注册商标或商标)。用Java编程语言编写的程序通常被编译成包括Java字节码的类文件。这种类文件可以通过计算机网络传输给远程计算机系统,并在远程计算机系统上执行。Java字节码据称是“平台无关的”,因为它们可以在范围广泛的计算平台上执行,只要该计算机平台提供Java虚拟机。
通过使用解释器或即时(JIT)编译器,把Java字节码翻译成特定计算平台的机器码,Java字节码就可以在特定计算平台上执行。另外,Java字节码也可以在运行在特定计算平台上的Java字节码引擎上执行。
所幸的是,Java字节码比传统的机器码包括更多的语法信息。尤其是,Java字节码区分对系统栈中的局部变量的存取和对系统堆的存取。此外,用Java编程语言编写的程序不允许基本类型和引用类型之间的转换。这种转换使得在编译时很难区分对系统栈的存取和对系统堆的存取。
支持时空维执行的数据结构图4根据本发明实施例说明了存储器如何在栈和堆之间分区。在图4中,存储器400被分成许多区域,包括堆402、线程栈404和推理性堆406。堆402包括一个从中分配对象的存储区域。堆402被进一步分成年轻代区域408和年老代区域410,用于垃圾回收的目的。由于性能原因,垃圾回收器通常以不同的方式处理年轻代对象和年老代对象。线程栈404包括一个从中分配各种线程的栈的存储区域。推理性堆406包括堆的两个时空维没有崩溃的所有的存储单元的时空维值。这包括对象的时空维版本,例如图5所示的对象500的版本510,以及由推理性线程203创建的对象。为了垃圾回收,这些由推理性线程203创建的对象可以被视为属于比年轻代区域408中的对象更年轻的一代。
图5根据本发明实施例说明了对象的主版本500和对象的时空维版本510的结构。
对象的主版本500通过对象引用指针501引用。与面向对象的编程系统中所定义的对象一样,对象的主版本500包括数据区508,它包括一个或多个字段,这些字段包括与对象的主版本500相关联的数据。对象的主版本500还包括方法向量表指针506。方法向量表指针506指向含有向量的表,这些向量指向可以由对象的主版本500调用的方法。
对象的主版本500也包括时空维版本指针502,其指向对象的时空维版本510,如果该对象上的两个时空维没有崩溃的话。注意,在图示的本发明实施例中,时空维版本510总是通过时空维版本指针502被间接引用。另外,对象的主版本500还包括含有状态信息的状态字504,该状态信息表示数据区508的哪些字段已经被推理性线程203写入或读取。对象的时空维版本510只包括数据区518。
图6根据本发明实施例说明了状态字504的结构。在该实施例中,状态字504包括检测点编号602和推理性位603。推理性位603包括读取位604和写入位606。当由于推理性线程203的读写需要更新状态字504时,就用系统的当前时间更新检测点编号602。系统时间维中的当前时间在连接点或回滚点不连续前进。这使得可以把检测点编号602当成推理性位603的限定器使用。如果检测点编号602小于当前时间,那么推理性位603可被解释为复位。
读取位604记录自从上次连接或回滚以来数据区508中的哪些字段已经被读取。相应地,写入位606记录自从上次连接或回滚以来数据区508中的哪些字段已经被写入。在本发明的一个实施例中,读取位604包括数据区508中的每个字段的一个位。在另一个实施例中,读取位包括的位数比数据区508中的字段数少。在本实施例中,读取位604中的每个位对应于数据区508中的多个字段。例如,如果有8个读取位,每个位对应于每个第8个字段。类似地,写入位606可以对应于数据区508中的一个或多个字段。
时空维的更新过程时空分维发生在所选择的存储器的更新过程中。对于局部变量和对系统栈的操作数存取,不存在时空维版本,也没有什么特殊的事发生。在头线程202读取堆402中的对象的过程中,同样也没有什么特别的。
特殊的操作包括在头线程202执行的写操作中,以及推理性线程203执行的读写操作中。下面参考图7、图8和图9,将更详细地描述这些特殊操作。
图7表示一个流程图,根据本发明实施例说明了与头线程202对对象的写操作有关的操作。系统向对象的主版本500和对象的时空维版本510写入,如果两个时空维在这点没有崩溃的话(步骤702)。然后,系统检查对象的主版本500内的状态字,以确定是否需要回滚(步骤704)。如果推理性线程203以前读取了数据元素,那么需要回滚。当堆的两个时空维在被推理性线程203读取时在该存储单元中崩溃,推理性线程203可以读取同一个存储单元。如果推理性线程203以前对该对象写过并因此确保该对象的两个维在该存储单元未崩溃,而且如果当前的写操作既要更新对象的主版本500又要更新对象的时空维版本510,那么也需要回滚。
如果需要回滚,那么系统使推理性线程203执行回滚操作(步骤706)。该回滚操作允许推理性线程203在头线程202向该对象写入以后,读取(或写入)该对象。
注意在图7所示的本发明的实施例中,该系统向主版本500和时空维版本510都执行写操作。在另一个替换实施例中,该系统首先检查以确定推理性线程203以前是否向时空维版本510写入过。如果没有,该系统就对主版本500和时空维版本510都执行写操作。如果已写入过,该系统就只对主版本500执行写操作。
图8表示一个流程图,根据本发明实施例说明了与推理性线程203对对象的读操作有关的操作。在这个读操作过程中,该系统设置对象的主版本500内的状态字504的状态位,以指示主版本500已经被读取(步骤802)。然后,如果时空维版本510存在的话,推理性线程203就读取时空维版本510。否则,推理性线程203读取主版本500。
图9表示一个流程图,根据本发明实施例说明了与推理性线程203对存储单元的写入操作有关的操作。如果时空维版本510不存在,那么该系统在推理性堆406中创建时空维版本510(步骤902)。如果状态字504的更新是必须的,该系统也会更新状态字504以表示推理性线程203已经向该对象写入(步骤903)。然后该系统向时空维版本510写入(步骤904)。如果随后头线程202必须选择是向主版本500和时空维版本510都写入还是只向主版本500写入的话,那么状态字504的更新就是必须的。
图10表示一个流程图,根据本发明实施例说明了与头线程202和推理性线程203间的连接有关的操作。例如,当头线程202到达程序中推理性线程203开始执行的点时,就会发生连接操作。连接操作使与推理性线程203相关联的状态和与头线程202相关联的状态合并。该合并包括把推理性线程203的栈复制和/或合并到头线程202的栈中(步骤1002)。该合并还包括合并对象的主版本和时空维版本(步骤1004)以及有可能垃圾回收的推理性堆406(步骤1006)。在本发明的一个实施例中,线程202或203中的一个执行步骤1002和1006,而其他线程执行步骤1004。
图11表示一个流程图,根据本发明的另一个实施例说明了与头线程202和推理性线程203间的连接有关的操作。在该实施例中,推理性线程203作为伪头线程执行。作为伪头线程,推理性线程203使用间接寻址来引用对象的时空维版本,但不标记对象或创建版本。当推理性线程203充当伪头线程的时候,头线程202更新对象的主版本。
附加推理性线程的扩展虽然为单一推理性线程的情形已经描述了本发明,但是本发明可被扩展以提供在数据对象的多个时空维版本上并行运行的多个推理性线程。
交替执行图12表示一个流程图,根据本发明实施例说明了一个头线程和相关推理性线程的交替执行。参考图1,头线程202、推理性线程203(以及头线程202的可能的其他推理性线程)在处理器102上面并发执行。
注意,这些线程的指令以循环的方式被时分多路复用,以在同一个指令流水线107中执行。这有效地提高了CPU 102上的单线程执行速度,因为头线程202、推理性线程203以及可能的其他推理性线程正在CPU 102上并发执行,并正在为执行的同一个线程完成工作。
还要注意的是,本发明并不局限于本说明书所描述的推理性执行的确定形式。一般地,本发明可应用于利用多线程的任何类型的推理性执行。
给出本发明实施例的上述介绍仅为说明和描述的目的。并无意使其穷尽或使本发明局限于所公开的形式。据此,许多修改和变化对本领域的技术人员是显而易见的。此外,以上公开并不无意限制本发明。本发明的范围由所附的权利要求书限定。
权利要求
1.一种单处理器流水线内的头线程和推理性线程的交替执行的方法,该方法包括使用头线程执行程序指令;以及使用推理性线程在头线程之前推理性地执行程序指令;其中头线程和推理性线程通过单处理器流水线内的时分多路复用交替来并发执行。
2.根据权利要求1所述的方法,其中推理性线程包括一个或多个推理性线程。
3.根据权利要求1所述的方法,进一步包括当头线程到达推理性线程开始执行的程序点时,在头线程和推理性线程之间执行连接操作。
4.根据权利要求3所述的方法,其中头线程在存储单元的主版本上运行;其中推理性线程在存储单元的时空维版本上运行;以及其中执行连接操作包括把存储单元的时空维版本并入存储单元的主版本中,以使对存储单元的时空维版本的更新被合并到相应的存储单元的主版本中。
5.根据权利要求4所述的方法,其中如果推理性线程对存储单元执行读操作,那么该方法进一步包括确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本存在,那么就读取该存储单元的时空维版本;如果该存储单元的时空维版本不存在,那么就读取该存储单元的主版本;并且更新与该存储单元相关联的状态信息,以指示该存储单元已经被该推理性线程读取。
6.根据权利要求4所述的方法,其中如果推理性线程对存储单元执行写操作,那么该方法进一步包括确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本不存在,那么就创建该存储单元的时空维版本;并且对该存储单元的时空维版本执行写操作。
7.根据权利要求4所述的方法,其中如果头线程对存储单元执行读操作,那么该方法进一步包括对该存储单元的主版本执行读操作。
8.根据权利要求4所述的方法,其中如果头线程对存储单元执行写操作,那么该方法进一步包括对该存储单元的主版本执行写操作;检查与该存储单元相关联的状态信息,以确定该存储单元是否已经被推理性线程读取;如果该存储单元已经被推理性线程读取,那么使该推理性线程回滚以使该推理性线程可以读取该写操作的结果;以及如果该存储单元尚未被推理性线程读取,那么对该存储单元的时空维版本执行写操作,如果该时空维版本存在的话。
9.根据权利要求4所述的方法,其中存储单元包括面向对象编程系统中所定义的对象。
10.根据权利要求1所述的方法,其中头线程和推理性线程存取独立的硬件寄存器文件。
11.一种存储指令的计算机可读存储介质,当所存指令被计算机执行时,会使该计算机执行用于单处理器流水线内的头线程和推理性线程的交替执行的方法,该方法包括使用头线程执行程序指令;以及使用推理性线程在头线程之前推理性地执行程序指令;其中头线程和推理性线程通过单处理器流水线内的时分多路复用交替来并发执行。
12.根据权利要求11所述的计算机可读存储介质,其中推理性线程包括一个或多个推理性线程。
13.根据权利要求11所述的计算机可读存储介质,其中当头线程到达推理性线程开始执行的程序点时,在头线程和推理性线程之间执行连接操作。
14.根据权利要求13所述的计算机可读存储介质,其中头线程在存储单元的主版本上运行;其中推理性线程在存储单元的时空维版本上运行;以及其中执行连接操作包括把存储单元的时空维版本并入存储单元的主版本中,以使对存储单元的时空维版本的更新被合并到相应的存储单元的主版本中。
15.根据权利要求14所述的计算机可读存储介质,其中如果推理性线程对存储单元执行读操作,那么该方法进一步包括确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本存在,那么就读取该存储单元的时空维版本;如果该存储单元的时空维版本不存在,那么就读取该存储单元的主版本;并且更新与该存储单元相关联的状态信息,以指示该存储单元已经被该推理性线程读取。
16.根据权利要求14所述的计算机可读存储介质,其中如果推理性线程对存储单元执行写操作,那么该方法进一步包括确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本不存在,那么就创建该存储单元的时空维版本;并且对该存储单元的时空维版本执行写操作。
17.根据权利要求14所述的计算机可读存储介质,其中如果头线程对存储单元执行读操作,那么该方法进一步包括对该存储单元的主版本执行读操作。
18.根据权利要求14所述的计算机可读存储介质,其中如果头线程对存储单元执行写操作,那么该方法进一步包括对该存储单元的主版本执行写操作;检查与该存储单元相关联的状态信息,以确定该存储单元是否已经被推理性线程读取;如果该存储单元已经被推理性线程读取,那么使该推理性线程回滚以使该推理性线程可以读取该写操作的结果;以及如果该存储单元尚未被推理性线程读取,那么对该存储单元的时空维版本执行写操作,如果该时空维版本存在的话。
19.根据权利要求14所述的计算机可读存储介质,其中存储单元包括面向对象编程系统中所定义的对象。
20.根据权利要求11所述的计算机可读存储介质,其中头线程和推理性线程存取独立的硬件寄存器文件。
21.一种支持单处理器流水线内的头线程和推理性线程的交替执行的设备,该设备包括处理器;该处理器内的处理器流水线;该处理器内的执行机制,该处理器被配置成,使用头线程执行程序指令,并使用推理性线程在头线程之前推理性地执行程序指令;其中该执行机制被配置成通过在该处理器流水线内的时分多路复用交替并发地执行头线程和推理性线程。
22.根据权利要求21所述的设备,其中推理性线程包括一个或多个推理性线程。
23.根据权利要求21所述的设备,进一步包括一种连接机制,它被配置成当头线程到达推理性线程开始执行的程序点时,在头线程和推理性线程之间执行连接操作。
24.根据权利要求23所述的设备,其中头线程在存储单元的主版本上运行;其中推理性线程在存储单元的时空维版本上运行;以及其中执行连接操作包括把存储单元的时空维版本并入存储单元的主版本中,以使对存储单元的时空维版本的更新被合并到相应的存储单元的主版本中。
25.根据权利要求24所述的设备,其中如果推理性线程对存储单元执行读操作,那么执行机制被配置成确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本存在,那么就读取该存储单元的时空维版本;如果该存储单元的时空维版本不存在,那么就读取该存储单元的主版本;并且更新与该存储单元相关联的状态信息,以指使示该存储单元已经被该推理性线程读取。
26.根据权利要求24所述的设备,其中如果推理性线程对存储单元执行写操作,那么执行机制被配置成确定该存储单元的时空维版本是否存在;如果该存储单元的时空维版本不存在,那么就创建该存储单元的时空维版本;并且对该存储单元的时空维版本执行写操作。
27.根据权利要求24所述的设备,其中如果头线程对存储单元执行读操作,那么该执行机制被配置成对该存储单元的主版本执行读操作。
28.根据权利要求24所述的设备,其中如果头线程对存储单元执行写操作,那么执行机制被配置成对该存储单元的主版本执行写操作;检查与该存储单元相关联的状态信息,以确定该存储单元是否已经被推理性线程读取过;如果该存储单元已经被推理性线程读取,那么使该推理性线程回滚以使该推理性线程可以读取该写操作的结果;以及如果该存储单元尚未被推理性线程读取,那么对该存储单元的时空维版本执行写操作,如果该时空维版本存在的话。
29.根据权利要求24所述的设备,其中存储单元包括面向对象编程系统中所定义的对象。
30.根据权利要求21所述的设备,其中头线程和推理性线程存取独立的硬件寄存器文件。
全文摘要
本发明的一个实施例提供了一种简化单处理器流水线内的头线程和推理性线程的交替执行的系统。该系统的运行是通过使用头线程执行程序指令,并通过使用推理性线程在头线程之前推理性地执行程序指令来运行的,其中通过单处理器流水线内的时分多路复用交替,头线程和推理性线程并发执行。
文档编号G06F9/45GK1650266SQ03804145
公开日2005年8月3日 申请日期2003年3月3日 优先权日2002年3月29日
发明者M·特伦布莱, S·乔杜里 申请人:太阳微系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1