具有虚拟多线程的处理器的制作方法

文档序号:6609118阅读:209来源:国知局
专利名称:具有虚拟多线程的处理器的制作方法
技术领域
本发明涉及处理指令序列等的处理设备和系统的领域以及编程该设备和/或系统的特定指令序列。一些实施例涉及监视和/或响应这种处理设备中执行资源内的条件或事件。
背景技术
目前使用各种机制改变处理系统内的控制流(即所遵循的处理路径或指令序列)。例如,程序序列内的跳转指令清楚明确地导致跳转到新地址。该跳转指令为控制流的明确变化的一个示例,因为该指令引导处理器跳转到一个位置并在该点继续执行。传统的跳转指令是“精确的”(或同步),这是因为发生该跳转是执行跳转指令的直接结果。
控制流改变的另一个传统示例为中断。中断可以是向诸如处理器的设备提供的外部信号。处理器的响应为跳转到中断处理程序(handler),该处理程序为处理特殊中断发送的事件的程序。中断通常也是相对精确的,这是因为是由处理器在接收到该中断后在特定的时间窗口内对其进行识别并产生响应。特别地,在内部接收到中断之后,该中断通常在下一个指令边界才起作用。在一些情形中,只允许操作系统或工作于高优先级别的其它软件屏蔽中断,因此用户程序没有机会启动或者禁止这些控制流改变事件。
控制流改变的另一个传统示例出现于对异常的响应。异常通常反应预定义的架构条件,该条件为例如数学指令满足特定标准(非正规、下溢、溢出、非数字等)的结果。例如通过设置控制寄存器中的位,可以屏蔽一些异常。如果出现异常且未被屏蔽,则调用异常处理程序以处理该异常。
改变处理器的控制流的另一个技术为使用断点。通常在调试时使用断点。可将特定的指令地址编程到断点寄存器。在断点启动且到达目标地址时,该处理器采取各种措施(而不是照常继续该程序)。断点允许单步执行程序等。
多线程是一种通过多个不同的线程使用处理器硬件的技术。多线程处理器可由于各种原因而在各线程之间切换。例如,处理器具有在可用线程之间自动切换的算法。其它处理器使用基于事件切换的多线程(SoEMT),由此诸如缓存缺失的特定事件会引起线程切换。线程切换可以被看作是一种控制流改变,这是因为处理器切换其所执行的指令序列或指令流。
在一个现有技术参考中,详细描述了一种静止指令(见美国专利号No.6,493,741)。在一个示例中,静止指令停止一个线程内的进程,直到计时器到期或者出现向存储器位置进行存储器写入为止。因此,诸如静止指令的指令本身可触发包括该静止指令的线程的进程暂时停止并切换到另一个线程。


