CN103154885A - 在没有管理程序介入的情况下获得和释放硬件线程 - Google Patents

在没有管理程序介入的情况下获得和释放硬件线程 Download PDF

Info

Publication number
CN103154885A
CN103154885A CN2011800451782A CN201180045178A CN103154885A CN 103154885 A CN103154885 A CN 103154885A CN 2011800451782 A CN2011800451782 A CN 2011800451782A CN 201180045178 A CN201180045178 A CN 201180045178A CN 103154885 A CN103154885 A CN 103154885A
Authority
CN
China
Prior art keywords
hardware thread
register
thread
instruction
hardware
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011800451782A
Other languages
English (en)
Other versions
CN103154885B (zh
Inventor
G·R·弗雷泽
R·霍尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103154885A publication Critical patent/CN103154885A/zh
Application granted granted Critical
Publication of CN103154885B publication Critical patent/CN103154885B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Abstract

第一硬件线程执行软件程序指令,其指令第一硬件线程以发起第二硬件线程。这样,第一硬件线程标识可由第一硬件线程访问的一个或者多个寄存器值。接着第一硬件线程向由第二硬件线程可访问的一个或者多个寄存器复制所标识的寄存器值。继而,第二硬件线程访问在可访问寄存器中包括的所复制寄存器值,并且相应地执行软件代码。

Description

在没有管理程序介入的情况下获得和释放硬件线程
技术领域
本公开涉及在没有管理程序(hypervisor)介入的情况下获取和释放硬件线程。更特别地,本公开涉及维护发起辅助硬件线程的硬件线程,其继而执行软件代码段。
背景技术
当今的计算机系统通常包括执行独立指令流的多线程处理器。在硬件线程上执行的软件程序可以从监控程序(supervisor program)(例如管理程序)请求对另一硬件线程的控制。例如,软件程序可以向用于另一硬件线程的监控程序发送请求以便让该另一个硬件线程执行代码段(例如子例程)。监控程序检查硬件线程可用性,并且如果可用则向软件程序指派该另一个硬件线程。接着,软件程序利用该另一个硬件线程来执行代码段。在很多情况下,软件程序利用该另一个硬件线程持续有限时间。照这样,当该另一个硬件线程完成代码执行时,监控程序从软件程序释放该另一个硬件线程的资源。
发明内容
第一硬件线程执行软件程序指令,其指令所述第一硬件线程以发起第二硬件线程。这样,第一硬件线程标识可由第一硬件线程访问的一个或者多个寄存器值。第一硬件线程接着将所标识的寄存器值复制到由第二硬件线程可访问的一个或者多个寄存器。继而,第二硬件线程访问在可访问寄存器中包括的所复制寄存器值,并相应地执行软件代码。
由于前文是概要,因而不得已包含简化、概括以及对细节的省略;因此,本领域技术人员将意识到该概要仅是说明性的,而并非旨在以任何方式进行限制。本公开的其他方面、创造性特征以及优点(其仅仅由权利要求书限定)在以下阐明的非限制性详细描述中将变得明显。
附图说明
通过参考附图,可以更好地理解本公开,并且本公开的大量对象、特征和优点对于本领域技术人员而言将变得明显,其中:
图1是示出在多线程处理器上发起辅助硬件线程的处理器的软件程序的示例性示图;
图2是示出辅助线程状态寄存器(ATSR)的示例性示图;
图3A是示出由软件程序利用来管理辅助硬件线程状态的软件状态存储区的示例性示图;
图3B是示出由发起硬件线程利用来管理辅助硬件线程状态的硬件状态存储区的示例性示图;
图4是示出在发起硬件线程调用辅助硬件线程时采取的步骤的示例性流程图;
图5是示出在辅助硬件线程执行软件代码时采取的步骤的示例性流程图;
图6是示出分支和发起轻型(BAIL)指令的示例性示图;
图7是示出分支和发起重型(BAIH)指令的示例性示图;
图8是示出停止辅助线程(SAT)指令的示例性示图;
图9是示出由发起硬件线程在分支和发起指令期间向辅助线程寄存器复制的寄存器值的示例性示图;
图10是示出在执行分支条件if辅助线程执行(BCE)指令时所采取的步骤的示例性流程图;
图11是示出在执行条件寄存器设置if辅助线程执行(CRSE)指令时所采取的步骤的示例性流程图;
图12是示出分支条件if辅助线程执行(BCE)指令的示例性示图;
图13是示出条件寄存器设置if辅助线程执行(CRSE)指令的示例性示图;
图14是示出调用多个辅助硬件线程的发起硬件线程的示例性示图;
图15是示出调用辅助硬件线程的发起硬件线程(该辅助硬件线程接着调用其他辅助硬件线程)的示例性示图;
图16是示出在不同处理器上调用辅助硬件线程的发起硬件线程的示例性示图;以及
图17是其中可以实现在此描述的方法的信息处理系统的框图示例。
具体实施方式
在以下描述和附图中,阐明了某些特定细节以便提供对本公开各种实施方式的透彻理解。然而,在以下公开中并不阐明通常与计算和软件技术相关联的特定公知细节,以避免不必要地使得本公开的各种实施方式变得模糊。此外,本领域普通技术人员将理解,他们可以在没有以下描述的细节中的一个或多个的情况下实践本公开的其他实施方式。最后,尽管参考了以下公开中的步骤和序列来描述各种方法,但这种描述是为了提供对本公开的实施方式的清楚的实现,并且不应当将这些步骤和步骤的序列视为是实践本公开所必需的。而是,下文旨在提供对本公开的示例的详细描述,并且不应当被视为是对本公开本身的限制。相反地,任何数目的变型均可以落入本公开的范围内,本公开的范围由说明书所附的权利要求书限定。
如本领域技术人员将意识到的,本公开的方面可以体现为系统、方法或者计算机程序产品。相应地,本公开的方面可以采取完全硬件实施方式、完全软件实施方式(包括固件、驻留软件、微代码等)或者组合了软件和硬件方面的实施方式的形式,在此可以将其统称为“电路”、“模块”或者“系统”。另外,本公开的方面可以采取计算机程序产品的形式,该计算机程序产品体现在具有体现在其上的计算机可读程序代码的一个或多个计算机可读介质中。
可以利用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以例如是但不限于电子的、磁的、光的、电磁的、红外的或半导体的系统、装置或设备,或者前述各项的任何合适的组合。计算机可读存储介质的更多特定示例(非穷举列表)将包括以下各项:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式压缩光盘只读存储器(CD-ROM)、光存储设备、磁存储设备,或者前述各项的任何合适的组合。在本文献的上下文中,计算机可读存储介质可以是可以包含或存储用于由指令执行系统、装置或者设备使用的或者结合指令执行系统、装置或者设备而使用的程序的任何有形介质。
计算机可读信号介质可以包括所传播的其中(例如在基带中或者作为载波的一部分)体现有计算机可读程序代码的数据信号。此类所传播的信号可以采取各种形式中的任何种类,包括但不限于电磁的、光学的或者其任何合适的组合。计算机可读信号介质可以是并非计算机可读存储介质的并且能够传递、传播或者传输用于由指令执行系统、装置或者设备使用的或者结合指令执行系统、装置或者设备而使用的程序的任何计算机可读介质。
可以使用任何适当的介质来传送体现在计算机可读介质上的程序代码,这些介质包括但不限于无线的、有线的、光纤电缆、RF等,或者前述各项的任何合适的组合。
用于执行针对本公开的方面的操作的计算机程序代码可以采用一种或多种编程语言的任何组合来编写,这些编程语言包括诸如Java、Smalltalk、C++等面向对象的编程语言以及诸如“C”编程语言、VHDL(超高速集成电路硬件描述语言)或类似的编程语言之类的常规的过程编程语言。程序代码可以作为独立软件包完全在用户的计算机上执行、部分地在用户的计算机上执行,部分地在用户的计算机上并且部分地在远程计算机上执行,或者完全在远程计算机或服务器上执行。在后一种场景中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以连接到外部计算机(例如使用因特网服务提供商、通过因特网)。
下文参考根据本公开的实施方式的方法、装置(系统)以及计算机程序产品的流程图图示和/或框图来描述本公开的方面。应当理解,流程图图示和/或框图的每个块以及流程图图示和/或框图中的块的组合可以通过计算机程序指令来实现。可以将这些计算机程序指令提供给通用计算机、专用计算机或者其他可编程数据处理装置的处理器以产生机器,从而使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的一个或多个块中所指定的功能/动作的装置。还可以将这些计算机程序指令存储在计算机可读介质中,该计算机可读介质能够引导计算机、其他可编程数据处理装置或者其他设备以特定方式运转,从而使得存储在计算机可读介质中的指令产生制造品,该制造品包括实现在流程图和/或框图的一个或多个块中所指定的功能/动作的指令。
还可以将这些计算机程序指令加载到计算机、其他可编程数据处理装置或者其他设备上,以使得在计算机、其他可编程装置或者其他设备上执行一系列操作性步骤以产生计算机实现的过程,从而使得在计算机或其他可编程装置上执行的指令提供用于实现在流程图和/或框图的一个或多个块中所指定的功能/动作的过程。
以下详细描述将总体上遵循如以上阐明的公开的概要,根据需要进一步说明和扩展对本公开的各种方面和实施方式的限定。
图1是示出在不利用管理程序的情况下在多线程处理器上发起辅助硬件线程的处理器的软件程序的示例性示图。当软件程序110开始执行时,处理器100向软件程序110指派发起硬件线程120。由于软件程序110对发起硬件线程120执行指令115,因此指令115之一是“分支和发起指令”,其指示发起硬件线程120检查另一硬件线程是否可用,诸如用于执行软件程序110的指令(指令145)的子集。
本公开描述了两种类型的分支和发起指令,其是分支和发起轻型(BAIL)指令以及分支和发起重型(BAIH)指令。正如在此所讨论的那样,BAIL指令和BAIH指令之间的差异是当辅助硬件线程开始执行时,BAIH指令确保所有发起硬件线程存储操作对辅助硬件线程来说是可见的。照这样,当软件程序要求存储器同步时,该软件程序可以利用BAIH指令而不是BAIL指令。相反,当软件程序不要求存储器同步时,该软件程序可以利用BAIL指令而不是BAIH指令,这是因为BAIL指令不保证存储器同步并且从而执行得更快。如本领域技术人员能够意识到的那样,可以获得其他类型的分支和发起指令以指示发起硬件线程来发起辅助硬件线程。
当发起硬件线程120执行分支和发起指令时,发起硬件线程120检查硬件状态存储125以确定另一硬件线程是否可用。例如,处理器100可以包括硬件线程库,并且硬件状态存储125包括指示哪个硬件线程可用的信息(参见图3B和对应的文本以便了解进一步的细节)。当辅助硬件线程可用时,发起硬件线程120调用辅助硬件线程150,并且将寄存器值从发起线程寄存器140复制到辅助线程寄存器170。在一个实施方式中,发起硬件线程120从发起线程寄存器140复制到辅助线程寄存器170的寄存器值取决于分支和发起指令的类型以及指令参数值(参见图6-图7以及对应的文本以便了解进一步的细节)。在一个实施方式中,发起硬件线程120和辅助硬件线程150各自具有用于执行指令的专用执行单元。
发起硬件线程120通过对辅助线程状态寄存器(ATSR)130包括的辅助线程有效(ATV)位进行设置,向软件程序110通知辅助硬件线程150可用(参见图2、图4以及对应的文本以便了解进一步的细节)。发起硬件线程120还向辅助硬件线程150指派辅助线程号(ATN)值,发起硬件线程120将该ATN值存储在硬件状态存储125中,并且软件程序110将该ATN值存储在软件状态存储115中,以跟踪辅助硬件线程150的状态。
一旦辅助硬件线程150发起,软件程序110就对辅助硬件线程150执行指令145。辅助硬件线程150继续执行指令145直到例如辅助硬件线程150发生如下情况为止:1)完成代码执行;2)执行停止辅助线程(SAT)指令;3)发起硬件线程120执行SAT指令并且终止辅助硬件线程150;或者4)处理器100终止辅助硬件线程150(参见图5、图8以及对应的文本以便了解进一步的细节)。当辅助硬件线程150停止执行时,辅助硬件线程150在发起硬件线程120的辅助线程状态寄存器130中存储信息,诸如终止指示符和地址信息(参见图2、图8以及对应的文本以便了解进一步的细节)。
在一个实施方式中,软件程序110请求多个辅助硬件线程执行不同代码段。在这一实施方式中,最后一个停止执行的辅助硬件线程在辅助线程状态寄存器130中写入终止指示符和地址信息(参见图5、图14以及对应的文本以便了解进一步的细节)。
在另一实施方式中,辅助硬件线程150可以调用后续的辅助硬件线程。在这一实施方式中,辅助硬件线程150变为后续的辅助硬件线程的“发起硬件线程”,并且使用辅助线程状态寄存器160来存储关于后续辅助硬件线程的信息(参见图15以及对应的文本以便了解进一步的细节)。在这一实施方式中,当发起线程执行指令以终止辅助硬件线程150时,辅助硬件线程150自动地终止后续的辅助硬件线程。
在又一实施方式中,软件程序110可能希望检查辅助硬件线程150的特定状态,以便确定辅助硬件线程150是否仍然正在执行。在这一实施方式中,软件程序110对发起线程120执行“辅助线程检查”指令,诸如分支条件if辅助线程执行(BCE)指令或条件寄存器设置if辅助线程执行(CRSE)指令。在这一实施方式中,软件程序110从软件状态存储115获取对应于辅助硬件线程150的辅助线程号(ATN)并且将该ATN存储在通用寄存器中。接着,软件程序110在由发起硬件线程120所执行的BCE指令中包括通用寄存器号。发起硬件线程120从通用寄存器获取ATN并且访问硬件状态存储125以检查辅助硬件线程150的状态。接着,发起硬件线程120根据辅助硬件线程150的状态进行分支(或者设置条件位)(参见图10-图13以及对应的文本以便了解进一步的细节)。
图2是示出辅助线程状态寄存器(ATSR)的示例性示图。诸如发起硬件线程120之类的发起硬件线程使用ATSR 130来跟踪整体辅助硬件线程状态。ATSR 130包括用于存储此类跟踪信息的字段210-260。
辅助线程号(ATN)字段210包括对应于最近发起的辅助硬件线程的编号。例如,如果发起硬件线程120按顺序发起辅助硬件线程1、2和3,则ATN字段包括编号“3”。照这样,ATSR 130是平台可缩放的,这是因为ATSR 130不对特定发起硬件线程可以发起的辅助硬件线程的数量施加限制(除ATN字段210的位数量限制以外)。
辅助线程号有效(ATV)位220包括指示ATN字段210的有效性的位。软件程序检查该位以确定所请求的辅助硬件线程是否实际发起(参见图4以及对应的文本以便了解进一步的细节)。
ATSR 130包括辅助线程执行指示符,在一个实施方式中,该辅助线程执行指示符是辅助线程执行(ATE)位230,其表明当前是否有任何辅助硬件线程正在执行。软件程序可以利用单一读取操作来检查ATE位230并且标识是否所有辅助硬件线程都完成了执行(参见图4、图5以及对应的文本以便了解进一步的细节)。
在一个实施方式中,栏240-260包括仅在ATE位230指示没有辅助硬件线程正在执行时才有效的信息。辅助线程状态(ATS)字段240包括指示最后一个辅助硬件线程的终止的根据(例如辅助线程执行了SAT指令,发起线程执行了SAT指令,遇到错误,处理器预先清空了资源等)的终止指示符。
SAT参数(SATP)字段250包括当最后一个正在执行的辅助硬件线程执行SAT指令时该辅助硬件线程传递给发起硬件线程的参数。例如,SAT参数可以指示辅助硬件线程是否成功地完成了它的任务(代码执行)。最后,下一指令(NI)字段260包括跟随辅助硬件线程所执行的最后一个指令的指令的地址。
图3A是示出由软件程序利用来管理辅助硬件线程状态的软件状态存储区的示例性示图。如可以看到的,软件状态存储115包括用于当前正在执行的辅助硬件线程的辅助线程号(ATN)值(栏300)和对应的起始地址(栏310)的列表。在一个实施方式中,起始地址是BAIL/BAIH指令针对辅助硬件线程指定的用以开始执行代码的地址(参见图6、图7以及对应的文本以便了解进一步的细节)。在又一实施方式中,软件状态存储115可以不包括起始地址,而是存储用于对应的任务的符号式名称,并且在这一实施方式中,软件状态存储115具有将符号式名称与代码段相关联的不同的表。软件状态存储115可以存储在易失性存储器或非易失性存储器区(诸如计算机硬盘驱动器)上。
图3B是示出由硬件线程利用来管理辅助硬件线程状态的硬件状态存储区的示例性示图。类似于以上讨论的软件状态存储115,硬件状态存储125包括ATN值(栏320)、针对辅助硬件线程的对应硬件线程号(栏330)以及每个辅助硬件线程的状态(栏340)的列表。在一个实施方式中,栏330中的对应线程号可以与栏320中的辅助线程号相同。正如本领域技术人员能够意识到的那样,硬件状态存储125可以是存储信息的矢量,从而使得该矢量中的每个条目指示特定硬件线程的状态。
图4是示出在发起硬件线程调用辅助硬件线程时所采取的步骤的示例性流程图。软件程序处理开始于400处,随后软件程序在步骤405处执行分支和发起轻型(BAIL)或分支和发起重型(BAIH)指令。在一个实施方式中,BAIL与BAIH指令之间的差异在于发起硬件线程所执行的存储器同步的量(参见图9以及对应的文本以便了解进一步的细节)。
执行软件程序的发起硬件线程处理开始于450处,随后发起硬件线程访问硬件状态存储125,并且检查是否有不同的硬件线程(辅助硬件线程)可用。硬件状态存储125包括关于处理器的硬件线程可用性的信息(参见图3B以及对应的文本以便了解进一步的细节)。
发起硬件线程确定另一硬件线程是否可用于用作辅助硬件线程(判定460)。如果辅助硬件线程不可用,则判定460分支到“否”分支462,随后发起硬件线程在辅助线程状态寄存器(ATSR)ATV位220中将辅助线程号有效位设置为“0”(步骤465)。接着,由于辅助硬件线程不可用,因此发起硬件线程在步骤440处执行目标为辅助硬件线程的任务,并且处理在445处结束。
另一方面,如果辅助硬件线程可用,则判定460分支到“是”分支465,随后发起硬件线程在步骤470处将辅助线程值(ATV)位设置为“1”。接下来,发起硬件线程生成辅助线程号(ATN)(例如对计数器或随机数生成器增值),并且在硬件状态存储125中存储辅助线程号,以及对被指派为辅助硬件线程的线程的指示(例如另一号码或与ATN相同的号码)。发起硬件线程还在ATSR辅助线程号字段210中存储ATN值(步骤475)。
在步骤480处,发起硬件线程标识要从它的寄存器复制到辅助硬件线程寄存器的特定寄存器值。发起硬件线程基于BAIL/BAIH指令的参数来选择寄存器值。在步骤485处,发起硬件线程将标识的寄存器值从发起线程寄存器140复制到辅助线程寄存器170。
返回参考软件程序,软件程序在步骤410处检查ATSR ATV位220,以确定所请求的辅助硬件线程是否发起(判定415)。如果辅助硬件线程没有发起(例如ATV位=0),则软件程序执行具有如以上讨论的目标为辅助硬件线程的发起线程的任务(步骤440),并且处理在445处结束。
另一方面,如果所请求的辅助硬件线程发起了,则判定415分支到“是”分支418;随后,在一个实施方式中,软件程序可以从ATSR ATN字段210获取辅助线程号,并且将所获取的ATN值存储在软件状态存储115中。在另一实施方式中,软件程序可以不跟踪发起辅助硬件线程(诸如当辅助硬件线程的任务是仅仅将数据预取到高速缓存中时),以便改进发起硬件线程的整体性能。软件状态存储115包括用于跟踪软件程序所调用的辅助硬件线程的信息(参见图3A以及对应的文本以便了解进一步的细节)。接着,软件程序使用所发起的辅助硬件线程来执行指令(预定的处理块490,参见图5以及对应的文本以便了解进一步的细节)。
当辅助硬件线程终止(由于完成代码执行或者被迫终止)时,辅助硬件线程将ATSR辅助线程执行(ATE)位230清除(clear)。在一个实施方式中,软件程序在等待辅助硬件线程完成的同时执行其他任务(步骤425)。在另一实施方式中,软件程序可以请求多个辅助硬件线程执行该软件程序的各种区段。在这一实施方式中,最后一个完成的辅助硬件线程对ATSR ATE位230清除(参见图5以及对应的文本以便了解进一步的细节)。
在一个实施方式中,当辅助硬件线程完成时,软件程序可以在步骤430处检查辅助硬件线程的结果,诸如将这些结果用于后续计算。软件程序和发起硬件线程分别在435和495处结束。在一个实施方式中,在发起硬件线程上执行的软件程序可以前进以执行其他任务,诸如发起附加辅助硬件线程。
图5是示出在辅助硬件线程执行指令时所采取的步骤的示例性流程图。辅助硬件线程处理开始于500处,随后辅助硬件线程访问存储在辅助线程寄存器170中的寄存器值,并且在步骤505处执行软件程序110的指令。
在指令执行期间,辅助硬件线程确定是否响应于完成指令执行或者接收到终止执行的指示而终止执行(判定510)。在一个实施方式中,辅助硬件线程可以完成指令执行或者执行停止辅助线程(SAT)指令,其指示辅助硬件线程终止指令执行(参见图8以及对应的文本以便了解进一步的细节)。在另一实施方式中,发起硬件线程可以执行SAT指令,并且接着终止辅助硬件线程。在又一实施方式中,控制发起硬件线程和辅助硬件线程的处理器可以终止辅助硬件线程以便辅助硬件线程执行其他更高优先级的程序,或者以便回收辅助硬件线程的资源。
如果辅助硬件线程应当继续执行指令,则判定510分支到“否”分支517,其循环返回以继续执行指令。这一循环继续,直到辅助硬件线程终止为止,此时判定510分支到“是”分支514。
在步骤520处,辅助硬件线程将在硬件状态存储125中的它的状态从“正在执行”改变为“终止”。接下来,辅助硬件线程检查其他辅助硬件线程的状态(步骤525)以便确定其他辅助硬件线程是否仍然正在执行(判定530)。如果其他辅助硬件线程仍然正在执行,则判定530分支到“是”分支532,随后辅助硬件线程在步骤560处释放它的资源,并且辅助硬件线程处理在570处结束。在一个实施方式中,在辅助硬件线程终止之后,处理器(例如处理器100)可以更新发起硬件线程的ATSR位。
另一方面,如果没有其他辅助硬件线程正在执行,则判定530分支到“否”分支534,随后辅助硬件线程在步骤540处在ATSR辅助线程状态(ATS)字段240中存储终止指示符(例如辅助线程执行了SAT指令,发起线程执行了SAT指令,遇到错误,处理器预先清空了资源等)。辅助硬件线程在步骤545处在ATSR SATP字段250中存储SAT参数。例如,如果ATS字段指示由于辅助硬件线程执行了SAT指令因此该辅助硬件线程终止,则SATP字段250可以包括指示辅助硬件线程是否成功地完成了它的任务的参数。
在步骤550处,辅助硬件线程在ATSR NI字段260中存储对应于紧接着辅助线程所执行的最后一个指令的下一指令的地址。最后,辅助硬件线程在步骤555处对ATSR ATE字段230中的辅助线程执行指示符清除,从而向软件程序110指示每个辅助硬件线程都已经停止执行(参见图4以及对应的文本以便了解进一步的细节)。辅助硬件线程在560处释放它的资源并且在570处结束。
在一个实施方式中,在步骤555之前,处理器可以确保由辅助硬件线程执行的所有存储对发起硬件线程来说是可见的。在这一实施方式中,通过确保辅助硬件线程的所有存储对发起硬件线程来说是可见的,发起硬件线程可以读取存储在存储器中的辅助硬件线程的结果(参见图4以及对应的文本以便了解进一步的细节)。
图6是示出分支和发起轻型(BAIL)指令的示例性示图。BAIL指令600使得软件程序100能够在不需要管理程序介入、并且不会不利地影响管理程序操作或其他正在执行的程序情况下,从多线程处理器高效地请求辅助硬件线程。
BAIL指令600包括op代码字段(位0-5)以及扩展的op代码字段(位21-30),当硬件线程执行时,这些代码字段指示硬件线程检查辅助硬件线程是否可用。如果可用,则发起硬件线程将特定寄存器值(诸如基址寄存器组(通用寄存器、特许控制寄存器等))连同基于复制位“6”的其他寄存器值(浮点、矢量单元等),从发起硬件线程的寄存器复制到辅助硬件线程的寄存器(参见图9以及对应的文本以便了解进一步的细节)。一旦复制了,辅助硬件线程就开始执行对应于位于BAIL指令600的位7-20中的目标地址的代码。正如本领域技术人员能够意识到的那样,BAIL指令600可以包括更多或更少的位和/或不同于图6中所示的而被划分。
图7是示出分支和发起重型(BAIH)指令的示例性示图。BAIH指令700类似于图6中示出的BAIL指令。然而,与BAIL指令相比,BAIH指令还可以执行存储器同步步骤。
BAIH指令包括op代码字段(位0-5)以及扩展的op代码字段(位21-30),当硬件线程执行时,这些字段指示硬件线程检查辅助硬件线程是否可用。如果可用,则发起硬件线程复制特定寄存器值(诸如基址寄存器组(通用寄存器、特许控制寄存器等))以及基于复制位“6”的其他寄存器(浮点、矢量单元等)(参见图9以及对应的文本以便了解进一步的细节)。
一旦发起硬件线程将寄存器值复制到辅助硬件线程寄存器,辅助硬件线程就开始执行对应于位于BAIH指令600的位7-20中的目标地址的代码。正如本领域技术人员能够意识到的那样,BAIH指令可以包括更多或更少的位和/或以不同于图7所示方式而被划分。
图8是示出停止辅助线程(SAT)指令的示例性示图。随着辅助硬件线程执行,辅助硬件线程(或发起硬件线程)可以执行SAT指令,该SAT指令指示辅助硬件线程停止执行。当发起线程执行SAT指令800时,该发起线程指示辅助硬件线程停止执行(终止)。当辅助硬件线程执行SAT指令800时,该辅助线程停止其自身的执行。
SAT指令800包括op代码字段(位0-5)以及扩展的op代码字段(位21-30),当发起硬件线程执行时,这些字段通知发起硬件线程指示一个或多个辅助硬件线程停止执行。SAT指令800还包括终止位20,当由发起硬件线程执行时,终止位20指示发起硬件线程终止所有激活的辅助硬件线程或者终止特定的辅助硬件线程。当位20表示终止特定辅助硬件线程时,位6-10包括源寄存器(RS)位置(例如通用寄存器位置),该源寄存器位置包括对应于要终止的辅助硬件线程的辅助线程号(ATN)。
在另一实施方式中,当辅助硬件线程执行SAT指令800时,该辅助硬件线程可以使用位20来向它的发起硬件线程传递回SAT参数。例如,辅助硬件线程可以在其完成代码执行时在位20中存储“1”,并且可以在其未能完成代码执行时在位20中存储“0”。在这一实施方式中,辅助硬件线程在其执行SAT指令800时忽略位6-10。
在又一实施方式中,SAT指令800可以不具有RS字段(位6-10)。在这一实施方式中,发起硬件线程终止其发起的所有激活的辅助硬件线程,而不考虑位20的值如何(例如忽略位20)。
图9是示出在BAIL和BAIH指令期间发起硬件线程从发起线程寄存器复制到辅助线程寄存器的寄存器值的示例性示图。图9示出了:在这些指令期间,发起硬件线程复制基址寄存器值(例如通用寄存器、条件寄存器以及对大多数计算任务来说必要的其他寄存器)。
在一个实施方式中,发起硬件线程将地址转换寄存器值从发起硬件线程寄存器140复制到辅助硬件线程寄存器170(例如用于将有效或虚拟地址变换为实际地址的寄存器值)。在另一实施方式中,发起硬件线程和辅助硬件线程可以共享相同的地址转换寄存器,或者可以预设辅助硬件线程的转换寄存器。在这一实施方式中,软件程序可以将发起硬件线程配置为使得该发起硬件线程不复制地址转换寄存器值。
基于BAIL/BAIH指令的复制位,发起硬件线程还可以将一组依赖于实现的寄存器值、从发起硬件线程寄存器140复制到辅助硬件线程寄存器170(参见图6以及对应的文本以便了解进一步的细节)。在一个实施方式中,该组依赖于实现的寄存器包括矢量寄存器、浮点寄存器以及与辅助硬件线程偶尔要求的专门的计算任务相关联的其他寄存器组。
在一个实施方式中,为了从先前的计算移除任何残留值,发起硬件线程可以对辅助硬件线程寄存器170中的不包括从发起硬件线程寄存器140复制的寄存器值的寄存器清除。
虽然BAIL和BAIH指令可以执行一组相同的寄存器复制,但在一个实施方式中,其指令在发起硬件线程的存储器同步方面不同。例如,在处理器不按顺序执行存储器“存储”的情况下,并不保证由一个指令执行的存储器存储在接下来的指令执行之前完成。因此,在这一示例中,如果紧接着存储操作的指令发起辅助硬件线程,则不存在在辅助线程发起之前完成存储操作的保证。如果存储操作未完成,则存储操作值在不确定的时间内对辅助线程来说可能不可见。照这样,当辅助硬件线程要求访问所存储的信息以便执行其任务时就会出现问题。
BAIH指令减轻了这一问题,这是因为BAIH指令确保了由发起线程执行的存储在辅助硬件线程发起之前已经完成到足以提供辅助硬件线程可见性,从而允许辅助硬件线程读取存储器位置并且相应地执行任务。当软件程序不要求存储器同步时,由于BAIL指令的执行速度(这是因为其不保证存储器同步),该软件程序可以利用BAIL指令。
在一个实施方式中,BAIL和BAIH指令具有很多变型。例如,对于并未乱序执行存储操作的处理器,处理器可以不利用BAIH指令,但某些实施方式可能利用一种形式的BAIL指令,该BAIL指令相对于BAIH指令复制更大的一组寄存器。在另一示例中,不保证按顺序的存储的实现可以将BAIH指令配置为使得发起硬件线程根据特定应用的需要而复制比BAIL指令更多的寄存器。
图10是示出在执行分支条件if辅助线程执行(BCE)指令时所采取的步骤的示例性流程图。当软件程序要求特定辅助硬件线程的状态时可能出现状况。在这些状况中,软件程序可以对发起硬件线程执行条件转移指令,其基于特定辅助硬件线程是否仍然正在执行而进行分支。
BCE软件程序执行开始于1000处,随后软件程序从软件状态存储115获取对应于特定辅助线程的辅助线程号(ATN)值(步骤1005)。在步骤1010处,软件程序在特定通用寄存器(例如寄存器“4”)中存储ATN值,并且在另一通用寄存器(例如寄存器“5”)中存储目标地址,其标识了当辅助硬件线程仍然正在执行时发起硬件线程要执行的代码中的位置(下面将讨论)。接下来,软件程序对发起硬件线程执行分支条件if辅助线程执行(BCE)指令,该指令包括ATN值和目标地址的通用寄存器位置(步骤1015)。
发起硬件线程执行开始于1040处,随后发起硬件线程从BCE指令提取通用寄存器号,并且从通用寄存器获取ATN以及目标地址(步骤1050)。接下来在步骤1060处,发起硬件线程检查硬件状态存储125中的对应的辅助硬件线程的状态。
发起硬件线程基于步骤1060处的状态来确定辅助硬件线程是否仍然正在执行(判定1070)。如果辅助硬件线程仍然正在执行,则判定1070分支到“是”分支1072,随后发起硬件线程分支到在步骤1050中获取的目标地址(步骤1080)。另一方面,如果辅助硬件线程终止了,则判定1070分支到“否”分支1078,随后发起硬件线程继续在下一指令处执行(步骤1090)。
软件程序基于发起硬件线程是否分支来确定特定辅助硬件线程是否仍然正在执行(判定1020)。如果发起硬件线程出现分支,则判定1020分支到“是”分支1022,随后软件程序在步骤1024处根据辅助硬件线程仍然正在执行来执行任务,诸如继续对与给予辅助线程的任务无关的任务进行工作。另一方面,如果发起硬件线程没有出现分支,则判定1020分支到“否”分支1026,随后软件程序根据辅助硬件线程终止来执行任务(步骤1028)。例如,软件程序可以检查共享存储器位置以确定辅助硬件线程是否成功地完成了它的操作,并且相应地执行附加任务(例如开始另一辅助线程、执行其他工作等)。软件程序和发起硬件线程处理分别在1030和1095处结束。
图11是示出在执行条件寄存器设置if辅助线程执行(CRSE)指令时所采取的步骤的示例性流程图。该CRSE指令类似于在图10中讨论的BCE指令,只不过发起线程基于特定辅助硬件线程的状态设置条件位而不是分支到目标地址。
CRSE软件程序执行开始于1100处,随后软件程序从软件状态存储115获取对应于特定辅助线程的辅助线程号(ATN)值(步骤1105)。在步骤1110处,软件程序在特定的通用寄存器(GPR)中存储ATN值以及条件寄存器位位置。条件寄存器位位置对应于发起硬件寄存器基于辅助硬件线程的状态而设置的条件寄存器位(下面将讨论)。接下来,软件程序在CRSE指令中包括GPR寄存器位置并且使用发起硬件线程来执行CRSE指令(1115)。
发起硬件线程执行开始于1140处,随后发起硬件线程从CRSE指令提取通用寄存器号,并且从对应于所提取的通用寄存器号的通用寄存器获取ATN以及条件寄存器位位置(步骤1150)。接下来,发起硬件线程在步骤1160处检查硬件状态存储125中的所获取的ATN的对应的辅助硬件线程的状态。
发起硬件线程基于步骤1160处的状态来确定辅助硬件线程是否仍然正在执行(判定1170)。如果辅助硬件线程仍然正在执行,则判定1170分支到“是”分支1072,随后发起硬件线程在步骤1180处设置条件寄存器位,该位对应于以上讨论的所获取的条件寄存器位位置。另一方面,如果辅助硬件线程终止了,则判定1170分支到“否”分支1078,随后发起硬件线程将条件寄存器位1185设置为“0”(步骤1090)。
软件程序通过检查条件寄存器位1185来确定特定辅助硬件线程是否仍然正在执行,并且在步骤1120处相应地执行任务。软件程序和发起硬件线程处理分别在1130和1195处结束。
图12是示出分支条件if辅助线程执行(BCE)指令的示例性示图。BCE指令1200使得软件程序能够确定特定辅助硬件线程是否仍然正在执行代码,这是通过在发起硬件线程确定辅助硬件线程正在执行时指示发起硬件线程分支到目标地址来实现的。
BCE指令1200包括op代码字段(位0-5)以及扩展的op代码字段(位16-20),当硬件线程执行时,这些字段指示“发起”硬件线程检查辅助硬件线程是否正在执行。BCE指令1200包括位11-15,这些位标识了包括供辅助硬件线程检查的辅助线程号(ATN)的通用寄存器。如果辅助硬件线程仍然正在执行,则发起硬件线程分支到包括在由位6-10标识的通用寄存器中的目标地址(参见图10以及对应的文本以便了解进一步的细节)。正如本领域技术人员能够意识到的那样,BCE指令1200可以包括更多或更少的位和/或以不同于图12所示方式而被地划分。
图13是示出条件寄存器设置if辅助线程执行(CRSE)指令的示例性示图。CRSE指令1300使得软件程序能够确定特定辅助硬件线程是否仍然正在执行代码,这是通过在发起硬件线程确定辅助硬件线程正在执行时指示发起硬件线程设置条件寄存器位来实现的。
CRSE指令1300包括op代码字段(位0-5)以及扩展的op代码字段(位16-20),当硬件线程执行时,这些字段指示“发起”硬件线程检查辅助硬件线程是否正在执行。BCE指令1200包括位11-15,这些位标识了包括供辅助硬件线程检查的辅助线程号(ATN)的通用寄存器。位6-10指定了如下通用寄存器,该通用寄存器包括当辅助硬件线程正在执行时发起硬件寄存器设置的条件寄存器位位置(参见图11以及对应的文本以便了解进一步的细节)。正如本领域技术人员能够意识到的那样,处理器将条件寄存器位用于各种类型的分支指令,或者用于指示状态,诸如算术运算溢出。正如本领域技术人员还能够意识到的那样,BCE指令1200可以包括更多或更少的位和/或以不同于图13所示方式而被划分。
图14是示出调用多个辅助硬件线程的发起硬件线程的示例性示图。当软件程序1410开始时,处理器100向软件程序1410指派发起硬件线程1420。软件程序1410包括在此描述的多个分支和发起指令(例如BAIL和/或BAIH指令),诸如用于执行特定任务的不同的代码段。接着,发起硬件线程1420检查硬件线程可用性、发起辅助硬件线程1450-1470并且向每个辅助硬件线程指派特定的辅助线程号(ATN)。发起硬件线程1420在硬件状态存储1440中存储ATN并且软件程序1410在软件状态存储1415中存储ATN以用于跟踪目的。
发起硬件线程1420包括ATSR 1430,该ATSR 1430存储关于最近发起的辅助硬件线程的信息(例如辅助硬件线程1470的ATN)。接着,辅助硬件线程1450-1470中最后一个停止执行的辅助硬件线程在ATSR 1430中存储信息(参见图2、图5以及对应的文本以便了解进一步的细节)。
图15是示出调用辅助硬件线程的发起硬件线程(该辅助硬件线程接着调用其他辅助硬件线程)的示例性示图。当软件程序1510开始时,处理器1500向软件程序1510指派发起硬件线程1520。软件程序1510包括在此描述的例如可以捆绑在软件代码内的多个分支和发起指令。
发起硬件线程1520执行分支和发起指令之一,这引起发起硬件线程1520调用辅助硬件线程1550。发起硬件线程1520在硬件状态存储1540中存储用于辅助硬件线程1550的对应的ATN,并且软件程序1510在软件状态存储1515中存储ATN,正如在此所讨论的那样。
辅助硬件线程1550开始执行,并且执行两个分支和发起指令。接着,辅助硬件线程1550发起辅助硬件线程1580-1590,并且相应地在硬件状态存储1570中存储对应的ATN。软件程序1510还在软件状态存储1515中存储ATN,正如在此所讨论的那样。
此外,辅助硬件线程1550使用ATSR 1560来跟踪辅助硬件线程1580-1590。照这样,ATSR 1560包括关于最近发起的辅助硬件线程的信息(例如辅助硬件线程1590的ATN)。接着,辅助硬件线程1580-1590中最后一个停止执行的辅助硬件线程在ATSR 1560中存储信息(参见图2、图5以及对应的文本以便了解进一步的细节)。
图16是示出调用不同处理器上的辅助硬件线程的发起硬件线程的示例性示图。图16类似于图15,只不过辅助硬件线程在与执行发起硬件线程的发起处理器不同的处理器上执行。
当软件程序1610开始时,处理器1600向软件程序1610指派发起硬件线程1620。软件程序1610包括在此描述的例如可以捆绑在软件代码内的多个分支和发起指令。
发起硬件线程1620执行分支和发起指令之一,这引起发起硬件线程调用处理器1650上的辅助硬件线程1650,并且在硬件状态存储1640中存储对应的ATN。软件程序1610还在软件状态存储1615中存储ATN。
辅助硬件线程1660开始执行,并且执行两个分支和发起指令。接着,辅助硬件线程1660发起辅助硬件线程1690-1695,并且相应地在硬件状态存储1680中存储对应的ATN。软件程序1610还在软件状态存储1615中存储ATN,正如在此所讨论的那样。
辅助硬件线程1660使用ATSR 1670来跟踪辅助硬件线程1690-1695。照这样,ATSR 1670包括关于最近发起的辅助硬件线程的信息(例如辅助硬件线程1695的ATN)。接着,辅助硬件线程1690-1695中最后一个停止执行的辅助硬件线程在ATSR 1670中存储信息(参见图2、图5以及对应的文本以便了解进一步的细节)。
图17图示了信息处理系统1700,其是能够执行在此描述的计算操作的计算机系统的简化示例。信息处理系统1700包括耦合到处理器接口总线1712的一个或多个处理器1710。处理器接口总线1712将处理器1710连接到存储器控制器,该存储器控制器连接到系统存储器1720,并且为处理器1710提供访问系统存储器的手段。图形控制器1725也连接到存储器控制器。在一个实施方式中,快速PCI总线1718将存储器控制器连接到图形控制器1725。图形控制器1725连接到显示设备1730,诸如计算机监视器。
存储器控制器1715和I/O控制器1735使用总线1719彼此连接。在一个实施方式中,该总线是沿存储器控制器1715与I/O控制器1735之间的每个方向、以高速传递数据的直接媒体接口(DMI)总线。又被称为I/O控制器集线器(ICH)I/O控制器1735是如下芯片,该芯片一般地实现以比由存储器控制器提供的能力更慢的速度操作的能力。I/O控制器1735通常提供用于连接各种组件的各种总线。这些总线包括例如PCI和快速PCI总线、ISA总线、系统管理总线(SMBus或SMB)和/或低管脚计数(LPC)总线。LPC总线通常连接窄带设备,诸如引导ROM 1796和“既有(legacy)”I/O设备(使用“超级I/O”芯片)。“既有”I/O设备(1798)可以包括例如串行和并行端口、键盘、鼠标和/或软盘控制器。LPC总线还将I/O控制器1735连接到可信平台模块(TPM)1795。通常包括在I/O控制器1735中的其他组件包括直接存储器访问(DMA)控制器、可编程中断控制器(PIC)以及存储设备控制器,该存储设备控制器使用总线1784将I/O控制器1735连接到非易失性存储器设备1785(诸如硬盘驱动器)。
Express卡(ExpressCard)1755是将可热插拔的设备连接到信息处理系统的插槽。Express卡1755支持快速PCI和USB连接两者,因为其使用通用串行总线(USB)和快速PCI总线两者而连接到I/O控制器1735。I/O控制器1735包括USB控制器1740,该USB控制器1740向连接到USB的设备提供USB连接。这些设备包括网络摄像头(摄像头)1750、红外(IR)接收器1748、键盘和跟踪板1744以及提供无线个人区域网络(PAN)的蓝牙设备1746。USB控制器1740还提供到其他各种各样的USB连接的设备1742的连接,这些设备诸如鼠标、可移动非易失性存储设备1745、调制解调器、网卡、ISDN连接器、传真、打印机、USB集线器以及很多其他类型的USB连接的设备。尽管可移动非易失性存储设备1745被示出为USB连接的设备,但可移动非易失性存储设备1745可以使用不同的接口(诸如Firewire接口等)来连接。
无线局域网(LAN)设备1775经由PCI或快速PCI总线1772连接到I/O控制器1735。LAN设备1775通常实现全部使用相同的协议在信息处理系统1700与另一计算机系统或设备之间无线地进行通信的空中调制技术的IEEE 802.11标准之一。光存储设备1790使用串行ATA(SATA)总线1788连接到I/O控制器1735。串行ATA适配器和设备在高速串行链路之上进行通信。串行ATA总线还将I/O控制器1735连接到其他形式的存储设备,诸如硬盘驱动器。音频电路1760,诸如声卡,经由总线1758连接到I/O控制器1735。音频电路1760还提供如下功能,诸如音频线路输入和光数字音频输入端口1762、光数字输出和头戴式耳机插孔1764、内部扬声器1766以及内部麦克风1768。以太网控制器1770使用诸如PCI或快速PCI总线之类的总线连接到I/O控制器1735。以太网控制器1770将信息处理系统1700连接到计算机网络,诸如局域网(LAN)、因特网以及其他公共的和专用的计算机网络。
尽管图17示出了一个信息处理系统,但信息处理系统可以采取很多形式。例如,信息处理系统可以采取台式机、服务器、便携机、膝上型计算机、笔记本或者其他形式因素的计算机或数据处理系统的形式。此外,信息处理系统可以采取其他形状因数,诸如个人数字助理(PDA)、游戏设备、ATM机、携带式电话设备、通信设备或者包括处理器和存储器的其他设备的形式。
附图中的流程图和框图图示了根据本公开的各种实施方式的系统、方法以及计算机程序产品的可能的实现的架构、功能和操作。考虑到这一点,流程图或框图中的每个块可以代表模块、区段或者部分代码,其包括用于实现所指定的逻辑功能的一个或多个可执行指令。还应当注意,在某些备选实现中,块中所示的功能可能不以附图中所示的顺序发生。例如,依赖于所涉及的功能,连续示出的两个块实际上可以基本上并发地执行,或者块有时可以按照相反的顺序执行。还应当注意,框图和/或流程图图示的每个块以及框图和/或流程图图示的块的组合可以通过执行所指定的功能或动作的基于专用硬件的系统或者专用硬件和计算机指令的组合来实现。
尽管已经示出和描述了本公开的特定实施方式,但对本领域技术人员来说将显然的是,基于此处的教示,在不脱离本公开及其更广泛的方面的情况下,可以进行改变和修改。因此,所附权利要求书旨在在它们的范围内涵盖在本公开的真实精神和范围内的所有此类改变和修改。另外,应当理解,本公开仅仅由所附权利要求书限定。本领域技术人员将理解,如果预期特定数量的所引入的权利要求元素,则此类预期将明确地记载在权利要求书中,而在没有此类记载的情况下,并不存在此类限制。对于非限制性示例,为了有助于理解,所附权利要求书包含对引导性短语“至少一个”和“一个或多个”的使用以引入权利要求元素。然而,对此类短语的使用不应当解释为暗示由“一种”或“一个”引入权利要求元素将包含此类所引入的权利要求元素的任何特定权利要求限制为仅包含一个此类元素的公开,即使当同一权利要求包括引导性短语“一个或多个”或“至少一个”以及诸如“一种”或“一个”之类时也是如此;这也适用于定冠词在权利要求书中的使用。

