可以激活其他线程的可编程事件驱动的让步机制的制作方法

文档序号:6420455阅读:127来源:国知局
专利名称:可以激活其他线程的可编程事件驱动的让步机制的制作方法
技术领域
本发明属于处理装置和处理系统的领域,该处理装置和处理系统处理指令等的序列,以及对这种装置和/或系统进行编程的特定指令序列。一些实施例涉及对这种处理装置的执行资源内的状况(condition)或事件进行监视和/或响应。
背景技术
目前,有多种机制被用于改变处理系统中的控制流(即正被遵循的处理路径或者指令序列)。例如,程序序列中的跳转指令明确且精确地引起到新地址的跳转。因为跳转指令指示处理器跳转到一个位置并在那一点继续执行,所以跳转指令是控制流发生明确改变的一个例子。因为跳转是作为执行跳转指令的直接结果而发生的,所以传统的跳转指令是“精确的”(或者同步的)。
中断是另一个传统的控制流改变的例子。中断可以是提供给诸如处理器等装置的外部信号。处理器可以通过跳转到中断处理程序(handler)来响应,所述中断处理程序是处理由特定中断用信号表示的事件的例程。因为处理器在与中断的接收相关的特定时间窗口内识别中断并遵照这些中断,所以一般来讲,中断也是比较精确的。具体地说,通常在内部接收中断之后的下一个指令的边界处,这些中断被服务。在一些情况下,只允许操作系统或其他在高特权级别下工作的软件来屏蔽中断,所以用户程序可能就没有机会来使能或禁止这些改变控制流的事件。
另一个传统的控制流改变的例子响应于例外而发生。例外一般反映预定义的体系结构状况,诸如满足特定标准的数学指令结果(异常、下溢、上溢、不是数字等等)。一些例外可以被屏蔽,例如可以通过设置控制寄存器中的位来屏蔽例外。如果发生了例外并且未被屏蔽,那么将调用例外处理程序来处理该例外。
使用断点是另一种改变处理器控制流的技术。一般在调试程序时使用断点。可以将特定的指令地址编程到断点寄存器中。当断点是活动的并且到达了目标地址时,处理器(除了照常继续程序以外)还可以完成各种动作。断点还允许单步完成程序。
通过多线程技术,多个不同的线程可以利用处理器硬件。多线程处理器可以因为多种原因在线程之间切换。例如,处理器可以具有一种算法,该算法在可用的线程之间自动切换。其他处理器使用事件切换(switch-on-event)多线程(SoEMT),这样诸如缓存缺失等的特定事件可以引起线程切换。因为处理器切换它所执行的序列或流,所以可以认为线程切换是一种控制流改变。
在一篇现有技术文件中,详细描述了停顿(quiesce)指令(参见专利号为6,493,741的美国专利)。在一个例子中,停顿指令停止一个线程中的处理,直到计时器超时或者发生了对存储位置的存储器写入。因此,诸如停顿指令的指令,它们本身就可以触发含有该停顿指令的线程中处理的暂时停止以及到另一个线程的切换。

发明内容
根据本发明的一个方面,本发明提供了一种装置,包括执行资源,用于执行多个指令;监视器,用于检测所述执行资源的低进度指示状况,所述监视器响应于检测到所述低进度指示状况,通过转移到处理程序来有选择地中止至少一个程序的处理。
根据本发明的另一个发明,还提供了一种装置,包括用于执行程序的执行逻辑;和事件检测逻辑,其响应于执行逻辑的可程序定义状况,在该程序执行期间来执行事件处理程序。
根据本发明的另一个方面,提供了一种方法,包括对监视器进行编程以检测处理器状况;响应于所述处理器状况的发生,产生帮助线程。
根据本发明的另一个方面,还提供了一种方法,包括在执行第一程序部分时监视内部处理状况,以得到表示多个内部硬件事件的可编程状况;以及响应于可编程状况的发生,将执行转移到第二程序部分。
根据本发明的另一个方面,还提供了一种方法,包括将多个用户可定义的帮助线程触发设置为第一状态;第一次模拟程序的性能;调整所述多个用户可定义的帮助线程触发;第二次模拟程序的性能;以及基于第一次和第二次的程序性能,选择优选的一组用户可定义的帮助线程触发。
根据本发明的另一个方面,提供了一种系统,包括处理器,其包括用户可编程的硬件监视器,该监视器用于检测处理器状况,并响应于所述处理器状况引起处理程序的执行;和存储所述处理程序的存储介质,所述处理程序包括使得帮助线程将被产生的至少一个指令。
根据本发明的另一个方面,提供了一种处理器,包括执行资源,用于执行多个指令;和逻辑,用于响应于所述执行资源的多个事件的可编程组合来中止所述多个指令的执行,所述多个事件在执行第一指令后发生,所述第一指令使能对可编程状况的检测。