在所附各图中以示例的方式而非限制的方式阐述本发明。
图1阐述了可以检测和响应执行资源(execution resource)的处理条件的系统的实施例。
图2阐述了图1的系统的一个实施例的工作流程图。
图3阐述了图1的系统的另一个实施例的工作流程图。
图4阐述了能够响应多个不同性能事件(performance event)和/或复合性能事件的系统的另一个实施例。
图5a阐述了可识别复合事件的监视器的一个实施例。
图5b阐述了监视器的另一个实施例。
图5c阐述了监视器的另一个实施例。
图6阐述了根据一个实施例的,响应程序可定义的触发器而启动辅助线程(helper thread)的用于用户程序执行的流程图。
图7阐述了根据一个实施例的细化监视器设置的过程的流程图。
图8阐述了根据一个实施例的更新软件的过程的流程图。
图9a阐述了启动多个嵌套的辅助线程以辅助处理程序的流程图。
图9b阐述了支持虚拟线程的一个实施例的线程切换逻辑。
图10a阐述了上下文相关的事件图解矢量和屏蔽(mask)实现的一个实施例。
图10b阐述了上下文相关的事件图解矢量和屏蔽实现的一个实施例。
图11阐述了基于监视器事件而执行线程切换的多线程处理器的一个实施例。
图12阐述了对同步对象具有事件检测和处理能力的系统的一个实施例。
图13阐述了根据多个实施例的同步事件处理的流程图。
图14阐述了基于事件处理程序线程的锁剖析(lock profiling)的线程调度改进的流程图。
具体实施例方式
下述阐述了可启动其它线程的可编程事件驱动的放弃(yield)机制的实施例。在下述描述中,列出了诸如处理器类型、微架构条件、事件、启动机制等的许多具体细节,其目的是提供对本发明的更彻底的了解。然而,本领域技术人员将会了解到,不使用这些具体细节也可以实施本发明。此外,并未详细示出一些众所周知的结构,电路等,目的是避免不必要地使本发明变得不明确。
在一些实施例中,所公开的技术允许在执行程序时,该程序能够积极地监视并响应执行该程序的执行资源的条件。事实上,这些实施例可包括实时的执行资源工作条件反馈以改善性能。如果执行资源遇到指令延迟条件,可中断该程序指令以做调整。在一些实施例中,可启动一处理程序,该处理程序可产生辅助线程以试图改善原始线程的指令。在其它实施例中,可通过切换到非辅助线程的另一个程序线程而实现中断。这些及其它实施例在某些情况下可有利地改善处理能力和/或优化以适于特殊硬件。
参考图1,描述可以检测并响应执行资源的处理条件的系统的一个实施例。在图1的实施例中,执行资源105、监视器110、和启动逻辑120形成能够执行指令的处理器100的一部分。在某些实施例中该执行资源包括可集成到单个元件或集成电路的硬件资源。然而,执行资源可包括软件或固件资源或者硬件及软件和/或可用于执行程序指令的固件的任意组合。例如,固件可用作提取层的一部分或者可为处理硬件增加功能,软件亦可如此。软件还可以用于仿真指令集的一部分或全部,或者以其它方式辅助处理。
该处理器为可执行指令的任何不同类型的处理器。例如,该处理器可以是通用处理器,例如Pentium处理器家族或Itanium处理器家族或来自Intel公司的其它处理器家族中的一种处理器,或者是来自其它公司的处理器。因此,该处理器可以是精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、超长指令字(VLIW)处理器、或者任何混合或备选处理器类型。此外,例如网络或通信处理器、协同处理器、嵌入处理器、压缩引擎、图像处理器等的专用处理器可以使用这里公开的技术。由于集成的趋势仍在继续且处理器变得更加复杂,对内部性能指示器进行监视并作出反应的必要性进一步增大,因此使得更加需要目前所公开的技术。然而,由于该技术领域内的技术进展快速,难以预见所公开的技术的所有应用,尽管其可以广泛应用于可执行程序序列的复杂硬件。
如图1所示,处理器100耦合到诸如存储器的存储介质150。存储介质150可以为具有各种层次水平的存储器子系统,其包括但不限于各种水平的缓冲存储器、诸如动态随机访问存储器等的系统存储器、以及诸如闪存(例如存储棒等)、磁盘或光盘的非易失性存储器。如图所示,该存储介质存储程序160以及处理程序和/或诸如辅助线程170的其它线程。
为了允许监视器监视预期事件,监视器110可耦合到执行资源的各个部分以检测具体条件或者被告知特定的微架构事件。信号线可连接到监视器110,或者该监视器可以策略性地和相关资源放置或集成在一起。该监视器可包括各种可编程逻辑或软件或固件元件或者可以定制设计成检测具体条件。该监视器追踪各种事件或条件,且如果出现该监视器应检测的事件或条件,则向执行资源105发出信号以中断正常的控制流,否则程序将按该正常控制流执行。如图1所示,该中断会导致调用事件处理程序或出现线程切换。
特殊可检测条件的一个示例为缓冲存储器中的数据缺失,该数据缺失会导致出现缓存缺失。实际上,程序可以产生一种存储器访问方式,该方式会导致重复的缓存缺失,由此降低性能。在某一时间段内或者在某部分代码执行期间出现特定数目的缓存缺失,这就是表示执行该部分代码时进展相对较慢的事件的一个示例。
可能为进展缓慢指示器的其它可检测事件涉及执行资源的各种其它微架构或结构细节。监视器可检测涉及下述一种或多种的条件资源停止、缓存事件、报废事件、分支或分支预计结果、异常、总线事件、或者通常受到监视的或影响性能的各种其它事件或条件。该监视器会计算这些事件或条件,或者对这些事件或条件计时、定量、或表征,且当出现和一个或多个事件或条件相关的特殊公制(metric)时可对该监视器编程。
图2阐述了图1的系统的一个实施例的工作流程图。如图2的区块200所示,程序160可设置条件从而引发执行控制流的变化。例如,启动逻辑120可同时控制监视器的启动以及监视器将要检测的(多个)事件。备选地,启动逻辑120可启动和/或屏蔽各事件,监视器110本身也是可编程的,从而在规定被追踪的执行资源或系统内的事件或条件方面具有更大的灵活动。在任一情况下,程序160本身会规定在其自身执行时待观察的条件。程序160还提供在受监视的条件出现时被启动的处理程序或线程170。例如,该程序可以是这样的程序,即,包括主线程和辅助线程或者在程序所指定的条件出现时试图改善主线程的执行的辅助例行程序(helper routine)。
如区块205所示,执行该程序指令。该程序的执行导致执行资源的状态改变。例如,在执行该程序时会发生或者出现抑制向前进展的各种条件。如区块210所示,监视各种处理公制和/或微架构条件以确定是否出现区块200中编程的触发事件。如果在区块210内不出现触发状态,则不触发该监视器且通过返回到区块205而继续程序的执行。
在一些情况中,该触发状态只表示和任一单个指令的执行的间接关系。例如,在现有技术中,当指令指针到达设计地址时,断点检测器通常产生暂停。该断点是精确的,这是因为特殊指令(例如其地址)直接触发该暂停。同样地,现有技术静止指令本身导致线程至少暂时停止。相反,使用这里所公开的技术的一些实施例触发一系列条件的控制流改变,不一定要由单个指令引发该改变,而是可由整个程序流和/或系统环境引发该改变。因此,尽管可在单个系统内的同一个指令执行状态重复地触发该监视器,但其它条件、环境、系统等可引发相同程序的不同触发点。就此而言,这里所公开的技术在某些情形下提供了产生控制流改变的不精确或不同步的机制,该机制并未和指令执行边界直接相关。此外,在某些实施例中,该不精确的机制会以小于各个指令的小颗粒状(fine granularity)测试各个事件,和/或对事件的识别会延迟一段时间,这是因为架构正确性并不取决于在任何具体时间点执行的任何提高处理速率的辅助例行程序。
当在区块210中监视器检测到触发状态时,程序的处理被中断,如区块215所示。通常,该系统会相应地调整,这是因为该程序的处理效率比较低或者处理的方式不同于编程人员所预期的方式。例如,可以调用诸如另一个程序部分的另一个软件例行程序。该其它的程序部分可以是和原始线程无关的另一个线程,或者可以是来自原始线程的辅助处理指令的辅助线程,例如通过预取出数据以减小缓存缺失。备选地,程序透明(例如硬件)机制可执行一些优化、重新配置(包括但不限于监视器设置的重新配置)、资源的重新分配等,从而有希望改善处理。
图3阐述了调用辅助线程的一个示例。特别地,图3的流程图详细描述了图1系统的一个实施例的工作,其中执行资源为多线程资源,且当出现特定触发条件时该程序调用辅助线程。因此,如区块300所示,第一线程(例如主程序)设置监视器条件。该条件可以是这里所讨论的各种条件中的一种或多种。第一线程执行一代码部分,如区块310所示。如果在区块320中测试确定未出现触发条件,则继续执行该代码部分,如区块310所示。
如果该触发条件确实发生,则启动辅助线程以辅助第一线程,如区块330所示。可由诸如处理程序的例行程序启动该辅助线程,或者只由线程开关启动该辅助线程。例如,在一个实施例中,监视器发送给执行资源的触发条件会导致执行资源跳到产生辅助线程的事件处理程序。在另一个实施例中,该辅助线程只是其它活动线程之一。在又一个实施例中,可由处理器提供一个或者多个特殊的辅助线程执行存储槽(slot),该监视器会导致切换到来自这些存储槽之一的辅助线程。如区块340所示,两个线程均继续执行。如果顺利的话,该辅助线程向前运行并清除会导致第一线程停止或低效运行的条件。
图4阐述了能够响应多个不同性能事件和/或复合性能事件的系统的另一个实施例。在图4的实施例中,执行资源400被示成包括一组N个监视器410-1至410-N。此外,提供了事件图解矢量(ESV)存储位置420和事件图解矢量屏蔽(ESVM)存储位置425。图4的实施例示出了多个监视器,其数目(N)对应于事件图解矢量和事件图解屏蔽矢量中的位数。在其它实施例中,监视器的数目可能不同于这些矢量的数目,监视器可以和该位数直接关联或者没有直接关联。例如,在一些实施例中,涉及多个监视器的条件和单个矢量位相关联。
执行资源400可选地耦合到事件描述符表430(EDT),可在该处理器上或者在协同处理器或系统存储器内局部地实现该事件描述符表。控制流逻辑435耦合到监视器410-1至410-N,并接收来自事件图解矢量和事件图解矢量屏蔽的值。当根据该事件图解矢量和事件图解矢量来屏蔽启动一个或多个监视器检测到的条件时,控制流逻辑435改变处理逻辑的控制流。
图4的实施例还阐述了解码逻辑402和一组机器或模式特用寄存器404(MSR)。解码逻辑402和模式专用寄存器之一或者两者可同时用于编程和/或启动该监视器和事件图解矢量和屏蔽。例如,MSR可用于编程触发监视器的事件的类型或数目。MSR还可用于编程事件图解矢量和屏蔽。备选地,将被解码器402解码的一个或多个新的专用指令可用于编程该监视器和事件图解矢量及屏蔽之一或两者。例如,当出现特定条件组时,可使用放弃(yield)指令启动程序处理的中断。可由运算数向该放弃指令指定部分或所有这些条件,或者可以在其执行之前编程。可由解码器402解码该放弃指令以触发微码例行程序,从而直接向信号专用逻辑产生相应的微操作或微指令或者微操作序列,或者启动协同处理器或实施该放弃功能。在一些实施例中,放弃的概念可以恰当地描述这样的指令,即在执行该放弃指令之后可继续执行某一线程,但由于另一个线程或处理程序的执行而在某一点减缓该线程的执行。例如大量单线程的程序可以调用额外的辅助线程并和处理器分享这些额外的辅助线程。
在图4的实施例中,存储器440包括事件处理程序450和主线程460。在一些实施例中,事件描述符表可存储在和主线程460及处理程序450相同的存储器内或相同的存储器层次内。如前所述,该处理程序可产生辅助线程以帮助有效地执行主程序。
存储器440还可存储更新模块442以通过通信接口444进行通信。更新模块442可以是硬件模块或者软件例行程序,由执行资源执行该软件例行程序以获得将被编程到各个监视器和/或启动逻辑的新条件。更新模块442还可获得新的辅助线程或例行程序。例如,可使用软件程序从软件程序厂家下载这些模块以提供更佳的性能。因此,网络接口444可以是允许通过通信通道传输信息的任何网络和/或通信接口。在一些情形中,该网络接口可接到因特网以下载新的条件和/或辅助例行程序或线程。
在一个实施例中,事件图解矢量的各位表示出现或不出现特定的事件,该特定事件可能是反应(和/或通过布尔运算进行表述的)各种条件或其它事件的复合事件。特定事件的出现会设置事件图解矢量中的位。事件图解矢量中的各位在事件图解屏蔽矢量中具有相对应的位。如果该屏蔽位表示该特定事件被屏蔽,则控制流逻辑435忽略该事件,尽管由于该事件的出现使事件图解矢量中的该位保持设定。用户在不屏蔽事件时可以选择是否清除该事件图解矢量。因此,可将某一事件屏蔽一段时间而稍后处理。在一些实施例中,根据诸如事件更新、采样、和复位(或ESV内触发器事件的保持事件)之间关系的各种问题,用户可以选择规定该触发器为电平触发器或边沿触发器。
如果屏蔽位表示某一事件未被屏蔽,则在本实施例中控制流逻辑435调用该特定事件的事件处理程序。控制流逻辑435可基于事件图解矢量中位的位置而指向事件描述符表430,因此该事件描述符表具有和事件图解矢量中的N位相对应的N个条目。该事件描述符表可以包括一处理程序地址,该地址指示控制流逻辑435应将执行重新定向的地址,该事件描述符表还包括在特定实施例中有用的其它信息。例如,可在该事件描述符表中保持或更新优先水平、线程、处理、和/或其它信息。
在另一个实施例中,可能不需要事件描述符表430或者其为单个条目,该条目指示单个事件处理程序处理所有事件的地址。在这种情况下,该条目可以存储在寄存器中或者其它处理器存储位置中。在一个实施例中,可以使用单个处理程序,且该处理程序可访问该事件图解矢量以确定所出现的事件以及该如何响应。在另一个实施例中,该事件图解矢量可共同地定义引发控制流逻辑435调用处理程序的事件。换而言之,该事件图解矢量可代表一起表达一个事件的各种条件。例如,该事件图解屏蔽矢量可用于指定事件图解矢量所指示的哪个事件必须发生以触发处理程序的执行。各位可代表达到可编程条件的监视器。当所有的未屏蔽监视器达到其各自的指定条件时,则调用处理程序。因此,整个事件图解处理器可用于指定将触发处理程序执行的某些复杂的复合条件。
在另一个实施例中,可以使用多个事件图解矢量和屏蔽来指定不同的条件。这些不同的矢量可通过该事件描述符表或某些其它机制而指向不同的处理程序。在另一个实施例中,可将一个或多个事件图解矢量的某些位分组,从而形成触发处理程序的调用的事件。各种其它不同的改变对本领域技术人员而言是显而易见的。
图5a阐述了监视器500的一个实施例,该监视器是可编程的并能够和各种性能监视器连接以产生复合事件的信号。例如,该性能监视器可记录各种微架构事件或条件的出现,例如,在缓存层次的特定水平引起的缓存缺失、分支报废、分支预计错误(或错误预计的分支的报废)、追踪缓存输送模式变化或事件、分支预计单元取出请求、存储器请求的取消、缓存线分裂(完成分裂负载、存储等的计数)、重放事件、各种类型的总线交换(例如锁定、瞬时读写、回写、无效)、总线定序器内的分配(或仅特定类型)、数字辅助(下溢、非正规等)、特定类型的指令或微操作(uOP)的执行/报废、机器清零(或清理流水线)、资源停止(寄存器重命名资源、流水线等)、处理标记的uOP、指令或uOP报废、缓存内线的分配(和/或为特定的状态(例如M))、停止取出大量的周期指令、停止大量周期指令长度解码器、取大量的缓存、分配在缓存内(或收回)的大量的线等。只监视微架构事件或条件的一些示例。各种其它可能性以及这些或其它条件的组合对本领域技术人员而言是显而易见的。此外,可以使用在任一公开实施例内所公开的任一监视器监视这些和/或其它条件或者事件。
通常在处理器内包括性能监视器以对特定事件进行计数。通过制造商定义的接口,例如由知名的Intel处理器支持的RDPMC指令的专用处理器宏指令,编程人员可以读取该性能监视器的读数。见Intel SoftwareDevelopers Guide for the Pentium4 Processor的卷III的附录A。在一些实施例中,可以使用其它内部或微指令或者微操作读取性能计数器。因此,可以将例如性能监视器和所公开的技术结合使用。在一些情形中,调整可编程的性能监视器以提供产生事件信号的能力。在其它实施例中,可通过其它监视器读取性能监视器以建立事件。
在图5a的实施例中,监视器500可包括一组可编程条目。各个条目可包括条目号510、启动域511、用于指定一组性能监视器之一的性能监视器号(EMON#)、以及触发条件514。该触发条件可以为例如到达特定的计数、落在特定范围内的计数、计数之差等。监视器500可包括待读取的逻辑或者被耦合以接收来自指定的性能监视器的计数。当出现各种M条件时,监视器500向控制流逻辑发出信号。通过选择性地编程各个条目的启动域,可以使用该M个条目的子集。
图5b阐述了监视器520的另一个实施例。监视器520代表定制的复合事件监视器。监视器520通过信号线528-1至528-X接收来自各种执行资源或资源部分的一组信号,并通过组合逻辑530将其组合。如果监视器520接收到信号的恰当组合,则该监视器通过输出信号线532向控制流逻辑发出信号。
图5c阐述了监视器540的另一个实施例。监视器540包括具有M个条目的表。各个条目包括启动域552、条件域554、以及触发域556。该条件域可被编程为规定待监视的输入信号的组合。这些条件与诸如性能监视器的其它事件检测结构可以相连或者不相连,因此这些条件比图5a中讨论的那些条件相比更为一般。触发域556可规定需要向控制流逻辑发送信号的那些输入信号的状态。此外,可以通过启动域552启动或禁止各个条目。在一些实施例中,该条件和触发域可以组合。这些或其它类型的,已知或者可获得的,更简单或者更复杂的监视器的各种组合对于本领域技术人员而言是显而易见的。
图6阐述了根据一个实施例的,响应程序可定义的触发器而启动辅助线程的用户程序执行的流程图。在区块600中,程序首先测试是否具备放弃能力。“放弃能力”在此被用作基于条件或事件发生而中断处理的能力的简写。备选地,对于放弃能力支撑的测试,该放弃能力可以使用之前定义为不工作的工作码和/或之前未使用或未定义的MSR,故放弃能力将不会影响没有该能力的处理器。也可以通过检查特殊的CPU-ID而查询是否存在该能力,其中该CPU-ID编码产生表明特定处理器或者平台上是否存在该能力的提示。类似地,诸如Itanium的PAL(处理器提取层)调用或SALE(系统提取层环境)的特殊指令可以用于查询处理器具体配置信息,该处理器具体配置信息包括这种程序可定义的放弃能力的可用性。假设存在该放弃能力,则用户程序可以读取和/或复位各种计数器,如区块610所示。例如,可以读取性能监视器计数器,使得可计算出增量(delta),或者如果存在该能力则将该值复位。
如区块620所示,用户程序随后设置辅助线程触发条件。在低的优先级别(例如用户级别)下可以获得该放弃能力,使得任何程序或绝大部例行程序可以使用该特征。例如,在Pentium处理器家族等中,第三环的优先水平可以获得该放弃能力。因此,用户程序自身能够设置其自己的基于性能的触发条件。如果应用命令或操作系统可以提供持久的监视能力,则了解存在这种上下文相关的监视器配置的用户程序或操作系统会选择越过线程/处理上下文开关而存储或恢复该应用特定的监视器配置/设置。
如区块630所示,用户程序在编程该放弃条件之后继续执行。在区块640中测试是否出现放弃条件。如果并未出现放弃条件,则该程序继续执行,如区块630所示。如果出现该放弃条件,则辅助线程被启动,如区块650所示。图6的流程表趋于暗示出现对各事件的同步轮询,在一些实施例中可以使用该方法。然而,一些实施例在事件发生时对事件的响应不同步,或者在事件发生时的大量时钟周期内对其产生响应,而不是按特定间隔对事件进行轮询。在一些实施例中,可以在一个循环或者其它代码部分之外设置监视器条件以检测特殊条件。通过下述主线程和辅助线程的伪代码示例演示这个概念。
<pre listing-type="program-listing"><![CDATA[main(){  CreateThread(T)  WaitForEvent()  n=NodeArray
  setup Helper Trigger//Intrinsic  while(n and remaining)   {   work()   n->i=n->next->j+n->next->k+n->next->1   n=n->next   remaining--   //Every Stride Time   //global_n=n   //global_r=remaining   //Ser Event()   }   disable Helper Trigger//Instrinsic  }T()  {   Do Stride times  n->i=n->next->j+n->next->k+n->next->1  n=n->next  remaining--]]></pre><pre listing-type="program-listing"><![CDATA[  SetEvent()  while(remaining)  {  Do Stride times   n->i=n->next->j+n->next->k+n->next->1   //Responsible for most effective prefetch   //due to run-ahead   n=n->next   remaining--   WaitForEvent()   if(remaining<global_r)//Detect Run-Behind  remaining=global_r//Adjust byjump ahead  n=global_n  }}]]></pre>在循环之外设置触发器的一个优点为在循环之内的编译器优化将不受约束。例如,对于包括诸如可以用于启动放弃能力的固有参数(intrinsic)的循环或代码段,某些编译器就不会对其进行优化。通过将这些固有参数置于循环之外,可以除去编译器优化的干扰。
图7阐述了根据一个实施例的细化放弃设置的过程的流程图。使用具有放弃能力的处理器等,编程人员可以设计各种情形下都可被调用的程序以及辅助例行程序,如区块700所示。因此,可以为编程人员所预期的阻碍执行的各种条件提供辅助例行程序。如果在执行程序时需要这些例行程序且在需要这些例行程序的时候,处理器可以调用这些例行程序。该放弃设置可包括事件图解矢量和屏蔽矢量和/或监视器设置等。
在具体处理器上,特定的放弃设置会导致有利的执行结果。然而,手动地作出该确定是非常困难的,因此更好的是根据经验推导。因此,编译器或其它调整软件(例如Intel VTune代码分析器)使用不同放弃配置来重复模拟该代码,由此导出最佳或者预期的设置,如区块710所示。因此,可以选择运行时间的放弃设置的预期值,如区块720所示。可以在一个处理器的多个不同版本或者多个不同的处理器上或者在多个不同的系统上模拟程序,从而导出不同的放弃设置。程序可以使用诸如CPU-ID的系统或处理器标记来选择运行时采用哪个放弃设置,如区块730所示。
此外,使用紧凑的设置组来优化性能便于软件更新。例如,当新的处理器发布时,可以下载新的放弃值以优化特定处理器的性能,或者用新的放弃值更新软件。这些新的值允许二进制或者模数调整,这基本上不会干扰或者危害现有软件的功能。
图8阐述了根据一个实施例的更新软件过程的流程图。如区块800所示,发布了一个新版本的微处理器。新的版本具有和诸如缓存缺失的微架构事件相关的不同的延迟时间。因此由于新的缓存缺失潜伏,之前被写入以启动辅助线程的例行程序在特定数目的缓存缺失之后有效性减弱。因此,重新优化该放弃设置,如区块810所示。
一旦导出新的设置,则可以更新该程序(例如通过可能为该程序一部分的升级模块),如区块820所示。可以对放弃值进行调整或者添加,这取决于实施的细节。此外,可以添加附加的或不同的辅助例行程序,从而帮助新处理器的实施。在任一情形中,在软件的初始传送后,放弃能力可以启动性能增强的传送。在许多场合中,这种能力是非常有利的,并可以只用于提供新的优化而不对基础硬件进行任何改动。此外,在某些情况下可以维持基础软件。例如,如果写入辅助例行程序以处理综合事件(例如严重的缓存缺失),则可以改变不同硬件上触发该例行程序的事件的组成,而不改变真正的例行程序本身。例如,可以改变监视器配置值和/或ESV/ESVM值,而该程序保持不变。
通过创建嵌套的辅助线程,可以进一步增强所公开的技术的有效性,图9a示出了这种用法的一个示例。在图9a的实施例中,在区块9 00程序内,程序设置放弃事件。在区块910中,程序继续执行。在区块920中,测试是否出现放弃事件(触发器)。如果没有出现放弃事件,该程序继续执行,如区块910所示。如果出现放弃事件,则启动辅助线程,如区块925所示。辅助线程设置另一个放弃事件,如区块930所示。因此,该辅助线程有效地识别表示进一步的处理帮助是有用的另一个条件。该另外的条件表示第一个辅助线程是否是有效的,和/或可设计成表示另一个条件(其中通过启动第一个辅助线程或者尽管启动了第一个辅助线程也怀疑该条件)。
如区块940所示,该程序和辅助线程都被启动并且执行线程。从多线程处理资源中这些线程均被启动且执行的意义来讲,这些线程同时执行。在区块950中,测试程序和辅助线程的组合是否发生新的触发条件。如果不发生新的触发条件,则继续执行这两个线程,如区块940所示。如果确实出现新的触发条件,则启动第二或嵌套的辅助线程,如区块960所示。之后,该程序和多个辅助线程被启动并执行,如区块962所示。因此在某些实施例中可以采用多个嵌套的辅助线程。
在一个实施例中,可借助虚拟线程启动多个辅助线程(可以是嵌套的或者非嵌套的)。处理器不是将其全部资源组用于扩展其能处理的线程的数目,处理器可有效地缓存(在缓存位置、寄存器位置、或其它存储位置)上下文数据。因此,一个物理线程存储槽可以在多个线程之间快速切换。
例如,图9b的实施例阐述了根据一个实施例的线程开关逻辑,该线程开关逻辑允许将虚拟线程切换到数目有限的物理线程存储槽,这些存储槽使硬件专门用于维持线程上下文。在图9b的实施例中,多个辅助线程965-1至965-k被呈现给虚拟线程开关970。该虚拟线程开关970还可包括其它逻辑和/或微码(未示出),从而交换新选择的辅助线程和先前选择的辅助线程之间的上下文信息。可以通过同步或不同步刺激触发该虚拟线程开关970以切换线程。例如,由放弃类型的指令定义的不同步事件可导致虚拟线程之间的线程交换。此外,辅助线程可包括诸如终止、静止、或其它类型停止执行的指令的同步工具,从而向另一个线程发送切换信号。该虚拟线程开关逻辑970向处理器线程开关逻辑980呈现了虚拟线程的一个子集(例如在图9b的实施例中,虚拟线程之一)。处理器线程开关逻辑980随后在辅助线程之一例如第一线程967-1和其它N-1个线程(直至线程967-N)之间切换。
在一些实施例中,优选地将该放弃能力限制到特定的程序或线程。因此,可以使该放弃能力变成上下文相关的或非杂乱的。例如,图10a阐述了上下文相关的事件图解矢量和屏蔽实现的一个实施例。在图10a的实施例中,存储区1000包括和各个事件图解矢量相关的上下文指示器域1010以及屏蔽存储位置1020。该上下文指示器域识别各个事件图解矢量和屏蔽对所应用的上下文。例如,可以使用诸如控制寄存器(例如x86处理器中指示操作系统进程ID的CR3)的值的上下文值。附加或备选地,可以使用线程数目信息定义上下文。因此,在一些实施例中,当特定的上下文启动时,则可启动特定的上下文相关事件以中断进程。因此,该放弃机制明确之处在于其事件只影响特定的上下文。
图10b阐述了上下文相关的图解矢量和屏蔽实现的另一个实施例。在图10b的实施例中,通过为该k个上下文的每一个上下文提供一组事件图解矢量和屏蔽位置1050-1至1050-k,则可处理该上下文的整数k。例如,在多线程处理器中存在k个线程,每个线程具有一个事件图解矢量和屏蔽或类似的启动放弃机制。注意,在其它实施例中,只追踪特定上下文中的事件是不可取的。例如,事件可以反应整体的进程活动,和/或事件可与多个相关线程有关或者由多个相关线程所致。
图11阐述了基于监视器或放弃类型事件而执行线程切换的多线程处理器的一个实施例。尽管已经讨论的许多实施例通过引发处理程序执行而中断进程流,其它实施例可定义多线程处理器中引发线程切换的事件。例如,在图11的实施例中,线程切换逻辑被耦合以接收来自一组N个监视器1110-1至1110-N的信号。线程切换逻辑1105还可耦合到一组或多组事件图解和屏蔽对1130-1至1130-p(p为正整数)。该事件图解和屏蔽对允许线程开关在确定何时切换线程时组合和/或忽略特定的监视器事件。
执行资源1120支持p个线程的执行,但不关心是否指令属于特定的线程。该执行资源可以是执行单元、取出逻辑、解码器、或者执行指令中使用的任何其它资源。多路复用器1115或其它选择资源在各种线程之间作出判断以确定哪个线程访问执行资源1120。本领域技术人员将会意识到,在多线程处理器中可以分享或复制各种资源,且各种资源具有每次允许有限数目的线程(例如一个)访问该资源的线程切换访问。
如果出现一个或多个监视器和/或一个事件图解矢量和屏蔽对所指示的条件组,线程开关逻辑1105切换线程的执行。因此,可以启动另一个线程,而不是启动当处理器条件和编程的条件相匹配时活动的线程。例如用户程序可以控制触发线程切换的事件。
在一些多线程处理器中,各个线程可具有相关的一组事件图解矢量和屏蔽对等。因此,如图11所示,多路复用器1115在p个线程之间作出判断,且存在相应的p个事件图解和屏蔽对。然而,正是由于处理器是多线程的,并不意味着所有的实现都使用多个事件图解矢量和屏蔽。一些实施例只使用一对启动指示器,或者使用其它的启动指示器。例如,可使用单个位作为开启或关闭特定放弃类型能力的启动指示器。
图12阐述了对同步对象具有事件检测和处理能力的系统的一个实施例。同步对象可以为锁或锁变量、屏障、或其它硬件、软件、和/或可用于线程或进程之间的同步的存储器资源。就多核心和/或各种类型的多线程而言,多进程获得流行,因此为了提高性能,这些线程或进程之间的同步变得更加重要。因此,具有增强的同步效率的系统在通用和/或使用并行进程的专用处理(例如图形、自然介质类型、数字信号处理、通信等)的各种领域中具有广泛的适用性。
图12所示系统阐述了一处理器1200,其中该处理器耦合到存储器1250,还耦合到通信接口1292以及一个或多个外围设备1294(例如可以为音频接口、显示器、键盘、鼠标、或其它输入装置、I/O装置等)。可以通过总线、桥、和/或点对点连接而直接或间接地耦合这些装置。处理器1200包括执行资源1210以及事件检测器1220,以监视执行资源1210的各个方面。处理器1200和事件检测器1220可具有各种特性,如参考先前实施例进行的描述。因此,事件检测器1220是可编程的从而基于定义的事件而启动一线程(例如触发线程切换或分叉新线程)。该事件可以是硬线事件,或者由软件程序以及类似事件图解矢量等如前所述的机制定义。
处理器1200还可具有锁和/或旋转检测器1222。在一些实施例中,该锁/旋转检测器可以是单独的检测器,如图12所示。该单独的检测器可以是检测指示锁的特定预定义或甚至可编程条件的硬件部分。该检测器因此可以部分是硬件部分为软件。在其它实施例中,可通过将各种条件编程到普通事件检测器中就可实现锁或旋转-锁检测。因此,可将普通事件检测器编程以检测这种条件,在恰当地编程时可有效地形成旋转/锁检测器。例如,应用1254可包括事件检测器编程模块(EDPM)1256用于编程事件检测器1220以触发预期事件。
和可被检测的锁相关的一个事件为锁变量的长延迟取出。通过编程事件检测器1220以触发程序内某一点(将在存储器内访问该锁变量)的缓存缺失,可以检测引发取出长延迟的锁变量。该缓存缺失表示处理器并未将锁变量缓存。随后则可响应被触发的该特殊事件,启动一处理程序以解决长延迟的锁取出情形。
第二,该锁/旋转检测器1222还可检测旋转条件或者程序正等待一个争夺激烈的锁和循环以核查是否该变量可用的条件。例如,可通过感测对已知锁变量位置的重复访问而检测旋转条件。在检测到该旋转条件时,第二线程将被启动,这将在下文中讨论。一些实施例会使用辅助线程处理该争夺激烈的锁的情形,而不管是否首先出现长延迟的锁取出(触发第一辅助线程)。
图12的实施例包括轻质线程上下文存储器1230。该上下文存储器允许保存状态的小子集以实现“轻量级”或“蝇量级”的上下文切换。例如,在一些情形只保存父进程的指令指针,而让编程器负责任何附加的上下文的保存。上下文或多或少地被保存,但是通常存储在子集内的上下文少于全部的上下文。使用专门指令将这些轻量级线程公开于用户级别(例如程序的应用层,诸如x86架构中优先级别3的程序),使得用户可在多线程执行资源结合特定应用而启动线程。这种情况下,被激发为轻量级线程的事件处理程序应保存其所扰乱的任何未保存的上下文(正常执行父应用可能需要)。在其它实施例中,被触发的辅助线程可以是具有完全独立的上下文的线程。
图12的实施例还包括被耦合到处理器的存储器1250。在该实施例中,示出了各种锁开销使用模块和应用1254。在本实施例中,该模块为软件程序。在一个实施例中,各个模块为出现某一事件时被触发的单个线程。一个或多个所示模块可组合成单个辅助线程,该辅助线程可以为全部或轻量级上下文线程。在其它实施例中,可以用硬件或者硬件和/或软件和/或固件的组合实现这些模块。
应用1254为用户级别的应用,可具有锁或者其它同步对象或技术。取出临界部分数据模块1258可用于投机地将受锁保护的临界部分之内的锁和取出数据移出。获得未来锁模块1260向前运行,获得其它锁保护部分的锁。简单地通过将数据位置取到缓存内就可获得锁,或者在其它实施例中通过改变锁变量而获得锁,使得拥有该锁。未来锁模块1260还包括节流模块1262,从而通过限制其它线程而确保该投机的锁活动不降低整体的生产率。向前运行的执行模块1280可向前执行,从而完成受锁保护的部分之外的一些工作。
锁剖析模块1270收集特定线程相对于锁变量和/或其它线程的进展的数据。用户线程调度模块1290可接收来自锁剖析模块的提示并允许对线程更加高效的调度。例如,剖析模块1270可检测第一线程(例如初始消费者),获得一个锁,并引发第二线程(例如初始生产者)中显著的旋转。在这个示例中,向调度器通报,首先调度第二线程(初始生产者)会导致更高效的处理。在一些实施例中,该调度器为用户级别的线程调度器,该调度器暴露给编程器以允许对用户级别(例如轻量级)线程的调度。在一些实施例中,用户线程调度器1290可以是应用1254的一部分。
参考图13可以进一步了解这些模块相互作用的一个示例。在图13的实施例中,在区块1310中,检测到锁取出延迟。通过对事件检测器1220编程使其感测一条件可实现该检测。例如,应用1254可调用事件检测器编程模块1256以编程事件检测器1220,从而就在访问锁变量之前触发缓存缺失。备选地,可以使用前述专用的锁/旋转检测器1222检测该锁。
在区块1315中,可以响应于检测到锁变量的取出延迟而执行线程切换(例如蝇量级线程切换)。该线程切换启动第一辅助线程,该线程可执行在各实施例中的下述区块中阐述的各种功能。因此,尽管区块1315后跟随了各种区块,但在任意特定实施例中并非需要所有这些区块,而且其顺序并不关键。
在区块1320中,可取出获得该锁的代码之外但落在受该锁保护的代码部分之内的数据。例如,可在图12的实施例中执行取出临界部分数据模块1258。当锁的所有权最后获得时,在锁保护代码部分内的这种数据预取出可降低缓存缺失或普通数据检索延迟。
此外(作为单独的线程或者相同线程的一部分),可以如区块1330-1365中所示地取出未来锁。特别地,可以获得N个附加的锁,其中N为正整数。待获得的锁的数目是可编程的或者是硬代码,且在执行期间是可变化的(例如通过重新编程或节流模块1262)。在区块1330中,循环变量i设为1。如区块1340所示,取出一个未来锁(例如在各种实施例中可以预取出或者实际上被锁住)。统计计算未来锁地址以产生辅助线程,或者通过锁剖析确定未来锁地址,这将在下文中描述。如区块1350所示,测试该锁是否受到争夺。如果该未来锁受到争夺(例如可由锁变量的缓存状态、锁变量的值、或者由程序的旋转行为指示),则可中断该锁和/或其它未来锁的取出,如区块1355所示。
对于在区块1350中未发现该锁受到争夺的情形,则在区块1360中继续操作。在区块1360中测试如果取出的锁计数不等于目标数N,则在区块1365中将变量i递增且进程回到区块1340。如果在区块1360中计数到达N,则在一个实施例中进程继续到区块1370。通过在图12实施例中获得未来锁模块1260来执行这些锁取出操作1330-1365。取出或者获得未来锁的所有权可以有利地加速程序执行,这是因为在遇到锁时容易获得该锁的可能性更大。许多程序遇到相对少数的高度竞争的锁。因此,预取出锁的促进作用超过了对其它进程的进展的任意负面影响。
在一些实施例中,将由在区块1315中触发的线程执行的工作可能终止于区块1365,因此可以(通过中止或结合类型的操作)将该线程关闭,且控制可返回到主线程,如区块1370所示。在其它实施例中,辅助线程继续,并执行区块1372-1375的操作和/或其它操作。此外,其它实施例可以触发其它数目的辅助线程或者所述操作的其它组合。
在图13的实施例中,如区块1372所示,所述应用未能保护该锁。换而言之,锁变量表明其它进程拥有该锁。在一些实施例中,检测到重复的这种失败。可以编程或者设置一个旋转阈值,从而提供在采取措施之前为获得锁变量所有权而尝试失败的阈值次数。在区块1374中,触发第二辅助线程以完成获得锁变量所有权所需要的在开销影响下的另外的工作。一个示例为,可以执行临界部分之外的代码,如区块1375所示。例如,在图12的实施例中,可以执行向前运行的执行模块1280。在一些实施例中,可以执行该代码,从而仅仅预取出指令或数据而不实际计算结果和/或将结果提交给机器状态。在其它实施例中,如果执行相关性检查以确保正确的结果,则计算结果和/或将结果提交作为向前运行的执行的一部分。
备选地,和区块1330-1365的进程相似,第二辅助线程响应该第二事件可获得附加的锁。另一个备选为可以执行锁剖析。又一个备选为,先前保持的锁至少被清出最高级别的缓存(可能甚至到外部接口)以减小另一个处理器获得锁的传输延迟。在各种实施例中,可以以各种变形组合在锁开销的影响下可完成其它工作的各种示例。
图14阐述了包括锁剖析的一个实施例。在图14的实施例中,各种线程在区块1410内被调度。在一个实施例中,这些线程可以是在用户或者应用级别受到调度和控制的轻量级线程。例如,应用1254可包括图12中的用户线程调度器1290。在另一个实施例中,这些线程可以是具有全部上下文的操作系统可见的线程。在区块1420中,检测到受到争夺的锁。这个受到争夺的锁导致使能或启动剖析线程。如区块1430所示,该线程剖析锁的行为。在一个实施例中,该剖析要求捕捉诸如来自性能计数器或其它类似结构的事件计数器数据。当在区块1410内再次完成线程调度时,剖析信息随后用于帮助确定线程的优先权和/或排序。因此,锁开销时间再次被用于改善整体的程序性能。如前所述,该调度信息可以辅助线程调度器更高效地调度生产者/消费者线程对。
在发展期间,一个设计会经过各种阶段,从创作到模拟到制造。代表设计的数据可以以许多方式表示该设计。首先,在模拟中有用的是,使用硬件描述语言或另一种功能描述语言表示硬件。此外,在设计过程的一些阶段可以生产具有逻辑和/或晶体管栅极的电路水平模型。此外,在某一阶段,大部分设计到达表示各种装置在硬件模型中的物理布置的数据水平。对于使用传统半导体制作技术的情形,代表硬件模型的数据可以是对制造集成电路的掩模规定不同掩模层上存在或不存在各种特征的数据。在设计的任何表述上,数据可以存储在任何形式的机器可读取介质中。被调制的光或者电波或其它方式产生的光或者电波用于传输信息,该机器可读取介质可以为存储器、或者诸如光盘的磁学或光学存储器。任一这些介质可以“承载”或“指示”设计或软件信息。当传输指示或承载代码或设计的电学载波以执行电信号的拷贝、缓存、或重新传输时,就制成了新的拷贝。因此,通信提供商或者网络提供商可以制作实施本发明技术的物品(一种载波)的拷贝。
因此,公开了可启动其它线程的可编程事件驱动放弃机制的技术。尽管已经在附图中描述和示出了特定的示例实施例,应了解到,这些实施例纯粹地阐述而非限制该发明,本发明不限于所示和所述的具体结构和布置,因为本领域技术人员在阅读本公开内容之后可以想到各种其它修改。在诸如本领域的技术领域内,技术发展迅速且不容易预见进一步的进展,在不离开本发明的原理以及所附权利要求书范围的情况下可借助技术进展而容易对所公开的实施例进行排列和细节上的修改。
权利要求
1.一种附加地支持虚拟多线程的多线程处理器,所述处理器包括物理线程上下文存储器,用于存储多个有效线程的上下文信息;虚拟线程上下文存储器,用于存储多个k虚拟线程的上下文信息;耦合到虚拟线程上下文存储器和耦合到物理线程上下文存储器的虚拟线程选择器,所述虚拟线程选择器使得用于所述多个k虚拟线程中至少一个虚拟线程的上下文信息切换到所述物理线程上下文存储器。
2.根据权利要求1所述的处理器,其中所述物理线程上下文存储器是专用硬件,以保持可由多个执行资源使用的多个线程上下文,并且其中所述处理器在包括缓存位置、寄存器位置、或其它存储位置的组中的一个位置有效地缓存虚拟线程上下文数据。
3.根据权利要求2所述的处理器,其中所述处理器缓存用于多个k虚拟线程的上下文信息,其中在有效执行多个k虚拟线程中所选择的那一个虚拟线程之前,用于所述多个k虚拟线程中所选择的那一个虚拟线程的上下文信息必须切换到所述物理线程上下文存储器。
4.根据权利要求2所述的处理器,其中所述处理器将用于所述多个k虚拟线程中所选择的那一个虚拟线程的上下文数据组缓存在处理器存储位置中,其中在有效执行所述多个k虚拟线程中所选择的那一个虚拟线程之前,用于所述多个k虚拟线程中所选择的那一个虚拟线程的上下文信息必须切换到所述物理线程上下文存储器。
5.根据权利要求4所述的处理器,还包括监视器,用于检测多个执行资源的程序可定义条件,并且启动多个k虚拟线程的其中一个虚拟线程以响应于多个执行资源的程序可定义条件。
6.根据权利要求1所述的处理器,还包括多个事件计数器;监视器,使得在多个k虚拟线程之间进行线程切换,以响应于所述多个事件计数器正在达到的多个程序定义的计数。
7.根据权利要求1所述的处理器,还包括在新选择的虚拟线程和先前选择的虚拟线程之间交换上下文信息的逻辑。
8.根据权利要求1所述的处理器,还包括处理器线程选择器,其中所述虚拟线程选择器向处理器线程选择器呈现多个k虚拟线程的子集。
9.根据权利要求4所述的处理器,其中放弃类型指令使得在多个k虚拟线程之间进行线程切换。
10.一种多线程处理器,包括上下文存储逻辑,保持用于第一多个线程的第一上下文信息,所述第一多个线程是多个有效执行线程;第二线程逻辑,管理用于第二多个线程的第二上下文信息,并且将所述第二多个线程中属于所述第一多个线程成员的第二多个线程改变为多个有效执行线程。
11.根据权利要求10所述的多线程处理器,其中所述第二线程逻辑包括第二线程上下文存储器,存储用于第二多个线程的第二上下文信息;第二线程开关,耦合到第二线程上下文存储器,所述第二线程开关将第二多个线程的子集呈现为备选有效线程,和其中多线程处理器还包括处理器线程切换逻辑,所述处理器线程切换逻辑耦合到所述第二线程开关,其中所述上下文存储逻辑包括专用硬件,以保持由多个执行资源使用的上下文。
12.根据权利要求10所述的多线程处理器,其中放弃类型指令用于使得在第二多个线程之间进行线程切换。
13.根据权利要求12所述的多线程处理器,还包括缓存用于所述第二多个线程的第二上下文信息的存储位置,其中用于第二多个线程中所选择的那一个线程的第二上下文信息必须在有效执行所述第二多个线程中所选择的那一个线程之前从存储位置切换到所述上下文存储逻辑。
14.根据权利要求13所述的多线程处理器,其中将用于所述第二多个线程的子集的第二上下文信息切换到所述上下文存储逻辑,以启动所述第二多个线程的子集。
15.根据权利要求10所述的多线程处理器,还包括监视器,使得在第二多个线程之间进行线程切换,以响应于程序可定义进程,所述程序可定义进程指示包括用于多个事件计数器的多个阈值计数的情况。
16.一种方法,包括在来自专用硬件上下文存储器的多个N有效线程存储槽中执行由多线程处理器中的执行资源所执行的多个有效线程;使用在处理器存储位置中由多线程处理器保持的第二上下文在多个第二线程之间进行切换,以填充多个N有效线程存储槽。
17.根据权利要求16所述的方法,其中执行多个有效线程包括在多线程执行资源上同时执行所述多个有效线程,其中在多个第二线程之间切换包括在多个第二线程的子集之间切换,以填充多个N有效线程存储槽的子集。
18.根据权利要求16所述的方法,还包括交换上下文数据,以启动来自所述多个第二线程的新线程,并且换出老的有效线程使其成为所述多个第二线程中的一个线程。
19.一种系统,包括存储器,用于存储多个有效线程和多个虚拟线程;多线程处理器,包括执行多个有效线程的执行资源;虚拟线程逻辑,用于换入作为多个有效线程中的一个有效线程的虚拟线程。
20.根据权利要求19所述的系统,其中多线程处理器包括用于所述多个有效线程的专用硬件上下文存储器和用于所述多个虚拟线程的其它上下文存储器,其中所述多线程处理器交换用于新选择的虚拟线程的上下文信息。
21.根据权利要求19所述的系统,其中所述多线程处理器还包括低进程检测器,用于进行线程切换。
22.根据权利要求19所述的系统,还包括通信接口。
23.一种处理器,包括处理器线程切换逻辑,用于在多个N线程之间进行切换;耦合到处理器线程切换逻辑的虚拟线程切换逻辑,所述虚拟线程切换逻辑向处理器线程切换逻辑呈现多个虚拟线程的虚拟线程,其中处理器线程切换逻辑用于在多个虚拟线程的虚拟线程和至少一个其它线程之间进行切换。
24.根据权利要求23所述的处理器,其中虚拟线程切换逻辑用于向处理器线程切换逻辑呈现多个虚拟线程的子集,并且其中处理器切换逻辑用于在多个虚拟线程的子集和至少一个其它线程之间进行切换。
25.根据权利要求24所述的处理器,其中多个虚拟线程的子集是一个虚拟线程,并且其中所述处理器线程切换逻辑用于在作为第一线程的多个虚拟线程与N-1其它线程之间切换。
26.根据权利要求23所述的处理器,还包括多个执行资源,用于执行由处理器线程切换逻辑和虚拟线程切换逻辑选择为有效的多个线程。
27.根据权利要求23所述的处理器,其中所述处理器是由存储在计算机可读介质上的数据来表示。
全文摘要
可启动其它线程的、用于可编程事件驱动放弃机制的方法、设备、及程序工具。在一个实施例中,设备包括执行多个指令的执行资源以及检测和同步对象相关的长延迟事件的事件检测器。该事件检测器可以响应于和该同步对象相关的长延迟事件而引发第一线程切换。该设备还包括一旋转检测器,该检测器检测该同步对象是否为受争夺的同步对象。该旋转检测器可响应于检测到受争夺的同步对象而引发第二线程切换,从而启动旋转检测响应。
文档编号G06F9/38GK101051266SQ200710104280
公开日2007年10月10日 申请日期2006年3月1日 优先权日2005年3月2日
发明者N·英赖特, J·科林斯, P·王, H·王, X·田, J·沈, G·肖弗, P·哈马伦德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1