控制线程在多线程处理器中的执行转让专利

申请号 : CN201580058127.1

文献号 : CN107111482A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : T·什莱格尔K·J·亚历山大F·Y·布萨巴M·法雷尔J·G·小雷尔

申请人 : 国际商业机器公司

摘要 :

控制线程在处理器核心中的执行。所述处理器核心支持同步多线程(SMT)以使得可有效存在在同一物理处理器硬件上同步操作的多个逻辑中央处理单元(CPU)。将这些逻辑CPU中的每一者视为一个线程。在此类多线程环境中,可能需要一个线程来阻止所述处理器核心上的其他线程执行。此情形可以是响应于运行一关键序列或另一序列,所述关键序列或另一序列需要处理器核心资源或正在以其他线程可能干扰其执行的方式操纵处理器核心资源。

权利要求 :

1.一种控制线程在计算环境中的执行的方法,所述方法包括:由在所述计算环境的处理器中运行的线程停止在所述处理器内执行的另一线程的执行,所述停止使用所述处理器的一个或多个共享寄存器中的一个或多个控件,所述一个或多个共享寄存器由所述线程及所述另一线程共享;及基于停止所述另一线程的执行而由所述线程执行一个或多个操作。

2.如权利要求1所述的方法,其中停止所述另一线程的执行包括:获得所述另一线程的状态信息;及

基于所述状态信息判定所述另一线程的执行是否被停止,其中基于指示所述另一线程的执行被停止的判定来执行所述一个或多个操作。

3.如权利要求1所述的方法,其中停止所述另一线程的执行包括:判定所述另一线程是否禁止被停止;

基于指示所述另一线程未禁止被停止的判定,停止所述另一线程上的指令取回及执行;及检查所述另一线程的状态以判定所述另一线程的执行是否已停止,其中执行所述一个或多个操作是基于指示所述另一线程的执行已停止的检查。

4.如权利要求3所述的方法,其中检查所述另一线程的状态包括使用清空指令,所述清空指令被配置为保持所述线程上的指令分派及所述另一线程的查询状态,且其中所述清空指令指定在执行所述一个或多个操作之前待满足的一个或多个条件,且其中基于所述清空指令的指示满足所述一个或多个条件的结果,所述执行所述一个或多个操作被执行。

5.如权利要求3所述的方法,还包括:

基于指示所述另一线程的执行已停止的检查而重新判定所述另一线程是否禁止被停止;

基于指示所述另一线程禁止被停止的重新判定而允许在所述另一线程上的执行;及基于指示所述另一线程未禁止被停止的重新判定而执行所述一个或多个操作。

6.一种系统,其包括适于执行如任一先前方法权利要求所述的方法的所有步骤的部件。

7.一种包括指令的计算机程序,当所述计算机程序在计算机系统上执行时,所述指令用于执行如任一先前方法权利要求所述的方法的所有步骤。

说明书 :

控制线程在多线程处理器中的执行

背景技术

[0001] 一个或多个方面一般地涉及多线程处理器,且具体地说,涉及控制线程在此类处理器中的执行。
[0002] 处理器可包括具有同步执行的指令的多个硬件线程。此类处理器被称为实施同步多线程(SMT),所述同步多线程是用于通过允许多个独立执行线程更好地利用由现代处理器架构提供的资源来改进处理器的总体效率的技术。
[0003] 通过控制多线程处理器的线程的执行,可获得进一步的效率。

发明内容

[0004] 经由提供如在权利要求1中要求保护的方法及相应的系统和计算机程序产品,克服了现有技术的缺点且提供了优点。
[0005] 实现了额外特征及优势。本文详细描述其他实施例及方面且将它们视为所要求保护的本发明的一部分。

附图说明

[0006] 在本说明书的结尾部分处的权利要求书中特别地指出且清楚地要求保护作为实例的一个或多个方面。前述内容及其他目标、特征及优势将自结合随附图进行的以下详细描述而显而易见,其中:
[0007] 图1示出结合并使用控制线程的执行的一个或多个方面的计算环境的一个实例;
[0008] 图2示出结合并使用控制线程的执行的一个或多个方面的计算环境的另一实例;
[0009] 图3A示出结合并使用控制线程的执行的一个或多个方面的计算环境的又一实例;
[0010] 图3B示出图3A的计算环境的存储器的其他细节;
[0011] 图3C示出结合并使用控制线程的执行的一个或多个方面的计算环境的另一实例;
[0012] 图4A示出根据控制线程的执行的一个方面使用的控制寄存器的一个实例;
[0013] 图4B示出根据控制线程的执行的一个方面使用的指令地址寄存器的一个实例;
[0014] 图5示出管线的各级的一个实例;
[0015] 图6示出控制线程在多线程处理器中的执行的逻辑的一个实例;
[0016] 图7A示出“清空”指令(Drain instruction)的格式的一个实例;
[0017] 图7B示出与图7A的“清空”指令相关联的逻辑的一个实施例;
[0018] 图8A示出“比较并交换R单元寄存器(Compare And Swap R-Unit Register)”指令的格式的一个实例;
[0019] 图8B示出与图8A的“比较并交换R单元寄存器”指令相关联的逻辑的一个实施例;
[0020] 图9A示出“加载且或R单元寄存器(Load and OR R-Unit Register)”指令的格式的一个实例;
[0021] 图9B示出与图9A的“加载且或R单元寄存器”指令相关联的逻辑的一个实施例;
[0022] 图10A示出“加载且与R单元寄存器(Load and AND R-Unit Register)”指令的格式的一个实例;
[0023] 图10B示出与图10A的“加载且与R单元寄存器”指令相关联的逻辑的一个实施例;
[0024] 图11A至11B示出与由一个或多个指令使用的互锁相关联的逻辑的一个实例;及[0025] 图12示出计算机程序产品的一个实施例。

具体实施方式