以举例的方式对本发明进行了说明,但是本发明不限于附图。
图1图示了一个实施例中的系统,该系统可以检测并响应执行资源的处理状况。
图2图示了图1系统的一个实施例的操作流程图。
图3图示了图1系统的另一个实施例的操作流程图。
图4图示了另一个实施例中的系统,该系统可以响应多个不同的性能事件和/或复合性能事件。
图5A图示了可以识别复合事件的监视器的一个实施例。
图5B图示了监视器的另一个实施例。
图5C图示了监视器的另一个实施例。
图6图示了根据一个实施例执行用户程序的流程图,该用户程序响应于可程序定义的触发而激活帮助线程。
图7图示了根据一个实施例改进监视器设置的过程流程图。
图8图示了根据一个实施例更新软件的过程流程图。
图9A图示了激活多个嵌套的帮助线程来辅助程序处理的流程图。
图9B图示了一个实施例中支持虚拟线程的线程切换逻辑。
图10A图示了上下文敏感事件图表向量和屏蔽实现的一个实施例。
图10B图示了上下文敏感事件图表向量和屏蔽实现的一个实施例。
图11图示了多线程处理器的一个实施例,该处理器基于监视器事件进行线程切换。
具体实施例方式
下面的叙述描述了可以激活其他线程的可编程事件驱动的让步(yield)机制的实施例。在下面的叙述中,所提出的诸如处理器类型、微体系结构状况、事件、使能机制等这些大量的特定细节,都是为了提供对本发明更加透彻的理解。但是,本领域的技术人员应该了解,本发明可以不用这些特定细节来实施。此外,没有详细示出一些已知的结构、电路等,以免不必要地使本发明变得不清楚。
在一些实施例中,所公开的技术可以允许一个程序在执行该程序的同时主动地监视和响应执行该程序的执行资源的状况。实际上,这种实施例可以结合实时的执行资源工作状况反馈来提高性能。如果执行资源遇到了执行延迟状况,那么可以中止(disrupt)程序执行以做出调整。在一些实施例中,可以激活处理程序并且可以产生帮助线程,来改进初始线程的执行。在其他实施例中,可以通过切换到另一个可以不是帮助线程的程序线程来实现中止。在一些情况下,这些和其他实施例可以有利地提高处理吞吐率,和/或使最优化适合于特定的硬件。
现在参看图1,图示了一个实施例中的系统,该系统可以检测并响应执行资源的处理状况。在图1的实施例中,执行资源105、监视器110和使能逻辑120构成了能够执行指令的处理器100的一部分。在一些实施例中,执行资源可以包括硬件资源,这些硬件资源可以被集成到一个元件或集成电路中。但是,执行资源可以包括也可以在执行程序指令中所使用的软件或固件资源,或者硬件和软件和/或固件的任意组合。例如,可以将固件当作抽象层的一部分来使用,固件或者可以给处理硬件添加功能,软件也可以有类似的作用。软件还可以用来模拟部分或全部指令集,或者可以帮助处理。
处理器可以是执行指令的多种不同类型处理器中的任何一种。例如,处理器可以是通用处理器,诸如Intel公司的Pentium处理器系列、Itanium处理器系列或其他处理器系列的处理器,或者诸如其他公司生产的其他处理器。因此,处理器可以是精简指令集计算机(RISC)处理器、复杂指令集计算机(CISC)处理器、超长指令字(VLIW)处理器或者任何混合的或可选的处理器类型。此外,诸如网络或通信处理器、协同处理器、嵌入式处理器、压缩引擎、图形处理器等的专用处理器可以使用所公开的技术。因为集成化趋势还在继续,并且处理器也变得更加复杂,所以将更加需要对内部性能指标进行监视并做出反应,因此将使得这里所公开的技术更加具有价值。但是,虽然所公开的技术可以广泛应用于执行程序序列的复杂硬件,但是由于本技术领域中飞速的技术发展,我们很难预见所公开技术的所有应用。
如图1所示,处理器100被耦合到诸如内存的存储介质150上。存储介质150可以是具有各种级别的层次结构的存储子系统,这些各种级别的层次结构可以包括但不限于各种级别的高速缓存、系统存储器和非易失性存储器,例如,系统存储器为动态随机访问存储器或类似存储器,非易失性存储器为闪存(例如存储棒等)、磁盘或光盘等。如所示出的,存储介质存储程序160以及处理程序和/或诸如帮助线程170的其他线程。
为了允许监视器对期望事件进行监视,可以将监视器110耦合到执行资源的多个部分,以检测特定状况或者获知特定的微体系结构事件。可以将信号线连线到监视器110上,或者可以将监视器与相关资源策略性地放在一起或者集成在一起。监视器可以包括各种可编程逻辑或软件或固件元件,或者可以是专门设计用于检测特定状况的监视器。监视器跟踪各种事件或状况,如果编程所要检测的事件或状况发生了,则用信号通知执行资源105中止正常的控制流,否则将继续正常的控制流。如图1所示出的,中止可能引起事件处理程序被调用或者发生线程切换。
一个具体的可检测状况的例子是数据可能从高速缓存中缺失,并导致缓存缺失事件的发生。实际上,程序可能产生这样的存储器访问模式,该模式会导致反复的缓存缺失,从而降低了性能。在一段时间内或者在执行一部分代码的过程中一定数量的这种缓存缺失的发生,是表示在执行这部分代码时进行着相对较低水平进度的事件的一个例子。
可以作为低进度指示符的其他可检测事件可能与执行资源的多种其他微体系结构细节或结构性细节相关。监视器可以检测包括一个或多个下列项目的状况,这些项目是资源停止(stall)、高速缓存事件、退休事件、分支或分支预测结果、例外、总线事件或其他各种通常被监视的或者影响性能的事件或状况。监视器可以对这种事件或状况进行计数或者计时、量化或者表征,并且当与一个或多个事件或状况相关联的特定量度(metric)发生时监视器是可编程的。
图2示出了图1系统的一个实施例的操作流程图。如图2的方框200中所示的,程序160可以设置状况以引起执行控制流的改变。例如,使能逻辑120可以控制监视器的激活以及要检测哪个(些)事件。或者,使能逻辑120可以使能和/或屏蔽事件;监视器110本身也是可编程的,以在指定所跟踪的执行资源或系统内的事件或状况时具有更大的灵活性。在任何一种情况下,程序160本身都可以指定在其执行过程中所要观察的状况。程序160还可以提供当所监视的状况发生时被激活的处理程序或线程170。例如,所述程序可以包括主线程以及帮助线程或帮助例程,如果程序指定的状况发生了,所述帮助线程或帮助例程将试图改善主线程的执行。
如在方框205中所示的,执行程序指令。程序的执行引起执行资源状态的改变。例如,可能会发生或存在各种在程序执行中禁止向前进度的状况。如在方框210中所示,可以监视各种处理量度和/或微体系结构状况,以确定在方框200中所编程的触发事件是否发生。如果在方框210中触发状态没有发生,则监视器不被触发,则程序执行返回到方框205继续进行。
在一些情况下,触发状态与任何一个单独指令的执行只具有间接的关系。例如,现有技术中的断点检测器在指令指针到达所设定的地址时一般会引起中断(break)。因为特定的指令(即,其地址)直接触发该中断,所以这种断点是精确的。此外,现有技术中的停顿指令本身使线程至少暂时地停止。对比之下,利用本公开技术的一些实施例基于一组状况触发控制流的改变,这组状况不一定是由单一指令引起的,而可能是由整个程序流和/或系统环境引起的。因此,虽然监视器可以在单个系统中的同一指令执行状态下反复地触发,但是其他状况、环境、系统等可能引起对同一程序的不同触发点。从这个意义上说,在一些情况下,所公开的技术提供了一种产生不直接相关于指令执行边界的控制流改变的、非精确的或异步的机制。此外,在一些实施例中,因为体系结构的正确性不依赖于在任一特定时间点上执行的任何处理速率加快的(processor-rate-enhancing)帮助例程,所以上述非精确的机制可以以精度低于每条指令的粒度(granularity)对事件进行测试,和/或将对事件的识别延迟一段时间。
在方框210中当监视器检测到触发状态时,则如方框215中所示,中止程序的处理。一般地,因为程序的处理正在没有效率地或者以程序员所不期望的方式进行着,所以系统将相应地做出调整。例如,可能调用诸如另一个程序部分的另一个软件例程。其他的程序部分可以是与初始线程无关的另一个线程,或者可以是例如通过预取数据以减少缓存缺失来帮助执行初始线程的帮助线程。或者,对程序透明(例如硬件)的机制可以进行一些最优化、重配置(包括但不限于对监视器结构的重配置)、资源的再分配等,以期改善处理。
在图3中图示了调用帮助线程的一个例子。具体来说,图3的流程图详细描述了图1系统的一个实施例的操作,其中,执行资源是多线程资源,并且当特定的触发状况发生时,程序调用帮助线程。这样,如在方框300中所示,第一线程(例如主程序)设置监视状况。状况可以是这里所讨论的多种状况中的任何一个或多个。如在方框310中所示,第一线程执行代码部分。如果在方框320中测试到触发状况没有发生,则代码部分继续执行,如在方框310中所示。
如果触发状况发生了,那么如在方框330中所示,帮助线程被激活以帮助第一线程。帮助线程可以由诸如处理例程的例程激活,或者只是由线程切换激活。例如,在一个实施例中,由监视器发信号通知给执行资源的触发状况可以使执行资源跳转到产生帮助线程的事件处理程序。在另一个实施例中,帮助线程可能只是其他活动线程中的一个。在另一个实施例中,处理器可以提供一个或多个专用的帮助线程执行槽(slot),并且监视器可能引起到这些槽之一的一个帮助线程的切换。如在方框340中所示,然后两个线程都继续执行。帮助线程很有希望地向前运行,并清除会使第一线程停止或不能很好执行的那些状况。
图4图示了系统的另一个实施例,该系统可以响应多个不同的性能事件和/或复合性能事件。在图4的实施例中,所示的执行资源-400包括从410-1到410-N的一组N个监视器。此外,提供了事件图表向量(eventschema vector,ESV)存储位置420和事件图表向量屏蔽(event schemavector mask,ESVM)存储位置425。图4的实施例示出了一定数量(N个)的监视器,监视器的数量对应于事件图表向量和事件图表向量屏蔽的位数。在其他实施例中,可以有不同数量的监视器和这些向量中的不同位数,并且监视器可以与位直接相关,也可以不直接相关。例如,在一些实施例中,包含多个监视器的状况可以只与一个向量位相关。
执行资源400被可选地耦合到事件描述符表430(EDT)上,该表可以在所述处理器上或者在协同处理器或系统存储器中本地实现。控制流逻辑435被耦合到监视器410-1到410-N上,并从事件图表向量和事件图表向量屏蔽接收值。当由一个或多个监视器检测到的状况根据事件图表向量和事件图表向量屏蔽被使能时,控制流逻辑435改变处理逻辑的控制流。
图4的实施例还图示了解码逻辑402和一组机器或模型(model)专用寄存器404(MSR)。可以使用解码逻辑402和模型专用寄存器之一或者两者来编程和/或激活监视器以及事件图表向量和屏蔽。例如,MSR可以用来对触发监视器的事件的类型或数目进行编程。MSR也可以用来编程事件图表向量和屏蔽。或者,也可以使用将由解码器402解码的一个或多个新的专用指令来对监视器以及事件图表向量和屏蔽之一或者两者进行编程。例如,在某组状况发生时,可以使用让步(yield)指令来使能对程序进行处理的中止。可以由一个操作数将一些或者全部状况指定给让步指令,或者在让步指令执行之前编程一些或者全部状况。这种让步指令可以由解码器402解码,以触发微代码例程;产生相应的微操作或微指令或者微操作序列,以直接发信号给合适的逻辑或者激活协同处理器,或者在其它情况下实现让步功能。在一些实施例中,让步的概念可以恰当地描述这样的指令,即允许一个线程在执行让步指令后继续进行,但是可能由于执行另一个线程或处理程序而在某点上变慢。例如,主要为单线程的程序可以调用额外的帮助线程,并与这些额外的帮助线程共享处理器。
在图4的实施例中,存储器440包括事件处理程序450和主线程460。在一些实施例中,事件描述符表可以与主线程460和处理程序450存储在同一存储器或者同一存储器层次结构中。如前面所讨论的,处理程序可以产生帮助线程以帮助主程序有效率地执行。
存储器440也可以存储更新模块442以经由通信接口444进行通信。更新模块442可以是硬件模块或软件例程,所述软件例程由执行资源执行以获得将被编程到各种监视器和/或使能逻辑中的新状况。更新模块442还可以获得新的帮助线程或例程。例如,可以由从软件程序卖主那里得到的软件程序来下载这些线程或例程,以提供改善的性能。因此,网络接口444可以是允许经由通信信道进行信息传递的任何网络和/或通信接口。在一些情况下,网络接口可以连接到互联网上以下载新的状况和/或帮助程序或线程。
在一个实施例中,事件图表向量的每一位表示一个特定事件的发生或未发生,该特定事件可能是反映多种状况或其他事件的复合事件(和/或以多种状况或其它事件通过布尔运算而表达的复合事件)。该特定事件的发生可以设置事件图表向量中的位。事件图表向量中的每一位可以在事件图表屏蔽向量中具有相应位。虽然事件图表向量中的位可能由于事件的发生而保持在设置(set)状态,但是如果屏蔽位指示该特定事件被屏蔽了,那么控制流逻辑435可以忽略该事件。用户在解除对事件的屏蔽时可以选择是否清除事件图表向量。这样,事件可以被屏蔽一段时间并在以后被处理。在一些实施例中,用户可以选择将触发指定为电平触发或边沿触发,这取决于多种因素,诸如事件更新、采样和重置之间的关系(或者ESV中触发事件的保持时间)。
在这个实施例中,如果屏蔽位指示事件没有被屏蔽,那么控制流逻辑435为该特定事件调用事件处理程序。控制流逻辑435可以基于事件图表向量中位的位置而向量指向事件描述符表430,因此事件描述符表可能具有N个条目,这些条目对应于事件图表向量中的N个位。事件描述符表可以包含处理程序地址,该处理程序地址表示控制流逻辑435重新指引执行时所指向的地址,还可以包括在特定实施例中可能有用的其他信息。例如,可以在事件描述符表中保存或更新特权级别、线程、进程和/或其他信息。
在另一个实施例中,事件描述符表430不一定是但可以是单条目,该条目为单个事件处理程序指示地址以处理所有事件。在这种情况下,条目可以存储在寄存器或者其他处理器存储位置中。在一个实施例中,可以使用单个处理程序,并且该处理程序可以访问事件图表向量以确定哪个事件发生了并因此该怎样响应。在另一个实施例中,事件图表向量可以总体定义一个使控制流逻辑435调用处理程序的事件。换句话说,事件图表向量可以代表合起来发信号表示一个事件的多种状况。例如,可以使用事件图表屏蔽向量来指定由事件图表向量所指示的某个事件,该事件为了触发处理程序的执行必须发生。每个位都可以代表达到可编程状况的监视器。当所有未屏蔽的监视器都达到了它们各自的指定状况时,处理程序就会被调用。这样,可以使用整个事件图表向量来指定应该触发处理程序执行的某个复杂的复合状况。
在另一个实施例中,可以使用多个事件图表向量和屏蔽来指定不同的状况。不同的向量可以通过事件描述符表或者某种其他的机制来向量指向不同的处理程序。在另一个实施例中,可以将一个或多个事件图表向量的一些位分组,以形成触发处理程序调用的事件。对于本领域的技术人员来说,各种其他的不同置换也将是很明显的。
图5a图示了监视器500的一个实施例,该监视器是可编程的,并且其能够与各种性能监视器接口连接以发信号通知复合事件。例如,这种性能监视器可以记录各种微体系结构事件或状况的发生,如在高速缓存层次结构的给定级别上所发生的缓存缺失、分支退休;分支误预测(misprediction)(或者被误预测的分支的退休);追踪缓存传递模式改变或事件;分支预测单元取请求;存储请求的取消;高速缓存线分裂(1ine split)(完成分开的加载、存储等的计数);应答事件;各种类型的总线事务(例如锁、突发读、写回和无效);总线定序器的分配(或者仅仅是某些类型);数字辅助(下溢、异常等);特定类型的指令或微操作(uOP)的执行/退休;机器清除(或者流水线清洗的计数);资源停止(stall)(寄存器重命名资源、流水线等);对所标签的uOP的处理;退休的指令或u0P;高速缓存中所分配的(和/或诸如M的特定状态下的)线;取指令被停止的周期数;指令长度解码器被停止的周期数;取高速缓存的数量;高速缓存或类似器件中所分配的(或逐出的)线的数量。这些只是一些可以被监视的微体系结构事件或状况的例子。对于本领域的技术人员来说,多种其他的可能性以及这些或其他状况的组合都是很明显的。此外,可以通过在所公开的任何一个实施例中公开的任何监视器或类似监视器来监视这些和/或其他状况或事件。
性能监视器通常包含在处理器中,用于计数特定事件。程序员通过制造商定义的接口来读这种性能监视器的计数,接口诸如为专用的处理器宏指令,象公知的Intel处理器所支持的RDPMC指令。例如,可以参见IntelPentium4处理器软件开发人员手册第三卷的附录A。在一些实施例中,可以使用其他内部指令或微指令或微操作来读性能计数器。这样,例如,性能监视器就适合与所公开的技术一起使用了。在一些情况下,可以改变可编程性能监视器,来提供事件通知(event signaling)的能力。在其他实施例中,可以通过其他监视器读性能监视器以建立事件。
在图5a的实施例中,监视器500可以包括一组可编程条目。每一个条目可以包括条目号510、使能字段511、用于指定一组性能监视器之一的性能监视器号(EMON#)512以及触发状况514。触发状况可以是例如所达到的某个计数、在某时期内所达到的计数以及计数差别等。监视器500可以包括用于读的逻辑,或者其被耦合以从指定的性能监视器接收计数。当各种N个状况发生时,监视器500用信号通知控制流逻辑。可以通过有选择地编程每个条目的使能字段来使用N个条目的子集。
图5b图示了监视器520的另一个实施例。监视器520代表定制的复合事件监视器。监视器520通过信号线528-1到528-X从多种执行资源或资源部分接收一组信号,并通过组合逻辑530组合这些信号。如果接收到了适当的信号组合,那么监视器520通过输出信号线532用信号通知控制流逻辑。
图5c图示了监视器540的另一个实施例。监视器540包括具有N个条目的表。每个条目包括使能字段552、状况字段554和触发字段556。可以对状况字段进行编程,来指定将监视哪个输入信号组合。状况可以相关于也可以不相关于诸如性能监视器的其他事件检测结构,因此相对于图5a所讨论的状况来说,这里的状况可能更通用。触发字段556可以指定用信号通知控制流逻辑所需的输入信号的状态。再次,每个条目可以通过使能字段552被使能/禁止。在一些实施例中,可以组合状况和触发字段。可以将上述监视器与其他公知类型进行各种组合,或者可以与现有的更简单或更复杂的监视器进行组合,对于本领域的技术人员来说,这些组合都是很明显的。
图6图示了根据一个实施例来执行用户程序的流程图,该用户程序响应于可程序定义的触发来激活帮助线程。在方框600中,程序首先测试是否有让步能力。这里,“让步能力”是对基于状况或事件的发生而中止处理流的能力的一种简写。或者替代对让步兼容性支持的测试,让步能力可以使用前面定义为无操作操作码的操作码和/或前面未使用过或未定义的MSR,使得使用让步能力不会对没有这种能力的处理器产生影响。还可以通过检查专门的CPU-ID来查询这种能力的存在,所述专门的CPU-ID对指示出在给定的处理器或平台上是否存在这种能力的提示(hint)进行编码。类似地,可以使用诸如Itanium的PAL(处理器抽象层)调用或SALE(系统抽象层环境)的专用指令来查询处理器特定的配置信息,包括是否有这种可程序定义的让步能力。假设存在让步能力,那么用户程序可以读和/或重置多种计数器,如在方框610中所示。例如,如果存在能力则可以读性能监视器计数器,这样可以计算增量值(delta),或者可以重置这些值。
如在方框620中所示,用户程序然后设置帮助线程触发状况。让步能力可以在低特权级别下进行访问,使得任何程序或大部分程序都能够利用这个特征。例如,让步能力可用于环形连接(ring)Pentium处理器系列的处理器或其他类似处理器中的三个特权级别程序。因此,用户程序本身能够设置其自身的基于性能的触发状况。如果应用程序要求或操作系统可以提供持久的监视能力,那么知道存在这种上下文敏感的监视器配置的用户程序或操作系统就可以选择在线程/进程上下文切换中保存或恢复这种专用的监视器配置/设置。
如在方框630中所示,在对让步状况进行编程之后,用户程序继续执行。在方框640中测试让步状况是否发生了。如果让步状况没有发生,那么程序执行继续进行,如在方框630中所示。如果让步状况发生了,那么帮助线程被激活,如在方框650中所示。图6的流程图形式是想要表示发生了事件的同步轮询,可以在一些实施例中使用这个方法。但是,一些实施例在事件发生时,或者在事件发生的一定数量的时钟周期内异步地对事件做出反应,而不是以一定的间隔来轮询事件。在一些实施例中,可以在循环或其他代码部分的外部设置监视状况,以检测特定的状况。通过下面主线程和帮助线程的伪代码例子说明了这个概念。
<pre listing-type="program-listing">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&lt;!-- SIPO &lt;DP n="13"&gt; --&gt;&lt;dp n="d13"/&gt; remammg-- //每一次循环的时间(Every Stride Time) //global_n=n //global_r=remaining //SetEvent()}disable Helper Trigger//内部的(Intrinsic) }T() {Do Stride times n->i=n->next->j+n->next->k+n->next->1 n=n->next remaining--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)&lt;!-- SIPO &lt;DP n="14"&gt; --&gt;&lt;dp n="d14"/&gt;n=global_r } }</pre>在循环外部设置触发的一个好处是不会禁止循环内的编译器最优化。例如,一些编译器不使用那些可以被用于激活让步能力的内部函数来最优化循环或代码部分。通过将这种内部函数放在循环之外,可以去除对编译器最优化的干扰。
图7图示了根据一个实施例对让步设置进行改进的过程流程图。使用具有让步能力或者类似的处理器,程序员可以设计出将在多种情形下被调用的程序和帮助例程,如方框700中所示。这样,可以为程序员预期的各种处理阻止的状况提供帮助例程。在程序的执行过程中,在需要的时候,处理器能够调用这些例程。让步设置可以包括事件图表向量和屏蔽值和/或监视器设置等。
在特定的处理器上,某种让步设置可能带来很好的执行吞吐率。但是,这种确定用手动操作可能非常困难,所以最好按经验获得。因此编译器或其他调试软件(例如Intel VTune代码分析器)可以反复地模拟具有不同让步设置的代码,从而得到最佳的或期望的设置,如在方框710中所示。因此,可以选择对于运行时间的让步设置的期望值,如在方框720中所示。可以在一个处理器的多个不同版本上,或者在多个不同的处理器上,或者在多个不同的系统中模拟程序以获得不同的让步设置。如在方框730中所示,程序可以使用诸如CPU ID的系统或处理器标识来选择当其运行时所用的让步设置。
此外,使用一小组设置来优化性能可能有助于软件更新。例如,可以下载新的让步值来优化给定处理器的性能,或者可以在发行新处理器时用新的让步值来更新软件。这种新值可以允许二进制的或者模块化的修改,而这种修改基本上不会扰乱或危及现有软件的功能。
图8图示了根据一个实施例更新软件的过程流程图。如在方框800中所示,发行了新版本的微处理器。新版本可能具有与微体系结构事件相关的不同等待时间,微体系结构事件诸如为缓存缺失。因此,前面写入的、用于在一定数量的缓存缺失之后激活帮助线程的例程可能会由于新的缓存缺失的等待时间而变得不那么有效。因此,如在方框810中所示,对让步设置进行重新优化。
一旦获得了新的设置,就可以(例如通过可能是程序的一部分的更新模块)更新程序,如在方框820中所示。根据实现的具体细节,可以对让步值进行修改或补充。此外,可以加入额外的或不同的帮助例程来帮助新处理器的实现。在任何一种情况下,让步能力可以在最初交付软件之后使交付性能增强版或为可能。这种能力在非常多的情况下可能都是非常有利的,并且可以被用来仅仅提供新的最优化而不会改变底层硬件。此外,在一些情况下可以保留底层软件。例如,如果写帮助例程来处理合成(synthetic)事件(例如严重的缓存缺失),那么在不同的硬件上可以改变触发该例程的事件组成,而不改变实际的例程本身。例如,可以改变监视器配置值和/或ESV/ESVM值,而例程则不做改变。
可以通过创建嵌套的帮助线程来进一步加强所公开技术的效果,图9a图示了这种用法的一个例子。在图9a的实施例中,在方框900中程序设置让步事件。在方框910中,程序继续执行。在方框920中测试让步事件(触发)是否发生。如果没有让步事件发生,那么程序继续执行,如在方框910中所示。如果让步事件发生了,那么如在方框925中所示,帮助线程被激活。如在方框930中所示,该帮助线程设置另一个让步事件。这样,帮助线程有效地标示了进一步的状况,该状况指示进一步的处理辅助(assistance)可能是有用的。这种进一步的状况可以表示第一帮助线程是否是有效的;和/或被设计成表示被认为是作为第一帮助线程的激活结果而出现的、或者与第一帮助线程的激活无关而出现的进一步的状况。
如在方框940中所示,程序和帮助线程都是活动的正在执行的线程。这些线程都是活动的并且都在多线程处理资源中执行,从这个意义上来讲,它们同时执行。在方框950中测试通过程序和帮助线程的组合,是否已经发生了新的触发状况。如果新触发状况没有发生,那么两个线程的执行继续进行,如在方框940中所示。如果新触发状况发生了,则如在方框960中所示激活第二或嵌套帮助线程。然后,如在方框962中所示,程序和多个帮助线程可以是活动的并执行。因此,在一些实施例中,可以使用多个嵌套帮助线程。
在一个实施例中,可以通过使用虚拟线程来激活多个帮助线程(嵌套的或者非嵌套的)。处理器可以有效地缓存上下文数据(在高速缓存位置、寄存器位置或其他存储位置中),而不是将一整套资源全部用于以加处理器可以处理的线程数量。由此,可以在多个线程之间快速地切换一个物理线程槽。
例如,图9b的实施例图示了根据一个实施例的线程切换逻辑,该实施例使得虚拟线程被切换到有限数量的物理线程槽中,而这些物理线程槽已经将硬件全部用于保留线程上下文。在图9b的实施例中,可以将多个帮助线程965-1到965-k提供给虚拟线程切换器970。虚拟线程切换器970还可以包括其他逻辑和/或微码(未示出),以在新的帮助线程和前面所选的帮助线程之间交换上下文信息。可以触发该虚拟线程切换器970通过同步或异步的激励来切换线程。例如,由让步类型的指令定义的异步事件可以引起虚拟线程之间的线程切换。此外,帮助线程可以包括诸如挂起、停顿或其他类型的执行停止指令的同步方式,以用信号通知到另一个线程的切换。虚拟线程切换逻辑970将虚拟线程的子集(例如,在图9b的实施例中有一个)提供给处理器线程切换逻辑980。然后,处理器线程切换逻辑980在作为第一线程967-1的一个帮助线程与其他N-1个线程之间切换,一直进行到线程967-N。
在一些实施例中,将让步能力限制在特定的程序或线程可能是有利的。因此,可以使让步能力是上下文敏感的或者是有所选择的(non-promiscuous)的。例如,图10a图示了上下文敏感事件图表向量和屏蔽实现的一个实施例。在图10a的实施例中,存储区1000包括上下文指示符字段1010以及与之相关的每一个事件图表向量和屏蔽存储位置1020。上下文指示符字段标识每个事件图表向量和屏蔽对所应用的上下文。例如,可以使用诸如控制寄存器(例如表示处理系统进程ID的×86处理器中的CR3)值的上下文值。或者可以附加地或另外地使用线程数信息来定义上下文。因此,在一些实施例中,当特定的上下文是活动的时,可以使能某些上下文特定的事件来中止处理。这样,因为让步机制的事件只影响特定的上下文,所以该机制可以是有所选择的。
图10b图示了上下文敏感事件图表向量和屏蔽实现的另一个实施例。在图10b的实施例中,可以通过为k个上下文中的每一个提供从1050-1到1050-k的一组事件图表向量和屏蔽位置,来处理整数k个上下文。例如,在多线程处理器中可以有k个线程,并且每个线程可以具有事件图表向量和屏蔽或者类似的让步使能机制。但要注意,在其他实施例中,可能希望不仅仅跟踪某些上下文中的事件。例如,事件可以反映所有的处理活动,和/或事件可能属于多个相关的线程或者由多个相关的线程引起。
图11图示了多线程处理器的一个实施例,该处理器基于监视器或让步类型的事件来进行线程的切换。虽然已经讨论了通过执行处理程序来中止处理流的很多实施例,但是其他实施例可以定义引起多线程处理器中线程切换的事件。例如,在图11的实施例中,线程切换逻辑被耦合到从1110-1到1110-N的一组N个监视器上,并从这些监视器接收信号。线程切换逻辑1105还可以被耦合到从1130-1到1130-p(p是正整数)的一组或多组事件图解和屏蔽对上。在确定何时切换线程时,事件图解和屏蔽对可以使得线程切换进行组合和/或忽略某些监视事件。
执行资源1120可以支持p个线程的执行,但是其并不关心指令是否属于特定的线程。执行资源可以是指令执行时所使用的执行单元、取逻辑、解码器或任何其他资源。复用器1115或其他选择资源在多种线程之间对执行资源1120进行访问做出仲裁。本领域的技术人员应该知道,在多线程处理器中可以共享或复制各种资源,并且各种资源可以具有切换线程的访问,该访问允许有限数量的线程(例如一个线程)同时访问资源。
如果由一个或多个监视器和/或事件图表向量和屏蔽对之一所指示的一组状况发生了,那么线程切换逻辑1105切换执行中的线程。这样,在处理器状况匹配那些被编程的状况时,可以激活另一个线程取代那个活动的线程。例如,用户程序可以控制触发线程切换的事件。
在一些多线程处理器中,每一个线程可以具有一组相关的事件图表向量和屏蔽对。因此,如图11所示,复用器1115可以在p个线程之间仲裁,并且可能有对应的p个事件图解和屏蔽对。但是,这仅仅是因为处理器是多线程的,而不意味着所有的实现都使用多个事件图表向量和屏蔽。一些实施例可以只使用一对,或者使用其他使能指示符。例如,可以用一位作为使能指示符来打开或关闭特定的让步类型的能力。
在开发过程中,设计会经过从创建、模拟到制造的多个阶段。表示设计的数据可以以多种方式表示设计。首先,可以使用硬件描述语言或另一种功能描述语言来表示硬件,这在模拟中是很有用的。此外,在设计过程的一些阶段,可以生产具有逻辑和/或晶体管栅极的电路级模型。而且,在某个阶段,大多数设计达到了表示多种器件在硬件模型中的物理布局的数据级别。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是指定生产集成电路所用掩膜的不同掩膜层上多种特征存在或不存在的数据。在设计的任何一种表示方法下,数据都可以存储在任何形式的机器可读介质中。所述机器可读介质可以是所调制的或所产生的用以传输这种信息的光波或电波、存储器或者诸如磁盘的磁存储器或光存储器。这些介质中的任何一种都可以“携带”或“表示”设计或软件信息。当表示或携带了代码或设计的电载波被传输时,直到对电信号进行了拷贝、缓冲或重传输,这样就完成了新的拷贝。因此,通信供应商或网络供应商可以制作具有本发明技术的物件(载波)的备份。
这样就公开了可以激活其他线程的可编程事件驱动让步机制的技术。虽然已经描述并在附图中示出了示例性的特定实施例,但是应该理解,本领域的技术人员在研究本发明时可以想到多种其他的修改,所以文中的实施例只是对本发明的说明而不是限制,并且本发明不限于所示出和描述的特定结构和设置。在这种发展快且很难预见下一步发展的技术领域中,在不脱离本发明的原则或所附权利要求的范围的情况下,通过技术进步可以很容易地在设置和细节方面对所公开的实施例做出修改。
权利要求
1.一种装置,包括执行资源,用于执行多个指令;和监视器,用于检测所述执行资源的低进度指示状况,所述监视器响应于检测到所述低进度指示状况,通过转移到一个处理程序来有选择地中止至少一个程序的处理。
2.根据权利要求1所述的装置,其中,所述监视器被一个指令使能以检测低进度指示状况,其中所述低进度指示状况在所述指令执行完成后将被检测。
3.根据权利要求1所述的装置,其中,所述低进度指示状况是微体系结构事件的计数。
4.根据权利要求1所述的装置,其中,所述监视器是多个监视器中的一个,并且其中,所述低进度指示状况包括所述多个监视器中的一个或所达到的一个或多个可编程计数。
5.根据权利要求4所述的装置,其中,所述多个监视器是处理器指令也可读的处理器性能监视器。
6.根据权利要求1所述的装置,其中所述装置是处理器,并且其中,所述低进度指示状况包括处理器内部事件的可编程组合。
7.根据权利要求1所述的装置,其中,所述监视器将引起与一个或多个处理器事件相关而与指令执行的边界无关的、非精确的控制流改变。
8.根据权利要求4所述的装置,其中,所述多个监视器中的一个或多个将引起与一个或多个处理器事件相关而与单指令的执行无关的异步的控制流改变。
9.根据权利要求1所述的装置,其中所述监视器是多个监视器中的一个,所述装置还包括事件图表向量存储位置,用于存储包含多个位的事件图表向量,每个位对应于与所述多个监视器有关联的一个或多个状况;事件图表向量屏蔽存储位置,用于存储包含另一多个位的事件图表向量屏蔽,以指示事件图表向量的相应位是否被屏蔽。
10.根据权利要求9所述的装置,其中,事件图表向量的多个位中的每一位都代表事件,所有事件都发生将表示一个复合事件,并且如果不被屏蔽则中止处理。
11.根据权利要求9所述的装置,其中事件图表向量的多个位中的每一位都代表一个或多个事件,该事件如果不被屏蔽则中止处理。
12.根据权利要求11所述的装置,还包括用于存储事件描述符表的存储器。
13.根据权利要求1所述的装置,其中,所述处理程序是存储在计算机可读介质中的事件处理程序例程。
14.根据权利要求13所述的装置,其中,所述执行资源包括能够执行多个线程的多线程执行逻辑,并且其中,所述事件处理程序例程如果被执行则将启动帮助线程。
15.根据权利要求14所述的装置,其中,在检测到所述低进度指示状况时执行的第一线程和所述帮助线程将被同时执行。
16.根据权利要求15所述的装置,其中,所述帮助线程设置新的低进度指示状况以触发另一个帮助线程。
17.根据权利要求1所述的装置,其中,所述监视器是上下文敏感的。
18.根据权利要求1所述的装置,其中,所述监视器可以由低特权级别的用户程序编程,以响应于至少部分地由所述用户程序引起的状况来激活所述处理程序。
19.一种装置,包括执行逻辑,用于执行程序;和事件检测逻辑,其响应于执行逻辑的可程序定义状况,在该程序执行期间来执行事件处理程序。
20.根据权利要求19所述的装置,还包括事件使能指示符,所述事件使能指示符是可编程的,以指示是否现在识别事件。
21.根据权利要求19所述的装置,其中,所述事件检测逻辑可以由在用户特权级别下工作的程序来编程。
22.根据权利要求21所述的装置,其中,所述事件检测逻辑是上下文敏感的。
23.根据权利要求19所述的装置,还包括多个监视器;事件图表向量存储位置,用于存储具有多个事件发生指示符位的事件图表向量,所述的每个指示符位与所述多个监视器中的一个相关联;事件图表向量屏蔽存储位置,用于存储具有多个事件图解屏蔽位的事件图表向量屏蔽,每一个事件图解屏蔽位与所述多个事件发生指示符位中的一个相关联。
24.根据权利要求19所述的装置,其中,所述可程序定义的状况包括发生了一个或多个微体系结构事件的程序定义的组合。
25.根据权利要求24所述的装置,还包括用于计数微体系结构事件的多个监视器,其中,所述一个或多个微体系结构事件的所述程序定义的组合包括所述多个监视器中的每一个达到可编程计数。
26.一种装置,包括多线程执行逻辑,其能够同时执行多个线程;多个监视器,用于监视所述多线程执行逻辑中的事件;耦合到所述多个监视器上的线程切换逻辑,所述线程切换逻辑用于至少部分地基于所述多个监视器中的一个或多个的可编程状况来切换线程。
27.根据权利要求26所述的装置,其中,所述多个监视器是监视多个微体系结构状况的多个性能监视器,其中所述多个性能监视器也是通过指令可读的。
28.根据权利要求26所述的装置,其中,所述可编程状况包括多于一个的缓存缺失。
29.根据权利要求26所述的装置,其中,所述可编程状况在用户特权级别下是可编程的。
30.一种方法,包括对监视器进行编程以检测处理器状况;响应于所述处理器状况的发生,产生帮助线程。
31.根据权利要求30所述的方法,其中对监视器进行编程包括定义微体系结构状况。
32.根据权利要求31所述的方法,其中,定义微体系结构状况包括为一个或多个监视器设置一个或多个可编程计数值。
33.根据权利要求30所述的方法,其中,对监视器进行编程包括写入模型专用寄存器。
34.一种方法,包括在执行第一程序部分时监视内部处理状况,以得到表示多个内部硬件事件的可编程状况;以及响应于可编程状况的发生,将执行转移到第二程序部分。
35.根据权利要求34所述的方法,其中,所述多个内部硬件事件是一种类型事件的多次发生。
36.根据权利要求34所述的方法,其中,所述多个内部硬件事件包括多个不同的微体系结构事件中的一个或多个。
37.根据权利要求34所述的方法,其中,所述可编程状况包括达到用户可定义的量度的多个监视器。
38.根据权利要求34所述的方法,还包括写入模型专用寄存器以设置所述可编程状况。
39.一种方法,包括将多个用户可定义的帮助线程触发设置为第一状态;第一次模拟程序的性能;调整所述多个用户可定义的帮助线程触发;第二次模拟程序的性能;以及基于第一次和第二次的程序性能,选择优选的一组用户可定义的帮助线程触发。
40.根据权利要求39所述的方法,还包括将所述优选的那组用户可定义的帮助线程触发包括在所述程序中。
41.根据权利要求39所述的方法,还包括包括多组用户可定义的帮助线程触发;基于处理器标识符,选择所述多组用户可定义的帮助线程触发中的一个。
42.一种系统,包括处理器,其包括用户可编程的硬件监视器,该监视器用于检测处理器状况并响应于所述处理器状况引起处理程序的执行;和存储所述处理程序的存储介质,所述处理程序包括使得产生帮助线程的至少一个指令。
43.根据权利要求42所述的系统,其中,所述处理器状况包括对多个处理器事件的指示。
44.根据权利要求42所述的系统,其中,所述处理器状况包括达到一种类型事件的计数的用户可编程硬件监视器。
45.根据权利要求42所述的系统,其中,所述处理器状况包括达到多个处理器内部事件的多个计数的多个用户可编程硬件监视器。
46.根据权利要求45所述的系统,还包括可编程使能控制,用于响应于达到所述多个计数的所述多个用户可编程硬件监视器来使能或禁止处理程序的执行。
47.根据权利要求42所述的系统,还包括通信接口。
48.根据权利要求47所述的系统,还包括更新模块,用于使系统通过通信接口接收新的处理器状况以将该状况编程到所述可编程硬件监视器中。
49.根据权利要求48所述的系统,其中所述更新模块还使系统通过通信接口接收与所述新的处理器状况有关联的新的帮助线程。
50.一种处理器,包括执行资源,用于执行多个指令;和逻辑,用于响应于所述执行资源的多个事件的可编程组合来中止所述多个指令的执行,所述多个事件在执行第一指令后发生,所述第一指令使能对可编程状况的检测。
51.根据权利要求50所述的处理器,其中,所述中止包括线程切换。
52.根据权利要求50所述的处理器,其中,所述中止包括调用处理程序例程。
53.根据权利要求50所述的处理器,其中,所述指令包括写入寄存器。
54.根据权利要求50所述的处理器,其中,所述指令包括事件设置的指令。
全文摘要
本发明提供了用于可激活其他线程的可编程事件驱动的让步机制的方法、装置和程序。在一个实施例中,一种装置包括执行资源,用于执行多个指令;和监视器,用于检测表示低级别进度的状况。监视器可以通过响应于检测到表示低级别进度的状况来转移到处理程序,以中止程序的处理。在另一个实施例中,线程切换逻辑可以被耦合到多个事件监视器上,所述监视器监视多线程执行逻辑中的事件。线程切换逻辑至少部分地基于一个或多个性能监视器的可编程状况来切换线程。
文档编号G06F9/30GK1523500SQ20031011308
公开日2004年8月25日 申请日期2003年12月25日 优先权日2003年2月19日
发明者红·王, 红 王, 佩尔·哈马隆德, 哈马隆德, 湘·邹, 申, 田 , 约翰·申, 吉克卡尔, 新民·田, 王, 米林蒂·吉克卡尔, 德赛, 佩里·王, 皮尤什·德赛 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1