挂起线程执行直到发生指定的存储器访问的方法和设备的制作方法

文档序号:6434429阅读:105来源:国知局
专利名称:挂起线程执行直到发生指定的存储器访问的方法和设备的制作方法
技术领域
本公开涉及处理器领域。具体而言,本公开涉及多线程处理器和用于在对多线程处理器中暂时挂起一个线程的处理的技术。
背景技术
多线程处理器能够同时处理多个不同指令序列。驱动在单个处理器中多个指令流的执行的主要推动因素,是对处理器利用率所得到的改善。高并行体系结构已经发展了多年,但经常难以从单个指令流中提取出足够的并行性,以利用多个执行单元。并发多线程处理器允许多个指令流在不同执行资源中同时执行,以试图更好地利用这些资源。对于遇到高等待时间延迟或者经常等待事件发生的程序,多线程可能尤其有利。当一个线程在等待高等待时间任务完成或者在等待特定事件时,可以处理不同的线程。
已经提出了许多不同技术来控制处理器何时在线程之间切换。例如,一些处理器检测诸如L2高速缓存未命中(cache miss)之类的特长的等待时间事件,并响应于这些被检测的长的等待时间事件而切换线程。虽然在某些环境中对这种长的等待时间事件的检测可能是有效的,但这种事件检测不太可能检测出所有这样的点,即此时切换线程可能是高效的。尤其是,基于事件的线程切换可能检测不出程序中程序员有意延迟的点。
实际上,通常程序员处于最佳的位置来确定何时切换线程是高效的,以避免浪费的螺旋等待循环(spin-wait loop)或其他消耗资源的延迟技术。这样,允许程序控制线程切换可能使得程序能够更高效地工作。影响线程选择的显式程序指令可能对此有利。例如,在2000年1月21日递交的美国专利申请No.09/489,130中描述了“暂停(Pause)”指令。暂停指令允许暂时挂起线程的执行,或者直到达到计数值,或者直到指令已通过处理器流水线。可以使用不同的技术来使得程序员能够更为高效地利用多线程处理器的资源。