[0026] 根据一个或多个方面,提供用于控制在计算环境内操作的核心(例如,物理硬件处理器,在本文中亦被称作处理器或处理器核心)中的线程(例如,硬件线程)的执行的能力。所述核心支持(例如)多线程(诸如同步多线程(SMT)),此意谓可有效地存在在同一物理处理器硬件上同步操作的多个逻辑中央处理单元(CPU)。将这些逻辑CPU中的每一者视为一个线程。
[0027] 在此类多线程环境中,可能需要一个线程来阻止所述处理器核心上的其他线程执行。此情形可以是响应于运行一关键序列或另一序列,所述关键序列或另一序列需要处理器核心资源或正在以其他线程可能干扰其执行的方式操纵处理器核心资源。在一个实例中,作为此能力的一部分,可能需要等待直至处理器核心上的所有线程已满足某一条件。举例而言,假定在特定硬件线程上运行的软件或固件意欲执行系统动作,首先需要自整个处理器核心无进行中的存储,亦即,在处理器核心上的所有线程上无存储在进行中。为了判定其他线程是否被停止,根据一个方面提供在本文中被称作清空指令的指令,该指令监视在处理器核心上的线程的状态。
[0028] 另外,根据一个或多个方面,在控制线程的执行时,可使用各种原子指令(atom instruction)。这些指令在可由SMT处理器的线程存取且由SMT处理器的线程共享的寄存器上操作,而非在存储装置或存储器上操作。(除非另外隐含地或显式地说明,否则存储器及存储装置在本文中可互换使用。)这允许多个线程使用共享寄存器而非存储装置来传达及共享信息。如本文所描述,这些指令(在本文中被称作“比较并交换R单元寄存器”或“比较并交换寄存器”指令、“加载且或R单元寄存器”或“加载且或寄存器”指令及“加载且与R单元寄存器”或“加载且与寄存器”指令)使用互锁控制对共享寄存器的存取。
[0029] 参考图1描述结合并使用控制线程的执行的一个或多个方面的计算环境的一个实例。参考图1,在一个实例中,计算环境100基于z/Architecture,所述z/Architecture由纽约阿蒙克市的国际商业机器 公司提供。z/Architecture描述于题为“z/Architecture-Principles of Operation”的出版号第SA22-7832-09号的IBM出版物(2012年9月,第10版)中,所述出版物在此以其全文引用的方式并入本文中。
[0030] Z/ARCHITECTURE、IBM及Z/VM、Z/OS、POWER及POWERPC(本文中所参考)为纽约阿蒙克市的国际商业机器公司的注册商标。本文中使用的其他名称可为国际商业机器公司或其他公司的注册商标、商标或产品名称。
[0031] 作为一个实例,计算环境100包括中央处理器复合体(CPU)102,所述复合体经由一个或多个控制单元108耦接至一个或多个输入/输出(I/O)设备106。中央处理器复合体102包括(例如)耦接至一个或多个处理器核心110的处理器存储器104(亦称为,主存储器、主存储装置、中央存储装置)以及输入/输出子系统111,其中每一者在下文中描述。
[0032] 处理器存储器104包括(例如)一个或多个分区112(例如,逻辑分区)及包括(例如)逻辑分区系统管理程序114及其他处理器固件115的处理器固件113。逻辑分区系统管理程序114的一个实例为纽约阿蒙克市的国际商业机器公司提供的Processor Resource/System Manager(PR/SM)。
[0033] 逻辑分区充当单独系统且具有一个或多个应用120及视情况在其中具有驻留操作系统122,驻留操作系统122对于每一逻辑分区可为不同的。在一个实施例中,所述操作系统为纽约阿蒙克市的国际商业机器公司提供的z/OS操作系统、z/VM操作系统、z/Linux操作系统或TPF操作系统。
[0034] 逻辑分区112由逻辑分区系统管理程序114管理,所述逻辑分区系统管理程序由在核心110上运行的固件实施。如本文中所使用,固件包括(例如)处理器核心的微码和/或毫码(millicode)。固件包括(例如)用于实施较高级机器码的硬件级指令和/或数据结构。在一个实施例中,固件包括(例如)专有码,所述专有码通常作为包括受信任软件的微码或特定于基础硬件的微码被递送,且控制对系统硬件的操作系统存取。
[0035] 处理器核心110为分配给逻辑分区的物理处理器资源。具体地说,每一逻辑分区112具有一个或多个逻辑处理器,所述逻辑处理器中的每一者表示分配给该分区的所有或一部分核心110。特定分区112的逻辑处理器可专用于该分区,以便为该分区保留基础核心资源110,或所述逻辑处理器可与另一分区共享,以使得基础处理器资源对于另一分区为潜在可用的。
[0036] 在一个实例中,核心中的至少一者为包括多个线程(亦即,同步操作的多个逻辑CPU)的多线程处理器(诸如同步多线程处理器)。在一个实例中,核心包括两个线程,但在其他实施例中,可存在两个以上的线程。两个线程(在本文中被称作T0(126)及T1(128))仅为一个实例。
[0037] 为了支持同步多线程,处理器核心硬件含有每一线程的完整架构状态(例如,z/Architecture及微-架构状态)。因此,提供对于所有线程为公用的处理器范围的寄存器130(在本文中被称作公用寄存器)及对于线程为唯一的线程特定寄存器132(在本文中被称作唯一寄存器)。在下文进一步描述这些寄存器的使用。
[0038] 为了控制多个线程的执行,核心110包括硬件和/或逻辑以提供如本文所描述的此类控制。为方便起见,此硬件和/或逻辑在本文中被称作线程控制工具134。
[0039] 输入/输出子系统111引导输入/输出设备106与主存储装置104之间的信息流。所述子系统耦接至中央处理复合体,因为其可为中央处理复合体的一部分或与中央处理复合体分离。I/O子系统减轻处理器核心的与输入/输出设备直接通信的任务且准许数据处理与输入/输出处理同时进行。为提供通信,I/O子系统采用I/O通信适配器。存在各种类型的通信适配器,包括(例如)通道、I/O适配器、PCI卡、以太网卡、小型计算机存储接口(SCSI)卡等。在本文所描述的特定实例中,I/O通信适配器为通道,且因此,I/O子系统在本文中被称作通道子系统。然而,此情形仅为一个实例。可使用其他类型的I/O子系统。
[0040] I/O子系统在管理至输入/输出设备106或来自输入/输出设备106的信息流时使用一个或多个输入/输出路径作为通信链路。在此特定实例中,这些路径被称为通道路径,这是由于通信适配器为通道。
[0041] 参考图2描述结合并使用控制线程的执行的一个或多个方面的计算环境的另一实例。在此实例中,计算环境200包括基于z/Architecture(或另一实施例中的另一架构)实施的未分区的环境。所述计算环境包括核心202,核心202包括(例如)一个或多个高速缓存204、至少两个线程T0(206)、T1(208)、用于线程的一组公用寄存器210、用于每一线程的一组唯一寄存器212、以及线程控制工具214。
[0042] 核心202在通信上耦接至具有一个或多个高速缓存218及至少一个控制公用程序220(诸如操作系统)的存储器216;及耦接至输入/输出(I/O)子系统222。I/O子系统222在通信上耦接至外部I/O设备224,所述外部I/O设备可包括(例如)数据输入设备、传感器和/或诸如显示器的输出设备。
[0043] 参考图3A描述结合并使用控制线程的执行的一个或多个方面的计算环境的另一实施例。在此实例中,计算环境300a包括(例如)经由(例如)一个或多个总线308和/或其他连接彼此耦接的本机核心302、存储器304及一个或多个输入/输出设备和/或接口306。作为实例,计算环境300a可包括:由纽约阿蒙克市的国际商业机器公司提供的PowerPC处理器或Power Systems服务器;由加州帕洛阿尔托的惠普公司(Hewlett Packard Co.,Palo Alto,California)提供的具有Intel Itanium II处理器的HP Superdome;和/或基于由国际商业机器公司、惠普公司、英特尔公司、甲骨文公司(Oracle)或其他公司提供的架构的其他机器。
[0044] 本机核心302包括一个或多个本机寄存器310,诸如在环境内处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器,所述寄存器包括表示在任何特定时间点的环境的状态的信息。另外,本机核心可包括(例如)至少两个线程T0(311)、T1(313);用于线程的一组公用寄存器315;用于每一线程的一组线程特定寄存器317;及线程控制工具319。
[0045] 此外,本机核心302执行存储在存储器304中的指令及代码。在一个特定实例中,处理器核心执行存储在存储器304中的仿真器代码312。此代码使得在一个架构中配置的计算环境能够仿真一个或多个其他架构。举例而言,仿真器代码312允许基于除z/Architecture以外的架构的机器(诸如,PowerPC处理器、Power Systems服务器、HP Superdome服务器或其他者)仿真z/Architecture及执行基于z/Architecture开发的软件及指令。
[0046] 在另一实施例中,如图3C所展示,核心302为单线程核心,但多线程核心被仿真且被包括在仿真器代码312内。举例而言,仿真器代码312包括仿真线程控制工具320;仿真线程322、324;仿真公用寄存器326及仿真唯一寄存器328,其中每一者基于与本机核心302的架构(诸如z/Architecture)不同的架构。
[0047] 参考图3B描述与仿真器代码312有关的其他细节。存储于存储器304中的客机指令350包括被开发以在除本机核心302的架构以外的架构中执行的软件指令(例如,与机器指令相关)。举例而言,客机指令350可被设计以在z/Architecture核心202上执行,但改为在本机核心302上被仿真,所述本机核心302可为(例如)Intel Itanium II处理器。在一个实例中,仿真器代码312包括指令取回例程352以自存储器304获得一个或多个客机指令350,及视情况提供用于所获得的指令的本地缓冲。所述仿真器代码亦包括指令转译例程354以判定已获得的客机指令的类型且将所述客机指令转译成一个或多个对应的本机指令356。
此转译包括(例如)识别待由客机指令执行的功能及选择本机指令以执行该功能。
[0048] 此外,仿真器代码312包括仿真控制例程360以引起执行本机指令。仿真控制例程360可使得本机核心302执行仿真一个或多个先前所获得的客机指令的本机指令的例程,并且在此执行完成时,使控制返回至指令取回例程以仿真下一客机指令或一组客机指令的获得。客机指令可为本文所述的线程控制工具的指令。本机指令356的执行可包括将数据自存储器304加载至寄存器;将数据自寄存器存储回至存储器;或执行某一类型的算术或逻辑运算(如由转译例程所确定)。
[0049] 每一例程(例如)在软件中实施,所述软件存储在存储器中且由本机核心302执行。在其他实例中,所述例程或操作中的一或多者在固件、硬件、软件或它们的某一组合中实施。所仿真处理器的寄存器可使用本机核心的寄存器310或藉由使用存储器304中的位置来仿真。在实施例中,客机指令350、本机指令356及仿真器代码312可驻留于同一存储器中或可分散于不同存储设备中。
[0050] 上文所描述的计算环境仅为可使用的计算环境的实例。可使用其他环境,包括但不限于其他未分区的环境、其他分区的环境和/或其他仿真环境;实施例不限于任何一种环境。
[0051] 如上所指出,多个寄存器与每一线程相关联。对于线程为公用的一个共享寄存器为控制寄存器,诸如毫码控制寄存器(MCR)MCR002,其中的一实例于图4A中示出。MCR002(400)包括判定线程如何表现的SMT的各种控件。在一个实施例中,MCR002(400)包括多个字段402,且根据一个或多个方面使用的这些字段(例如)包括:
[0052] (a)暂时停止I取回字段404:此字段的两个位与线程0及1呈一对一对应(如果存在两个以上的线程,则可能存在两个以上的位)。当位为‘1’b时,这变为有效暂时主要超控以阻断I取回而不管其他控制位的状态;及
[0053] (b)非I取回停止允许字段406:此字段的两个位与线程0及1呈一对一对应(如果存在两个以上的线程,则可能存在两个以上的位)。当位为‘1’b时,其指示此线程进入代码的区段(例如,关键区段),其中不允许另一线程启用此线程的停止I取回位。
[0054] 所使用的另一寄存器为指令地址寄存器,其针对每一线程为唯一的。被称作IAREGFA的此寄存器包括关于由硬件检测到的程序中断的信息。图4B中示出IAREGFA的一个实例。如所示出的,IAREGFA 450包括多个字段452。根据一个或多个方面使用的一个字段为字段454,字段454指示线程处于采取异常的过程。
[0055] 以上寄存器中的每一者可包括额外、较少和/或不同字段。另外,可能存在使用的其他寄存器。本文所述的寄存器及字段为可使用的寄存器和/或字段的实例。另外,MCR及IAREGFA仅为寄存器的名称的实例。许多变型是可能的。
[0056] 为了增加指令吞吐量,每一线程使用指令管线用于处理,从而允许多个操作被同时执行。指令管线包括多个级,且参考图5描述此类管线的一个实例。参考图5,支持无序处理的管线500包括(例如):自存储器取回指令的指令取回级502;形成分派/完成组且将指令放在发出队列中的指令译码/分派级504;发出指令(无序)的发出级506;执行指令(无序)的执行级508;结束指令(无序)的结束级510;涉及架构检查点的完成级512;及恢复检查点级514。其他管线可包括额外、较少和/或不同级。本文所述的级仅为实例。
[0057] 在一个实例中,至多三个指令(具体地说,微操作)可放置在一个组中。然而,某些指令(诸如分支指令)结束一个组,即使该组不完整。完整的指令组被引导至同一发出队列,且随后,下一组进入另一发出队列。
[0058] 根据本发明的一个方面,提供在核心中运行的一个线程停止在该核心内执行的一个或多个其他线程以执行一个或多个操作的能力。在本文所述的实例中,核心为指示存在两个线程的SMT-2设计。然而,在其他实施例中,可能存在两个以上的线程。
[0059] 参考图6描述用于控制一个或多个线程的执行的逻辑的一个实施例。在此实例中,在核心上执行的线程0(T0)尝试停止在核心上执行的线程1(T1),且因此,所述描述涉及T0及T1;然而,在其他实施例中,T1可尝试停止T0;和/或可能存在在核心上执行的正在被停止的一个以上的线程。举例而言,T0可停止T1、T2、T3等。另外,在本文所述的实例中,由核心的固件执行所述逻辑;然而,在一个或多个其他实施例中,可由通用软件执行所述逻辑。许多其他变型是可能的。
[0060] 如参见图6所描述,在一个实施例中,一个线程停止另一线程的执行,且所述停止使用由线程共享的一个或多个寄存器(例如,硬件寄存器)中的一个或多个控件(例如,指示符、位等)。
[0061] 参考图6,在一个实施例中,线程0检查T1(或在其他实施例中,核心的一个或多个线程)是否禁止被停止,步骤600。在一个实例中,这通过检查MCR002的选定位(例如,位25)以及IAREGFA的选定位(例如,位4)来确定。在一个实例中,通过T0测试分支点来完成此步骤,参考STPIFALW。STPIFALW测试MCR002及IAREGFA的选定位。举例而言,如果MCR0002.25(亦即,MCR002的位25)被设定为0且IAREGIFA.4(亦即,IAREGIFA的位4)被设定为0,则允许停止T1的I取回。
[0062] 如果STPIFALW指示T1禁止被停止,查询602,则处理继续至步骤600。然而,如果T1未禁止被停止,如由STPIFALW指示,且具体地MCR002.25=0及IAREGFA.4=0,则处理继之以T0停止T1上的指令取回及执行,步骤604。在一个实例中,这包括T0设定T1的暂时停止I取回位(例如,MCR002.9),其停止T1上的指令取回及执行。使用(例如)“比较并交换R单元寄存器(CSGRU)”指令或“加载且或R单元寄存器”指令设定此位,所述指令中的每一者在下文描述。
[0063] 其后,T0执行所有线程的清空操作(DRAIN ALLTIDS),步骤606,所述步骤保持T0的指令分派直至T1上的所有指令自管线被清空或清仓,并且查询T1的状态。在一个实例中,清空指令用于执行清空操作,所述清空操作的实例在下文描述。
[0064] 当使管线清空其他线程上的指令(查询608)时,处理继续步骤606。然而,响应于T1上的指令被清空,T0继续T0的指令分派及执行,步骤610。
[0065] 其后,T0再次检查T1(及其他线程,如果存在的话)是否禁止被停止,以确保T1在被测试之后但在被停止之前不改变其状态,步骤612。如上文所描述,使用STPIFALW执行此检查。如果T1现在禁止被停止,查询614,则T0允许T1通过停用MCR002的位9(亦即,设定其为0)来继续执行,步骤616。处理继续至步骤600。
[0066] 另外,如果T1未禁止被停止,查询614,则T0执行导致T1的停止的指令序列(例如,一个或多个操作),步骤618。在该指令序列完成后,允许T1继续,步骤620。因此,T0通过使用(例如)“加载且与R单元(LNRU)”指令或CSGRU来重设MCR002中的位9,如下所述。其后,两个线程正常执行,步骤622。
[0067] 如上文所描述,多个指令用于控制多线程处理器的一个或多个线程的执行。在下文描述这些指令中的每一者。
[0068] 参考图7A至7B,描述“清空”指令的一个实施例。具体地说,图7A示出“清空”指令的格式的一个实施例,且图7B示出与“清空”指令相关联的逻辑的一个实施例。
[0069] 参考图7A,“清空”指令700包括:操作码字段702,其包括识别清空操作的操作码;掩码(M3)字段704,其包括指示延时计数的值,该值指定多少循环处理被延时;及指令字段
706(I2),其指示清空类型,在此实例中,其为指定将清空所有线程的清空所有TIDS(线程ID)。
[0070] 在操作中并参考图7B,线程T0在管线的指令译码或分派级暂停T0的指令处理,直至满足指定条件,步骤750。指令的I2字段的指定位(例如,I2的位0:31,其为(例如)I文本字段的位16:47,该字段包括指令的所有字段)指定在继续指令处理之前待满足哪一(哪些)硬件条件。在一个实施例中,指定条件包括跨线程控制(例如,I2字段的位0;I文本字段的位16),所述跨线程控制检查T1(或其他线程)的状态以判定是否在T1上已暂停处理。当I2字段的位0为‘1’b时,其指定将在两个线程上满足所有其他清空条件以在此线程上继续处理(其他线程未被此线程上的DRAIN阻断)。当使用此功能时,需注意以避免悬置。
[0071] 在一个或多个实施例中,可在I2字段中指定其他条件。给定位位置中的1指示将在恢复指令处理之前满足条件;如果启用一个以上的位,则将满足所有选择的条件。在实施中,在一个实施例中,当I文本位16(亦即,I2字段的位0)为1时,在将所选择的所有功能相“或”之前,在逐位的基础上执行两个(或所有)硬件线程的状态功能的逻辑“或”,以便确定DRAIN条件是否被满足的最终值。
[0072] 判定是否已满足指定条件,查询752。如果否,则继续暂停,步骤750。否则,如果已满足条件,则处理延时额外数目的循环,步骤754。此额外数目可为零或更多,且在清空指令的M3字段中指定。举例而言,M3字段指定(作为实例)0与15之间的额外数目的循环以在满足I2字段中指定的条件之后延时。在延时额外数目的循环后,恢复指令处理,步骤756。
[0073] 在一个实施例中,如果同时分派先前指令及清空,则允许先前指令完成分派及正常经由管线继续,但“清空”指令及所有后续指令将被阻断分派,直至满足条件。注意,“清空”指令仅在此线程上操作延迟处理。为了停止另一线程,使用本文所述的技术。然而,指定位(例如,I2的位0)当为1时指示将满足所有线程上的所有指定条件以在此线程上的“清空”指令后继续处理。
[0074] 如所指示,指令的M3字段指定要在管线处延时的额外循环的数目。这可结合I2字段中的任何已允许条件使用。其亦可指定I2字段皆为0,这在分派处产生立即循环计数延迟。即使M3字段为0,亦存在分派“清空”指令的一个循环的延时。因此,此计数指定循环的数目以多延迟一个循环。硬件可发出“清空”指令连同其他指令且其可以以无序方式发出,原因是其仅影响管线的前端级。
[0075] 此指令旨在在保证正确操作必需的互锁未内置在硬件中的情况下使用。在大多数情况下,硬件自管线中的先前指令自动覆盖窗口。
[0076] 未由此指令改变条件代码。
[0077] 使用的另一指令为“比较并交换R单元寄存器”指令,参考图8A至图8B对其进行描述。具体地说,图8A示出“比较并交换R单元寄存器”指令的格式的一个实施例,且图8B示出与“比较并交换R单元寄存器”指令相关联的逻辑的一个实施例。应注意,本文中论述的指令中的R单元指核心内执行该指令的特定单元。然而,特定单元的使用并非必需的。可由其他单元或仅由核心执行该指令。
[0078] 参考图8A,CSGRU指令800包括:至少一个操作码字段802a、802b,它们包括指定“比较并交换寄存器”操作的操作码;第一寄存器字段(R1)804;第二寄存器字段(R3)806;及指令字段(I2)808,在下文描述所述字段中的每一者。
[0079] 在操作中且参考图8B,由在选定位(例如,I文本的位22:31(例如,I2字段(808)的位6:15))中指示的10位绝对寄存器数目所指定的R单元寄存器(在本文中被称作MCR)的内容被与在R1中指定的通用寄存器(GR)的内容进行比较,步骤850。如果它们为相同的,查询852,则将MCR的内容写入R1中指定的通用寄存器,步骤854,且将R3中指定的通用寄存器的内容写入MCR,步骤856。另外,将条件代码设定为0,步骤858,且完成CSGRU的处理。
[0080] 回到查询852,如果MCR及R1中指定的寄存器的内容不相同,则将MCR的内容写入R1中指定的寄存器,步骤860,且将条件代码设定为1,步骤858。这结束CSGRU的处理。
[0081] CSGRU的读取-比较-置换功能为由此线程T0及此处理器的其他线程(例如,T1)观察的原子操作。在一个实施例中,在SLOW选项开启的情况下执行CSGRU以避免跨线程悬置。SLOW选项通过将I2(808)的选定位(例如,位17)设定为1来指示,且用于请求缓慢模式,这意味着一次在整个管线中仅存在一个指令。另外,使用如下所述的此指令来执行互锁,且因此,将在本文中被称作ILOCK的I2(808)的选定位(例如,位16)设定为1。
[0082] 在一个实施例中,如果另一被选择的指令(诸如,RSR(读取专用寄存器)、WSR(写入专用寄存器)、NSR(与专用寄存器)、OSR(或专用寄存器)、XSR(异或专用寄存器)、TRBIT(测试寄存器位)、RASR(读取绝对专用寄存器)、WASR(写入绝对专用寄存器)、TARBIT(测试绝对寄存器位)、NASR(与绝对专用寄存器)、OASR(或绝对专用寄存器)、XASR(异或绝对专用寄存器)、LORU(加载且或R-单元寄存器)、LNRU(加载且与R单元寄存器)或CSGRU(比较并交换R单元寄存器))在此线程(T0)或任何另一线程的管线中且ILOCK位(例如,I2位16)对另一指令开启,则拒绝且重新发出此指令。此指令(例如)仅在已发出来自此线程的所有先前指令之后发出且亦强制来自此线程的所有未来指令依赖于该指令。
[0083] 条件代码设定包括(例如):CC0比较相同,R单元寄存器由GR R1替换;CC1比较不相同,R单元寄存器不变。
[0084] 使用的另一指令为“加载且或R单元寄存器(LORU)”指令,参考图9A至9B对该指令进行描述。具体地说,图9A示出“加载且或R单元寄存器”指令的格式的一个实施例,且图9B示出与“加载且或R单元寄存器”指令相关联的逻辑的一个实施例。
[0085] 参考图9A,LORU指令900包括:至少一个操作码字段902a、902b,它们包括指定加载且或寄存器操作的操作码;第一寄存器字段(R1)904;第二寄存器字段(R3)906;及指令字段(I2)908,在下文描述这些字段中的每一者。
[0086] 在操作中且参考图9B,将由在选定位(例如,I2字段(908)的I文本的位22:31(例如,位6:15))中指示的10位绝对寄存器数目所指定的R单元寄存器(在本文中被称作MCR)的内容加载至R1中指定的通用寄存器中,步骤950。另外,R3中指定的通用寄存器的内容被与MCR的内容进行逻辑“或”,步骤952,且将结果写入至MCR中,步骤954。
[0087] LORU的读取-或-取代(read-OR-replace)功能为由此线程T0及此处理器的其他线程(例如,T1)观察的原子操作。在一个实施例中,在SLOW选项开启的情况下执行LORU以避免跨线程悬置。通过将I2(908)的选定位(例如,位17)设定为1来指示SLOW选项。另外,使用如下所述的此指令来执行互锁,且因此,将在本文中被称作ILOCK的I2(908)的选定位(例如,位16)设定为1。
[0088] 在一个实施例中,如果另一被选择的指令(诸如,RSR(读取专用寄存器)、WSR(写入专用寄存器)、NSR(与专用寄存器)、OSR(或专用寄存器)、XSR(异或专用寄存器)、TRBIT(测试寄存器位)、RASR(读取绝对专用寄存器)、WASR(写入绝对专用寄存器)、TARBIT(测试绝对寄存器位)、NASR(与绝对专用寄存器)、OASR(或绝对专用寄存器)、XASR(异或绝对专用寄存器)、LORU(加载且或R-单元寄存器)、LNRU(加载且与R单元寄存器)或CSGRU(比较并交换R单元寄存器))在此线程(T0)或任何另一线程的管线中且ILOCK位(I2位16)针对另一指令开启,则拒绝且重新发出此指令。此指令(例如)仅在已发出来自此线程的所有先前指令之后发出且亦强制来自此线程的所有未来指令依赖于该指令。
[0089] 条件代码不变。
[0090] 使用的另一指令为“加载且与R单元寄存器(LNRU)”指令,参考图10A至图10B对该指令进行描述。具体地说,图10A示出“加载且与R单元寄存器”指令的格式的一个实施例,且图10B示出与“加载且与R单元寄存器”指令相关联的逻辑的一个实施例。
[0091] 参考图10A,LNRU指令1000包括:至少一个操作码字段1002a、1002b,它们包括指定“加载且与寄存器”操作的操作码;第一寄存器字段(R1)1004;第二寄存器字段(R3)1006;及指令字段(I2)1008,在下文描述这些字段中的每一者。
[0092] 在操作中且参考图10B,将由在选定位(例如,I文本的位22:31(例如,I2字段(1008)的位6:15))中指示的10位绝对寄存器数目所指定的R单元寄存器(在本文中被称作MCR)的内容加载至R1中指定的通用寄存器中,步骤1050。另外,R3中指定的通用寄存器的内容被与MCR的内容进行逻辑“与”,步骤1052,且将结果写入至MCR中,步骤1054。
[0093] LNRU的读取-与-取代(read-AND-replace)功能为由此线程T0及此处理器的其他线程(例如,T1)观察的原子操作。在一个实施例中,在SLOW选项开启的情况下执行LNRU以避免跨线程悬置。通过将I2(1008)的选定位(例如,位17)设定为1来指示SLOW选项。另外,使用如下所述的此指令来执行互锁,且因此,将在本文中被称作ILOCK的I2(1008)的选定位(例如,位16)设定为1。
[0094] 在一个实施例中,如果另一被选择的指令(诸如,RSR(读取专用寄存器)、WSR(写入专用寄存器)、NSR(与专用寄存器)、OSR(或专用寄存器)、XSR(异或专用寄存器)、TRBIT(测试寄存器位)、RASR(读取绝对专用寄存器)、WASR(写入绝对专用寄存器)、TARBIT(测试绝对寄存器位)、NASR(与绝对专用寄存器)、OASR(或绝对专用寄存器)、XASR(异或绝对专用寄存器)、LORU(加载且或R-单元寄存器)、LNRU(加载且与R单元寄存器)或CSGRU(比较并交换R单元寄存器))在此线程(T0)或任何另一线程的管线中且ILOCK位(例如,I2位16)针对另一指令开启,则拒绝且重新发出此指令。此指令(例如)仅在已发出来自此线程的所有先前指令之后发出且亦强制来自此线程的所有未来指令依赖于该指令。
[0095] 条件代码不变。
[0096] LNRU以及LORU及CSGRU使用SMT核心中的所有线程可存取的寄存器,而非作为共享通信的手段的存储装置。这些寄存器为(例如)与处理器的存储器或存储装置分离的硬件寄存器。举例而言,在一种核心设计中,存在核心上的所有线程共享(公用)的大约64个寄存器;线程可自由地读取及写入这些共享寄存器。在控制寄存器的一些情况下,如果两个线程尝试在无特殊互锁的情况下写入这些寄存器,则可能失去藉由线程中的一者的更新。在其他情况下,仅准许线程中的一者“拥有”由寄存器中的位控制的资源。因此,在共享寄存器上操作的这些原子指令用于控制及定序对这些共享寄存器的存取。
[0097] LNRU、LORU及CSGRU均允许通过使用互锁进行的通用寄存器与MCR跨线程之间的原子操作来控制线程间操作及执行。如所指示,所述指令中的每一者具有ILOCK位,且当该位针对在管线中执行的指令开启时,如果第二指令进入管线(该第二指令的ILOCK位亦被设定),则该第二指令被拒绝(且当第一指令完成时稍后被重新执行)。这确保了对线程之间的这些寄存器的存取的原子性。
[0098] 存在(例如)两种类型的互锁指令:单一微操作μop指令,诸如LNRU及LORU;及二μop指令,诸如CSGRU。藉由单一μop指令,互锁在μop发出(RSR及WSR型指令)时被设定,且在RSR型的μop完成时及WSR型的检查点上被清除。在二μop指令中,互锁在第一μop(RSR型)发出时被设定且在第二μop(WSR型)的检查点处被清除。
[0099] 参考图11A至11B描述关于使用互锁的其他细节及互锁。藉由核心(且具体地说,藉由在其上发出指令的管线)执行此逻辑。
[0100] 最初参考图11A,由多线程处理器获得待执行的指令(例如,LNRU、LORU、CSGRU),步骤1100。由执行操作的多线程处理器来启动该指令的执行,步骤1102。所述操作包括待原子地执行的多个子操作。判定是否继续执行该指令,查询1104。所述判定使用(例如)互锁以判定该指令是否具有对由线程及一个或多个其他线程所共享的一个或多个寄存器的原子存取。
[0101] 如果继续执行该指令,则执行继续,这包括使用至少一个共享寄存器执行操作,步骤1106。另外,如果指令不继续,则拒绝该指令,步骤1108。
[0102] 参考图11B描述与互锁相关的其他细节。最初,当指令进入R单元时,在一个实例中,检查是否设定了锁指示符(诸如入站指令的ILOCK位(例如,I文本的位32,亦称为I2的位16))(例如,设定为1),查询1150。如果ILOCK位未被设定,则完成互锁处理;然而,如果入站指令中的ILOCK位被设定,则进一步判定是否设定了锁(被称作互锁),查询1152。互锁被放置于多个线程可存取的硬件寄存器中。
[0103] 如果设定了互锁(例如,位被设定为1),从而指示另一指令正处理设定其ILOCK位,则拒绝入站指令,步骤1153。
[0104] 然而,如果未设定互锁,则对其进行设定,步骤1154,且继续进行指令处理(例如,在管线中),步骤1156。当指令完成(或设置了检查点)时,重设互锁(例如,设定为0),步骤1158。
[0105] 关于互锁的其他细节包括:
[0106] (A)例如在如下情况时,可由管线0设定互锁:
[0107] -在需要设定互锁的管线0中存在指令且该指令被单独发出
[0108] -在需要设定互锁的管线0中存在指令且在不希望设定锁的管线1中存在另一指令,两个指令均来自同一线程。
[0109] -在需要设定互锁的管线0中存在指令且在需要设定锁的管线1中存在另一指令,但管线0中的指令更早,两个指令均来自同一线程。
[0110] -在需要设定互锁的管线0中存在指令且在不希望设定锁的管线1中存在另一指令,两个指令来自不同线程。
[0111] -在需要设定互锁的管线0中存在指令且在需要设定锁的管线1中存在另一指令,两个指令来自不同线程,且LFSR(线性反馈移位寄存器)指向管线0。LFSR用于产生伪随机数且通过采取该数的最高有效位,在两个管线之间提供伪随机选择(亦即,随机选择哪一管线将设定互锁)。
[0112] 在一个实例中,互锁是针对分派组中的每一可能指令具有一个位的向量。举例而言,在一个实例中,在一个分派组中可能存在至多三个指令,且因此,互锁包括三个位,每一指令一个。当位被设定为(例如)1时,这指示与该位相关联的指令具有互锁。
[0113] 亦可由如上文所述的管线1设定互锁,然而用管线1替换管线0,且用管线0替换管线1。
[0114] (B)例如在如下情况时,执行互锁的设定:
[0115] -在管线中存在有效指令,“与”(AND)
[0116] -设定了ILOCK,“与”
[0117] -设定了predec_rd(亦即,读取(RSR)型指令的早期指示)或predec_wr(亦即,写入(WSR)型指令的早期指示),“与”
[0118] -管线中的指令未被清仓/被xcond编码,“与”
[0119] -可由该管线(根据(A))设定互锁,“与”
[0120] -互锁尚未被设定
[0121] (C)例如在如下情况时更新互锁
[0122] -在管线中存在有效指令,“与”
[0123] -设定了ILOCK,“与”
[0124] -设定了predec_rd或predec_wr,“与”
[0125] -管线中的指令未被清仓/被xcond编码,“与”
[0126] -已设定了互锁,“与”
[0127] -instruction.GTAG(包括该指令的分派组的标识符)=interlock.GTAG(亦即,与该指令相关联的标识符=设定互锁的标识符),“与”
[0128] -instruction.th_id(线程id)=interlock.th_id
[0129] 在一个实施例中,如果在组中不存在抓取锁的写入型微操作(μop),则针对组完成执行互锁的重设。如果在组中存在写入型μop但其未抓取锁,则亦针对该完成释放锁(未抓取锁=ILOCK位为0,此为CSGRU的ILOCK位亦在WSR部分中设定使得其针对RSR的完成未被释放的原因)。如果写入型指令亦抓取锁,则锁将仅针对检查点被释放。以此方式将见到原子性。一个例外是CSGRU,其中WSR在第二组中,因此第一组的RSR设定锁且第二组中的WSR释放锁。在该情况下,第一组在第二组(其具有GTAG,比第一组的GTAG大1)之前出现。
[0130] 如果组中的μop不持有锁,则该μop的拒绝可能不重设锁。在一个实例中,如果组中不存在亦持有锁的其他μop,则拒绝将仅释放锁。
[0131] 如果组中的μop不持有锁,则该μop的撤销可能不重设锁。在一个实例中,如果组中不存在亦持有锁的其他μop,则撤销将仅释放锁。
[0132] 当xcond出现时,检查是否可释放互锁。问题在于xcond应仅在抓取锁的指令尚未完成时释放锁。如果抓取锁的指令已完成,则xcond不应对锁有影响(这对于抓取锁的写入型指令为真,原因是该指令将针对检查点释放锁。对于读取型指令,针对完成已进行释放)。一个例外是CSGRU,其读取型部分可能已完成,但如果在写入型完成之前可能存在xcond,则将释放锁(如果写入型完成,则随后将出现的xcond应对互锁无影响)。
[0133] 在需要将设定锁的指令清仓的情况下重设:例如,仅在该组的任何指令不再持有锁的情况下才进行实际重设。举例而言,如果清仓命中组中的第一μop且此μop持有锁,则锁空闲(当然,两个其他μop亦可持有锁但它们被清仓)。如果清仓出现在组中的第二μop上且此μop持有锁,则锁仅在例如第一μop亦不持有锁的情况下才空闲(第三μop将无论如何被清仓,因此不需要对其进行检查)。
[0134] (D)例如在如下情况时重设互锁:
[0135] -已设定互锁为“与”
[0136] -根据(C),未更新为“与”
[0137] (
[0138] 抓取锁的指令正在完成:
[0139] -对其锁定的读取指令正在完成“与”
[0140] -此并非CSGRU的第一组完成
[0141] 或
[0142] (
[0143] 抓取锁的指令被设置检查点:
[0144] -对其进行锁定的写入指令被设置检查点“与”
[0145] -Interlock.GTAG=Instruction.GTAG
[0146] 或
[0147] -如果此为CSGRU的第二组完成,则等待其被设置检查点“与”
[0148] -Interlock.GTAG+1=Instruction.GTAG
[0149] )
[0150] 或
[0151] 拒绝抓取锁的μop且在该组中无其他持有者
[0152] 或
[0153] 撤销抓取锁的μop且在该组中无其他持有者
[0154] 或
[0155] 抓取锁的μop被清仓/被xcond编码且在该组中无其他持有者
[0156] 或
[0157] 恢复进行中
[0158] )
[0159] (E)例如在如下情况时拒绝
[0160] 1)互锁被锁定为“与”
[0161] instruction.th_id!=(不同)interlock.th_id“与”
[0162] instruction.GTAG!=interlock.GTAG
[0163] 对于CSGRU操作码,当由RSRμop锁定互锁时,这消除WSRμop的拒绝(这些μop具有相同GTAG及相同线程ID)。
[0164] 针对类似发出为有序的组(RSR、x、WSR)亦是如此,但出于某一原因RSR被拒绝且因此WSR锁定该锁。在此情况下,如果拒绝将基于个别指令id,则由于锁被锁定,RSR将不能进入,且整个组将不能完成==>死锁,原因是WSR无法释放锁。解决方案为使用GTAG,如此RSR将能够进入且当其完成时,WSR亦将能够完成且将释放锁。
[0165] 2)两个管线上的同一线程“与”
[0166] 在两个管线中开启ILOCK“与”
[0167] 当前管线持有较新指令
[0168] ==>应拒绝当前较新指令(同样,如果尚未由较旧指令开启互锁位)。
[0169] 在开启互锁的情况下,亦应通过(1)条件拒绝较旧者(除非此为CSGRU指令的WSR)。
[0170] 3)在两个管线上的不同线程“与”
[0171] 在两个管线中开启ILOCK“与”
[0172] 当前的管线数目并不与LFSR的值相等(其针对管线0为0且针对管线1为1)==>应拒绝当前管线_x指令(同样,如果尚未由较旧指令开启互锁位)。
[0173] 在开启互锁的情况下,亦应通过(1)条件拒绝两者(除非其中一者为CSGRU指令的WSR)。
[0174] 本文描述用于一个线程停止多线程处理器的一个或多个其他线程的执行的技术的一个实施例。实施所述技术以避免悬置且确保与其他线程相关联的所有指令在它们被停止之前完成。在一个方面中,此技术包括管线清空指令,该指令自处理器的所有硬件线程(或在另一实施例中的被选择的线程)查看状态信息以了解在此线程处继续操作之前是否满足条件。
[0175] 此外,此技术的一个实施例使用原子指令(诸如CSGRU、LORU及LNRU)以在共享寄存器上操作。举例而言,在多线程核心设计(例如,SMT)中,当两个或两个以上线程共享公用核心时,它们通常需要传送及共享信息;这可包括信号量、锁等。这可涉及固件、毫码或可涉及软件。线程可使用经由存储器传送的现有ISA指令。然而,这可能较慢且涉及存储-命中-载入(store-hit-load)或载入-命中-存储(load-hit-store)冲突(通常被称为操作数存储比较(Operand Store Compare;OSC))。另外,如果由固件完成传送,则经由存储器传送可为非所需要的或不可能的;固件例程可在禁止操作数加载及存储的关键序列的中间。因此,这些指令在寄存器而非存储器上操作。
[0176] 尽管关于控制线程的执行来描述原子指令,但这些指令可用于其他目的。每一指令独立于本文所述的使用且可用于其他情况。
[0177] 参考图12,在一个实例中,计算机程序产品1200包括(例如)将计算机可读程序代码部件、逻辑和/或指令1204存储在其上以提供及促进一个或多个实施例的一个或多个非瞬时性计算机可读存储介质1202。
[0178] 本发明可为一种系统、方法和/或计算机程序产品。计算机程序产品可包括计算机可读存储介质(或多个介质),其上具有计算机可读程序指令以用于使处理器执行本发明的方面。
[0179] 计算机可读存储介质可为有形设备,其可保持及存储指令以供指令执行设备使用。计算机可读存储介质可为(例如但不限于):电子存储设备、磁性存储设备、光学存储设备、电磁存储设备、半导体存储设备或前述各者的任何合适组合。计算机可读存储介质的更特定实例的非穷尽性列表包括以下各者:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字化通用光盘(DVD)、记忆棒、软盘、机械编码设备(诸如其上记录有指令的打孔卡片或凹槽中的凸起结构)及前述各者的任何合适组合。如本文中所使用,不将计算机可读存储介质本身理解为瞬时性信号,诸如无线电波或其他自由传播的电磁波、经由波导或其他传输介质传播的电磁波(例如,经由光纤线缆传递的光脉冲),或经由导线传输的电信号。
[0180] 本文中所描述的计算机可读程序指令可经由网络(例如,因特网、局域网络、广域网和/或无线网络)自计算机可读存储介质下载至相应计算/处理设备或下载至外部计算机或外部存储设备。网络可包括铜传输线缆、光学传输光纤、无线传输、路由器、防火墙、交换器、网关计算机和/或边缘服务器。每一计算/处理设备中的网络适配卡或网络接口自网络接收计算机可读程序指令且递送计算机可读程序指令以用于存储在相应计算/处理设备内的计算机可读存储介质中。
[0181] 用于执行本发明的操作的计算机可读程序指令可为以一种或多种程序设计语言的任何组合撰写的汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微码、固件指令、状态设定数据或源代码或目标码,所述一种或多种程序设计语言包括诸如Smalltalk、C++或其类似者的面向对象的程序设计语言,及诸如“C”程序设计语言或类似程序设计语言的常规程序程序设计语言。计算机可读程序指令可完全在用户计算机上执行、部分地在用户计算机上执行、作为独立软件包执行、部分地在用户计算机上执行且部分地在远程计算机上执行或完全在远程计算机或服务器上执行。在后一情形中,所述远程计算机可经由任何类型的网络(包括局域网络(LAN)或广域网(WAN))连接至用户的计算机,或可连接至外部计算机(例如,使用因特网服务提供商,经由因特网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA))可藉由利用计算机可读程序指令的状态信息来个人化电子电路而执行计算机可读程序指令,以执行本发明的方面。
[0182] 本文参考根据本发明的实施例的方法、装置(系统)及计算机程序产品的流程图说明和/或方块图来描述本发明的方面。应理解,可由计算机可读程序指令实施流程图说明和/或方块图的每一区块,及流程图说明和/或方块图中的区块的组合。
[0183] 可将这些计算机可读程序指令提供至通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,以使得经由所述计算机或其他可编程数据处理装置的处理器执行的指令建立用于实施一个或多个流程图和/或方块图区块中所指定的功能/动作的部件。亦可将这些计算机可读程序指令存储在计算机可读存储介质中,所述指令可引导计算机、可编程数据处理装置和/或其他设备以特定方式工作,使得其中存储有指令的计算机可读存储介质包括制品,所述制品包括实施一个或多个流程图和/或方块图区块中指定的功能/动作的方面的指令。
[0184] 计算机可读程序指令亦可加载至计算机、其他可编程数据处理装置或其他设备上,以使一系列操作步骤在所述计算机、其他可编程装置或其他设备上执行以产生计算机实施的过程,使得在所述计算机、其他可编程装置或其他设备上执行的指令实施一个或多个流程图和/或方块图区块中所指定的功能/动作。
[0185] 附图中的流程图及方块图例示根据本发明的各种实施例的系统、方法及计算机程序产品的可能实施方式的架构、功能性及操作。就此而言,流程图或方块图中的每一区块可表示指令的模块、区段或部分,其包括用于实施指定逻辑功能的一个或多个可执行指令。在一些备选实施方式中,区块中提及的功能可不按附图中所提及的次序发生。举例而言,取决于所涉及的功能性,以连续方式展示的两个区块实际上可实质上同时执行,或所述区块有时可以相反次序执行。亦将注意,可藉由执行指定功能或动作或进行专用硬件及计算机指令的组合的基于专用硬件的系统实施方块图和/或流程图说明的每一区块,及方块图和/或流程图说明中的区块的组合。
[0186] 虽然上文描述各种实施例,但它们仅为实例。举例而言,其他架构的计算环境可用于结合并使用一个或多个实施例。另外,本发明的一个或多个方面适用于除SMT外的多线程的形式。又另外,可使用不同指令、指令格式、指令字段和/或指令值。许多变型是可能的。
[0187] 另外,其他类型的计算环境可以是有益的且可被使用。作为一实例,可使用适合于存储和/或执行程序代码的数据处理系统,其包括直接或经由系统总线间接地耦接至存储组件的至少两个处理器。存储组件包括(例如)在程序代码的实际执行期间使用的本地存储器、大容量存储器及高速缓冲存储器,所述存储组件对至少某一程序代码提供暂时存储以便减少在执行期间必须自大容量存储器取回程序代码的次数。
[0188] 输入/输出或I/O设备(包括(但不限于)键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(Thumb Drive)及其他存储介质等)可直接地或经由中间I/O控制器耦接至系统。网络适配器亦可耦接至系统以使得数据处理系统能够变成经由中间专用网或公用网络耦接至其他数据处理系统或远程打印机或存储设备。调制解调器、线缆调制解调器及以太网卡仅为几个可用类型的网络适配器。
[0189] 本文中所使用的术语仅出于描述特定实施例的目的且并不意欲为限制性的。如本文中所使用,除非上下文另外清楚地指示,否则单数形式“一”、“一个”及“该”意欲包括复数形式。应进一步理解,术语“包括”和/或“包含”在用于本说明书中时指定所陈述特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组合的存在或添加。
[0190] 以下的权利要求中的对应结构、材料、操作以及所有功能性限定的装置或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它单元相组合地执行该功能的结构、材料或操作。所给出的对本发明的描述其目的在于示意和描述,并非是穷尽性的,也并非是要将本发明限定到所表述的形式。对于所属技术领域的普通技术人员来说,显然可以作出许多修改和变型。对实施例的选择和说明,是为了最好地解释本发明的原理和实际应用,使所属技术领域的普通技术人员能够明了,本发明可以有适合所要的特定用途的具有各种改变的各种实施方式。