Claims (25)

1.一种机器实现的方法,包括:
在处理器中包括的第一硬件线程处,标识请求以发起第二硬件线程;
标识在由所述第一硬件线程访问的一个或者多个第一寄存器中包括的一个或者多个寄存器值;
向可由所述第二硬件线程访问的一个或者多个第二寄存器复制所述一个或者多个寄存器值;以及
执行所述第二硬件线程上的软件代码,其中所述执行包括所述第二硬件线程访问位于所述一个或者多个第二寄存器中的所复制寄存器值中的一个或者多个。
2.根据权利要求1所述的方法,其中:
所述第一硬件线程执行分支和发起指令以调用所述请求;以及
所述第二硬件线程的所述发起是独立于管理程序的。
3.根据权利要求1所述的方法,其中:
所述一个或者多个第一寄存器被包括在所述第一硬件线程中;以及
所述一个或者多个第二寄存器被包括在所述第二硬件线程中。
4.根据权利要求1所述的方法,其中所述一个或者多个第二寄存器是多个第二硬件线程寄存器的第一子集,所述方法进一步包括:
标识在所述多个第二硬件线程寄存器中包括的第二寄存器的第二子集,其中所述第二寄存器的第二子集是每个可由所述第二硬件线程访问的并且没有包括所复制寄存器值中的一个;以及
清除所述第二寄存器的第二子集中的每一个。
5.根据权利要求1所述的方法,进一步包括:
执行所述第二硬件线程处的停止辅助线程指令;以及
响应于执行所述停止辅助线程指令:
由所述第二硬件线程在可由所述第一硬件线程访问的辅助线程状态字段中存储终止指示符;
由所述第二硬件线程在可由所述第一硬件线程访问的停止指令参数字段中存储停止指令参数值;
由所述第二硬件线程在可由所述第一硬件线程访问的下一指令字段中存储下一指令地址;以及
由所述第二硬件线程清除在可由所述第一硬件线程访问的辅助线程执行字段中包括的辅助线程执行位。
6.根据权利要求1所述的方法,其中软件程序生成调用所述请求的指令,所述方法进一步包括:
在标识所述寄存器值之前,由所述第一硬件线程确定所述第二硬件线程可用;
响应于确定所述第二硬件线程可用:
由所述第一硬件线程设置辅助线程值位;以及
由所述第一硬件线程生成对应于所述第二硬件线程的辅助线程号值;
由所述软件程序检查所述辅助线程值位;以及
响应于所述软件程序检测到所述辅助线程位值被设置,从所述软件程序向所述第二硬件线程发送指令的子集。
7.根据权利要求6所述的方法,进一步包括:
由所述软件程序确定在所述第一硬件线程和所述第二硬件线程之间是否需要存储操作可见性;
响应于需要存储操作可见性,生成分支和发起重型指令;以及
响应于不需要存储操作可见性,生成分支和发起轻型指令。
8.根据权利要求6所述的方法,进一步包括:
由所述第一硬件线程确定在所述指令中是否设置了复制位;以及
响应于确定设置了所述复制位,在所复制寄存器值中包括寄存器值的一个或者多个依赖于实现的集合。
9.根据权利要求1所述的方法,其中地址转换值被包括在被复制到所述一个或者多个第二寄存器的所述一个或者多个寄存器值中,使得所述第二硬件线程和所述第一硬件线程具有相同的地址转换。
10.根据权利要求1所述的方法,进一步包括:
在所述第一硬件线程处接收后续请求以发起第三硬件线程;
标识在所述一个或者多个第一寄存器中包括的一个或者多个后续寄存器值;
向可由所述第三硬件线程访问的一个或者多个第三寄存器复制所述一个或者多个后续寄存器值;以及
执行所述第三硬件线程,其中执行所述第三硬件线程包括所述第三硬件线程访问位于所述一个或者多个第三寄存器中的所述后续寄存器值的一个或者多个。
11.根据权利要求1所述的方法,进一步包括:
在所述第二硬件线程处接收后续请求以发起第三硬件线程;
标识在所述一个或者多个第二寄存器中包括的一个或者多个后续寄存器值;
向可由所述第三硬件线程访问的一个或者多个第三寄存器拷贝所述一个或者多个后续寄存器值;以及
执行所述第三硬件线程,其中执行所述第三硬件线程包括所述第三硬件线程访问位于所述一个或者多个第三寄存器中的所述后续寄存器值中的一个或者多个。
12.根据权利要求1所述的方法,其中:
所述第一硬件线程包括第一执行单元;以及
所述第二硬件线程包括不同于所述第一执行单元的第二执行单元。
13.一种信息处理系统,包括:
一个或者多个处理器;
耦合至所述处理器中至少一个的存储器;
指令集,存储在所述存储器中以及由所述处理器中的至少一个执行以便执行动作:
在所述处理器中的一个中包括的第一硬件线程处,标识请求以发起第二硬件线程;
标识在由所述第一硬件线程访问的一个或者多个第一寄存器中包括的一个或者多个寄存器值;
向可由所述第二硬件线程访问的一个或者多个第二寄存器复制所述一个或者多个寄存器值;以及
执行在所述处理器中的一个中包括的所述第二硬件线程上的所述指令集的一部分,其中所述执行包括所述第二硬件线程访问位于所述一个或者多个第二寄存器中的所复制寄存器值中的一个或者多个。
14.根据权利要求13所述的信息处理系统,其中:
所述第一硬件线程执行分支和发起指令以调用所述请求;以及
所述第二硬件线程的所述发起是独立于管理程序的。
15.根据权利要求13所述的信息处理系统,其中:
所述一个或者多个第一寄存器被包括在所述第一硬件线程中;以及
所述一个或者多个第二寄存器被包括在所述第二硬件线程中。
16.根据权利要求13所述的信息处理系统,其中所述一个或者多个第二寄存器是多个第二硬件线程寄存器的第一子集,以及其中所述指令集执行动作:
标识包括在所述多个第二硬件线程寄存器中的第二寄存器的第二子集,其中所述第二寄存器的第二子集是每个可由所述第二硬件线程访问的并且没有包括所复制寄存器值中的一个;以及
清除所述第二寄存器的第二子集中的每一个。
17.根据权利要求13所述的信息处理系统,其中所述指令集执行动作:
执行所述第二硬件线程处的停止辅助线程指令;以及
响应于执行所述停止辅助线程指令:
由所述第二硬件线程在可由所述第一硬件线程访问的辅助线程状态字段中存储终止指示符;
由所述第二硬件线程在可由所述第一硬件线程访问的停止指令参数字段中存储停止指令参数值;
由所述第二硬件线程在可由所述第一硬件线程访问的下一指令字段中存储下一指令地址;以及
由所述第二硬件线程清除在可由所述第一硬件线程访问的辅助线程执行字段中包括的辅助线程执行位。
18.根据权利要求17所述的信息处理系统,其中所述指令集包括调用所述请求的指令,以及其中所述指令集执行动作:
在标识所述寄存器值之前,由所述第一硬件线程确定所述第二硬件线程可用;
响应于确定所述第二硬件线程可用:
由所述第一硬件线程设置辅助线程值位;以及
由所述第一硬件线程生成对应于所述第二硬件线程的辅助线程号值;
检查所述辅助线程值位;以及
响应于检测到所述辅助线程位值被设置,向所述第二硬件线程发送指令的子集。
19.根据权利要求17所述的信息处理系统,其中所述指令集执行动作:
确定在所述第一硬件线程和所述第二硬件线程之间是否需要存储操作可见性;
响应于需要存储操作可见性,生成分支和发起重型指令;以及。
响应于不需要存储操作可见性,生成分支和发起轻型指令。
20.根据权利要求17所述的信息处理系统,其中所述指令集执行动作:
由所述第一硬件线程确定在所述指令中是否设置了复制位;以及
响应于确定设置了所述复制位,在所复制寄存器值中包括寄存器值的一个或者多个依赖于实现的集合。
21.根据权利要求13所述的信息处理系统,其中地址转换值被包括在被复制到所述一个或者多个第二寄存器的所述一个或者多个寄存器值中,使得所述第二硬件线程和所述第一硬件线程具有相同的地址转换。
22.一种处理器,包括:
第一硬件线程;
可由所述第一硬件线程访问的一个或者多个第一寄存器,所述一个或者多个第一寄存器包括一个或者多个寄存器值;
由所述第一硬件线程发起的第二硬件线程;
可由所述第二硬件线程访问的一个或者多个第二寄存器;以及
其中响应于发起所述第二硬件线程,所述第一硬件线程将所述寄存器值从所述一个或者多个第一寄存器复制到所述一个或者多个第二寄存器,以及其中响应于执行软件代码,所述第二硬件线程访问在所述一个或者多个第二寄存器中包括的所复制寄存器值中的一个或者多个。
23.根据权利要求22所述的处理器,进一步包括:
第一执行单元,包括在所述第一硬件线程中;以及
第二执行单元,包括在所述第二硬件线程中,其中所述第二执行单元不同于所述第一执行单元。
24.根据权利要求22所述的处理器,其中所述第一硬件线程独立于管理程序而发起所述第二硬件线程。
25.根据权利要求22所述的处理器,其中:
所述一个或者多个第一寄存器被包括在所述第一硬件线程中;以及
所述一个或者多个第二寄存器被包括在所述第二硬件线程中。
CN201180045178.2A 2010-09-20 2011-09-08 实现获得和释放硬件线程的方法和系统 Active CN103154885B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/886,091 US8793474B2 (en) 2010-09-20 2010-09-20 Obtaining and releasing hardware threads without hypervisor involvement
US12/886,091 2010-09-20
PCT/EP2011/065565 WO2012038264A1 (en) 2010-09-20 2011-09-08 Obtaining and releasing hardware threads without hypervisor involvement

