专利名称:数据推测的显式软件控制的方法和结构的制作方法
技术领域:
本发明大体上涉及增强处理器的性能,且更确切地说涉及数据推测的方法。
背景技术:
为增强现代处理器的性能,使用各种技术来增加给定时间周期中执行的指令数目。这些技术中的一种是数据推测。
数据推测大体上涉及推测的形式,其中对数据值(运算的来源或结果)进行预测以破坏数据依赖性。通过破坏数据依赖性,可并行地发布更多指令。使用某种形式的检验来确保预测是正确的,并在错误推测的情况下进行备份。如果推测正确,那么就并行地执行潜在依赖的操作,从而减少绝对执行时间。
已提出多种形式的数据推测来增加指令级并行性(ILP),且提出许多硬件机制来支持数据推测。对于长等待时间的操作而言,数据推测是最重要的。
基于硬件的数据推测的应用实例是预测靠近处理器的存储器高速缓冲存储器中错过的一载入指令所返回的值。如果可预测由载入返回的值,那么在载入仍在完成中时,执行取决于所述值的后继指令。当载入完成时,对推测进行检验,并将对于后继指令完成的工作视为正确并将其提交,或者必须废弃所完成的工作。
需要两种基本事物来进行数据推测工作。首先,必须有一种好的方法来预测指令将使用或将产生的数据值。预测可来自观察先前行为并使用先前行为预测将来行为的硬件机制。预测也可并入软件应用程序本身中。
数据值推测所需的第二种事物是用于推测执行的硬件支持。必须以指令稍后可提交给架构状态或在不影响架构状态的情况下被废弃的方式来执行预测点之后的所有后继指令(其使用预测数据值)。必须存在支持来记录所使用的预测数据值并将预测数据值与指令所返回的实际数据值进行比较,且起始后继指令的提交或废弃。
发明内容
根据本发明的一个实施例,使用显式软件控制来进行数据推测。在计算机程序中的选定位置应用显式软件控制以提供数据推测的益处,同时消除由硬件执行数据推测的需要。
因此,在一实施例中,一种基于计算机的方法通过显式软件控制来确定是否需要对项目、变量、指针、地址等进行数据推测。一旦确定需要对所述项目进行数据推测,便在显式软件控制下执行数据推测。相反,如果显式软件控制确定不需要数据推测,例如通常通过执行一长等待时间指令而获得的项目值可用,那么就使用所述项目的实际值来执行一原始代码段。
在一个实例中,确定是否需要对项目进行数据推测包括执行一寄存器状态指令分支。此指令使一处理器记分板显露,并允许软件确定所述记分板中项目的状态。
在一个实例中,在显式软件控制下执行数据推测包括引导硬件对一状态进行定点检验以获得一快照状态。将项目值设定为所述项目的预测值,并随后使用所述预测值代替实际值来执行原始代码段。一旦完成所述原始代码段的执行,就对项目的预测值与项目的实际值进行比较。如果两个值相等,就提交使用项目的预测值执行原始代码段的结果。相反,如果两个值不相等,就使状态退回至快照状态,并使用实际值执行原始代码段。
对于此实施例,一种结构包括用于在显式软件控制下确定是否需要对一项目进行数据推测的构件;和用于在一旦确定需要数据推测时,就在显式软件控制下执行数据推测的构件。所述结构还包括用于在一旦确定不需要数据推测时,就使用项目的实际值来执行原始代码段的构件。
在一个实施例中,所述用于执行数据推测的构件包括用于引导硬件对一状态进行定点检验以获得一快照状态的构件。所述用于执行数据推测的构件还包括用于将项目值设定为项目的预测值的构件;和用于使用预测值代替实际值而执行原始代码段的构件。所述用于执行数据推测的构件进一步包括用于将预测值与实际值进行比较的构件;和用于在一旦所述预测值等于所述实际值时,就提交使用预测值执行原始代码段的结果的构件。
举例而言,可通过使用存储的计算机可执行指令和计算机系统中执行这些指令的处理器来实施这些构件。所述计算机系统可为工作站、便携式计算机、客户端-服务器系统,或联网计算机、存储媒体等的组合。
一种计算机系统包括一处理器和一耦合到所述处理器且其中存储有指令的存储器。在所述处理器上执行所述指令时,一种方法包括在显式软件控制下确定是否需要对一项目进行数据推测;和一旦确定需要数据推测,就在显式软件控制下执行对于所述项目的数据推测。
一种计算机程序产品,包括一经配置以存储或传送用于一方法的计算机可读代码的媒体,所述方法包括在显式软件控制下确定是否需要对一项目进行数据推测;和一旦确定需要数据推测,就在显式软件控制下执行对于所述项目的数据推测。
在另一实施例中,一种基于计算机的方法包括执行一寄存器状态指令分支;一旦寄存器状态为第一状态,就使用寄存器的实际值来执行原始代码段;和一旦寄存器状态为不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于原始代码段的数据推测。
对于此实施例,一种结构包括用于执行一寄存器状态指令分支的构件;用于在一旦寄存器状态为第一状态时,就使用寄存器的实际值来执行原始代码段的构件;和用于在一旦寄存器状态为不同于所述第一状态的第二状态时,就在显式软件控制下替代地执行对于所述原始代码段的数据推测的构件。
举例而言,可通过使用存储的计算机可执行指令和计算机系统中执行这些指令的处理器来实施这些构件。所述计算机系统可为工作站、便携式计算机、客户端-服务器系统,或联网计算机、存储媒体等的组合。
对于此实施例,一种计算机系统包括一处理器和一耦合到所述处理器且其中存储有指令的存储器。在所述处理器上执行所述指令时,一种方法包括执行一寄存器状态指令分支;一旦寄存器状态为第一状态,就使用寄存器的实际值来执行原始代码段;和一旦寄存器状态为不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于所述原始代码段的数据推测。
一种计算机程序产品,包括一经配置以存储或传送用于一方法的计算机可读代码的媒体,所述方法包括执行一寄存器状态指令分支;
一旦寄存器状态为第一状态,就使用寄存器的实际值来执行原始代码段;和一旦所述寄存器状态为不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于所述原始代码段的数据推测。
在又一实施例中,一种方法包括确定在一计算机源程序中是否需要对一项目进行数据推测;和在所述计算机源程序中插入计算机程序代码,所述计算机程序代码一旦执行便提供对所述数据推测的显式软件控制。
对于此实施例,一种结构包括用于确定在一计算机源程序中是否需要对一项目进行数据推测的构件;和用于在所述计算机源程序中插入计算机程序代码的构件,所述计算机程序代码一旦执行便提供对所述数据推测的显式软件控制。
举例而言,可通过使用存储的计算机可执行指令和计算机系统中执行这些指令的处理器来实施这些构件。所述计算机系统可为工作站、便携式计算机、客户端-服务器系统,或联网计算机、存储媒体等的组合。
对于此实施例,一种计算机系统包括一处理器和一耦合到所述处理器且其中存储有指令的存储器。在所述处理器上执行所述指令时,一种方法包括确定在一计算机源程序中是否需要对一项目进行数据推测;和在所述计算机源程序中插入计算机程序代码,所述计算机程序代码一旦执行便提供对所述数据推测的显式软件控制。
一种计算机程序产品包括一经配置以存储或传送用于一方法的计算机可读代码的媒体,所述方法包括确定在一计算机源程序中是否需要对一项目进行数据推测;和在所述计算机源程序中插入计算机程序代码,所述计算机程序代码一旦执行便提供对所述数据推测的显式软件控制。
在又一实施例中,一种结构包括用于执行一指令以执行状态的定点检验的构件;和用于开始至少一条指令的推测执行的构件。所述结构进一步包括用于在一旦所述推测执行成功时就提交通过所述推测执行而完成的工作的构件;和用于在一旦所述推测工作失败时就废弃所述工作并退回至所述状态的构件。
图1为包括一含有单线程数据推测代码序列的源程序的系统的方框图,所述单线程数据推测代码序列提供根据本发明第一实施例的数据推测的显式软件控制。
图2为根据本发明一个实施例在一源计算机程序中的适当点插入用于数据推测的显式软件控制的单线程数据推测代码序列的一个实施例的处理流程图。
图3为根据本发明一个实施例的数据推测的显式软件控制的处理流程图。
图4为根据本发明另一实施例的数据推测的显式软件控制的处理流程图。
图5为说明使用包含提供数据推测的显式软件控制的单线程数据推测代码序列的源程序的若干替代实施例的高级网络系统图。
在图式中,具有相同参考数字的元件为相同或类似元件。同样,参考数字的第一数位指示图式号码,其中关联于所述参考数字的元件首次出现。
具体实施例方式
根据本发明的一个实施例,在显式软件控制下执行对于项目的数据推测。在计算机系统100的处理器170上执行单线程数据推测代码序列140中的一系列软件指令。
对单线程数据推测代码序列140中的软件指令系列的执行引起计算机系统100(i)确定是否需要对项目进行数据推测,并在需要数据推测时引起计算机系统(ii)对计算机系统100的状态进行快照(snapshot)并维持退回至所述快照状态的能力,(iii)执行对于项目的数据推测,(iv)执行使用数据推测结果的代码段,(v)确定数据推测是否有效,(vi)如果数据推测有效,就提交推测工作并继续执行,或(vii)如果数据推测无效,就退回至快照状态并继续执行。
使用者可在源程序130中使用显式软件控制来控制对于项目的数据推测的使用。或者,例如,一编译器或优化解释器在处理源程序130时可在预期存在长等待时间指令的点处插入对关于项目的数据推测提供显式软件控制的指令。
更确切地说,在一个实施例中,使用处理200修改程序代码,以便使用显式软件控制来控制数据推测。在长等待时间指令检验操作201中,对执行指令是否预期将需要大量处理器周期进行确定。如果指令预期不会需要大量处理器周期,那么处理正常继续,且代码不会经修改而包含对与长等待时间指令相关的项目的数据推测的显式软件控制。相反,如果指令预期将需要大量处理器周期,那么处理转到数据推测的显式软件控制操作202,其中对于项目的数据推测的显式软件控制指令包含于源程序130中。
在此实施例中,向源程序130添加指令,所述指令一旦执行便执行数据推测检验操作210。如以下更完全解释,此指令的执行向程序提供对数据推测是否执行的显式控制。如果不需要数据推测,即项目值可用,那么处理正常继续。相反,如果需要数据推测,那么数据推测检验操作210将处理转到软件控制的数据推测操作211。
在此实施例中,在软件控制的数据推测操作211中,包含指令从而使上述操作(ii)至(vii)响应于软件代码段的执行而执行。确切地说,软件指令引导处理器170对状态进行快照并管理对所述状态的所有后继改变,从而在必要时处理器170可回复到快照时的状态。
所获得的快照取决于所捕捉的状态。在一个实施例中,所述状态为系统状态。在另一实施例中,所述状态为机器状态,且在又一实施例中,所述状态为处理器状态。在每种情况下,后继操作是相同的。
快照之后,将执行数据推测的项目的值设定为等于所述项目的预测值。随后,使用所述项目预测值执行原始代码序列。
在完成代码序列的执行后,将项目的预测值与项目的实际值进行比较。如果两个值相同,那么就提交计算的结果,否则便使状态退回至快照状态,且以项目的实际值继续执行。
对于有利的数据推测的显式软件控制,软件应用程序理想地具有三种特征。第一,在长等待时间之后一定有可利用所述结果的操作。最普通的原因是与频繁错过高速缓冲存储器的载入相类似的长等待时间操作。第二,操作的结果是可预测的。第三,后继操作取决于长等待时间操作的结果。
在一个实施例中,使用软件来实施处理200,且所述软件识别将对指令执行所产生的值进行推测的每一指令。这可由程序员指示、编译器分析或分析器(profiler)反馈而完成。独立于用以识别指令的处理,所述处理确定通过推测操作的结果值而破坏数据依赖性是潜在有利的。
在Quinn A.Jacobson的标题为“METHOD AND STRUCTURE FOR CONVERTINGDATA SPECULATION TO CONTROL SPECULATION”的共同让渡美国专利序号第10/349,425号中揭示了用于确定在源程序130中将数据推测的显式软件控制插在何处(例如插入点)的其他实施例。美国专利申请案序号第10/349,425号的发明内容
具体实施方式
和其中引用的图式、权利要求书以及说明书摘要以全文引用的方式并入本文。美国专利申请案序号第10/349,425号中插入的代码段将由以下更完全描述的显式软件控制来代替。同样,请注意美国专利申请案序号第10/349,425号的实施例是数据推测的显式软件控制的其他实施例的实例。
图3是使用方法200进行添加以提供对项目的数据推测的显式软件控制的指令的一个实施例的方法300的更为详细的处理流程图。为进一步说明方法300,以下列出用于各种实例的伪码。表1中列出选来进行数据推测的实例伪代码段。
表1
1 Producer_OP A,B->%rZ…2 Consumer_OP%rZ,C->D…第1行(行数并非伪码的部分,且仅用于参考)是操作Producer_OP,其使用项目A和B并将操作的结果置于register%rz中。操作Producer_OP可为指令集中支持的任何操作。项目A和B仅用作占位符以指示此特定操作需要两个输入。本发明的各种实施例也适用于具有单输入或多于两个输入的操作。寄存器%rZ可为任意寄存器。操作Producer_OP的结果直到长等待时间之后才可用,且预期结果为值N,其中N为一绝对值或寄存器中可用的值。
第2行是操作Consumer_OP。操作Consumer_OP使用存储在寄存器%rZ中的操作Producer_OP的结果。项目C和D仅用作占位符以指示此特定操作需要两个输入%RZ和C,且具有输出D。虽然在此实施例中操作Consumer_OP由单行伪码表示,但操作Consumer_OP表示一个使用操作Producer_OP的结果的代码段。所述代码段可包含更多行软件代码中的一行。
表2的Insert_21至Insert_30行中列出通过使用用于表1中的伪码的方法200产生的伪码。
表21 Producer_OP A,B->%rZInsert_21 if data_speculation,branch predict…Insert_22 original:
2 Consumer_OP%rZ,C->DInsert_23 continue:
Insert_24<update prediction for result of Producer-OP>
…Insert_25 predict;Insert_26 checkpoint,originalInsert 27<Compute or use prediction for result ofProducer_OP and store in%rZl>
Insert 28 Consumer_OP%rZl,C->DInsert_29 If%rZ==%rZl,commit,else fail
Insert_30 ba continue同样,行数并非伪码的部分,且仅用于参考。
在此实例中,将第1行识别为一插入点,且因此使用方法200插入包含Insert_21、Insert_22、Insert_23、Insert_24、Insert_25、Insert_26、Insert_27、Insert_28、Insert_29和Insert_30各行的代码段。此指令序列的特定实施取决于包含以下某些或全部的因素(i)用于源程序130的计算机编程语言,(ii)用于计算机系统100的操作系统,以及(iii)处理器170的指令集。通过此揭示,所属领域的技术人员可在任何相关系统中实施转换。
首先讨论插入的行,随后更详细地考虑方法300。Insert_21行是有条件的流控制语句,其一旦执行便确定是否需要数据推测,例如操作Producer_OP的实际结果是否可用。如果需要数据推测,例如操作Producer_OP的结果不可用,那么处理就分支到标号predict,其为Insert_25行。否则,处理继续进行,通过标号original(Insert_22行)到达第2行。
Insert_23行为标号continue。在提交数据推测的结果之后,处理转到标号continue。当不需要数据推测时,或当数据推测失败时,处理也转移通过标号continue。
Insert_24行为一代码段,其更新操作Producer_OP的值的预测。这里包含的指令取决于值预测的类型。如果使用定值预测,那么此指令为空操作指令。在其他实施例中,可实施最术值(last-value)或跨越预测值。大体上,所属领域的技术人员可在软件中使用适当的值预测机制。
Insert_26行是引导处理器进行状态快照并维持使状态退回至快照状态的能力的指令。在此实例中,使用一定点检验指令。
在Marc Tremblay、Quinn A.Jacobson、Shailender Chaudhry、Mark S.Moir和MauriceP.Herlihy于2004年1月23日申请的标题为“Selectively Unmarking Load-Marked CacheLines During Transactional Program Execution”的共同让渡美国专利申请案序号第10/764,412号中说明关于定点检验指令的方法与结构的更详细描述。美国专利申请案序号第10/764,412号的发明内容
具体实施方式
和其中引用的图式、权利要求书以及说明书摘要以全文引用的方式并入本文。
在此实施例中,定点检验指令的语法为checkpoint,<label>
其中指令checkpoint的执行引起处理器对此线程的状态进行快照。标号<label>是在定点检验(隐式地或显式地)失败时处理将转到的位置。
在处理器对状态进行快照之后,处理器(例如)缓冲用于快照状态中每一位置的新数据。处理器还监视是否另一线程执行将影响推测执行的状态的操作,例如向定点检验状态中的一位置进行写入,或在定点检验状态中的一位置中存储一值。如果检测到此一操作,那么就清除推测工作,恢复快照状态,且处理分支到标号<label>。这是数据推测的隐式失败。
定点检验的显式失败由语句Fail的执行引起。语句Fail的执行引起处理器放弃推测工作,使状态恢复至快照状态,并分支到标号<label>。语句Commit的执行引起处理器提交自最末定点检验以后完成的所有推测工作。
Insert_27行是一旦执行便确定操作Producer_OP的预测值并将预测值存储在寄存器%rZl中的指令或代码段。举例来说,如果使用定值预测,就将定值移入寄存器%rZl中。
Insert_28行中,第2行表示的代码段由一类似代码段代替,其中使用预测值而不是操作Producer_OP的实际值,即,在原始代码段中用寄存器%rzl代替寄存器%rz。
Insert_29行中,将操作Producer_OP的预测值与操作Producer_OP的实际值进行比较。如果两个值相等,那么推测工作由指令commit的执行提交。如果两个值不等,那么就清除推测工作,使状态返回至快照状态,且处理通过指令fail的执行而转到标号original。因此,如果到达Insert_30行,那么推测工作已提交,且因此处理总是分支到标号continue。
当于处理器170上执行表2中的代码段时,执行方法300。在数据推测检验操作310中,进行检验以确定对于长等待时间指令是否需要数据推测。举例来说,如果长等待时间指令的结果可用,那么数据推测将不会增强性能。因此,当长等待时间指令的结果可用时,检验操作310将处理转到使用实际值执行原始代码段的操作330。否则,当长等待时间指令的结果不可用时,检验操作310将处理转到显式软件控制下的数据推测操作320。
在显式软件控制下的数据推测操作320的一个实施例中,引导硬件定点检验状态的操作321引起将由处理器170进行的当前状态的快照(快照状态)。一旦完成定点检验状态操作321,处理就从操作321转到执行数据推测322。
执行数据推测322将通过执行长等待时间指令而获得的项目值设定为一预测值。一旦完成操作322,处理就从操作322转到使用预测值执行原始代码段的操作323。
操作323中,在原始代码段中以预测值代替实际值来执行原始代码段。如果在执行期间存在隐式定点检验失败,那么数据推测终止,且处理从操作323转到退回至定点检验状态的操作325。相反,一旦成功完成执行,处理就从操作323转到预测等于实际的检验操作324。
预测等于实际的检验操作324将长等待时间指令的预测值与实际值进行比较。如果两个值相等,那么操作323的结果有效,且处理转到提交推测的操作326,其依次提交基于数据推测的执行的结果。如果两个值不等,那么操作323的结果无效,且处理转到退回至定点检验状态的操作325。
在退回定点检验状态的操作325中,恢复快照状态作为实际状态,且处理转到使用实际值执行原始代码的操作330。使用实际值执行原始代码的操作330使用长等待时间指令的实际值执行原始代码段。
方法400为显式软件控制下的数据推测的处理流程图的另一实施例。在此实施例中,使用新颖的数据就绪检验操作410。使用状态指令的一分支(例如寄存器状态指令的分支)的实施例来实施检验操作410。在寄存器状态指令的分支被调度时,寄存器状态指令分支的执行测试处理器170的记分板173。如果寄存器状态为就绪,那么执行继续进行。如果寄存器状态为未就绪,那么执行就分支到寄存器状态指令的分支中指定的一标号。寄存器状态指令的分支的一个实施例的格式为Branch_if_not_ready%reg label其中%reg为记分板173中的寄存器,记分板173在此实施例中为硬件指令记分板,且label为数据推测代码段中的标号。
通过此指令,表2的伪码变为表31 Producer_OP A,B->%rZInsert_31 Branch_if_not_ready%rZ predict…Insert_22 original:
2 Consumer_OP%rZ,C->DInsert_23 continue:
Insert_24<update prediction for result of Producer OOP>
…Insert_25 predict;Insert_26 checkpoint,originalInsert 27<Compute or use prediction for result ofProducer_OP and store in%rZl>
Insert 28 Consumer_OP%rZl,C->DInsert_29 If%rZ==%rZl,commit,else failInsert_30 ba continue重要的是,利用寄存器状态指令分支的代码了解调度分组规则和操作的预期等待时间。如果在一载入指令之后立即发布未就绪指令的分支,那么指令通常将载入视为未就绪,因为(例如)即使对于一级数据高速缓冲存储器命中(cache hit),载入仍具有三个周期的最小等待时间。
在Marc Tremblay、Shailender Chaudhry和Quinn A.Jacobson(代理人档案号SUN040062)的标题为“METHOD AND STRUCTURE FOR EXPLICIT SOFTWARE CONTROLUSING SCOREBOARD STATUS INFORMATION”的共同申请、共同让渡的美国专利申请案序号第11/xxx,xxx号中对状态信息指令的新颖分支进行了更详细描述,所述美国专利申请案的发明内容具体实施方式
、权利要求书、说明书摘要以及这些部分中引用的图式和相关
以全文引用的方式并入本文。
因此,通过执行寄存器状态指令的分支,数据就绪检验操作410在记分板173中寄存器%rZ的状态为就绪时转到操作330,且在寄存器%rz的状态为未就绪时转到操作320。操作310和320与以上所描述的操作相同,且所述描述以引用的方式并入本文。
所属领域的技术人员容易了解,在此实施例中,先前结合方法300和400提到的个别操作是通过在计算机系统100的处理器170上执行计算机程序指令来执行的。在一个实施例中,一存储媒体上安装有用于方法540的计算机可读程序代码(图5),其中方法540为方法300与400中的一者或两者,且所述计算机可读程序代码的执行引起处理器170执行以上解释的操作。
在一个实施例中,计算机系统100为类似于个人计算机或工作站的硬件配置。然而,在另一实施例中,计算机系统100为客户端-服务器计算机系统500的部分。对于客户端-服务器计算机系统500或独立计算机系统100,存储器120通常包含易失性存储器(例如主存储器510)与非易失性存储器511(例如硬盘驱动器)。
虽然存储器120在图1中说明为统一结构,但此不应解释为要求存储器120中的所有存储器都处于相同的物理位置。存储器120的全部或部分可处于与处理器170不同的物理位置。举例来说,方法540可存储在物理上位于与处理器170不同的位置的存储器中。
处理器170应耦合到含有方法540的存储器。这可在一客户端-服务器系统、或者通过经由调制解调器与模拟线路或数字接口与数字载波线路而与另一计算机的连接来完成。举例来说,存储器120的全部或部分可位于万维网(World Wide Web)入口中,而处理器170位于(例如)个人计算机中。
更确切地说,在一个实施例中,计算机系统100可为便携式计算机、工作站、服务器计算机,或可执行方法540的任何其他设备。类似地,在另一实施例中,计算机系统100可包含多个不同计算机、无线设备、服务器计算机,或通过互连以执行本文所述方法540的这些设备的任意所需组合。
本文中,计算机程序产品包括一媒体,其经配置以存储或传送用于方法540的计算机可读代码,或其中已存储用于方法540的计算机可读代码。计算机程序产品的一些实例为CD-ROM光碟、ROM卡、软盘、磁带、计算机硬驱动机、网络上的服务器,以及在网络上传输的表示计算机可读程序代码的信号。
本文中,计算机存储器指易失性存储器、非易失性存储器或两者的组合。类似地,计算机输入单元(例如键盘515和/或鼠标518)和显示单元516指在上述或等同的设备的任何一者中分别提供输入本文所述信息与显示本文所述信息所需的功能性的特性。
考虑到本揭示,可用使用者感兴趣的操作系统和计算机编程语言以许多种计算机系统配置来实施方法540。另外,方法540可作为不同的模块存储在不同设备的存储器中。举例来说,方法540起初可存储在服务器计算机580中,且随后在必要时,方法540的模块可被传送到一客户端设备并在所述客户端设备上执行。因此,方法540的一部分将在服务器处理器上执行,而方法540的另一部分将在客户端设备的处理器上执行。
在又一实施例中,方法540存储在另一计算机系统的存储器中。所存储的方法540通过网络504传送到系统100中的存储器120。
在一个实施例中,使用计算机源程序130来实施方法540。计算机程序可存储在类似于(例如)软盘或光盘(CD)的任何通用数据载体上,以及类似于硬盘的任何通用计算机系统的存储设备上。因此,本发明的一个实施例也涉及用于存储用以执行本发明性方法的计算机源程序的数据载体。本发明的另一实施例也涉及一种使用计算机系统来执行方法540的方法。本发明的又一实施例涉及一种具有存储媒体的计算机系统,所述存储媒体上存储有用于执行方法540的计算机程序。
虽然已结合本发明的一个实施例来解释上文中的方法540,但所属领域的技术人员将容易了解,在不偏离本发明的精神与范围的情况下,可对此实施例做出修改。
功能单元、寄存器文件171和记分板173仅为说明性的,且并不希望将本发明限制于图1中说明的特定布局。处理器170可包含一单个芯片上的多个处理器。所述多个处理器中的每一个都可具有一独立的寄存器文件和记分板,或可以某种方式共享或耦合所述寄存器文件和记分板。类似地,寄存器文件171可由一个或一个以上寄存器文件组成。同样,可用所属领域的技术人员已知的许多种方法来实施记分板173的功能性,例如,可代替记分板来取样硬件状态位元。因此,使用记分板来获得状态信息仅为说明性的,且并不希望将本发明限于仅使用记分板。
权利要求
1.一种基于计算机的方法,其包括在显式软件控制下确定是否需要对一项目进行数据推测;和一旦确定需要数据推测,就在显式软件控制下执行对于所述项目的数据推测。
2.根据权利要求1所述的基于计算机的方法,其进一步包括一旦确定不需要数据推测,就使用所述项目的一实际值来执行一原始代码段。
3.根据权利要求1所述的基于计算机的方法,其中所述执行数据推测进一步包括引导硬件对一状态进行定点检验以获得一快照状态。
4.根据权利要求3所述的基于计算机的方法,其中所述状态包括一处理器状态。
5.根据权利要求3所述的基于计算机的方法,其中所述执行数据推测进一步包括将所述项目的一值设定为所述项目的一预测值。
6.根据权利要求5所述的基于计算机的方法,其中所述执行数据推测进一步包括使用所述项目的所述预测值代替所述项目的一实际值来执行一原始代码段。
7.根据权利要求6所述的基于计算机的方法,其中所述执行数据推测进一步包括将所述预测值与所述实际值进行比较。
8.根据权利要求7所述的基于计算机的方法,其中所述执行数据推测进一步包括一旦所述预测值等于所述实际值,就提交使用所述预测值执行所述原始代码段的一结果。
9.根据权利要求7所述的基于计算机的方法,其中所述执行数据推测进一步包括使所述状态退回至所述快照状态。
10.根据权利要求9所述的基于计算机的方法,其进一步包括使用所述实际值执行所述原始代码段。
11.根据权利要求1所述的基于计算机的方法,其中所述确定是否需要数据推测包括执行一寄存器状态指令分支。
12.根据权利要求11所述的基于计算机的方法,其中所述寄存器状态指令分支为一就绪指令分支。
13.一种结构,其包括用于在显式软件控制下确定是否需要对一项目进行数据推测的构件;和用于在一旦确定需要对所述项目进行数据推测时,就在显式软件控制下执行数据推测的构件。
14.根据权利要求13所述的结构,其进一步包括用于在一旦确定不需要数据推测时,就使用所述项目的一实际值来执行一原始代码段的构件。
15.根据权利要求13所述的结构,其中所述用于执行数据推测的构件进一步包括用于引导硬件对一状态进行定点检验以获得一快照状态的构件。
16.根据权利要求15所述的结构,其中所述状态包括一处理器状态。
17.根据权利要求15所述的结构,其中所述用于执行数据推测的构件进一步包括用于将所述项目的一值设定为所述项目的一预测值的构件。
18.根据权利要求17所述的结构,其中所述用于执行数据推测的构件进一步包括用于使用所述预测值代替一实际值来执行一原始代码段的构件。
19.根据权利要求18所述的结构,其中所述用于执行数据推测的构件进一步包括用于将所述预测值与所述实际值进行比较的构件。
20.根据权利要求19所述的结构,其中所述用于执行数据推测的构件进一步包括用于在一旦所述预测值等于所述实际值时,就提交使用所述预测值执行所述原始代码段的一结果的构件。
21.根据权利要求19所述的结构,其中所述用于执行数据推测的构件进一步包括用于使所述状态退回至所述快照状态的构件。
22.根据权利要求21所述的结构,其进一步包括用于使用所述实际值执行所述原始代码段的构件。
23.根据权利要求13所述的结构,其中所述用于确定是否需要数据推测的构件进一步包括用于执行一寄存器状态指令分支的构件。
24.一种计算机系统,其包括一处理器;和一存储器,其耦合到所述处理器且其中存储有指令,其中一旦在所述处理器上执行所述指令时,一方法包括在显式软件控制下确定是否需要对一项目进行数据推测;和一旦确定需要数据推测,就在显式软件控制下执行数据推测。
25.一种计算机程序产品,其包括一经配置以存储或传送用于一方法的计算机可读代码的媒体,所述方法包括在显式软件控制下确定是否需要对一项目进行数据推测;和一旦确定需要数据推测,就在显式软件控制下执行对于所述项目的数据推测。
26.根据权利要求25所述的计算机程序产品,其中所述方法进一步包括一旦确定不需要数据推测,就使用所述项目的一实际值来执行一原始代码段。
27.一种基于计算机的方法,其包括执行一寄存器状态指令分支;一旦所述寄存器状态为一第一状态,就使用所述寄存器的一实际值来执行一原始代码段;和一旦所述寄存器状态为一不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于所述原始代码段的数据推测。
28.一种结构,其包括用于执行一寄存器状态指令分支的构件;用于在一旦所述寄存器状态为一第一状态时,就使用所述寄存器的一实际值来执行一原始代码段的构件;和用于在一旦所述寄存器状态为一不同于所述第一状态的第二状态时,就在显式软件控制下替代地执行对于所述原始代码段的数据推测的构件。
29.一种计算机系统,其包括一处理器;和一存储器,其耦合到所述处理器且其中存储有指令,其中一旦在所述处理器上执行所述指令时,一方法包括执行一寄存器状态指令分支;一旦所述寄存器状态为一第一状态,就使用所述寄存器的一实际值来执行一原始代码段;和一旦所述寄存器状态为一不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于所述原始代码段的数据推测。
30.一种计算机程序产品,其包括一经配置以存储或传送用于一方法的计算机可读代码的媒体,所述方法包括执行一寄存器状态指令分支;一旦所述寄存器状态为一第一状态,就使用所述寄存器的一实际值来执行一原始代码段;和一旦所述寄存器状态为一不同于所述第一状态的第二状态,就在显式软件控制下替代地执行对于所述原始代码段的数据推测。
31.一种方法,其包括确定在一计算机源程序中是否需要数据推测;和在所述计算机源程序中插入计算机程序代码,所述计算机程序代码一旦执行便提供对所述数据推测的显式软件控制。
全文摘要
使用显式软件控制来进行数据推测。在一计算机程序(130)中的选定位置应用所述显式软件控制(140)以提供数据推测的益处,同时消除由硬件执行数据推测的需要。一种基于计算机的方法首先通过显式软件控制来确定是否需要对一项目、一变量、一指针、一地址等进行数据推测(310)。一旦确定需要对所述项目进行数据推测,便在显式软件控制下执行数据推测(320)。相反,如果所述显式软件控制确定不需要数据推测,例如通常通过执行一长等待时间指令而获得的所述项目的值可用,那么就使用所述项目的一实际值来执行一原始代码段(330)。
文档编号G06F9/30GK101076776SQ200580009867
公开日2007年11月21日 申请日期2005年3月29日 优先权日2004年3月31日
发明者克里斯托夫·布朗, 奎因·A·雅各布森, 沙伊伦德尔·乔杜里, 马克·特伦布莱 申请人:太阳微系统公司