事务存储器的主分支指令的制作方法

文档序号:6532930阅读:178来源:国知局
事务存储器的主分支指令的制作方法
【专利摘要】本发明提供了一种使能计算机程序的执行从而从一个代码段分支到另一代码段的主分支指令。这些指令还在其他代码段创建新处理流,使能要与由其得到分支的代码段并行执行的其它代码段的执行。在一个例子中,其他处理流开始用于处理其他处理流的指令的事务。
【专利说明】事务存储器的主分支指令

【技术领域】
[0001]本发明的一方面总的来说涉及计算机程序,并且特别地涉及计算机程序中使用的分支指令。

【背景技术】
[0002]计算机程序(亦成为:程序或者应用程序)是为了在计算机环境中执行特定任务编写的指令的序列。每个指令执行特定操作,诸如加、减、移动、位移、比较、存储和装载,仅列举几个例子。处理器以序列顺序取出指令,除非特定指令引导在不同位置连续的处理。例如,代替取出下一个序列指令,分支指令可以引导处理器取出该程序中位于不同位置的指令。平均地,程序每4到5个指令就有分支。
[0003]在某些计算机微体系结构中,执行指令以在下一个指令开始之前完成。然而,在其他微体系结构中,利用管道化来增加能够同时执行的指令的数量。在管道化中,将指令的处理分割为在管道内执行的多个独立步骤,诸如取出、解码、调度、发布、执行和完成以及可能的其他步骤。当在管道中完成指令的第一步骤(例如,取出)时,然后可以开始另一个指令,
坐坐寸寸ο
[0004]管道化还促进不按程序中位置顺序地执行指令。例如,发布步骤与发布队列相关联,该发布队列按照程序顺序地接收指令。发布队列负责保持每个指令,直到该指令所需的数据(例如,操作数)可用为止,然后,其发布用于执行的指令。如果一个指令的数据在另一个指令的数据之前可用,则即使在程序中另一个指令在第一个,仍能够在另一个指令之前发出该一个指令来执行(非顺序处理)。例如,如果要执行指令A、B和C,其中A最早,而C最新,如果B取决于A,而C不取决于A或者B,则能够以A、C、B的顺序发布指令,从而以较高的速率使用管道,并且允许指令被快速地处理。
[0005]然而,非顺序处理受到可以非顺序处理指令的有限大小的非顺序窗口 /队列的制约。发布窗口通常是100个指令或者不到100个指令,并且将指令重新排回其原始顺序的重排序窗口通常是200个指令或者不到200个指令,其中100个是200个的子集。


【发明内容】

[0006]通过提供执行机器指令的计算机程序产品,克服现有技术的缺陷并且提供优点。该计算机程序产品包括计算机可读存储介质,处理电路可读该计算机可读存储介质,并且该计算机可读存储介质存储用于执行方法的处理电路的执行的指令。该方法包括例如:由处理器获得用于执行的机器指令,根据计算机体系结构,定义用于计算机执行的机器指令,该机器指令包括:至少一个操作码字段,用于规定操作码,该操作码定义分支操作;以及用于确定要分支的目标位置的至少一个字段;并且在第一处理流中执行机器指令,该执行包括:开始第二处理流,该第二处理流与第一处理流有关系;以及开始第二处理流的事务,该事务包括执行在利用机器指令的至少一个字段定义的目标位置开始的一个或者多个指令,一个或者多个指令不按第一处理流处理的一个或者多个指令的序列执行顺序,第一处理流继续到处理该机器指令后面的一个或者多个指令,并且其中推测执行第二处理流在于,即使通过处理第一处理流到达第二处理流的至少一个指令是暂定的,仍执行第二处理流的一个或者多个指令中的至少一个指令,并且其中,根据在处理中到达预定点的第一处理流,执行利用第二处理流的一个或者多个指令更新体系结构化状态。
[0007]在此还描述并且要求保护根据本发明的一个或者多个方面的方法和系统。此外,还描述并且可以要求保护根据本发明的一个或者多个方面的服务。
[0008]利用本发明的技术实现其他特征和优点。在此详细描述了本发明的其他实施例和方面,并且本发明的其他实施例和方面被认为是要求保护的发明的一部分。

【专利附图】

【附图说明】
[0009]在概括说明中,作为权利要求书中的例子,特别指出并且明确要求保护本发明的一个或者多个方面。根据下面结合附图所做的详细描述,本发明的上述以及一个或者多个方面的目的、特征和优点显而易见,其中:
[0010]图1A示出并入并且采用本发明的一个或者多个方面的计算环境的一个实施例;
[0011]图1B示出并入并且采用本发明的一个或者多个方面的计算环境的另一个实施例;
[0012]图1C示出根据本发明的方面的图1B的存储器的进一步细节;
[0013]图2A示出指令管道的现有设计的一个例子;
[0014]图2B示出根据本发明另一方面的指令管道的另一种设计的一个例子;
[0015]图3示出根据本发明一个方面,包括一个或者多个分支的程序的一部分的例子;
[0016]图4A示出根据本发明的一个方面,一般分支指令的格式的一个例子;
[0017]图4B示出根据本发明的一个方面,一般分支指令的格式的另一个例子;
[0018]图5示出根据本发明的一个方面,与处理主分支相关联的逻辑的一个例子;
[0019]图6示出根据本发明的一个方面,与利用事务存储器处理主分支相关联的逻辑的一个例子。
[0020]图7示出并入本发明的一个或者多个方面的计算机程序产品的一个实施例;
[0021]图8示出并入并且采用本发明的一个或者多个方面的主计算机系统的一个实施例;
[0022]图9示出并入并且采用本发明的一个或者多个方面的计算机系统的又一个例子;
[0023]图10示出并入并且采用本发明的一个或者多个方面的包括计算机网络的计算机系统的另一个例子;
[0024]图11示出并入并且采用本发明的一个或者多个方面的计算机系统的各种元件的一个实施例;
[0025]图12A示出并入并且采用本发明的一个或者多个方面的图11所示的计算机系统的执行单元的一个实施例;
[0026]图12B示出并入并且采用本发明的一个或者多个方面的图11所示的计算机系统的分支单元的一个实施例;
[0027]图12C示出并入并且采用本发明的一个或者多个方面的图11所示的计算机系统的装载/存储单元的一个实施例;
[0028]图13示出并入并且采用本发明的一个或者多个方面的模拟主计算机系统的一个实施例。