Publications (2)

Publication Number Publication Date
CN103154885A true CN103154885A (zh) 2013-06-12
CN103154885B CN103154885B (zh) 2016-08-17

Family

ID=44645109

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180045178.2A Active CN103154885B (zh) 2010-09-20 2011-09-08 实现获得和释放硬件线程的方法和系统

Country Status (5)

Country Link
US (2) US8793474B2 (zh)
EP (1) EP2609500B1 (zh)
KR (1) KR101531771B1 (zh)
CN (1) CN103154885B (zh)
WO (1) WO2012038264A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015024433A1 (zh) * 2013-08-22 2015-02-26 华为技术有限公司 线程运行方法及装置

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130061239A1 (en) * 2011-04-26 2013-03-07 Elad Lahav System and Method for Operating a Processor
US9394469B2 (en) * 2013-03-14 2016-07-19 Honeywell International Inc. Low GWP fluids for high temperature heat pump applications
US10423330B2 (en) * 2015-07-29 2019-09-24 International Business Machines Corporation Data collection in a multi-threaded processor
CN106528049B (zh) * 2016-11-17 2019-06-11 上海兆芯集成电路有限公司 在多存储体条件分支预测器中用于更新事件的随机数产生
US10761904B2 (en) * 2018-01-17 2020-09-01 Salesforce.Com, Inc. Method and system for synchronizing and joining multiple calls to the same asynchronous code segment
US11921843B2 (en) * 2021-09-26 2024-03-05 Ceremorphic, Inc. Multi-threaded secure processor with control flow attack detection

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144083A1 (en) * 2001-03-30 2002-10-03 Hong Wang Software-based speculative pre-computation and multithreading
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247676A (en) 1989-06-29 1993-09-21 Digital Equipment Corporation RPC based computer system using transparent callback and associated method
WO1998043193A2 (en) 1997-03-21 1998-10-01 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US6233599B1 (en) 1997-07-10 2001-05-15 International Business Machines Corporation Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
US5978857A (en) 1997-07-22 1999-11-02 Winnov, Inc. Multimedia driver having reduced system dependence using polling process to signal helper thread for input/output
US6105055A (en) 1998-03-13 2000-08-15 Siemens Corporate Research, Inc. Method and apparatus for asynchronous multimedia collaboration
US6438671B1 (en) * 1999-07-01 2002-08-20 International Business Machines Corporation Generating partition corresponding real address in partitioned mode supporting system
US6625654B1 (en) 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6952824B1 (en) 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US6629237B2 (en) * 2000-09-01 2003-09-30 Intel Corporation Solving parallel problems employing hardware multi-threading in a parallel processing environment
US6742146B2 (en) * 2001-02-14 2004-05-25 Emc Corporation Techniques for providing data within a data storage system
CA2346762A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
US7398518B2 (en) 2002-12-17 2008-07-08 Intel Corporation Method and apparatus for measuring thread wait time
US7849465B2 (en) 2003-02-19 2010-12-07 Intel Corporation Programmable event driven yield mechanism which may activate service threads
US7587584B2 (en) 2003-02-19 2009-09-08 Intel Corporation Mechanism to exploit synchronization overhead to improve multithreaded performance
US7321965B2 (en) 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7404067B2 (en) * 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US20050071438A1 (en) 2003-09-30 2005-03-31 Shih-Wei Liao Methods and apparatuses for compiler-creating helper threads for multi-threading
US20050071841A1 (en) 2003-09-30 2005-03-31 Hoflehner Gerolf F. Methods and apparatuses for thread management of mult-threading
US7631307B2 (en) * 2003-12-05 2009-12-08 Intel Corporation User-programmable low-overhead multithreading
US7676655B2 (en) 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US20060080661A1 (en) 2004-10-07 2006-04-13 International Business Machines Corporation System and method for hiding memory latency
US8230422B2 (en) 2005-01-13 2012-07-24 International Business Machines Corporation Assist thread for injecting cache memory in a microprocessor
US20070055852A1 (en) * 2005-09-06 2007-03-08 Alcatel Processing operation management systems and methods
US8209690B2 (en) 2006-01-19 2012-06-26 University Of Maryland System and method for thread handling in multithreaded parallel computing of nested threads
US8595744B2 (en) 2006-05-18 2013-11-26 Oracle America, Inc. Anticipatory helper thread based code execution
US8041929B2 (en) 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
US20080046689A1 (en) 2006-08-21 2008-02-21 Tien-Fu Chen Method and apparatus for cooperative multithreading
US8261046B2 (en) 2006-10-27 2012-09-04 Intel Corporation Access of register files of other threads using synchronization
US8296775B2 (en) * 2007-01-31 2012-10-23 Microsoft Corporation Efficient context switching of virtual processors by managing physical register states in a virtualized environment
US8214808B2 (en) 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
US7516365B2 (en) 2007-07-27 2009-04-07 Sun Microsystems, Inc. System and method for split hardware transactions
US7779234B2 (en) 2007-10-23 2010-08-17 International Business Machines Corporation System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US8775778B2 (en) 2008-02-01 2014-07-08 International Business Machines Corporation Use of a helper thread to asynchronously compute incoming data
US8108867B2 (en) 2008-06-24 2012-01-31 Intel Corporation Preserving hardware thread cache affinity via procrastination
US8528001B2 (en) 2008-12-15 2013-09-03 Oracle America, Inc. Controlling and dynamically varying automatic parallelization
CN101477458A (zh) 2008-12-15 2009-07-08 浙江大学 基于处理器和fpga混合架构的硬件线程执行方法
US20100162247A1 (en) 2008-12-19 2010-06-24 Adam Welc Methods and systems for transactional nested parallelism
US8423750B2 (en) 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
US8667253B2 (en) 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register
US8713290B2 (en) 2010-09-20 2014-04-29 International Business Machines Corporation Scaleable status tracking of multiple assist hardware threads

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144083A1 (en) * 2001-03-30 2002-10-03 Hong Wang Software-based speculative pre-computation and multithreading
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015024433A1 (zh) * 2013-08-22 2015-02-26 华为技术有限公司 线程运行方法及装置
CN104424027A (zh) * 2013-08-22 2015-03-18 华为技术有限公司 线程运行方法及装置
CN104424027B (zh) * 2013-08-22 2018-07-13 华为技术有限公司 线程运行方法及装置