以下通过以附图的图形作为示例而不是作为限制的方式对本发明进行了说明。
图1图示了多线程处理器的一个实施例,所述多线程处理器具有用来监视存储器访问的监视器。
图2是图示了根据一个实施例的图1的多线程处理器的操作的流程图。
图3图示了多线程处理器的一个实施例的进一步的细节。
图4图示了根据一个实施例的资源分区、共享和复制。
图5是图示了根据一个实施例挂起和恢复线程的执行的流程图。
图6a是图示了根据一个实施例的监视逻辑的激活和操作的流程图。
图6b是图示了根据一个实施例提高写操作的可观察性的流程图。
图7是图示了根据一个实施例的监视器操作的流程图。
图8图示了根据一个实施例的系统。
图9a~9c图示了利用所公开的处理器指令和技术的软件序列的各种实施例。
图10图示了使得被监视地址能够保持被高速缓存的另一个实施例。
图11图示了用于模拟、仿真和制造使用所公开技术的设计的各种设计表示或格式。
具体实施例方式
以下描述了用于挂起线程的执行直至指定的存储器访问发生的技术。在以下说明中,给出了大量的具体细节以提供对本发明更充分的理解,例如逻辑实现、操作码、指定操作数的装置、资源分区/共享/复制实现、系统元件的类型和相互关系、以及逻辑分区/集成的选择。但是,本领域的技术人员将认识到,没有这些具体细节也可以实施本发明。在其他情况下,没有详细示出控制结构、门级电路和完整的软件指令序列,以免模糊本发明。本领域普通技术人员阅读所包含的说明后,不进行过多实验就能够实现合适的功能。
所公开的技术可以使得程序员能够在一个线程中实现等待机制而同时使其它线程利用处理资源。可以设立监视器,使得线程可以被挂起直至特定存储器访问发生,例如向指定的存储器单元写入。因此,线程可以基于指定的事件被恢复,而不用执行浪费处理器资源的例程,例如螺旋等待循环。在一些实施例中,先前专用于被挂起线程的分区(partition)在该线程被挂起时可以被释放。这些和/或其它的公开技术可以有利地提高处理器的总吞吐量。
图1图示了具有用来监视存储器访问的存储器访问监视器110的多线程处理器100的一个实施例。在一些实施例中,“处理器”可以被形成作为单个集成电路。在其它实施例中,多个集成电路可以一起形成处理器,而在另一些实施例中,硬件和软件例程(例如进制转换例程)可以共同形成处理器。在图1的实施例中,总线/存储器控制器120向前端130提供指令用于执行。前端130根据指令指针170来指示从各个线程检索获取指令。指令指针逻辑被复制以支持多线程。
前端130将指令送入线程可分区资源140中以进一步处理。线程可分区资源140包括逻辑上分离的分区,当处理器100中有多个线程是活动的时,这些分区专用于特定线程。在一个实施例中,每个单独的分区仅包含来自该分区所专用于的线程的指令。线程可分区资源140可以包括例如指令队列。当在单线程模式时,线程可分区资源140的分区可以被合并形成专用于这一个线程的单个大分区。
处理器100还包括复制状态180。复制状态180包括足以维护逻辑处理器上下文的状态变量。使用复制状态180,可以执行多个线程而不会有状态变量存储的竞争。此外,可以对每个线程都复制寄存器分配逻辑。被复制的状态相关逻辑可以使用恰当的资源分区进行工作,以准备执行进入的指令。
线程可分区资源140将指令传递到共享资源150。共享资源150不考虑其来源地按指令来操作。例如,调度器和执行单元可以是对线程透明的共享资源。线程可分区资源140可以通过以公平的方式在线程之间变换,而将来自多个线程的指令输送给共享资源150,所述公平方式使每个活动线程都连续地进行。这样,共享资源可以在恰当状态上执行所提供的指令,而不必考虑线程混和。
共享资源150后可以接着另一组线程可分区资源160。线程可分区资源160可以包括收回资源(retirement resources),例如重排缓冲器等等。因此,线程可分区资源160可以确保来自每个线程的指令的执行正确结束,并确保恰当地更新该线程的恰当状态。
如前所述,人们可能希望为程序员提供一项技术,以在不需要对存储器单元进行持续查询或者甚至不需要执行指令的情况下实现螺旋等待循环的功能。因此,图1的处理器100包括存储器访问监视器110。可以用关于存储器访问周期的信息来对存储器访问监视器110编程,所述周期中监视器110可被使能来监视。相应地,监视器110包括监视周期信息寄存器112,比较逻辑114将其与从总线/存储器控制器120接收到的总线周期信息比较。如果相符,则产生恢复线程信号以重新启动被挂起的线程。存储器访问信息可以从处理器的内部和/或外部总线获得。
监视周期信息寄存器112可以包含指定会触发线程恢复的周期类型和/或地址的详细内容。在一个实施例中,监视周期信息寄存器112存储物理地址,并且监视器对指示了对该物理地址的实际或可能写入的任何总线周期进行监视。这样的周期可以是显式的写周期,并且/或者可以是另一代理所进行的无效化周期(invalidating cycle)或占有权读取,其中该代理试图获得对可高速缓存行的独占权,以使得其能够在没有外部总线事务的情况下对该行写入。总之,在不同的实施例中监视器可以被编程以对各种事务触发。
图1的实施例的操作可以通过参考图2的流程图被进一步说明。在一个实施例中,处理器100的指令集包括建立监视事务信息的MONITOR操作码(指令)。在框200中,接收作为第一线程(T1)的指令序列一部分的MONITOR操作码。如框210中所示,响应于该MONITOR操作码,处理器100允许监视器110针对指定存储器访问来监视存储器访问。引起触发的存储器访问可以由隐式或者显式操作数所指定。因此,由于监视地址能够作为隐式操作数被预先存储在寄存器或者其它位置,所以执行MONITOR操作码可以指定监视地址。如框215所示,监视器测试是否检测到被指定的周期。如果没有,则监视器继续监视存储器访问。如果检测到引起触发的周期,则如框220所示设置监视事件悬置指示符。
对MONITOR操作码的执行触发对监视器110的激活。监视器110可以并行于处理器中的其它操作开始操作。在一个实施例中,MONITOR指令本身仅利用正确的存储器周期信息来设置监视器110并激活该监视器110,而不去除对监视事件的屏蔽。也就是说,在该实施例中,在执行MONITOR操作码之后,监视事件可能发生,但是不会被识别,直至显式地去除对它们的屏蔽。
这样,在框225中,存储器等待的触发被示为单独的事件。在一些实施例中,存储器等待(MWAIT)操作码可以被用来触发对监视事件的识别以及T1的挂起。利用两个单独的指令来设置和触发线程挂起可以为程序员提供更多的灵活性,并使得能够更高效地编程。但是,另一个实施例由还设置监视器110的第一操作码来触发存储器等待。在两种情况的任一种之下,一个或者多个指令准备好监视器并允许对监视事件的识别。
在使用单独的操作码来准备好监视器110并触发识别监视事件的实施例中,如框230中所示,在挂起线程之前进行测试以确保监视器已经被激活将是有利的。另外,通过测试是否已经有监视事件悬置(未示出),可以避免T1的挂起,并且在框250可以继续操作。假设监视器110已经被使能,并且没有监视事件已经被悬置,则可以如框235所示挂起T1。
在T1被挂起的情况下,处理器进入取决于实现的状态,这使得其它线程能够更充分地利用处理器资源。在一些实施例中,处理器可以释放可分区资源140和160的专用于T1的分区中的一些或者全部。在其它实施例中,MONITOR操作码的不同排列(permutation)或者与其相关联的设置可以指示如果有资源要被释放的话,哪些资源被释放。例如,当程序员预测到较短的等待时,则线程可以被挂起,但是保持其资源分区。由于在线程挂起期间共享资源可以被其它线程独占使用,所以总的处理能力还是增强了。当预测到较长的等待时,释放与被挂起的线程相关联的所有分区使得其它线程能够具有额外的资源,潜在地提高了其它线程的处理能力。但是,得到这种额外的处理能力是以与线程分别被挂起和恢复时去除和添加分区相关联的开销为代价的。
T1保持挂起状态,直至监视事件悬置。如前所述,监视器110独立操作以检测并发信号通知有监视事件(框215~220)。如果在框240中处理器检测到监视事件悬置,则如框250所示恢复T1。不需要为了唤醒T1的监视事件而对T1中的指令进行主动处理。相反,T1保持挂起,而被使能的监视器110发信号向处理器通知有事件。处理器处理该事件,识别该事件指示了T1应该被恢复,并进行适当的动作以恢复T1。
这样,图1和2的实施例提供了这样的技术,其用于使被程序挂起的线程能够在发生指定存储器访问时被恢复。在一个实施例中,其它的事件同样导致T1被恢复。例如,中断可以导致T1恢复。这样的实现有利地允许监视器可以不是那么完美,因为其可能错过(未检测到)某些存储器访问或者其它应该导致线程恢复的情况。这样,T1有时可能被不必要地唤醒。但是,这样的实现减小了T1会由于错过的事件而被永久冻结的可能性,简化了硬件设计和检验。不必要地唤醒T1可能仅仅是一个很小的不便,因为可能要构建循环来双重检验(double-check)T1其所等待的情况是否真的发生了,并且如果没有发生则要再次将其自己挂起。
在一些实施例中,线程可分区资源、复制资源以及共享资源可以被不同地布置。在一些实施例中,在共享资源的两端可以没有可分区资源。在一些实施例中,可分区资源可以不被严格地分区,而是可以允许一些指令跨越分区,或者可以允许分区根据该分区中正在执行的线程或者正在执行的线程的总量而改变大小。另外,资源的不同组合可以被指派作为共享、复制和可分区资源。
图3图示了多线程处理器的一个实施例的进一步的细节。图3的实施例包括一致性相关逻辑350、监视器310的一种实现以及线程挂起和恢复逻辑377的一种具体实现等。在图3的实施例中,总线接口300包括总线控制器340、事件检测逻辑345、监视器310和一致性相关逻辑350。
总线接口300向前端365提供指令,该前端365生成微操作数(uOP),即由宏指令产生uOP。执行资源370从前端365接收uOP,而后端逻辑380在各种uOP被执行之后将其收回。在一个实施例中,前端、后端和执行资源支持乱序执行。
参照图5~9进一步讨论操作的各种细节。但是,简而言之,MONITOR操作码可以通过总线接口300进入处理器,并由前端365准备以用于执行。在一个实施例中,产生具体的MONITOR uOP以由执行资源370来执行。MONITOR uOP可以类似于存储操作地被执行单元所处理,其中监视地址由地址转换逻辑375译成物理地址,该物理地址被提供给监视器310。监视器310与线程挂起和恢复逻辑377通信以引发对线程的恢复。线程挂起和恢复逻辑可以在活动线程的数量改变的时候进行对资源的分区和退火。
例如,图4图示了根据一个实施例的资源分区、复制和共享。分区资源可以根据机器中活动线程的变化而被分区和退火(融回为一体以供其它线程重新使用)。在图4的实施例中,复制资源包括流水线的取指令部分中的指令指针逻辑、流水线的重命名部分中的寄存器重命名逻辑、状态变量(未示出,但是在流水线的各级中被引用)以及中断控制器(未示出,一般与流水线异步)。图4实施例中的共享资源包括流水线的调度阶段中的调度器、流水线的寄存器读写部分中的寄存器池、流水线的执行部分中的执行资源。另外,追踪高速缓存(Trace Cache)和L1数据高速缓存可以是不考虑线程上下文而根据存储器访问分配的共享资源。在其它的实施例中,对线程上下文的考虑可以被用于决定高速缓存。图4实施例中的分区资源包括流水线排队阶段中的两个队列、流水线收回阶段中的重排缓冲器以及存储缓冲器。线程选择复用逻辑在各个被复制和被分区资源之间变换,以提供对两个线程的合理访问。
为了示例的目的,在对图3处理器实施例的操作的进一步描述中,假设结合图3的实施例利用了图4所示的分区、共享和复制。具体而言,现在将参考图5的流程图讨论图3实施例的操作的进一步细节。假设处理器以多线程模式来执行,其中至少两个线程是活动的。
在框500中,前端365在执行第一线程T1的过程中接收MONITOR操作码。在一个实施例中,前端365产生特殊的uOP。该MONITOR uOP被传送给执行资源370。监视uOP具有指示了要被监视的地址(监视地址)的相关联地址。相关联地址可以采用显式操作数或者隐式操作数(即,该相关联地址将从预定的寄存器或者其它存储器单元取得)的形式。相关联地址“指示”了监视地址,这是由于该相关联地址传达了足以确定监视地址的信息(可能与其它寄存器或信息结合)。例如,相关联地址可以是线性地址,其中该线性地址具有作为正确监视地址的对应物理地址。或者,监视地址可以以虚拟地址的格式给出,或者可以被指示为相对地址,或以其它已知或方便的地址指定方式被指定。如果使用虚拟地址操作数,则可能希望允许将一般性保护错误识别为断点事件(breakevent)。
监视地址可以指示存储器的任何适宜的单元用于监视。例如,在一个实施例中,监视地址可以指示高速缓存行。但是,在其它实施例中,监视地址可以指示高速缓存行的一部分、可能与不同处理器的高速缓存行大小有不同关系的存储器的特定/选定大小的部分或单元、或单个地址。因此,监视地址可以指示包括了操作数所指定的数据(和更多数据)的单元,或者可以具体指示所需数据单元的地址。
在图3的实施例中,监视地址被提供给地址转换逻辑375,并传送给监视器310,在该处它被存储在监视地址寄存器335中。响应于MONITOR操作码,执行资源370随后使能并激活监视器310,如框510中所示以及在图6中进一步详述的。如以下将参照图6进一步讨论的,对于任何在MONITOR操作码之后发生的存储操作进行防护,以确保该存储在任何线程挂起发生之前被处理并进而被检测到,这可能是很有利的。因此,在该实施例中在执行任何后续的指令之前,作为激活监视器310的结果,可能需要进行一些操作。但是,框510被示为并行于框505发生,因为在该实施例中一旦监视器310被MONITOR操作码所激活,它就继续并行于其它操作而操作直至断点事件发生。
在框505中,存储器等待(MWAIT)操作码在线程1中被接收到,并被传送以用于执行。在图5的实施例中,MWAIT操作码的执行去除了对监视事件的屏蔽。响应于MWAIT操作码,如框515所示进行测试,以确定是否有监视事件悬置。如果没有监视事件悬置,则在框520进行测试以确保该监视器是活动的。例如,如果在之前没有执行过MONITOR的情况下执行了MWAIT,则监视器310不会是活动的。如果监视器是非活动的或者有监视事件悬置,则在框580继续线程1的执行。
如果监视器310是活动的并且没有监视事件悬置,则如框525所示挂起线程1的执行。线程挂起/恢复逻辑377包括流水线刷新逻辑(pipelineflush logic)382,如框530所示,其清空处理器流水线以清除所有指令。一旦流水线被清空,分区/退火逻辑385使与线程1独占关联的任何分区资源被释放以被其它线程使用,如框535所示。这些被释放的资源被退火以形成一组更大的资源供其余的活动线程利用。例如,参照图4的两个线程示例,与线程1相关的所有指令从两个队列被清空。然后每一对队列被合并来为第二个线程提供更大的队列。类似地,使得来自寄存器池的更多的寄存器对第二线程可用,释放来自存储缓冲器的更多的条目来用于第二线程,并且使得重排缓冲器中的更多条目对第二线程可用。实际上,这些结构被恢复成两倍大小的单个专用结构。当然,使用不同数量线程的实现可能得到不同的比例。
在框540、545和550中,各种事件被测试以确定线程1是否应该被恢复。值得注意的是,这些测试不是由作为线程1的一部分而被执行的指令所进行的。相反,这些操作由处理器并行于其对其它线程的处理而进行。如将要参照图6进一步详细地讨论的那样,监视器自己检查是否发生了监视写事件,并从而通过设置事件悬置指示符来指示。事件悬置指示符经由EVENT信号被提供给挂起/恢复逻辑377(例如,微代码)。在一个实施例中微代码可以在适当的指令边界(instruction boundary)处识别监视事件(框540),因为在框505中MWAIT去除了该事件的屏蔽。事件检测逻辑345可以检测被指派为断点事件的其它事件,例如中断(框545)。另外,可选的定时器可以被用来周期性地退出存储器等待状态,以确保处理器不因为一些特定的事件序列而被冻结(框550)。如果这些事件中没有一个来发信号通知退出存储器等待状态,则线程1保持被挂起。
如果线程1被恢复,则线程挂起/恢复逻辑377在检测到适当的事件时再次被激活。同样,如框560所示的,流水线被刷新以从流水线清空指令,使得资源能够再次被分区以适应即将被唤醒的线程1。在框570中,重新分区适当的资源,并且在框580中恢复线程1。
图6a图示了监视器310的激活和操作的进一步的细节。在框600中,为线程1取指令的前端被停止以防止其他线程1操作进入机器。在框605中,相关联的地址操作数被地址转换逻辑375从线性地址变换成物理地址。在框610中,提高了对该被监视地址的写入的可观察性。一般,此操作的目的是强制高速缓存代理来使这样的写操作对监视器310本身可见,所述写操作会影响存储在监视地址中的信息。参照图6b讨论了一种具体实现的更多细节。在框615中,存储用于监视的物理地址,但是应该注意可以在该序列的更早或者更晚的时候存储该地址。
接下来,如框620中所示,使能监视器。监视器监视对物理地址写入的总线周期,该物理地址是被存储在监视地址寄存器335中的监视地址。以下参照图7讨论了监视操作的进一步的细节。在监视器被使能之后,如框625中所示,执行存储防护操作。存储防护帮助确保机器中的所有存储都在MONITOR操作码完成执行的时候被处理。在来自MONITOR之前的所有存储被从机器清空的情况下,减小了将错误地进入存储器等待状态的可能性。但是,存储防护操作是一种预防,并且可能是耗时的操作。
存储防护是可选的,因为该实施例的MONITOR/MWAIT机制已经被设计为多出口机制。也就是说,例如某些中断、系统或者板上定时器等的各种事件也可能导致退出存储器等待状态。因此,在该实施例中并不保证线程会被唤醒的唯一原因是因为被监视的数据改变了。因此(以下同时参见图9a~c),在该实施例中,软件应该双重检验存储在存储器中的特定值是否改变了。在一个实施例中,包括INTR、NMI和SMI中断的断言、机器检查中断以及故障的一些事件是断点事件,而包括断电事件的其它事件不是。在一个实施例中,A20M管脚的断言也是断点事件。
如框630中所示,监视器继续测试总线周期发生是否指示或者似乎指示了对监视地址的写入。如果检测到这样的总线周期,则设置监视事件悬置指示符,如框635中所示。在执行MWAIT操作码(图5中的框505)之后,该事件悬置指示符起到事件的作用,并导致图5的框560~580中的线程恢复。另外,改变地址转换的事件可能导致线程1恢复。例如,导致刷新转换旁路缓冲器(translation look-aside buffer)的事件可能触发线程1的恢复,因为用来产生监视地址的从线性地址到物理地址的转换已经不再有效。例如,在可兼容x86 Intel体系结构的处理器中,对控制寄存器CR0、CR3和CR4、以及某些机器特定的寄存器的写入可能导致退出存储器等待状态。
如以上提到的,图6b图示了提高对监视地址的写入的可观察性(图6a中的框610)的进一步细节。在一个实施例中,处理器从处理器的所有内部高速缓存中清空与监视地址相关联的高速缓存行,如框650中所示。该清空的结果是,任何随后向监视地址的写入都到达总线接口300,使得能够被包括在总线接口300中的监视器310所检测。在一个实施例中,MONITOR uOP被模仿,并且与作为x86指令集中的已有指令的高速缓存行清空CLFLUSH指令具有相同的错误模型。该监视器uOP进行了线性地址到物理地址的转换,以及就像CLFLUSH一样的对内部高速缓存的清空;但是总线接口识别出MONITOR和CLFLUSH的差别,并正确地处理MONITOR uOP。
然后,如框655中所示,总线接口300中的一致性相关逻辑350激活读行产生逻辑(read line generation logic)355以在处理器总线上产生读行事务。对监视地址的读行事务确保总线上没有处理器中的其它高速缓存以共享或者独占的状态在监视地址存储数据(根据公知的MESI协议)。在其它协议中,可以使用其它状态,但是,该事务被设计成减小这种可能性,即另一个代理能够在事务不可被监视器310所观察的情况下向监视地址写入。换句话说,写入或者指示写入的事务被随后广播以便能够被监视器检测到。一旦完成了读行操作,监视器310就开始监视总线上的事务。
当总线上发生其它事务时,一致性相关逻辑通过试图防止总线代理取得与被监视地址相关联的高速缓存行的占有权,来继续维护监视地址的可观察性。根据一种总线协议,这可以通过命中发生逻辑360在任何对监视地址的读取的监听阶段期间断言HIT#(命中)信号来实现,如框660中所示。HIT#的断言防止其它高速缓存离开MESI协议中的共享状态而到独占状态,从而可能到修改状态。结果,如框665中所示,在选定的一致性域(coherency domain)(保持一致的存储器部分)中没有代理能够以修改或者独占状态(或它们的等同状态)得到数据。在该实施例中,处理器实际上表现为将监视地址的高速缓存行高速缓存,即使它已经从内部高速缓存被清除了。
现在参照图7,详细描述了与图6a中的框620相关联的操作的进一步的细节。具体而言,图7图示了监视器310的操作的进一步的细节。在框700中,监视器310为总线事务而从总线控制器340接收请求和地址信息。如框710中所示,监视器310检测总线周期类型和受影响的(多个)地址。具体而言,周期比较逻辑320确定总线周期是否是指定的周期。在一个实施例中,地址比较电路330将总线事务地址与存储在监视地址寄存器335中的监视地址比较,并且写检测逻辑325对来自总线控制器340的周期类型信息解码,以检测是否发生了写入。如果发生对监视地址的写入,则设置监视事件悬置指示符,如框720中所示。一个信号(WRITEDETECTED)被提供给线程挂起/恢复逻辑377以通知该事件(在假设其已经通过执行MWAIT被使能的情况下为其服务)。最后,监视器310被暂停,如框730中所示。暂停监视器节省电力,但是只要错误的监视事件被屏蔽或者没有产生,这就不是很重要。监视事件指示符也可以在该点被复位。一般,为监视事件服务还屏蔽对其它监视事件的识别,直到MWAIT再次被执行。
在对监视地址的读取的情况下,一致性相关逻辑350被激活。如框740中所示,一个信号(例如HIT#)被断言以防止另一个代理获得这样的占有权,其允许以后在没有一致性广播的情况下进行写入。监视器310保持为活动的,之后返回框700,并且不受对监视地址的读取的影响。另外,如果事务既不是对监视地址的读取也不是对其的写入,则监视器保持为活动的,并返回框700。
在一些实施例中,MONITOR指令被限制,使得只有某些类型的访问才可以被监视。这些访问可以是为体现高效编程技术而选取的,或者可以是为了其它原因而被选取的。例如,在一个实施例中,存储器访问必须是自然对齐的回写存储器(write-back memory)中的可高速缓存存储。自然对齐的单元是从一个可被N整除的地址开始的N位单元。使用自然对齐的单元的结果是,需要访问单个高速缓存行(而不是在数据被分到两个高速缓存行情况下所需的两个高速缓存行),以对监视地址写入。从而,使用自然对齐的存储器地址可以简化总线监视。
图8图示了利用所公开的多线程存储器等待技术的系统的一个实施例。在图8的实施例中,一组N个多线程处理器,处理器805-1至805-N,被耦合到总线802。在其它实施例中,可以使用单个处理器或者多线程处理器与单线程处理器的组合。另外,可以使用其它公知的或者可用的系统布置。例如,处理器可以以点对点的方式连接,并且诸如存储器接口之类的部件可以被集成到各个处理器中。
在图8的实施例中,耦合到总线的存储器接口815被耦合到存储器830和介质接口(media interface)820。存储器830包含支持多处理的操作系统835以及用于第一线程840的指令和用于第二线程845的指令。根据所公开的技术,指令840包括空闲循环,图9a~9c示出了其各种形式。
实现这些各种功能的适当的软件可以提供于各种机器可读介质中的任何一种中。介质接口820提供对这样的软件的接口。介质接口820可以是对存储介质的接口(例如硬盘驱动器、光盘驱动器、磁带驱动器、易失性存储器、非易失性存储器等)或者对传输介质的接口(例如,网络接口或者其它数字或者模拟通信接口)。介质接口820可以从介质(例如存储介质792或者传输介质795)读取软件例程。机器可读介质是能够至少暂时地存储信息的任何介质,所述信息被机器接口读取。这可以包括信号传输(经由作为介质的线缆、光学装置或者空气)和/或例如各种类型的盘和存储器存储设备的物理存储介质792。
图9a图示了根据一个实施例的空闲循环。在框905中,利用地址1作为其操作数即监视地址来执行MONITOR命令。在同一线程中,在框910中执行MWAIT命令。如前面所讨论的,假定正确地满足其它条件时,MWAIT指令导致线程被挂起。当在框915中发生断点事件时,例程前进到框920以确定存储在监视地址处的值是否改变了。如果监视地址处的值确实改变了,则继续执行线程,如框922中所示。如果值没有改变,则发生错误的唤醒事件。在这样的意义上唤醒事件是错误的,即没有发生对监视地址的存储器写入就退出了MWAIT。如果值没有改变,则循环返回到框905,在该处再次设置监视器。这种循环软件实现方式使得监视器能够被设计成允许错误的唤醒事件。
图9b图示了另一个空闲循环。图9b的实施例增加了额外的一次检查,以进一步减小MWAIT指令不能捕捉到对被监视存储器地址的写入的可能性。同样,图9b中流程从利用地址1作为其操作数来执行MONITOR指令开始,如框925中所示。另外,框930中,软件例程读取监视地址处的存储器值。在框935中,软件双重检验以确保存储器值没有从指示了该线程应该是闲置的值被改变。如果值被改变了,则继续执行线程,如框952中所示。如果值没有改变,则执行MWAIT指令,如框940所示。如前面所讨论的,线程被挂起直至在框945中发生断点事件。但是,同样由于允许错误的断点事件,所以在框950再次检查该值是否改变。如果值没有改变,则循环通过返回到框925而返回以再次允许监视器追踪地址1。如果值改变了,则在框952中继续执行线程。在一些实施例中,在错误唤醒事件之后,可以不需要在执行MWAIT指令以再次挂起该线程之前来再执行MONITOR指令。
图9c图示了利用了MONITOR和MWAIT指令的软件序列的另一个示例。在图9c的示例中,循环并不闲置,除非线程内的两个单独的任务没有工作可做。当有工作要由第一例程来做时,在工作单元(worklocation)WL1中存储常值CV1。类似地,当有工作要第二例程来做时,在WL2中存储常值CV2。为了使用单个监视地址,WL1和WL2被选为同一高速缓存行中的存储器单元。或者,可以使用单个工作单元存储多个任务的状态指示。例如,单个字节或者其它单位中的一个或者多个位可以各代表一项不同的任务。
如框955中所示,设置监视器来监视WL1。在框960中,对WL1是否存储了指示有工作要做的常值进行测试。如果是,则进行与WL1有关的工作,如框965中所示。如果不是,则在框970中,对WL2是否存储了指示有与WL2相关的工作要做的常值CV2进行测试。如果是,则进行与WL2有关的工作,如框975中所示。如果不是,则循环可以前进以在框980中确定是否适于调用电源管理控制器。例如,如果经过了选定量的时间,则可以将逻辑处理器置于降低功耗状态(例如根据1999年2月8日发布的1.0b版本(或者更新)的高级配置和电源接口(ACPI,AdvancedConfiguration and Power Interface)规范定义的一套“C”状态中的一种,所述ACPI规范在提交本申请的时候可以从www.acpi.info获得)。如果这样,则在框985中调用电源管理控制器。在其中有工作要做的965、975和985中的任何一种情况下,线程完成该工作并随后返回,以在框955中设置监视器之后再进行相同的判断。在另一个实施例中,只要监视器一直是活动的,则从965、975和985返回可以是返回至框960。
如果在框965、975和985中都遇到没有工作要做的情况,则执行MWAIT指令,如框990所示。当如框995所示发生断点事件时,最终退出由MWAIT导致的线程挂起状态。此时,循环返回框955以设置监视器,之后确定WL1或者WL2是否指示了有工作要做。如果没有工作要做(例如在错误唤醒事件的情况下),循环将返回至框990中的MWAIT,并再次挂起线程直至断点事件发生。
图10图示了处理器的另一个实施例,该处理器使得监视值能够在L1高速缓存中一直被高速缓存。图10中的处理器包括执行单元1005、L1高速缓存1010以及L1高速缓存与非独占(inclusive)L2高速缓存1030之间的写合并缓冲器(write combining buffer)。写合并缓冲器1020包括监听端口1044,该监听端口1044通过总线接口1040从总线1045接收到的操作来确保内部高速缓存与其它存储器的一致性。由于受一致性影响的事务经由监听端口1044到达写合并缓冲器1020,所以监视器可以位于L1高速缓存级,并仍然接收足够的信息以确定总线1045上何时发生存储器写入事件。这样,存储器对应于监视地址的行可以被保存在L1高速缓存中。监视器能够检测来自执行单元的对L1高速缓存的写入,以及经由该端口来自总线1045的写入。
另一个实施例支持双操作数监视指令。一个操作数如前所述地指示存储器地址。第二个操作数是一个掩码,其指示其它情况下不会打断存储器等待状态的各种事件中哪一个应该导致打断特定的存储器等待。例如,尽管中断被屏蔽,但是一个屏蔽位可以指示被屏蔽的中断应该被允许来打断等待状态(例如,即使在EFLAGS位IF被设置以屏蔽中断时允许唤醒事件)。可能随后,在打断存储器等待状态之后所执行的指令之一去除对该中断的屏蔽,使它得到服务。可以允许其它情况下不会打破存储器等待状态的其它事件来打破存储器等待,或者相反可以禁用正常情况下打断存储器等待状态的事件。如对第一操作数所讨论的,第二操作数可以是显式的或者隐式的。
图11图示了用于模拟、仿真和制造使用所公开技术的设计的各种设计表示或格式。表示设计的数据可能以多种方式来表示该设计。首先,因为在模拟中有用,硬件可以用硬件描述语言或另一种功能描述语言来表示,该语言实际上提供了期望所设计的硬件如何执行的计算机化的模型。硬件模型1110可被存储在诸如计算机存储器的存储介质1100中,使得可以用模拟软件1120来模拟该模型,其中模拟软件1120向硬件模型1110应用特定的测试包1130,以确定其是否如希望的那样起作用。在一些实施例中,模拟软件并不被记录、捕获或包含在介质中。
另外,在设计过程的某些阶段可能产生具有逻辑和/或晶体管门的电路级模型。该模型可以类似地被模拟,有时是通过使用可编程逻辑形成该模型的专用硬件模拟器来模拟。更进一步,这种类型的模拟可以是仿真技术。无论如何,可重新配置的硬件是另一个实施例,其可以包括存储有采用所公开技术的模型的机器可读介质。
另外,大多数设计都在某个阶段达到在硬件模型中表示各个设备的物理布置的数据水平。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是这样的数据,其指定在用来产生集成电路的掩模的不同掩模层上有或没有各种特征。同样,表示集成电路的此数据实现了所公开的技术,因为该数据中的电路系统或逻辑可以被模拟或制造来执行这些技术。
在设计的任何表示中,数据都可以被存储在任何形式的计算机可读介质中。这种介质可以是被调制或产生来传输这种信息的光波或电波1 160、存储器1150或者诸如盘之类的磁或光存储1140。描述该设计或该设计特定部分的位集是这样的制品,其本身自己就可被销售,或者可以被其他人进一步地设计或制造使用。
这样,公开了用于挂起线程的执行直至指定的存储器访问发生的技术。尽管描述并在附图中示出了某些示例性的实施例,但是应该理解这些实施例对本概括性发明仅仅是示例说明,而不是限制性的,并且由于本领域普通技术人员在研究本公开文本后可以想到各种其它的修改,所以本发明不限于所示出和描述的具体构造和布置。
权利要求
1.一种处理器,包括多个执行单元,允许执行包括第一线程的多个线程,所述第一线程具有第一指令,所述第一指令具有指示了监视地址的相关联地址操作数;挂起逻辑,用于挂起所述第一线程的执行;监视器,用于响应于对所述监视地址的存储器访问来使所述第一线程恢复。
2.如权利要求1所述的处理器,其中仅当所述存储器访问指示了对所述监视地址的实际或者可能的写入的时候,所述监视器才响应于所述存储器访问而导致恢复。
3.如权利要求1所述的处理器,其中如果所述第一线程被挂起并且监视事件被去除屏蔽,则所述监视器响应于对所述监视地址的存储器访问来使所述第一线程恢复。
4.如权利要求3所述的处理器,还包括事件检测逻辑,用于响应于除所述存储器访问以外的事件来使所述第一线程恢复。
5.如权利要求4所述的处理器,其中所述事件是中断。
6.如权利要求1所述的处理器,其中所述相关联地址操作数是隐式操作数。
7.如权利要求6所述的处理器,其中所述相关联地址操作数被存储在预定的寄存器中。
8.如权利要求1所述的处理器,其中所述挂起逻辑响应于第二指令而挂起对所述第一线程的执行,其中所述第一指令使能所述监视器并且所述第二指令去除对所述监视器发信号通知的事件的屏蔽。
9.如权利要求8所述的处理器,其中如果所述第一指令已经被执行,则所述第二指令仅仅使能所述监视器。
10.如权利要求1所述的处理器,其中所述挂起逻辑响应于所述第一指令而挂起所述第一线程的执行。
11.如权利要求8所述的处理器,还包括一致性逻辑,用于提高对所述监视地址的存储的可见性。
12.如权利要求11所述的处理器,其中所述一致性逻辑用于确保在一致性域中没有高速缓存以修改或者独占状态在所述监视地址存储信息。
13.如权利要求12所述的处理器,其中所述一致性逻辑用于从任何内部高速缓存清空与所述监视地址相关联的高速缓存行,并用于向耦合到所述处理器的其它处理器产生对所述与所述监视地址相关联的高速缓存行的总线读行事务,所述总线读行事务是根据流水线总线协议而被提供的多阶段事务。
14.如权利要求11所述的处理器,其中所述一致性逻辑用于使所述处理器产生总线周期,以防止任何其它总线代理在没有广播写事务的情况下对所述监视地址进行所述写事务。
15.如权利要求14所述的处理器,还包括总线控制逻辑,用于响应于另一个总线代理在所述监视地址读取信息而断言命中信号。
16.如权利要求1所述的处理器,其中由所述相关联地址操作数指示的所述监视地址,指示高速缓存行、高速缓存行的一部分或者其他大小的单元中的一个,以用于由所述相关联地址操作数指示的地址处的数据。
17.如权利要求1所述的处理器,还包括地址转换逻辑,用于将所述相关联地址操作数转换成作为物理地址的所述监视地址。
18.如权利要求1所述的处理器,其中所述监视地址选自由物理地址、虚拟地址、相对地址和线性地址组成的组。
19.如权利要求1所述的处理器,还包括多个可分区资源,当有多个线程是活动的时候,所述多个可分区资源被分区以将各个可分区资源的一部分专用于所述多个线程中的各个活动线程,其中所述挂起逻辑响应于挂起所述第一线程的执行而释放专用于所述第一线程的所述多个分区中的任一个。
20.如权利要求19所述的处理器,其中所述监视器响应于对所述监视地址的所述存储器访问,而使所述多个可分区资源被重新分区以支持所述第一线程的执行。
21.如权利要求20所述的处理器,其中所述多个可分区资源包括指令队列;重排缓冲器;寄存器池;多个存储缓冲器。
22.如权利要求21所述的处理器,还包括多个复制资源,所述多个复制资源被复制用于所述多个线程的每一个,所述多个复制资源包括多个处理器状态变量;指令指针;寄存器重命名逻辑。
23.如权利要求22所述的处理器,还包括多个共享资源,所述多个共享资源可被所述多个线程中的任一个所使用,所述多个共享资源包括所述多个执行单元;高速缓存;调度器。
24.一种处理器,包括前端,用于接收来自第一线程的第一指令和来自所述第一线程的第二指令,所述第一指令指示监视地址;执行资源,用于执行所述第一指令和所述第二指令,并响应于所述第二指令而挂起所述第一线程的执行;监视器,用于响应于对所述监视地址的存储器访问而使所述第一线程恢复。
25.如权利要求24所述的处理器,其中所述第一指令具有指示了线性地址的操作数,并且所述处理器还包括地址转换逻辑,所述地址转换逻辑转换所述线性地址以获得作为物理地址的所述监视地址。
26.如权利要求25所述的处理器,还包括一致性逻辑,用于确保耦合到所述处理器的另一个处理器中没有高速缓存以修改或者独占状态在所述监视地址存储信息。
27.如权利要求26所述的处理器,其中所述一致性逻辑响应于另一个处理器对所述监视地址的监听而断言命中信号。
28.一种处理器,包括前端逻辑,用于接收来自第一线程的第一指令,所述第一指令具有相关联监视地址;监视器,被耦合以接收所述监视地址,并响应于所述第一指令而监视对所述监视地址的存储器访问,并当发生对所述监视地址的访问时发信号通知事件。
29.如权利要求28所述的处理器,其中所述处理器响应于写入所述监视地址的写入存储器访问而发信号通知所述事件。
30.如权利要求28所述的处理器,其中所述监视器响应于行使无效事务而发信号通知所述事件。
31.如权利要求28所述的处理器,还包括一致性逻辑,用于确保耦合到所述处理器的另一个处理器中没有高速缓存以修改或者独占状态在所述监视地址存储信息。
32.如权利要求31所述的处理器,其中所述一致性逻辑包括用于产生内部高速缓存清空周期以及用于产生外部读行事务的逻辑。
33.如权利要求28所述的处理器,还包括逻辑,用于去除对来自所述监视器的监视事件的屏蔽,并响应于第二指令而挂起所述第一线程。
34.一种处理器,包括多个执行单元,用于执行多个线程;前端逻辑,用于接收来自所述多个线程中的第一线程的指令;挂起逻辑,所述挂起逻辑如果没有监视事件悬置则响应于所述指令而挂起所述第一线程,并且允许所述多个线程中的其它线程执行。
35.如权利要求34所述的处理器,其中所述挂起逻辑用于使能对监视事件的识别,所述监视事件包括已经悬置的监视事件。
36.如权利要求35所述的处理器,其中所述处理器包括多个可分区资源,并且所述挂起逻辑除了响应于所述指令而挂起所述第一线程以外,还释放各个所述多个可分区资源中与所述第一线程相关联的分区。
37.一种处理器,包括多个线程可分区资源,用于接收指令;多个共享资源,用于配合所述多个线程可分区资源来执行指令;线程挂起逻辑,用于响应于第一线程中的指令而挂起所述第一线程,所述线程挂起逻辑除了挂起所述第一线程以外,还释放所述多个线程可分区资源中与所述第一线程相关联的分区;监视器,用于响应于对所述第一线程所指示的存储器地址的访问,而使所述处理器对所述多个线程可分区资源重新分区,并恢复所述第一线程的执行。
38.如权利要求37所述的处理器,其中对所述存储器地址的所述访问由在所述第一线程中被执行的第一指令所指定,并且其中所述监视器由所述线程挂起逻辑响应于其而挂起所述第一线程的所述指令,去除屏蔽来发信号通知监视事件以恢复线程。
39.一种设备,包括用于挂起多个执行线程中的第一线程的装置;用于检测对存储器单元的访问的装置;用于响应于用于检测的装置检测到对所述存储器单元的所述访问而恢复所述第一线程的装置。
40.如权利要求39所述的设备,其中所述用于检测对所述存储器单元的所述访问的装置,响应于在所述第一线程中被执行的第一指令而被使能,并且其中所述用于挂起所述第一线程的装置,响应于在所述第一线程中被执行的第二指令而挂起所述第一线程。
41.如权利要求40所述的设备,还包括用于简化对访问所述存储器单元的检测的一致性装置。
42.如权利要求41所述的设备,其中对所述存储器单元的所述访问是写入或者使无效访问。
43.如权利要求41所述的设备,还包括用于响应于所述用于挂起的装置挂起所述第一线程的执行而对资源退火的装置,所述用于退火的装置释放与所述第一线程相关联的被分区资源,以供所述多个线程中的其它线程使用。用于对资源分区以重分区资源来适应恢复所述第一线程的装置。
44.一种方法,包括接收在执行的第一线程中的第一操作码,所述第一操作码具有指示监视地址的相关联地址操作数;挂起所述第一线程;检测对所述监视地址的存储器访问;响应于检测到对所述监视地址的所述存储器访问而恢复所述第一线程。
45.如权利要求44所述的方法,其中挂起所述第一线程的步骤包括接收所述第一线程中的第二指令;响应于所述第二指令而挂起所述第一线程。
46.如权利要求45所述的方法,其中所述存储器访问是写访问。
47.如权利要求45所述的方法,还包括将所述相关联地址操作数转换为被监视物理地址,其中检测对所述监视地址的所述存储器访问的步骤,包括检测对所述被监视物理地址的写访问。
48.如权利要求44所述的方法,还包括防止其它代理获得对存储在所述监视地址的信息的占有权。
49.如权利要求44所述的方法,其中所述检测步骤包括接收来自外部总线事务的周期信息;检测对所述监视地址的写入。
50.如权利要求44所述的方法,还包括响应于除了对所述监视地址的所述存储器访问以外的事件而恢复所述第一线程。
51.如权利要求50所述的方法,其中所述事件是中断。
52.如权利要求51所述的方法,其中所述中断是被第二指令指示成仍被视为断点事件的被屏蔽中断。
53.一种方法,包括接收在执行的第一线程中执行的第一操作码;将与所述第一操作码相关联的线性地址转换为物理地址;由监视总线代理执行总线事务,以确保没有其它总线代理对与所述物理地址相关联的数据具有这样的占有权,所述占有权足以允许另一个总线代理在不通知所述监视总线代理的情况下修改所述数据;监视对所述物理地址的写访问;如果另一个总线代理读取所述物理地址,则发出命中信号;接收在执行的所述第一线程中的第二操作码;响应于所述第二操作码,而挂起在执行的所述第一线程并使能对监视事件的识别;如果所述写访问发生,则恢复所述第一线程;响应于第一组事件中的任一事件而恢复所述第一线程的执行;忽略第二组事件。
54.如权利要求53所述的方法,其中所述响应于所述第二操作码而挂起在执行的所述第一线程的步骤包括测试所述监视事件是否悬置;测试监视器是否是活动的;如果所述监视器是活动的并且没有监视事件悬置,则进入所述第一线程被挂起的状态。
55.如权利要求54所述的方法,其中进入所述第一线程被挂起的状态的步骤包括释放寄存器池中的多个寄存器;释放指令队列中的多个指令队列条目;释放存储缓冲器中的多个存储缓冲器条目;释放重排缓冲器中的多个重排缓冲器条目。
56.一种系统,包括存储器,用于存储来自第一线程的第一指令,所述第一指令具有指示监视地址的相关联地址操作数;耦合到所述存储器的第一处理器,所述第一处理器响应于所述第一指令而允许监视器监视存储器事务以检测对所述监视地址的存储器访问,并且所述第一处理器响应于对所述监视地址的所述存储器访问而使所述第一线程恢复。
57.如权利要求56所述的系统,其中所述存储器存储来自所述第一线程的第二指令,并且其中所述第一处理器响应于所述第二指令而挂起所述第一线程。
58.如权利要求57所述的系统,其中所述监视器响应于发生所述存储器访问而设置监视事件悬置指示符,所述监视事件悬置指示符一旦被所述第二指令去除了屏蔽,就使所述第一处理器恢复线程。
59.如权利要求56所述的系统,其中所述第一处理器包括第一高速缓存,所述系统还包括包括第二高速缓存的第二处理器,其中所述第一处理器推动对所述第二处理器的总线事务,以强制所述第二处理器向所述第一处理器广播这样的任何事务,所述事务允许改变存储在所述第二高速缓存中所述监视地址处的数据。
60.如权利要求59所述的系统,其中所述第一处理器断言一个信号,以防止所述第二处理器在这样的状态下对所述监视地址处的数据进行高速缓存,所述状态允许所述第二处理器在不广播正发生修改的情况下,修改存储在所述第二高速缓存中所述监视地址处的数据。
61.如权利要求60所述的系统,其中所述信号指示高速缓存命中,并防止所述第二高速缓存以独占状态在所述监视地址处存储数据。
62.如权利要求58所述的系统,其中所述第一处理器还在发生其它事件的情况下恢复所述第一线程。
63.如权利要求62所述的系统,其中所述其它事件是中断。
64.如权利要求62所述的系统,其中存储在所述存储器中的所述第一线程包括循环,所述循环包括所述第一指令和所述第二指令以及一个测试,所述测试用于确定所述监视地址处的数据是否已经改变,并当所述监视地址处的数据保持不变时重新启动所述循环。
65.一种包括计算机可读介质的制品,其代表处理器,所述处理器包括多个执行单元,允许执行包括第一线程的多个线程,所述第一线程具有第一指令,所述第一指令具有指示了监视地址的相关联地址操作数;挂起逻辑,用于挂起所述第一线程的执行;监视器,用于响应于对所述监视地址的存储器访问来使所述第一线程恢复。
66.如权利要求65所述的制品,其中仅当所述存储器访问指示了对所述监视地址的实际或者可能的写入的时候,所述监视器才响应于所述存储器访问而导致恢复。
67.如权利要求65所述的制品,其中如果所述第一线程被挂起并且监视事件被去除屏蔽,则所述监视器响应于对所述监视地址的存储器访问来使所述第一线程恢复。
68.如权利要求65所述的制品,其中所述处理器还包括事件检测逻辑,用于响应于除所述存储器访问以外的事件来使所述第一线程恢复。
69.如权利要求68所述的制品,其中所述处理器还包括多个可分区资源,当有多个线程是活动的时候,所述多个可分区资源被分区以将各个可分区资源的一部分专用于所述多个线程中的各个活动线程,其中所述挂起逻辑响应于挂起所述第一线程的执行而释放专用于所述第一线程的所述多个分区中的任一个。
全文摘要
本发明公开了用于挂起线程的执行直至发生指定的存储器访问的技术。在一个实施例中,处理器包括能够执行多线程的多个执行单元。第一线程包括指定了监视地址的一个指令。挂起逻辑挂起所述第一线程的执行,并且监视器响应于对所述指定监视地址的访问而使第一线程恢复。
文档编号G06F9/46GK1688974SQ02826590
公开日2005年10月26日 申请日期2002年12月11日 优先权日2001年12月31日
发明者黛博拉·马尔, 斯科特·罗杰斯, 戴维·希尔, 夏夫南丹·考希克, 詹姆斯·克罗斯兰, 戴维·库法提 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1