【具体实施方式】
[0029]以代码(例如,源代码)编写包括要执行的单独指令的程序。存在互相无关的代码段(还称为部分、区域等),然而,使这些段的开始/进入点分离得大于硬件非顺序窗口。由于根据两点之间的执行指令的数量,它们被分离得大于非顺序窗口,所以在此称为次分支的现有分支不能以实时方式到达第一段的非顺序窗口中,从而相对于根据第一段非顺序地执行第二段的指令。为了解决该问题,根据本发明的一个方面,将主分支设置为从一个代码段分支到另一个代码段,从而使得非顺序窗口比只有硬件能够看到的大(即,为了进入非顺序窗口 /队列能够跨越的代码的量较大,尽管非顺序窗口 /队列保留相同的物理尺寸(例如,支持100个指令;该100个指令来自指令的多个线程,如下所述))。
[0030]根据本发明的一个方面,假定主分支指令能够执行从一个代码段到另一个代码段的分支。这些指令在其他代码段创建新执行流或者执行线程,使得能够与从其得到分支的代码段并行地执行其他代码段。
[0031]在一个例子中,新流的执行是抽象的,在于不知道第一流的处理实际上是否将到达新流的指令(即,到达新流的第一流是暂定的)。能够执行新流的一个或者多个指令,但是处理第一流占用不同的路径并且不到达新流。
[0032]参考图1A描述并入并且采用本发明的一个或者多个方面的计算环境的一个实施例。例如,计算环境100包括:处理器102 (例如,中央处理单元);存储器104 (例如,主存储器);以及一个或者多个输入/输出(I/O)装置和/或者接口 106,其通过例如一个或者多个总线108和/或者其他连接互相耦合。
[0033]在一个例子中,处理器102是作为国际商用机器公司(IBM?), Armonk, New York提供的System z?服务器的一部分的处理器。国际商用机器公司提供的System z?服务器实现z/Arcliitecture?,该z/Architecture?规定计算机的逻辑结构和功能操作。在2010年8月份的编号为SA22-7832-08的第九版IBM?出版物中标题为“z/Architecture Principles of Operat1n”的 IBTVi? 出版物描述了 z/Architecture?帕一个实施例。在一个例子中,处理器执行操作系统,诸如也由国际商用机器公司IBM?提供的z/OS?, z/Architecture? 和z/OS?,是国际商用机器公司 Armonk, New York, USA 的注册商标。在此使用的其他名称可以是国际商用机器公司或者其他公司的注册商标、商标或者产品名称。
[0034]参考图1B描述并入并且采用本发明的一个或者多个方面的计算环境的另一个实施例。在该例子中,计算环境20包括例如通过例如一个或者多个总线128和/或者其他连接耦合在一起的:本机中央处理单元122、存储器124、以及一个或者多个输入/输出装置和/或者接口 126。作为例子,计算环境120可以包括:国际商用机器公司处理器Armonk,New
York提供的PowerPC?处理器、pSeries?.服务器或者xSeries?,服务器;惠普公司PaloAlto, California 提供的具有 Intel Itanium 11? 处理器的 HP Superdome ;以及 / 或者基于由IBM, Hewlett Packard, Intel, Sun Microsystems等提供的体系结构的其他机器。PowerPC?、pSeries?:和xSeries? 是国际商用机器公司处理器 Armonk, New York, USA
的注册商标。Intel?he Itanium II?,是英特尔公司,Santa Clara, California的注册商标。
[0035]本机中央处理单元122包括一个或者多个本机寄存器130,诸如在该环境下的处理期间采用的一个或者多个通用寄存器和/或者一个或者多个专用寄存器。这些寄存器包括表示在任何特定时点的环境状态。
[0036]此外,本机中央处理单元122执行存储在存储器124内的指令和代码。在一个特定例子中,中央处理单元执行存储在存储器124中的模拟代码132。该代码使得在一个体系结构中配置的计算环境模拟另一个体系结构。例如,模拟代码132使基于z/Arch.1.tecture?-
之外的体系结构的机器,诸如PowerPC?处理器、pSeries?服务器、xSeries?,服务器、
HP Superdome服务器等模拟z/'Architecture?并且执行基于z/Architecture?开发的软件和指令。
[0037]将参考图1C描述关于模拟代码132的更多详情。来宾指令150包括为了在本机CPU 122之外的体系结构中执行而开发的软件指令(例如,机器指令)。例如,已经设计来宾指令150来在z/Architecture处理器102上执行,但是在本机CPU 122上模拟(例如,
imel? Itanium II?处理器)。在一个例子中,模拟代码132包括指令取出单元152,该指令取出单元152从存储器124获取一个或者多个来宾指令150,并且任选地对获得的指令提供本地高速缓存。模拟代码132还包括指令翻译例程154,以确定已经获得的来宾指令的类型,并且将来宾指令翻译为一个或者多个相应本地指令156。该翻译包括例如识别来宾指令要执行的功能以及选择执行该功能的本机指令。
[0038]此外,模拟器132包括模拟控制例程160,以使得执行本机指令。模拟控制例程160可以使本机CPU 122执行模拟一个或者多个先前获得的来宾指令的本机指令的例程,并且在该执行结束时,使控制返回指令取出例程来模拟获得下一个来宾指令或者一组来宾指令。执行本机指令156可以包括将数据从存储器124装载到寄存器中;将数据从寄存器存回存储器;或者执行由翻译例程确定的某些类型的算术或者逻辑操作。
[0039]每个例程例如都以存储在存储器中并且由本机中央处理单元122执行的软件实现。在其他例子中,以固件、硬件、软件或者其某些组合实现一个或者多个例程或者操作。可以利用本机CPU的寄存器130,也可以利用存储器124内的位置模拟该模拟处理器的寄存器。在实施例中,来宾指令150、本机指令156以及模拟代码132可以驻留在同一个存储器中,或者在不同存储装置之间分配。
[0040]在此使用的固件包括例如处理器的微代码、毫码和/或者宏码。其包括例如在实现较高级机器代码时使用的硬件级指令和/或者数据结构。在一个实施例中,其包括例如典型地作为微代码传送的私有代码(proprietary code),该私有代码包括可信软件或者对基础硬件专用的微代码,并且控制操作系统访问系统硬件。
[0041]在一个例子中,获得、翻译和执行的来宾指令150是在此描述的分支指令。从存储器取出作为z/Architecture?.指令的指令,翻译并且表示为执行的本机指令156的序列(例如,PowerPC?、pSeries?、xSeries?, Intel?等)
[0042]在另一个实施例中,在另一个体系结构环境中执行一个或者多个指令,该另一个体系结构环境包括例如在〃 Intel? 64and IA_32Architectures SoftwareDeveloper’s Manual Volume 1,"Order N0.253665-022US, 2006 年 11 月.:' Intel?64and IA_32Architecture Software Developer’s Manual Volume 2A,"OrderN0.253666-022US,2006 年 11 月;the〃 Intel? Itanium? Architecture SoftwareDeveloper's Manual Volume I, "Doc.N0.245317-005,2006 年 I 月;the〃 Intel?Itanium? Architecture Software Developer’s Manual Volume 2,〃Doc.N0.245318-005, 2006 年 I 月;和 / 或者 the" Intel? Itanium? Architecture SoftwareDeveloper's Manual Volume 3, "Doc.N0.245319-005,2006 年 I 月中描述的体系结构。
[0043]在一个实施例中,处理器可以以同步多线程(SMT)模式或者单线程模式执行。在同步多线程模式中,处理器能够同时执行多个独立执行的线程。如下面的详细描述中所述,可以利用线程执行计算机程序的一个或者多个指令。
[0044]如上所述,为了处理计算机程序的指令,采用指令管道,将参考图2A — 2B描述其例子。参考图2A,在现有设计中,以顺序200执行每个指令的如下步骤:指令取出(1-Fektch)、指令解码、分组(例如,对于如何通过管道跟踪指令对指令分组)、以及指令调度。即,如果指令A首先在程序中,然后是指令B,则在指令B的那些步骤之前执行指令A的取出、解码、分组以及调度。然而,可以在完成指令A的步骤之前开始指令B的步骤;例如,在完成取出指令A后,但是在完成解码指令A之前,就可以开始取出指令B。这些步骤中的每一个也可以并行地关于多于一个单一指令工作。
[0045]然而,可以以非顺序202执行指令发布、指令执行以及重新排序的步骤。例如,可以在未完成的指令A之前执行指令B。再以非顺序204执行指令的完成(例如,校验点化(checkpointing)),使得例如指令A在指令B之前完成。强迫顺序完成的一个原因是允许精确异常检测并且报告相对于体系结构行为非法的指令。
[0046]根据本发明的一个方面,提供了另一种设计的指令管道,在该指令管道中,能够非顺序地执行多个处理。例如,如图2B所示,在以顺序252执行完成步骤的同时,能够以非顺序250执行指令取出、解码、分组、调度、发布、执行和重新排序。例如,在主分支指令的处理中采用该设计,如在此所述。(尽管在此描述了各种指令步骤,但是在其他例子中可以采用更多、更少或者不同的步骤。)
[0047]在此称为次分支的一种分支定义要执行的程序中的下一个指令。该下一个指令不是程序的序列顺序的下一个指令,而仍是当前正在执行的操作流的一部分(例如,线程)。与次分支相反的是根据本发明的一个方面提供的被称为主分支的另一种分支。主分支定义代码点(目标地址),该代码点不是序列程序顺序中的下一个并且不是当前正在执行的处理流的一部分,相反地,该代码点将作为新处理流(线程)的一部分被执行。将参考图3进一步描述这种分支。
[0048]参考图3,示出了计算机程序300 (或者其一部分)的一个例子,计算机程序300的一个例子包括多个指令。计算机程序的第一指令是指令A 302。以指令A开始处理并且以序列顺序进行到指令B 304、指令C 306以及指令D310。在该例子中,指令D是对目标Y 340的主分支开启指令。执行主分支开启指令,以使第二流(在此称为子流)开始/开启(例如,激活SMT处理器上的,在此被称为子线程的第二线程)。第一流(在此称为父流)继续处理指令E 312、指令F 314以及指令G 320。指令G分支到目标X 322,在目标X322,处理指令M 324,之后处理指令N 326和O 328。作为第一流的一部分,处理这些指令,由于处于指令G的分支是次分支,并且不使得开始/开启处理另一个流。
[0049]根据本发明的一方面,处理主分支OPEN之后的父流(即,一个或者多个指令E、F、G、M、N和O)与处理子流(即,一个或者多个指令T 342、U344和V 346)并行。
[0050]在该例子中,指令O是主分支关闭指令,该主分支关闭指令分支到目标Y 340。该关闭指令意味着父线程已经追上主分支OPEN的目标地址。此时,子线程变成父线程,并且对父线程分配的线程资源可用于进一步处理(例如,作为另一个子线程)。
[0051]可用线程的数量取决于处理器的体系结构。例如,对于SMT-2处理器,有两个线程可用,并且因此,能够开始一个子(亦成为:支持)线程。对于SMT-4处理器,有四个线程可用,并且因此,能够开始三个子线程,以允许进一步的非顺序处理。
[0052]在一个实施例中,直到完成父线程的指令为止,不完成子线程的指令,因为在在此描述的典型管道设计中,指令将顺序完成。在父线程校验点的指令(例如,保存其状态,诸如体系结构化状态)时,子线程变成父线程,并且现在,允许定义为父线程的线程中的指令作为校验点。
[0053]根据本发明的一方面,能够将指令集体系结构的任意现有或者新分支指令定义为主分支指令和次分支指令,或者代替地次分支指令。例如,许多体系结构当前具有执行各种分支操作的许多分支指令。能够作为主分支(OPEN/CLOSE)和/或者次分支指令实现这些分支指令中的每一个(或者其子集)。为此,分支指令的操作码或者其它字段将分支指令的类型或者定义为主分支(例如,主分支开启或者主分支关闭),或者定义为次分支。
[0054]例如,分支指令可以具有三个不同操作码中的一个:次分支操作码、主分支开启操作码或者主分支关闭操作码。尽管三种分支指令具有不同的操作码,但是指令的格式相同,分支操作亦如此。差别在于如何处理指令。例如,其管道处理不同,其目标地址可以不同,并且其在作为初始线程或者另一个线程的一部分之前的处理取决于分支指令的类型。
[0055]在又一个例子中,代替不同的操作码,将指出分支指令的类型的字段添加到指令中(例如,独立于该指令的其他字段的字段,或者对现有字段中的诸如操作码字段或者另一个字段的字段附加的字段)。例如,在一个特定例子中,可以采用具有如下意义的2位字段:
[0056]00 一次分支;原有指令行为
[0057]01 —未使用
[0058]10 —主分支关闭
[0059]11 一主分支开启
[0060]图4A — 4B示出通用分支指令的格式的实施例。如图4A所示,分支指令400包括:至少一个操作码字段402,包括指出特定分支指令和分支指令的类型(主开启、主关闭、次)的操作码;以及目标地址字段404,用于确定分支指令要跳转到的位置。
[0061]在又一个例子中,分支指令420(图4B)包括:至少一个操作码字段422,包括指出特定分支指令的操作码;格式字段424,指定分支指令的类型(例如,主开启、主关闭、次);以及目标地址字段426。格式字段424可以是独立字段,也可以是另一个字段的一部分,诸如操作码。
[0062]目标地址字段404、426可以是一个或者多个用于确定目标位置的字段。例如,其可以是指定寄存器的寄存器字段,其内容规定目标位置的地址;其可以是两个字段,诸如基本寄存器字段和位移字段,将基本寄存器字段中指定寄存器的内容附加到位移字段的内容,以获得目标位置的地址;或者用于指定目标位置的用字段、寄存器等的任何其他组合。
[0063]此外,无论其是主分支或者次分支,每个单独分支指令都可以包括一个或者多个字段来执行特定分支操作。如上所述,可以有许多分支指令,在上面引用的操作原理中描述了其例子。对于操作原理中的这些分支指令,使用特定格式的分支指令,但是根据本发明的一个方面,操作码或者添加到格式或者附加到指令的现有字段的另一个字段指出分支指令的类型,例如,次、主开启、主关闭。
[0064]参考图5描述关于主分支指令的处理的更多详情。对于SMT处理器内的每个线程(例如,核心),处理器执行该处理(例如,在各管道阶段期间)。
[0065]首先,参考图5,取出并且解码指令,并且关于该指令是否是主分支开启指令进行查询,INQUIRY 500。如果指令的操作码或者其他字段指出其不是主分支开启指令,则处理继续到一个或者多个其他管道阶段。
[0066]在另一个管道阶段,确定主分支关闭指令是否处于校验点(即,完成步骤),INQUIRY 502。如果未处于校验点,则处理继续到一个或者多个管道阶段,并且在该处理期间,还查询是否经受了不希望的管道改向(例如,分支错误、操作系统任务对换),INQUIRY504。如果未经受,则在每个管道阶段处理一个或多个指令,然后,进行到下一个阶段,步骤506。处理继续到下一个指令。
[0067]返回到INQUIRY 500,如果其是主分支开启指令,则第二流(例如,子线程)被表示为开始/活动,步骤510。在一个例子中,这包括跟踪(例如,利用计数器)正在使用预定义数量的线程中的另一个线程。此外,在该分支的目标开始第二流(例如,子的SMT线程)。在一个例子中,这包括设定指针或者其他指示来使用子线程,并且在一个例子中,开始对子线程继续指令取出和分支预测。由于在一个例子中,该流或者线程是父的子,所以由子参考父的体系结构化状态。如果子改变体系结构化状态,则该更新的状态仅与子相关联。然后,处理在一个或者多个管道阶段继续。
[0068]参考INQUIRY 502,如果其是已经到达校验点的主分支关闭指令,则允许第二流(例如,子线程)作为一个或者多个其流已经完成的指令的校验点,步骤520。释放父流(例如,父SMT携程),使得其资源由另一个流或者线程使用,步骤522。子流变成父流(例如,通过设置作为父的指针或者其他指示),在父流中,处理继续,其中处理子线程。可以认为子已经完成,步骤524。然后,处理在一个或者多个管道阶段继续。
[0069]返回INQUIRY 504,如果父流(例如,线程)遇到分支错误或者操作系统干预,则父流终止并且失效,步骤528。在一个例子中,假定线程可用,则通过主分支开启指令,每个子流都能够开始另一个子流。因此,如果有多个子流,则每个子流终止并且失效。做出没有活动子线程的指示,步骤530,并且在步骤506,该处理继续。这样,现在,子流执行的或者要执行的任何指令都由父流处理。此外,在遇到相关联的主关闭指令时,因为已经采取关闭操作,所以其可以被忽略。(在又一个实施例中,如果有多个子流,并且这些子流中的一个子流遇到分支错误,则仅一个或者多个较新的子流被终止。)
[0070]在本发明的又一个方面中,当采用主分支开启指令以分支到目标地址时,位于目标地址的指令可以处理为在事务中执行,该指令的结果被看作一个原子单位(即,全部交付或未交付)。在一个实施例中,主分支开启指令不仅使新流或者线程开始,而且通过事务存储器使事务开始。事务存储器提供说明给定的代码块是事务的方式。事务允许程序将完成时的指令作为校验点;然而,在事务开始时,记录机器的状态,使得如果事务未完成,则机器/处理器/管道可以恢复为事务的进入点。在事务结束时,将所有存储交付给存储器。这样使得整个系统的状态能够恢复为事务开始时的状态。在事务中,可以一起交付任何变化。如果事务被异常终止,则处理器返回事务开始之前的状态。通过将新子流定义为事务,允许子流与父流并行地执行体系结构校验点,然而,直到子变成父为止,子事务不结束(TEND)。如果子流遇到分支错误,则作为事务的子流终止,并且机器的状态返回(事务存储器的定义所定义的),如同在子流中没有发生动作。
[0071]在一个实施例中,关于检测主分支开启,为了使管道确定事务将通过事物存储器开始,修改体系结构。作为例子,设置以事务指出分支主开启的操作码(例如,图4A中的402),或者作为操作码字段或者另一个字段的一部分或者独立于其的格式字段424包括指示以事务开始主分支开启的代码。
[0072]在另一个实施例中,主分支开启指令的事务的开始与体系结构无关,并且代替地,在硬件管道的控制下。当指令未做规定时,开始相对于主分支开启的事务的硬件控制可以通过事物存储器使主分支开启作为事务开始。例如,如果硬件支持嵌套事务,则在检测到主分支开启指令时,与主分支开启指令格式是否规定要开始事务无关,可以开始,如由硬件指向的。此外,硬件可以允许处理主分支开启,但是即使体系结构化的指令格式这样规定,仍拒绝作为事务开始主分支开启。例如,如果在机器中用于处理事务的资源在低速运行,则在主分支开启指令格式表明开始事务时,可以防止事务开始,从而使得剩余事务资源可用于已经在进行中的任何事务。还存在其他例子。
[0073]此外,对于主分支关闭指令,在一个实施例中发生下面的动作:使父流从作为活动流退出;子流变成父流;以及如果主分支开启开始事务,则什么是子流不再是事务存储状态,并且返回到典型处理器处理状态(事务结束)。这样,校验点内容不再回到先前体系结构校验点状态。
[0074]参考图6描述利用事物存储器使处理与分支指令相关联的一个实施例。此外,对于SMT处理器中的每个线程并且利用处理分支指令的处理器的逻辑执行该处理。
[0075]参考图6,确定主分支开启指令是否正在被解码,INQUIRY 600。如果指令的操作码或者其他字段指出主分支开启指令没有正在被解码,则处理继续到一个或者多个其他管道阶段。
[0076]在另一个管道阶段,确定主分支关闭指令是否处于校验点,INQUIRY602。如果主分支关闭指令未处于校验点,则处理继续到一个或者多个其他管道阶段。
[0077]进一步确定是否发生了不希望的管道改向,INQUIRY 604。如果没有发生,则在每个管道阶段,处理指令(各指令),然后,进行到下一个阶段,步骤606。处理进入下一个指令,步骤600。
[0078]返回INQUIRY 600,如果主分支开启指令正在被解码,则意味着另一个流(例如,子线程)正在开始/活动,步骤610,并且在分支目标,开始另一个流(例如,线程),步骤612。此外,根据本发明的一个方面,确定事务是否要开始,INQUIRY 613。作为一个例子,利用指令的字段(或者是现有字段或者是新字段)指出事务是否要开始。作为另一个例子,通过跳过该指令或者根据具有这种指出事务要开始的字段的指令,处理器的硬件进行该确定。如果事务要开始,则新流开始事务(TBEGIN),步骤614。为了开始事务,保持或者取得机器当前状态的快照,使得如果事务被异常终止,则能够使机器的状态恢复到事务开始时的点。此后,或者如果事务未开始,则处理继续到一个或者多个其他管道阶段。
[0079]返回INQUIRY 602,如果逻辑确定主分支关闭指令处于校验点,则确定事务是否开始,INQUIRY 616。如果事务已开始,则子流事务结束(TEND),步骤618。此外,更新机器的体系结构化状态,以反映子的事务工作,步骤620。父流(例如,SMT线程)被释放,并且不再活动,步骤622。使子流成为父流,并且请注意,子流不再活动,步骤624。然后,处理在管道中继续。
[0080]返回INQUIRY 616,如果事务未开始,则可以使任何完成子指令作为校验点,步骤621,并且处理继续到步骤622。
[0081]返回INQUIRY 604,如果遇到不希望的管道改向,则确定是否开始事务,INQUIRY626。如果开始事务,则子流的事务异常终止(TABORT),步骤630。此后,或者如果事务未开始,则子流被释放并且失效,步骤632,并且请注意,子不再活动,步骤634。在一个实施例中,一个以上的子流可以在进行中。如果在父发生改向,则与父相关联的所有子流都结束,包括异常终止事务。如果改向发生在子流,则任何较新子流都结束,包括异常终止事务。此夕卜,如果子流发生中断或者例外,则子流暂停处理,并且在变成父流时重新开始处理。处理继续到步骤606。
[0082]在事物存储器中开始(各)子流使得(各)子流进一步靠前开始运行。子流不再为了防止父线程挂起而必须保留管道化资源。此外,子流能够使指令从容量有限、通常最多支持约200个指令的非顺序完成表退出。在一个实施例中,子流仍对能够作为事务执行的完成量有某些限制,对于资源,要求保持在完成事务时要交付的所有存储数据。对于例如频率、等待时间、容量和/或者f 10rplan布局,与用于非顺序窗口的资源相比,保持事务完成之前的存储的硬件受限少得多。
[0083]上面描述了分支机制,该分支机制使得程序的一个代码段与同一程序的至少一个其他代码段同时处理。在一个例子中,提供在所取得的通道中开始并行线程(例如,子线程)的分支指令,但是在非所取得的路径中保持执行(例如父线程)。父线程包括用于结束线程的或者连结另一个线程的指令。在一个实施例中,直到父线程在处理中到达诸如主分支关闭指令的规定点为止,子线程不更新体系结构化状态(即,其他应用程序、线程等可见的状态)。此外,在一个实施例中,所取得的路径的线程开始事务存储器事务。
[0084]使用主分支允许非顺序地解码/调度指令,从而对要执行的指令提供较大的非顺序窗口。如果没有主分支0PEN/CL0SE,则顺序解码并且调度指令,但是可以非顺序地发布,而顺序地完成。
[0085]在一个实施例中,子流的处理量限于处理器中可用的非顺序资源。正在使用非顺序资源的子流不占用所有资源,从而创建挂起状况,使得父不能获得前进进度所需的资源。然而,如果子流采用事务处理,则避免该限制。
[0086]在一个实施例中,如果遇到主分支OPEN并且所有线程用于跨越子路径,则不执行主分支OPEN。这意味着,在遇到成对主分支CLOSE时,也不执行。通过不在CLOSE执行,不发生父到子的线程切换。
[0087]在一个例子中,包括重新开始I取出取出流的父流的重新开始终止子流的处理及其任何子等。子流中的重新开始终止其子和任何较新的子,但是不终止父。
[0088]定义处理器管道的硬件(例如,晶体管)由许多队列构成。该队列的容量有限,并且该队列包括但是并不限于:高速缓冲行地址、要解码的指令(后指令取出)、要调度的指令、从调度到体系结构校验点的指令、通用寄存器、分支队列和存储队列。在不做事务处理的情况下,即使在非顺序处理器中,处理器仍可以要求这些队列中的子集或者全部以顺序方式清空。在已经完成父流之前,可以不清空子流要求的这些资源(例如,队列)。如果子流占用太多资源,则父可能没有足够的资源可用于执行由体系结构定义的并且由软件程序定序的结构的操作。这防止发生这样的挂起状况,即,使得子不可以将资源用于没有父为了进行前进进度而对父可用的足够资源的点。对于能够限制其资源使用的子,知道有多少资源供其使用。该量的资源可以是硬件中的硬接线,或者父线程能够将有多少资源可供使用通知子。父可以传送可供子使用的不足资源量,使得在子不挂起父时,子不使用多到使父的前进进度速率滑落的资源。
[0089]在又一个实施例中,允许以在例如SMT-2环境下继续执行两个独立线程的方式继续向下执行分支预测。可以利用分支预测来预测是否要取得分支并且/或者预测该分支的目标位置。
[0090]所属【技术领域】的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0091]可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0092]现在参考图7,在一个例子中,计算机程序产品700包括,例如,一个或多个非暂时性计算机可读存储介质702,在其上存储有计算机可读的程序代码装置或逻辑704,以提供并方便本发明的一个或多个方面。
[0093]体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
[0094]可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0095]本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0096]也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruct1nmeans)的制造品(manufacture)。
[0097]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0098]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0099]除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,月艮务提供商可从向一个或多个第三方销售广告内容接受付费。
[0100]在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
[0101]作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
[0102]作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
[0103]虽然上面描述了各种实施例,其仅是示例。例如,其它计算环境可以并入和使用本发明的一个或多个方面。例如,计算环境可包括具有多个处理器的中心处理器联合体。该中心处理器联合体可以或者可以不逻辑地分区。另外,其它体系结构的计算环境可以并入或使用本发明的一个或多个方面。另外,在描述主分支开启和关闭时,它们可以以不同名称命名或者可以提供另外的主分支类型。在不脱离本发明的精神的情况下可以做出很多改变和/或添加。
[0104]而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
[0105]输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、⑶、DVD、拇指驱动器(thumb drive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其他的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
[0106]下面描述可以并入和使用本发明的一个或多个方面的计算环境的其它示例。
[0107]参考图8,其描述了实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即,中央存储器)5002通信的一个或多个CPU 5001,以及到存储介质设备5011和网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU5001符合具有架构指令集和架构功能的架构。CPU5001可具有动态地址转换(DAT) 5003,其用于将程序地址(虚拟地址)转变为存储器的真实地址。DAT典型地包括用于高速缓存转换的转换后备缓冲器(TLB) 5007,这样稍后对计算机存储器5002块的访问不需要地址转换的延迟。典型地,高速缓存5009被使用在计算机存储器5002和处理器5001之间。高速缓存5009可以是分层的,具有可被多于一个的CPU获得的大高速缓存,以及大高速缓存和每个CPU之间的较小、较快(较低级)的高速缓存。在一些实施方式中,较低级的高速缓存被拆分以为指令获取和数据访问提供单独的低级高速缓存。在一个实施例中,由指令获取单元5004经由高速缓存5009从存储器5002获取指令。指令在指令解码单元5006中被解码,且(在一些实施例中与其他指令一起)被发送到一个或多个指令执行单元5008。典型地,使用若干执行单元5008,例如算术执行单元、浮点执行单元和分支指令执行单元。指令被执行单元执行,如需要,从指令指定的寄存器或存储器访问操作数。如果将从存储器5002访问(加载或存储)操作数,加载/存储单元5005典型地在被执行的指令的控制下处理该访问。指令可在硬件电路或内部微代码(固件)中或其组合中被执行。
[0108]需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括永久分配的存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
[0109]主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
[0110]可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数界限上。模型可提供EXTRACT CACHE ATTRIBUTE (提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA (预取数据)和PREFETCH DATA RELATIVE LONG (预取较长数据)指令,其实现存储到数据或指令高速缓存中的预取,或数据从高速缓存的释放。
[0111]存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左边从O开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
[0112]信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间传递。除非另有指定,例如在z/Architecture?中,存储器中的一组字节由该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的每个组内,例如在z/Architecture铉中,位以从左到右的顺序被编号。在z/Architecture?中,最左边的位有时候被称为“高阶”位且最右边的位被称为“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号为O到7(例如在z/Architecture?中)。对于24位地址,地址中的位被编号为8-31或40-63,对于31位地址,编号为1_31或33-63,对于64位地址,编号为0-63。在多个字节的任何其他的固定长度的格式中,构成格式的位从O开始被连续编号。为了错误检测,且优选地为了校正,一个或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时,该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被放在存储器中时,仅替换被包括在指定的字段中的那些字节位置的内容,即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。
[0113]某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特殊的名称被给予整数界限上的2、
4、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
[0114]在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
[0115]在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合本发明)实施。参考图8,体现本发明的软件程序代码可典型地由主系统5000的处理器5001从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或⑶-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这样的其他系统的用户使用。
[0116]软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上体现软件程序代码和/或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执行。
[0117]图9示出了可在其中实施本发明的代表性工作站或服务器硬件系统。图9的系统5020包括代表性基本计算机系统(base computer system) 5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连接并使能处理器5026和系统5021的其他组件之间的通信的总线。总线将处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括磁介质、⑶、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化输入垫(digitized entry pad)等。总线也可经由显示适配器将诸如IXD屏幕或监视器的显示设备5022连接到微处理器5026。
[0118]系统5021可通过能与网络5029通信5028的网络适配器与其他计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如⑶ro (蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
[0119]图10示出了其中可实施本发明的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
[0120]仍然参考图10,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个联网协议连接到另一个时,需要网关。网关5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、
5044。可以利用可从国际商业机器公司获得的IBM eServerTMSystem ζβ服务器来实现网关计算机。
[0121]同时参考图9和10,可体现本发明的软件编程代码可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。
[0122]或者,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘化0)、0¥0、磁带等)上存储时,通常被称为“计算机程序产品” 。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
[0123]最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快更小)是最低级(LI或级别I)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保持将被执行的机器指令的指令缓存(1-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
[0124]参考图11,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5 (L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
[0125]程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。z/Architecture?处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前的寻址界限。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC (精简指令集计算)指令典型地是固定长度,而CISC (复杂指令集计算)指令典型地是可变长度。IBMz/Architecture?的指令是具有长度为2、4或6字节的CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序内循环。
[0126]典型地,使用指令获取单元5055代表处理器5026获取指令。获取单元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。
[0127]获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机器硬件(诸如控制寄存器、PSW寄存器等)中。
[0128]处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图12A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元5056、加载存储单元5060和其他5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU) 5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如和、或以及异或(XOR)、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专门操作。其他电路可提供其他架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
[0129]例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行,而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
[0130]执行单元5027关于两个操作数执行算术加法并在第三操作数中存储结果,该第三操作数可以是第三寄存器或者两个源寄存器之一。执行单元优选地利用算术逻辑单元(ALU) 5066,其能够执行多种逻辑功能,比如移位、旋转、与、或和异或(XOR)以及多种代数功能,包括加法、减法、乘法和除法中的任意。一些ALU 5066指定用于标量操作且一些用于浮点。数据取决于体系结构可以是Big Endian(其中最不重要字节在最高字节地址)或者Little Endian(其中最不重要字节在最低字节地址)。IBM z/Architectureβ是BigEndian。有符号字段取决于体系结构可以是符号和大小,I的补数或者2的补数。2的补充数有益地在于ALU不需要设计减法性能,因为2的补数的正值或者负值仅需要ALU内的加法。在速记中公共地描述各个数,例如,其中12位字段定义4,096字节块的地址且公共地描述为4K字节(千字节)块。
[0131]参考图12B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路5073通信。
[0132]一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/o中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
[0133]处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由z/Architectureβ长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。除非另外指明,此处的位置典型地意味着主存储器(主存储设备)中的位置。
[0134]参考图12C,处理器使用加载/存储单元5060访问存储器。加载/存储单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执行存储操作。加载/存储单元5060可以是推测性的,且可以以相对于指令顺序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/分派单元5056、高速缓存/存储器接口 5053或其他元件5083通信,且包括各种寄存器电路、ALU5085和控制逻辑5090以计算存储器地址并提供流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本领域所熟知的。
[0135]优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和一个页表(单独地或组合地),优选地,段表具有指向页表的项。在z/Architecture较中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段表和可选的页表。地址转换的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用)的多个替换算法来管理。
[0136]在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/o、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
[0137]I/O单元5054(图11)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/o单元通常由软件驱动器向计算机程序呈现。在诸如来自
IBMB的System z?的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/o单元。
[0138]而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
[0139]在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
[0140]更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在z/Architecture?IBM?服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的ΙΒΜβ大型计算机服务器以及IBM?的其他机器(例如,Power Systems服务器和System X?服务器)中被仿真。它们可在使用由IBMIntel?、AMDTM等制造的硬件的各种机器上运行Linux的机器中被执行。除了Yl: z/Architectureβ下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules、UMX或FSI (Fundamental Software, Inc)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。
[0141]本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
[0142]解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人员在理解优选实施例的描述后将理解的。包括但不限于 Beausoleil 等人的标题为 “Multiprocessor for Hardware Emulat1n” 的美国专利证书号 5,551,013 ;以及 Scalzi 等人的标题为 “Preprocessing of Stored TargetRoutines for Emulating Incompatible Instruct1ns on a Target Processor,,的美国专利证书号 6,009,261 ;以及 Davidian 等人的标题为 “Decoding Guest Instruct1n toDirectly Access Emulat1n Routines that Emulate the Guest Instruct1ns,,的美国专利证书号,5,574,873 ;以及Gorishek等人的标题为“Symmetrical Multiprocessing Busand Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem”的美国专利证书号6,308, 255 ;以及Lethin等人的标题为“Dynamic OptimizingObject Code Translator for Architecture Emulat1n and Dynamic Optimizing ObjectCode Translat1n Method”的美国专利证书号6,463,582,;以及Eric Traut的标题为“Method for Emulating Guest Instruct1ns on a Host Computer Through DynamicRecompilat1n of Host Instruct1ns”的美国专利证书号5,790,825 ;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
[0143]在图13中,提供了仿真主计算机系统5092的例子,其仿真主架构的主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU) 5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架构指令集的本机指令(即来自仿真程序处理器5097的本机指令),且可通过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令执行例程。被定义用于主计算机系统5000’架构的其他工具可被架构工具例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在仿真处理器5093中可获得的功能(诸如通用寄存器和虚拟地址的动态转换)以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093来仿真主计算机5000’的功能。
[0144]在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
[0145]所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
【权利要求】
1.一种执行机器指令的方法,包括步骤: 由处理器获得用于执行的机器指令,根据计算机体系结构定义机器指令以用于计算机执行,所述机器指令包括: 至少一个操作码字段,用于规定操作码,所述操作码定义分支操作;以及 用于确定要分支的目标位置的至少一个字段;和 在第一处理流中执行机器指令,所述执行包括: 开始第二处理流,所述第二处理流与第一处理流有关系,并且执行在利用机器指令的至少一个字段定义的目标位置开始的一个或者多个指令,所述一个或者多个指令不按由第一处理流处理的一个或者多个指令的序列执行顺序,所述第一处理流继续以处理所述机器指令后面的一个或者多个指令;和 其中,推测第二处理流的执行在于,即使通过第一处理流的处理到达第二处理流的至少一个指令是暂定的,仍执行第二处理流的一个或者多个指令中的至少一个指令,并且其中,根据在处理中到达预定义点的第一处理流执行通过第二处理流的一个或者多个指令的体系结构化状态的更新。
2.根据权利要求1所述的方法,其中,至少部分地与第一处理流中处理的一个或者多个指令并行地处理在第二处理流中执行的一个或者多个指令的至少一个指令。
3.根据权利要求1所述的方法,其中,在第一处理流到达具有第二处理流的指令的目标位置的指令后,释放第一处理流。
4.根据权利要求1所述的方法,其中,第一处理流到达的指令包括主分支关闭指令。
5.根据权利要求4所述的方法,还包括: 基于处理主分支关闭指令,如果有,则将第二处理流的一个或者多个完成指令作为校验点;以及 使第二处理流为新的第一处理流。
6.根据权利要求1所述的方法,其中,所述第二处理流包括同步多线程处理器中的子线程,并且所述第一处理流包括同步多线程处理器中的父线程。
7.根据权利要求1所述的方法,其中,所述机器指令包括主分支开启指令,并且其中所述机器指令包括用于指出机器指令是主分支开启指令的分支类型字段。
8.根据权利要求7所述的方法,其中,所述分支类型字段是以下中的一个:操作码;操作码的一部分;或者独立于操作码的字段。
9.根据权利要求1所述的方法,其中,相对于第一处理流的至少一个指令不按顺序解码和调度第二处理流的一个或者多个指令中的至少一个指令。
10.根据权利要求9所述的方法,其中,也不按顺序执行所述至少一个指令,但是按顺序完成所述至少一个指令。
11.根据权利要求1所述的方法,还包括由第二处理流根据在第二处理流中主分支开启指令的执行而开始第三处理流。
12.根据权利要求1所述的方法,还包括重新开始第一处理流,其中,所述重新开始终止第二处理流。
13.根据权利要求1所述的方法,还包括由第二处理流控制资源的使用,以防止第二处理流妨碍第一处理流的前进进度。
14.根据权利要求1所述的方法,其中,开始第二处理流包括开始第二处理流的事务的事务执行以及开始包括在目标位置开始的一个或者多个指令的执行的事务,并且其中开始事务包括取得处理器的当前状态的快照。
15.根据权利要求14所述的方法,还包括: 根据机器指令的字段确定是否要开始事务;以及 其中根据确定指出要开始指令来开始所述事务。
16.根据权利要求14所述的方法,还包括: 由硬件确定是否要开始事务,并且 其中,根据确定指出要开始指令来开始所述事务。
17.根据权利要求16所述的方法,其中,由硬件确定超越指出是否要开始事务的机器指令子段。
18.根据权利要求14所述的方法,其中在,到达具有第二处理流的指令的目标地址的指令的第一处理流之后,释放第一处理流,第一处理流到达的指令是主分支关闭指令,并且其中所述方法还包括: 根据对主分支关闭指令的处理,结束第二处理流的事务并且更新状态以反映所述事务;以及 使第二处理流为新的第一处理流。
19.一种包括适于执行根据上述任何一个方法权利要求所述方法的所有步骤的装置的系统。
20.—种包括当在计算机系统上执行所述计算机程序时,用于执行根据上述任何一个方法权利要求所述方法的所有步骤的指令的计算机程序。
【文档编号】G06F9/38GK104081343SQ201380007502
【公开日】2014年10月1日 申请日期:2013年1月23日 优先权日:2012年1月31日
【发明者】B.R.普拉斯基, C.A.克莱格夫斯基, 岑中龙, F.Y.布萨巴, S.卡洛 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1