Also Published As

Publication number Publication date
KR101531771B1 (ko) 2015-06-25
US8793474B2 (en) 2014-07-29
US20120210102A1 (en) 2012-08-16
EP2609500B1 (en) 2018-05-30
US8898441B2 (en) 2014-11-25
CN103154885B (zh) 2016-08-17
US20120072705A1 (en) 2012-03-22
EP2609500A1 (en) 2013-07-03
KR20130101010A (ko) 2013-09-12
WO2012038264A1 (en) 2012-03-29

Similar Documents

Publication Publication Date Title
CN102411512B (zh) 对多个辅助硬件线程进行可缩放状态跟踪的方法和系统
CN103154885A (zh) 在没有管理程序介入的情况下获得和释放硬件线程
US10360322B2 (en) Simulation of virtual processors
US8572614B2 (en) Processing workloads using a processor hierarchy system
US10956167B2 (en) Mechanism for instruction fusion using tags
US20140365833A1 (en) Capturing trace information using annotated trace output
CN102822802A (zh) 多核处理器系统、控制程序以及控制方法
US20180203724A1 (en) Fast task dispatching using a dispatching processor
US10318343B2 (en) Migration methods and apparatuses for migrating virtual machine including locally stored and shared data
US8935516B2 (en) Enabling portions of programs to be executed on system z integrated information processor (zIIP) without requiring programs to be entirely restructured
US10209912B2 (en) Pre-allocating save areas of a memory
US20080301402A1 (en) Method and System for Stealing Interrupt Vectors
KR102315102B1 (ko) 가상 머신을 부팅하기 위한 방법, 장치, 기기 및 매체
US20150088810A1 (en) Efficient coordination across distributed computing systems
US20140189656A1 (en) Flow Analysis in Program Execution
US8719638B2 (en) Assist thread analysis and debug mechanism
CN111078449B (zh) 信息处理方法、信息处理装置及终端设备
US10296348B2 (en) Delayed allocation of an out-of-order queue entry and based on determining that the entry is unavailable, enable deadlock avoidance involving reserving one or more entries in the queue, and disabling deadlock avoidance based on expiration of a predetermined amount of time
US9218272B2 (en) System level architecture verification of a transactional execution

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant