CN100367195C - 多线程计算机中用于环境切换数据预取的方法和装置 - Google Patents
多线程计算机中用于环境切换数据预取的方法和装置 Download PDFInfo
- Publication number
- CN100367195C CN100367195C CNB2004100947559A CN200410094755A CN100367195C CN 100367195 C CN100367195 C CN 100367195C CN B2004100947559 A CNB2004100947559 A CN B2004100947559A CN 200410094755 A CN200410094755 A CN 200410094755A CN 100367195 C CN100367195 C CN 100367195C
- Authority
- CN
- China
- Prior art keywords
- thread
- initialization
- ahead
- data
- environment
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/463—Program control block organisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Abstract
一种关于环境切换操作的装置、程序产品和方法,初始化数据的预取,该数据在线程的执行恢复之前可能被那个线程使用。因此,一旦已知将执行环境切换到特定的线程,可以为那个线程预取数据,使得当恢复线程的执行时,可能为线程缓存工作状态的更多,或者至少在正在取得到高速缓冲存储器中的过程中,因此减小与环境切换相关联的与高速缓存有关的性能劣化。
Description
技术领域
本发明涉及计算机和计算机软件,特别是多线程计算机系统中指令和数据的预取。
背景技术
随着当前社会中对计算机的不断增长的信赖,计算机技术已经不得不在很多前沿取得进展以赶上增长的需要。并行性,即多个任务并行的性能是重大研发努力的一个特殊主题。
许多计算机软件和硬件技术已经开发出来以利于增加的并行处理。从软件的观点,已经开发出多线程操作系统,它允许计算机程序在多个“线程”中并发执行,使得多个任务本质上能够同时执行。线程一般表示对程序的独立的执行路径。例如,对于电子商务计算机应用,不同的线程可能分配给不同的顾客,使得每个顾客的特定电子商务交易在单独的线程中处理。
从硬件的观点,计算机越来越依赖多个微处理器以提供增大的工作负荷能力。进而,已经开发出一些微处理器,它们支持并行执行多个线程的能力,有效地提供通过使用多个微处理器可达到的很多相同的性能增益。与只支持单一的执行路径的单线程微处理器相比,多线程微处理器支持多个执行路径,使得分配给不同的执行路径的不同的线程能够并行进行。
然而,不考虑下层的硬件支持的独立的执行路径的数目,通常通过在每个执行路径上分配时间片给不同的线程,通常设计多线程计算机中的操作系统以在每个单独的执行路径上执行多个线程。虽然分配给给定的执行路径的线程技术上不是并行执行的,但通过使每个线程能执行一段时间和在每个线程间切换,每个线程能以合理和公平的方式进行,因此保持并行的样子。
虽然多线程在此性质上能够显著地增强系统性能,但是,因为在给定的执行路径上执行不同线程间的切换,存在一些低效率。特别地,无论何时执行路径在执行不同线程间切换,必须执行称为环境(context)切换的操作。通常,环境切换包括:保存或要么保留以前正在执行并且现在正在被切换出去的线程的工作状态,以及恢复准备要执行或切换进来的线程的工作状态。
线程的工作状态包括从线程的观点特征化特定的时间点的系统状态的各种状态信息,并且可包括其它之中的各种信息,如寄存器文件、程序计数器和其它专用寄存器的内容。因此,通过线程被切换出去或挂起时保存工作状态,然后线程被切换进来或恢复时恢复工作状态,线程功能上以与线程好像从未被中断相同的方式执行。
但是,一旦线程切换回来,在很多环境中执行环境切换的一个不希望的副作用是高速缓存未中的发生增加。高速缓存是现代计算机架构中已经普遍利用的技术,用来解决由微处理器的速度相对于微处理器用来访问存储的数据的存储器设备的速度产生的延迟问题。
特别地,高速缓存企图通过使用多级存储器的代价来平衡存储器的速度和容量。通常地,计算机依赖相对大、慢并且便宜的大规模的存储系统,如硬盘驱动器或其它外部存储设备、使用动态随机访问存储器件(DRAM’s)或其它易失性存储器存储器件的中间主存储存储器、以及一个或更多用静态随机访问存储器件(SRAM’s)等实现的高速的容量有限的高速缓冲存储器或高速缓存。经常使用多级高速缓冲存储器,每级具有越来越快和越来越小的存储器件。同样地,依赖于使用的存储器架构,高速缓冲存储器可以由多个微处理器共享或专用于单独微处理器,并且可以或者集成到同一块集成电路上作为微处理器,或者在分离的集成电路上提供。
此外,一些高速缓冲存储器可以用于存储包含正在执行的实际程序的指令以及正在由这些程序处理的数据。其它高速缓冲存储器,通常是那些最靠近微处理器的,可以专门用于只存储指令或数据。
当计算机架构中提供多级存储器时,通常依赖一个或多个存储器控制器在各种存储器级之间交换通常称为“高速缓存行(cache line)”的来自存储器地址段的需要的数据,从而企图最大化请求的数据存储于微处理器可以访问的最快的高速缓冲存储器中的频率。无论何时存储器访问请求企图访问未在高速缓冲存储器中缓存的存储器地址,发生“高速缓存未中(cache miss)”。作为高速缓存未中的结果,通常必须从相对慢的更低级的存储器取得用于存储器地址的高速缓存行,通常伴随显著的性能打击(hit)。
高速缓存依赖时间和空间的位置以改善系统性能。采用另一种方式,当取得特定的高速缓存行到高速缓冲存储器中时,很可能将再次需要来自那个高速缓存行的数据,所以对同一高速缓存行中的数据的下一次访问将导致“高速缓存命中(cache hit)”,并且因此不会招致性能障碍。
其它的加速与高速缓存有关的性能的方法包括如指令预取、分支预测和数据预取的技术。例如,指令预取通常在微处理器中实现,并且企图在需要指令之前从存储器中取它们,使得当真正需要指令时,将充满希望地缓存它们。通过企图预测哪个判断分支将可能采取,然后从预测的分支预取指令,同样通常在微处理器中实现的分支预测扩展了指令预取。通常在与微处理器分离的部件(但它仍然可以安置在同一集成电路器件上)中实现的数据预取,企图检测数据访问的模式并基于任何检测到的模式预取可能要需要的数据。
因此,从执行线程的观点,当特定的线程执行时,线程使用的越来越多的指令和数据将逐渐地变为缓存的,并且因此线程执行得越久,线程的执行将趋向于越有效。
但是,假定同样的前提施加到多线程计算机中执行的所有线程,不论何时线程因为环境切换被挂起,并且然后因为另一个环境切换随后被恢复,可能一些或所有挂起线程前高速缓存的指令和数据当线程恢复时不再被高速缓存(主要因为中间被执行的其它线程需要的指令和数据的高速缓存)。然后通常发生更大数目的高速缓存未中,因此消极影响整个系统性能。依赖于历史数据的预取和分支预测通常也为恢复的线程在其执行的初始恢复时提供很少或不提供好处,因为指令和数据的预取直到线程恢复其执行后才能初始化。
因此,在多线程计算机中,本领域已经产生对最小化与环境切换相联系的不利性能影响的方法的明显需求。
发明内容
通过关于环境切换操作初始化恢复在线程的执行之前可能被那个线程使用的数据的预取,本发明致力于解决这些和其它与先前技术相关联的问题。采用另一种方式,一旦已知将对特定的线程执行环境切换,符合本发明的实施例为那个线程初始化数据的预取,使得当恢复线程的执行时,或者至少在正在取得到高速缓冲存储器中的过程中,可能为线程缓存更多工作状态。因此,在很多实例中,可以减小与环境切换相关联的与高速缓存有关的性能障碍(penalty),并且因此可以增强整个系统性能。
本发明提供一种多线程计算机中执行环境切换操作的方法,该方法包含恢复线程的执行前初始化可能被线程使用的数据的预取,其中初始化预取还包括从线程取得前面的环境切换期间存储的状态信息,所述状态信息识别从该线程的前面的环境切换之前访问的至少一个高速缓存行,并且其中初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
本发明还提供一种多线程计算机中预取数据的方法,该方法包括:关联于从第一个线程到第二个线程的环境切换,为第一个线程存储状态信息;从存储的状态信息确定第一个线程的下次执行期间第一个线程可能使用的数据,其中所述状态信息识别从该线程的前面的环境切换之前访问的至少一个高速缓存行;以及在第一个线程的下次执行之前初始化第一个线程可能使用的被确定的数据的预取,其中初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
本发明还提供一种系统,包含:至少一个处理器,配置以执行多个线程;以及通过恢复线程的执行前初始化可能被多个线程中的线程使用的数据的预取的装置,从而执行环境切换操作;从线程取得前面的环境切换期间存储的状态信息的装置,所述状态信息识别从该线程的前面的环境切换之前访问的至少一个高速缓存行;初始化由状态信息识别的高速缓存行的预取的装置。
本发明还提供一种装置,包含:至少一个高速缓冲存储器;和电路,所述电路被配置以执行多个线程,并且通过恢复线程的执行之前初始化可能被多个线程中的线程使用的数据的预取到高速缓冲存储器中,来执行环境切换操作,其中初始化预取还包括从线程取得前面的环境切换期间存储的状态信息,并且进一步配置所述电路从而使用取得的状态信息初始化预取,所述状态信息识别从所述线程的前面的环境切换之前访问的至少一个高速缓存行,并且初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
特征化本发明的这些和其它优点和特征在形成本发明进一步的部分的权利要求中提出。但是,为更好地理解本发明和通过其使用得到的优点和目的,应该参考附图和附随描述内容,其中描述了本发明的示范性的实施例。
附图说明
图1是包含符合本发明的环境切换预取的示范性装置的方块图。
图2是图1的装置中处理器通过高速缓存系统与主存储器互连的方块图。
图3是说明由图1的装置执行的环境切换程序的程序流的流程图。
图4是说明图3的环境切换程序的执行期间发生的操作的序列的功能性时间线(timeline)。
图5是说明对图3中说明的环境切换程序的替换环境切换程序的程序流的流程图。
图6是说明图5的环境切换程序的执行期间发生的操作的序列的功能性时间线。
图7是图2中引用的数据预取器的示范性的实现的方块图。
图8是图2中引用的L1数据高速缓存的示范性的实现的方块图。
图9是说明由图1的装置在环境切换期间执行的示范性的初始化指令预取程序的程序流的流程图。
图10是说明由图1的装置在环境切换期间执行的另一个示范性的初始化指令预取程序的程序流的流程图。
图11是说明由图1的装置在环境切换期间执行的示范性的初始化数据预取程序的程序流的流程图。
图12是说明由图1的装置在环境切换期间执行的另一个示范性的初始化数据预取程序的程序流的流程图。
具体实施方式
以下讨论的各实施例利用环境切换预取以在线程的执行恢复之前预取线程可能使用的数据。在这个环境中,可以认为线程可能使用的数据包括由线程执行的指令以及作为其执行结果而由那些指令处理的数据。
如下面将会变得更明显,环境切换预取可以用于关于到线程的环境切换,或者可替代地关于到另一个线程的环境切换(例如当为之预取数据的线程将在下一次环境切换时恢复的时候)而为那个线程预取数据。此外,预取可以是基于软件或硬件的,并且可以为指令、要由指令处理的数据或两者执行。同样可以使用各种初始化预取的方法,包括发出接触指令、对硬件预取器编程和/或写控制数据到缓冲器。
进而,状态信息的类型可以在不同的实施例中变化,可以关于保存线程的工作状态存储该状态信息,并且随后用于在环境切换期间初始化预取。例如,为预取指令可以使用如程序计数器的状态信息、分支预测信息、硬件预取器状态信息、和/或如标记阵列数据的高速缓存状态信息、最近使用(MRU)的数据和/或路线(way)预测数据(在其它之中)。同样地,为预取由指令处理的数据,可以使用如高速缓存历史信息的状态信息、硬件预取器状态信息、关于数据预取使用的基地址和步幅(stride)、和/或如标记阵列数据的高速缓存状态信息、最近使用(MRU)的数据和/或路线预测数据(在其它之中)。进而,环境切换期间什么时候正好初始化预取可在不同的实施例中变化,例如,恢复工作状态前,恢复工作状态时,恢复工作状态后,或者甚至在执行另一个线程期间,该线程安排在为之要初始化预取的线程的恢复之前执行。
可知在其它符合本发明的实施例中可以利用很多其它的修改和变化。因此本发明不限于以下揭示的各特定实施例。
现在转向附图,在所有的几张图中,同样的数字表示同样的部分,图1说明包含了符合本发明的环境切换预取的计算机10。计算机10一般表示例如任何数量的多用户计算机,如网络服务器、中型(midrange)计算机、大型主机(mainframe)计算机等。但是,应该知道本发明可以在其它计算机和数据处理系统中实现,例如在单用户计算机,如工作站、桌面计算机、便携式计算机等中,或者在其它的可编程的电子设备(例如包含嵌入的控制器等),例如机顶盒、游戏机等。
计算机10一般包括一个或更多的系统处理器12,该处理器通过安置在高速缓存系统16内的一级或更多级高速缓冲存储器耦合到主存储器14。进而,主存储器14通过系统输入/输出(I/O)系统18耦合到多种类型的外部设备,例如一个或更多的网络20、一个或更多的工作站22和一个或更多的大规模存储设备24。任何数目的替代计算机架构可供选择使用。
同样显示用于计算机10的典型软件配置存在于主存储器14中,包括能够被一个或更多的应用28访问的操作系统26(它可以包括各种部件如内核、设备驱动器、实时库等)。如下面将变得更明显地,环境切换预取通常在整个或部分操作系统中实现,并且特别是,在其线程管理和调度部件内。此外,下面同样将变得更明显,环境切换预取可以用或不用专用的硬件部件和/或对传统硬件部件的修正来实现,并且特别是,纯粹通过在传统硬件平台上执行的软件来实现。
一般地,为实现本发明的实施例而执行的程序的软件实现部分,不论实现为操作系统的部分还是特定的应用、部件、程序、对象、模块或指令的序列或甚至其子集,在这里将称为“计算机程序代码”或简称“程序代码”。程序代码通常包含一条或更多条指令,该指令在不同的时间存留于计算机中不同的存储器和存储设备中,当由计算机中一个或更多个处理器读取并执行时,使得那个计算机履行对执行体现本发明的各个方面的步骤或单元必要的步骤。此外,虽然在功能全面的计算机和计算机系统环境下已经和在下文中将描述本发明,但本领域技术人员会理解本发明的各种实施例能够作为程序产品以各种形式分发,并且不管实际用于执行分发的计算机可读信号承载媒体的特定类型,本发明同样适用。计算机可读信号承载媒体的例子包括但不限于其中的可记录类型的媒体,如易失和非易失存储器件、软盘和其它可移动盘、硬盘驱动器、磁带、光盘(例如CD-ROM、DVD等),和传输型媒体如数字和模拟通信链路。
另外,可以基于应用识别以下描述的各种程序代码,在该应用内它在本发明的特定的实施例中实现。但是,应该知道使用下面的任何特定程序术语只是为了方便,并且因此本发明不应该限定为仅仅在由这样的术语识别和/或暗示的任何特定的应用中使用。进而,给定通常无数方式,其中计算机程序可组织成为例程、进程、方法、模块、对象等,以及程序功能可在存留在典型的计算机内的各种软件层间分配的各种方式(例如操作系统、库、API、应用、applet等),应该知道本发明不限于这里描述的程序功能的特定组织和分配。
本领域技术人员将认识到图1中说明的典型环境并不打算限制本发明。实际上,本领域技术人员将认识到可以使用其它替代硬件和/或软件环境而不脱离本发明的范围。
接下来图2说明来自计算机10的处理器12之一与主存储器14通过高速缓存系统16的互连。在说明的实现中,显示高速缓存系统16包括3级高速缓冲存储器,第一级(L1)包括独立的指令和数据高速缓存30、32,配置第二和第三级(L2和L3)高速缓存34、36缓存指令和数据。如在本领域已知的,高速缓存30-36的每个可以集成到同一集成电路器件或芯片上作为处理器12,或者可以安排在一个或更多的外部芯片上。此外,高速缓存30-36的每个可以为处理器12专用,或者由处理器12和一个或更多另外的处理器共享。进而,如上述,任何处理器12可以包括一个或更多提供单独执行路径的核心,并且在一些实现中,一个或更多的高速缓存可以为单独的内核专用。
符合本发明,利用环境切换操作在线程的执行恢复之前初始化那个线程可能使用的数据的预取。在这点上,数据的预取可以导致取得数据到高速缓存系统中任何或所有高速缓冲存储器。
此外,可以完全在软件中、完全在硬件中或使用硬件和软件的结合执行预取的初始化。在这点上,对于完全或部分依赖硬件的实现,可以使用基于硬件的预取器,例如数据预取器38提供数据预取功能。另外,在一些实施例中,可希望另外包括基于硬件的指令的预取,例如使用指令预取器40。在一些实施例中,可以结合预取器38和40的功能。在其它的实现中,可以配置高速缓存控制器被直接控制,以在环境切换期间如所要求的而预取指令和/或数据。
基于硬件的预取器通常包括功能:提供命令给高速缓存系统16中的高速缓存控制器和/或主存储器14,以初始化特定的高速缓存行中的数据的取得。如下将变得更明显地,很多传统的数据预取器企图检测数据访问中的模式,并根据这样检测到的模式预取数据。另一方面,指令预取器通常直接包含进处理器,并且通常基于指令流预取,这常常通过预取随后的高速缓存行到被指向的那个作为程序计数器,并可选择地使用分支预测以从一个或更多判决路径预取指令。
为控制基于硬件的预取器以响应环境切换,可以使用许多不同的配置。例如,预取器可以被处理器直接可读和可写以实现基于软件的控制。在其它实施例中,缓冲器,例如缓冲器42、44之一,可以用于存储由预取器读出的预取控制数据以预取数据,该缓冲器本质上可以是逻辑的或物理的。例如,在一些实施例中,软件可以写预取控制数据到这样的缓冲器,并且可以配置预取器读出预取控制数据以响应环境切换的检测。另外,在一些实施例中,可以使用写缓冲器以由硬件预取器触发预取。
在软件中完全实现预取的初始化的情形,例如,通过专用指令如接触指令(如PowerPC ISA中的dcbt)的使用,或者通过装载或存储指令到适当的存储器地址的执行(如果存储器地址未被缓存,就由高速缓存系统处理它们),可以实现这样的初始化。
现在转向图3,说明环境切换程序50的代表性的实现。程序50可以由例如多线程操作系统的调度逻辑执行。程序50同样可以由其它操作系统部件和/或在运行时库内执行,并且可以由许多不同的事件触发。例如,环境切换可以由硬件或软件定时器的超时触发,例如一旦分配给线程的时间片已经到期。环境切换同样可由线程主动释放或挂起触发,例如如果线程在等待盘访问。环境切换同样可以由抢先行为如较高优先级的线程或中断触发。
程序50开始于块52,保存正在执行的当前线程的工作状态,包括在指示线程的执行恢复前应该预取什么数据和/或指令时需要的任何预取控制数据。接下来,块54决定应该执行哪个线程,例如使用许多已知的线程调度算法,例如round-robin算法。然后块56为下一个线程取得存储的预取控制数据,并且使用这里讨论的任何变化,块58为下一个线程初始化数据和/或指令预取。然后块60以本领域已知的通常方式恢复下一个线程的工作状态。然后在块62恢复下一个线程的执行,并且程序50完成。
如图4中所示,它说明在从线程T1到线程T2的环境切换期间按时间顺序排列的进展,恢复线程T2的工作状态之前预取的初始化使数据和/或指令能够与线程T2的工作状态的恢复并行发生。同样地,当线程T2恢复执行时,线程使用的一些或所有数据和/或指令将被缓存,或者至少处于正在被缓存的过程中。
同样地,图4的环境切换期间预取的初始化发生在恢复线程T2的执行之前,以及在为线程T2恢复工作状态之前。但是,将会知道预取的初始化可能在其它的序列中发生。例如,预取的初始化可能在工作状态的恢复同时或者期间、或者甚至在保存正在挂起的线程的工作状态之前发生。另外,如由图5的例程50′说明的,为线程的预取的初始化甚至可能在环境切换到那个线程之前发生。
特别地,例程50′说明环境切换例程的实现,其中为线程的预取的初始化发生在到为在那个线程之前执行而调度的另一个线程的环境切换期间,例如,紧接其之前。例程50′在块64开始,存储当前线程的状态。接下来,块66决定下下个要执行的线程,即这个环境切换所属的线程已经恢复执行之后将被执行的线程。然后块68为下下个线程取得预取控制数据。其后,块70为下下个线程初始化数据和/或指令的预取,并且块72和74分别恢复下一个线程的状态并初始化线程的执行。
如可以代替块70被执行的块70′所表示的,可希望在例程50′期间的其它点,例如恢复下一个线程的状态之后初始化预取。另外,在其它的实施例中,初始化预取可能发生在环境切换中的任何点,并且甚至可以发生在下一个线程的执行期间,但是在随后的到下下个线程的环境切换之前。
因此,如图6中所说明的,说明从线程T1到线程T2的环境切换的按时间顺序排列的进展。在这个环境切换中,决定下下个线程(这里指明为线程T3),并且在环境切换期间预取数据和/或指令。假如线程T2的执行和到线程T3的环境切换仍然必须发生在为线程T3预取的数据和/或指令的使用之前,将会知道例程50′一般提供额外的时间以确保恢复挂起的线程的执行时将缓存更多的必需的数据和/或指令。
同样将会知道,在本发明的环境中,恢复线程的执行前预取的初始化不一定导致在恢复线程的执行时取数据和/或指令的过程完成,或者甚至在恢复执行时将初始化活动的数据传递。只要在这样的恢复之前初始化预取的过程并且通常当线程被挂起时,可以预见,相对取得线程的执行期间需要的数据/指令,与取得需要的数据和/或指令相联系的反应时间将会改善。
如上所述,状态信息的类型在不同的实施例中可以变化,该状态信息可以作为线程的工作状态的部分存储,并且可以用于产生预取的初始化中使用的预取控制数据。例如,为预取指令,可以使用状态信息如程序计数器、分支预测信息、硬件预取器状态信息、和/或高速缓存状态信息如标记阵列数据、最近使用(MRU)的数据和/或路线预测数据(除了别的以外)。同样地,为预取由指令处理的数据,可以使用状态信息如高速缓存历史信息、硬件预取器状态信息、有关数据预取使用的基地址和步幅、和/或高速缓存状态信息如标记阵列数据、最近使用(MRU)的数据和/或路线预测数据(除了别的以外)。
例如,一个示范性的基于硬件的预取器38的实现包括具有调度程序块82的预取引擎80,该调度程序块82与更新步幅表86中的表项88的增加/减少控制块84接口。特别地,每个表项88包括基地址值和步幅值,基地址值表示当前要取的地址,步幅值表示从基地址增加或减去的数量以产生下一个要取的地址。
预取器38一般通过企图识别存储器地址中的访问模式并预测基于那些模式将可能需要哪些数据来工作。更具体地,一旦确定基地址和步幅值,通过来自调度程序82的命令取基地址到高速缓存系统,并且由增加/减少控制块84将基地址与步幅值相加,新的基地址值被写回到表中。另外,调度程序82在多个表项间仲裁,并且基于高速缓存系统提供的高速缓存工作负荷信息抑制发出高速缓存取请求。
表项88中的每个与特定的线程可能或可能不相关联。通常由分析历史表90确定存储在表项中的初始值,该历史表90具有表项92用于上次访问的N个高速缓存行(或者可替代地上次访问的N个地址)。流分配控制器94执行这样的分析并且在步幅表86中存储适当的值用于数据访问模式中检测到的规则的步幅。
在说明的实施例中,关于环境切换预取,可希望存储来自步幅表86、历史表90或两者的状态信息。在这点上,可希望提供读/写控制块96从而为处理器对预取器的访问提供保存/恢复端口。另外,为线程初始化预取的预取控制数据可以使用保存/恢复端口更新预取器的状态,例如通过恢复表86、90任一个或两者中特定表项的状态。例如,在只有某些表项与特定的线程相关联的地方,可能希望只保存和恢复那些对特定的线程有关的表项。
另外,可能希望提供修改任一个表中的表项的能力。例如,在基于步幅的预取的情况下,可能希望重做一个或更多的先前的取操作。在这样的实例中,例如,在步幅值中存储基地址之前,可能希望从作为环境切换的结果存储的当前基地址减去一个或多个步幅值。在很多实例中,这导致重复一个或更多的在线程的挂起之前被执行的先前的取操作。在其它实施例中,可能希望简单地利用历史表识别应该为特定的线程预取的高速缓存行。同样将会知道,本发明可以和其它类型的硬件预取器一起使用,例如那些企图预取链接的表、不规则的步幅的硬件预取器等。
作为另一个关于基于环境的预取可保存和/或恢复的状态信息的例子,图8更详细地说明数据高速缓存32的一个实现。在这个实现中,数据高速缓存32是直接映射(非连带(non-associative))的高速缓存。通过地址100访问高速缓存,该地址100划分为标记、索引和偏置域102、104、106。索引104用于在表项112、114中分别为存储标记的标记阵列108和存储高速缓存行的数据阵列110做索引。判决块116比较标记阵列110中的表项112存储的标记和提供的地址的标记域102。发现匹配时(指示高速缓存命中),通过块118提供索引104给数据阵列110,产生存储在索引的表项114的高速缓存行的输出。未发现匹配时(指示高速缓存未中),块116传递地址给下一级高速缓存,请求从那个高速缓存取得对于请求的地址的高速缓存行。
从环境切换预取的观点,可能希望取得标记阵列108的内容并且例如通过读/写控制块120为线程存储这样的内容作为状态信息的一部分。其后,标记数据可以用于请求如先前被缓存的而由标记阵列识别的高速缓存行(将会知道当希望为标记阵列表项产生高速缓存行的时候,用于特定的标记阵列表项的索引可以从它在阵列中的位置得到)。此外,当高速缓存32实现为直接映射的高速缓存时,在其它连带的实施例中,或者多路高速缓存可以被使用。在这样的实例中,可能同样希望存储其它高速缓存状态数据,如MRU数据和/或路线预测数据。
同样将会知道数据和/或指令访问模式的分析可以纯粹在软件中发生,例如通过分析指令数据流。因此本发明不限于这里讨论的特定的硬件实现。
现在转向图9-12,显示了符合本发明的预取初始化的四个特定实现。将会知道在任何给定的环境切换中可以执行多个这样的例程。
图9说明了实现基于软件的指令预取的初始化指令预取例程130。例程130在块132由取得存储于用于线程的状态信息中的程序计数器(PC)开始。然后块134向由PC指向的高速缓存行发出接触指令或任何其它适当的存储器访问指令。其后,块136可选地为其它高速缓存行初始化预取。例如,可能希望为跟随由PC识别的那个高速缓存行的下N个高速缓存行初始化预取。可能同样希望在其它实施例中预取其它的执行路径,例如使用如分支目标地址高速缓存(BTAC)中的包含在状态信息中的分支预测数据。
图10说明了实现基于硬件的指令预取的替代的初始化指令预取例程140。例程140在块142由取得存储于用于线程的状态信息中的PC开始。然后块142指示硬件指令预取器预取一个或更多从那个由PC确定的高速缓存行开始的高速缓存行。如上,这样的预取可能简单地预取邻近的高速缓存行并且/或者基于分支预测技术预取其它高速缓存行。
图11说明了实现基于步幅的数据预取的初始化数据预取例程150。例程150在块152由从状态信息取得基地址和步幅值开始。然后块154通过从基地址减去一个或更多个步幅值可选地修改基地址,有效地重做先前的数据访问。然后块156写(可能被修改的)基地址和步幅值到硬件数据预取器中。作为这样的更新的结果,硬件数据预取器然后将在基地址开始着手预取。
图12说明了执行基于高速缓存行或记录的预取的替代的初始化数据预取例程160。例程160在块162由从用于线程的状态信息取得高速缓存历史开始,例如使用从标记阵列和/或历史表取得的数据。块164然后发出接触指令或其它适当的存储器访问指令用于最后N个高速缓存行,因此有效地重复先前的线程的执行期间发生的数据访问活动。
可以对说明的实施例进行各种额外的修改而不背离本发明的精神和范围。因此,本发明在于所附的权利要求。
Claims (61)
1.一种多线程计算机中执行环境切换操作的方法,该方法包含恢复线程的执行前初始化可能被线程使用的数据的预取,其中初始化预取还包括从线程取得前面的环境切换期间存储的状态信息,所述状态信息识别从该线程的前面的环境切换之前访问的至少一个高速缓存行,并且其中初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
2.根据权利要求1所述的方法,其中初始化可能被线程使用的数据的预取包括初始化可能由线程执行的至少一个指令的预取。
3.根据权利要求1所述的方法,其中初始化可能被线程使用的数据的预取包括初始化可能被至少一个由线程执行的指令处理的数据的预取。
4.根据权利要求1所述的方法,还包含:
为线程恢复工作状态;并且
为其恢复工作状态时恢复线程的执行。
5.根据权利要求4所述的方法,其中当为线程恢复工作状态时执行初始化预取。
6.根据权利要求4所述的方法,其中为线程恢复工作状态之前执行初始化预取。
7.根据权利要求1所述的方法,其中环境切换操作包括环境切换到为在到该线程的环境切换之前执行而调度的另一个线程。
8.根据权利要求7所述的方法,其中在为其它线程恢复工作状态和恢复该其它线程的执行的至少之一期间,执行初始化预取。
9.根据权利要求7所述的方法,其中执行初始化预取以响应为在其它线程的执行后立即执行而正在调度的线程。
10.根据权利要求1所述的方法,其中状态信息包括硬件预取器状态信息,并且其中初始化预取还包括使用硬件预取器状态信息初始化硬件预取器。
11.根据权利要求10所述的方法,其中硬件预取器状态信息包括基地址值。
12.根据权利要求11所述的方法,其中硬件预取器状态信息还包括步幅值。
13.根据权利要求12所述的方法,其中初始化硬件预取器包括初始化硬件预取器以在基地址开始预取。
14.根据权利要求12所述的方法,其中初始化硬件预取器包括初始化硬件预取器以通过从基地址减去至少一个步幅值和多个步幅值而计算的地址开始预取。
15.根据权利要求10所述的方法,其中初始化硬件预取器包括初始化硬件预取器以重复在从该线程的前面的环境切换之前执行的至少一个预取操作。
16.根据权利要求1所述的方法,初始化由状态信息识别的高速缓存行的预取包括执行对高速缓存行中的地址的接触指令。
17.根据权利要求1所述的方法,还包含:关于在从该线程的环境切换期间为该线程存储工作状态,存储状态信息。
18.根据权利要求1所述的方法,其中状态信息包括高速缓存状态信息。
19.根据权利要求18所述的方法,其中高速缓存状态信息包括标记阵列信息、最近使用的信息和路线预测信息的至少之一。
20.根据权利要求1所述的方法,其中初始化预取包括指示硬件预取器预取数据。
21.根据权利要求20所述的方法,其中所述指示硬件预取器由计算机中的操作系统执行。
22.根据权利要求1所述的方法,其中初始化预取包括执行接触指令。
23.根据权利要求22所述的方法,其中执行接触指令由计算机中的操作系统执行。
24.根据权利要求1所述的方法,其中初始化预取包括在缓冲器中为线程存储预取控制数据,该方法还包含从缓冲器取得预取控制数据并且执行基于预取控制数据的预取操作。
25.根据权利要求1所述的方法,还包含取得数据到高速缓冲存储器中以响应初始化预取。
26.一种多线程计算机中预取数据的方法,该方法包括:
关联于从第一个线程到第二个线程的环境切换,为第一个线程存储状态信息;
从存储的状态信息确定第一个线程的下次执行期间第一个线程可能使用的数据,其中所述状态信息识别从第一个线程的前面的环境切换之前访问的至少一个高速缓存行;以及
在第一个线程的下次执行之前初始化第一个线程可能使用的被确定的数据的预取,其中初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
27.根据权利要求26所述的方法,其中初始化第一个线程可能使用的被确定的数据的预取包括初始化可能由第一个线程执行的至少一个指令的预取。
28.根据权利要求26所述的方法,其中初始化线程可能使用的被确定的数据的预取包括初始化可能由至少一个被第一个线程执行的指令处理的数据的预取。
29.根据权利要求26所述的方法,其中在环境切换到第一个线程期间初始化预取发生。
30.根据权利要求26所述的方法,其中在环境切换到另一个线程期间初始化预取发生。
31.根据权利要求30所述的方法,其中初始化预取发生在到第三个线程的环境切换期间,第三线程是为第一个线程的下次执行前立即执行而调度的。
32.根据权利要求26所述的方法,其中初始化预取发生在第一个线程的挂起期间。
33.一种系统,包含:
至少一个处理器,配置以执行多个线程;以及
通过恢复线程的执行前初始化可能被多个线程中的线程使用的数据的预取的装置,从而执行环境切换操作;
从线程取得前面的环境切换期间存储的状态信息的装置,所述状态信息识别从该线程的前面的环境切换之前访问的至少一个高速缓存行;
初始化由状态信息识别的高速缓存行的预取的装置。
34.根据权利要求33所述的系统,其中还包括通过初始化至少一个可能由线程执行的指令的预取、初始化可能被线程使用的数据的预取的装置。
35.根据权利要求33所述的系统,其中还包括通过初始化可能被至少一个由线程执行的指令处理的数据的预取、初始化可能被线程使用的数据的预取的装置。
36.根据权利要求33所述的系统,其中还包括为线程恢复工作状态并且在为其恢复工作状态时执行线程的装置。
37.根据权利要求36所述的系统,其中还包括当为线程恢复工作状态时初始化预取的装置。
38.根据权利要求36所述的系统,其中还包括在为线程恢复工作状态之前初始化预取的装置。
39.根据权利要求37所述的系统,其中还包括通过环境切换到为在到该线程的环境切换之前的执行而调度的另一个线程、来执行环境切换操作的装置。
40.根据权利要求39所述的系统,其中还包括在为其它线程恢复工作状态和恢复其它线程的执行的至少之一期间初始化预取的装置。
41.根据权利要求39所述的系统,其中还包括响应为在其它线程的执行之后立即执行而正在调度的线程的装置。
42.根据权利要求33所述的系统,还包含硬件预取器,其中,状态信息包含硬件预取器状态信息,并且其中,所述系统还包括通过使用硬件预取器状态信息初始化硬件预取器来初始化预取的装置。
43.根据权利要求42所述的系统,其中硬件预取器状态信息包括基地址值。
44.根据权利要求43所述的系统,其中硬件预取器状态信息还包括步幅值。
45.根据权利要求44所述的系统,其中,还包括通过初始化硬件预取器以在基地址开始预取、来初始化硬件预取器的装置。
46.根据权利要求45所述的系统,其中还包括通过初始化硬件预取器以在从基地址减去至少一个步幅值和多个步幅值计算的地址开始预取、来初始化硬件预取器的装置。
47.根据权利要求42所述的系统,其中还包括通过初始化硬件预取器以重复从线程的前面的环境切换之前执行的至少一个预取操作,来初始化硬件预取器的装置。
48.根据权利要求33所述的系统,其中还包括关于在从线程的环境切换期间为线程存储工作状态、存储状态信息的装置。
49.根据权利要求33所述的系统,其中所述状态信息包括高速缓存状态信息,它包括标记阵列信息、最近使用的信息和路线预测信息的至少之一。
50.根据权利要求33所述的系统,还包含硬件预取器,其中所述系统还包括通过指示硬件预取器预取数据,以初始化预取的装置。
51.根据权利要求33所述的系统,其中还包括通过执行接触指令初始化预取的装置。
52.根据权利要求33所述的系统,其中还包括在缓冲器中的线程存储预取控制数据,并且其中在执行预取操作中使用预取控制数据。
53.根据权利要求33所述的系统,还包含高速缓冲存储器,其中该系统还包括取得数据到高速缓冲存储器中以响应初始化预取的装置。
54.一种装置,包含:
至少一个高速缓冲存储器;和
电路,所述电路被配置以执行多个线程,并且通过恢复线程的执行之前初始化可能被多个线程中的线程使用的数据的预取到高速缓冲存储器中,来执行环境切换操作,其中初始化预取还包括从线程取得前面的环境切换期间存储的状态信息,并且进一步配置所述电路从而使用取得的状态信息初始化预取,所述状态信息识别从所述线程的前面的环境切换之前访问的至少一个高速缓存行,并且初始化预取还包括初始化由状态信息识别的高速缓存行的预取。
55.根据权利要求54所述的装置,其中可能被线程使用的数据包括至少一个可能由线程执行的指令。
56.根据权利要求55所述的装置,其中可能被线程使用的数据包括可能被至少一个由线程执行的指令处理的数据。
57.根据权利要求54所述的装置,其中所述电路包含至少一个处理器。
58.根据权利要求57所述的装置,其中所述电路还包含由至少一个处理器执行的操作系统。
59.根据权利要求54所述的装置,还包含耦合到高速缓冲存储器的硬件预取器,并且其中配置所述电路以通过控制硬件预取器初始化数据的预取。
60.根据权利要求59所述的装置,其中,进一步配置所述电路,以关于从线程的环境切换,从硬件预取器取得状态信息。
61.根据权利要求59所述的装置,还包含耦合到硬件预取器的缓冲器,其中配置所述电路,以通过在缓冲器中存储数据来初始化预取,并且其中配置硬件预取器初始化预取操作以响应存储在缓冲器中的数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/739,738 US7493621B2 (en) | 2003-12-18 | 2003-12-18 | Context switch data prefetching in multithreaded computer |
US10/739,738 | 2003-12-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1629800A CN1629800A (zh) | 2005-06-22 |
CN100367195C true CN100367195C (zh) | 2008-02-06 |
Family
ID=34677693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100947559A Expired - Fee Related CN100367195C (zh) | 2003-12-18 | 2004-11-17 | 多线程计算机中用于环境切换数据预取的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (4) | US7493621B2 (zh) |
CN (1) | CN100367195C (zh) |
Families Citing this family (85)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7493621B2 (en) * | 2003-12-18 | 2009-02-17 | International Business Machines Corporation | Context switch data prefetching in multithreaded computer |
US7493481B1 (en) * | 2004-05-17 | 2009-02-17 | Netxen, Inc. | Direct hardware processing of internal data structure fields |
US7681199B2 (en) * | 2004-08-31 | 2010-03-16 | Hewlett-Packard Development Company, L.P. | Time measurement using a context switch count, an offset, and a scale factor, received from the operating system |
US7562207B2 (en) * | 2005-01-27 | 2009-07-14 | Innovasic, Inc. | Deterministic microcontroller with context manager |
US20060212853A1 (en) * | 2005-03-18 | 2006-09-21 | Marvell World Trade Ltd. | Real-time control apparatus having a multi-thread processor |
US8195922B2 (en) * | 2005-03-18 | 2012-06-05 | Marvell World Trade, Ltd. | System for dynamically allocating processing time to multiple threads |
JP4357442B2 (ja) * | 2005-03-23 | 2009-11-04 | 株式会社東芝 | プラン実行装置、プラン実行方法およびプログラム |
US8413162B1 (en) * | 2005-06-28 | 2013-04-02 | Guillermo J. Rozas | Multi-threading based on rollback |
US9003421B2 (en) * | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
US7739478B2 (en) * | 2007-03-08 | 2010-06-15 | Hewlett-Packard Development Company, L.P. | Multiple address sequence cache pre-fetching |
US8341352B2 (en) * | 2007-04-17 | 2012-12-25 | International Business Machines Corporation | Checkpointed tag prefetcher |
US20080282059A1 (en) * | 2007-05-09 | 2008-11-13 | Kattamuri Ekanadham | Method and apparatus for determining membership in a set of items in a computer system |
US8260990B2 (en) * | 2007-11-19 | 2012-09-04 | Qualcomm Incorporated | Selective preclusion of a bus access request |
US8539485B2 (en) * | 2007-11-20 | 2013-09-17 | Freescale Semiconductor, Inc. | Polling using reservation mechanism |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
US8788795B2 (en) * | 2008-02-01 | 2014-07-22 | International Business Machines Corporation | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors |
US8171476B2 (en) * | 2008-02-01 | 2012-05-01 | International Business Machines Corporation | Wake-and-go mechanism with prioritization of threads |
US8386822B2 (en) * | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8145849B2 (en) * | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8316218B2 (en) * | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
US8880853B2 (en) * | 2008-02-01 | 2014-11-04 | International Business Machines Corporation | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock |
US8516484B2 (en) * | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8225120B2 (en) * | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
US8612977B2 (en) * | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8452947B2 (en) * | 2008-02-01 | 2013-05-28 | International Business Machines Corporation | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms |
US8640141B2 (en) * | 2008-02-01 | 2014-01-28 | International Business Machines Corporation | Wake-and-go mechanism with hardware private array |
US8250396B2 (en) | 2008-02-01 | 2012-08-21 | International Business Machines Corporation | Hardware wake-and-go mechanism for a data processing system |
US8341635B2 (en) * | 2008-02-01 | 2012-12-25 | International Business Machines Corporation | Hardware wake-and-go mechanism with look-ahead polling |
US8312458B2 (en) * | 2008-02-01 | 2012-11-13 | International Business Machines Corporation | Central repository for wake-and-go mechanism |
US8732683B2 (en) | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8230201B2 (en) * | 2009-04-16 | 2012-07-24 | International Business Machines Corporation | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system |
US8145723B2 (en) * | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming idiom accelerator |
US8886919B2 (en) * | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
JP5336423B2 (ja) | 2010-05-14 | 2013-11-06 | パナソニック株式会社 | 計算機システム |
JP5510543B2 (ja) * | 2010-06-30 | 2014-06-04 | 富士通株式会社 | 情報処理装置の使用量解析方法、情報処理システム及びそのプログラム |
US20180107591A1 (en) * | 2011-04-06 | 2018-04-19 | P4tents1, LLC | System, method and computer program product for fetching data between an execution of a plurality of threads |
US20130061239A1 (en) * | 2011-04-26 | 2013-03-07 | Elad Lahav | System and Method for Operating a Processor |
US8869167B2 (en) * | 2011-05-19 | 2014-10-21 | International Business Machines Corporation | Application hibernation |
US9310875B2 (en) | 2011-12-22 | 2016-04-12 | Intel Corporation | Instruction that specifies an application thread performance state |
US9092225B2 (en) | 2012-01-31 | 2015-07-28 | Freescale Semiconductor, Inc. | Systems and methods for reducing branch misprediction penalty |
EP2831721B1 (en) | 2012-03-30 | 2020-08-26 | Intel Corporation | Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator |
US10585801B2 (en) * | 2012-11-26 | 2020-03-10 | Advanced Micro Devices, Inc. | Prefetch kernels on a graphics processing unit |
US20140189603A1 (en) * | 2012-12-28 | 2014-07-03 | Darryl L. Adams | Gesture Based Partition Switching |
US9250954B2 (en) * | 2013-01-17 | 2016-02-02 | Xockets, Inc. | Offload processor modules for connection to system memory, and corresponding methods and systems |
US9250762B2 (en) * | 2014-02-24 | 2016-02-02 | Dataram, Inc. | Graphics deterministic pre-caching |
US9921848B2 (en) | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9417876B2 (en) | 2014-03-27 | 2016-08-16 | International Business Machines Corporation | Thread context restoration in a multithreading computer system |
US9354883B2 (en) | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9195493B2 (en) | 2014-03-27 | 2015-11-24 | International Business Machines Corporation | Dispatching multiple threads in a computer |
US9804846B2 (en) * | 2014-03-27 | 2017-10-31 | International Business Machines Corporation | Thread context preservation in a multithreading computer system |
US10102004B2 (en) | 2014-03-27 | 2018-10-16 | International Business Machines Corporation | Hardware counters to track utilization in a multithreading computer system |
US9223574B2 (en) | 2014-03-27 | 2015-12-29 | International Business Machines Corporation | Start virtual execution instruction for dispatching multiple threads in a computer |
US9213569B2 (en) | 2014-03-27 | 2015-12-15 | International Business Machines Corporation | Exiting multiple threads in a computer |
US9772867B2 (en) | 2014-03-27 | 2017-09-26 | International Business Machines Corporation | Control area for managing multiple threads in a computer |
US9594660B2 (en) | 2014-03-27 | 2017-03-14 | International Business Machines Corporation | Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores |
US9760511B2 (en) * | 2014-10-08 | 2017-09-12 | International Business Machines Corporation | Efficient interruption routing for a multithreaded processor |
US9645935B2 (en) * | 2015-01-13 | 2017-05-09 | International Business Machines Corporation | Intelligent bandwidth shifting mechanism |
US9697128B2 (en) | 2015-06-08 | 2017-07-04 | International Business Machines Corporation | Prefetch threshold for cache restoration |
US10423418B2 (en) | 2015-11-30 | 2019-09-24 | International Business Machines Corporation | Method for maintaining a branch prediction history table |
US10120712B2 (en) * | 2016-07-05 | 2018-11-06 | Nxp Usa, Inc. | Instruction pre-fetching |
US10120713B2 (en) * | 2016-07-05 | 2018-11-06 | Nxp Usa, Inc. | Hardware controlled instruction pre-fetching |
US10489296B2 (en) | 2016-09-22 | 2019-11-26 | International Business Machines Corporation | Quality of cache management in a computer |
US10423446B2 (en) | 2016-11-28 | 2019-09-24 | Arm Limited | Data processing |
US10671426B2 (en) * | 2016-11-28 | 2020-06-02 | Arm Limited | Data processing |
US10552212B2 (en) | 2016-11-28 | 2020-02-04 | Arm Limited | Data processing |
US10545766B2 (en) | 2017-04-18 | 2020-01-28 | International Business Machines Corporation | Register restoration using transactional memory register snapshots |
US10572265B2 (en) | 2017-04-18 | 2020-02-25 | International Business Machines Corporation | Selecting register restoration or register reloading |
US10564977B2 (en) | 2017-04-18 | 2020-02-18 | International Business Machines Corporation | Selective register allocation |
US10963261B2 (en) | 2017-04-18 | 2021-03-30 | International Business Machines Corporation | Sharing snapshots across save requests |
US10740108B2 (en) | 2017-04-18 | 2020-08-11 | International Business Machines Corporation | Management of store queue based on restoration operation |
US10489382B2 (en) * | 2017-04-18 | 2019-11-26 | International Business Machines Corporation | Register restoration invalidation based on a context switch |
US11010192B2 (en) | 2017-04-18 | 2021-05-18 | International Business Machines Corporation | Register restoration using recovery buffers |
US10782979B2 (en) | 2017-04-18 | 2020-09-22 | International Business Machines Corporation | Restoring saved architected registers and suppressing verification of registers to be restored |
US10540184B2 (en) | 2017-04-18 | 2020-01-21 | International Business Machines Corporation | Coalescing store instructions for restoration |
US10552164B2 (en) | 2017-04-18 | 2020-02-04 | International Business Machines Corporation | Sharing snapshots between restoration and recovery |
US10649785B2 (en) | 2017-04-18 | 2020-05-12 | International Business Machines Corporation | Tracking changes to memory via check and recovery |
US10838733B2 (en) | 2017-04-18 | 2020-11-17 | International Business Machines Corporation | Register context restoration based on rename register recovery |
US20230004391A1 (en) * | 2017-06-28 | 2023-01-05 | Texas Instruments Incorporated | Streaming engine with stream metadata saving for context switching |
US10684857B2 (en) | 2018-02-01 | 2020-06-16 | International Business Machines Corporation | Data prefetching that stores memory addresses in a first table and responsive to the occurrence of loads corresponding to the memory addresses stores the memory addresses in a second table |
US11481250B2 (en) * | 2018-06-29 | 2022-10-25 | Advanced Micro Devices, Inc. | Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values |
US11023379B2 (en) * | 2019-02-13 | 2021-06-01 | Google Llc | Low-power cached ambient computing |
CN113626348A (zh) * | 2021-07-22 | 2021-11-09 | 支付宝(杭州)信息技术有限公司 | 业务执行方法、装置和电子设备 |
WO2023121831A1 (en) * | 2021-12-22 | 2023-06-29 | SiFive, Inc. | Configuring a prefetcher associated with a processor core |
US20240078114A1 (en) * | 2022-09-07 | 2024-03-07 | Microsoft Technology Licensing, Llc | Providing memory prefetch instructions with completion notifications in processor-based devices |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5613114A (en) * | 1994-04-15 | 1997-03-18 | Apple Computer, Inc | System and method for custom context switching |
CN1276888A (zh) * | 1997-10-23 | 2000-12-13 | 国际商业机器公司 | 在多线程处理器中选择线程切换事件的方法和装置 |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
CN1353832A (zh) * | 1999-05-28 | 2002-06-12 | 英特尔公司 | 减少软件数据预取的开销的机制 |
CN1364261A (zh) * | 1999-04-29 | 2002-08-14 | 英特尔公司 | 用于在一个多线程处理器内进行线程切换的方法和装置 |
US20030023663A1 (en) * | 2001-07-27 | 2003-01-30 | Thompson Carol L. | Method and apparatus for enabling a compiler to reduce cache misses by performing pre-fetches in the event of context switch |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4860192A (en) | 1985-02-22 | 1989-08-22 | Intergraph Corporation | Quadword boundary cache system |
ATE109910T1 (de) * | 1988-01-20 | 1994-08-15 | Advanced Micro Devices Inc | Organisation eines integrierten cachespeichers zur flexiblen anwendung zur unterstützung von multiprozessor-operationen. |
JP3569014B2 (ja) * | 1994-11-25 | 2004-09-22 | 富士通株式会社 | マルチコンテキストをサポートするプロセッサおよび処理方法 |
US5907702A (en) * | 1997-03-28 | 1999-05-25 | International Business Machines Corporation | Method and apparatus for decreasing thread switch latency in a multithread processor |
US5958045A (en) * | 1997-04-02 | 1999-09-28 | Advanced Micro Devices, Inc. | Start of access instruction configured to indicate an access mode for fetching memory operands in a microprocessor |
US6138212A (en) * | 1997-06-25 | 2000-10-24 | Sun Microsystems, Inc. | Apparatus and method for generating a stride used to derive a prefetch address |
US6128728A (en) * | 1997-08-01 | 2000-10-03 | Micron Technology, Inc. | Virtual shadow registers and virtual register windows |
US6223208B1 (en) * | 1997-10-03 | 2001-04-24 | International Business Machines Corporation | Moving data in and out of processor units using idle register/storage functional units |
US5893159A (en) * | 1997-10-22 | 1999-04-06 | International Business Machines Corporation | Methods and apparatus for managing scratchpad memory in a multiprocessor data processing system |
US6202130B1 (en) * | 1998-04-17 | 2001-03-13 | Motorola, Inc. | Data processing system for processing vector data and method therefor |
US6253306B1 (en) * | 1998-07-29 | 2001-06-26 | Advanced Micro Devices, Inc. | Prefetch instruction mechanism for processor |
US6073215A (en) * | 1998-08-03 | 2000-06-06 | Motorola, Inc. | Data processing system having a data prefetch mechanism and method therefor |
US6279105B1 (en) * | 1998-10-15 | 2001-08-21 | International Business Machines Corporation | Pipelined two-cycle branch target address cache |
US6292888B1 (en) * | 1999-01-27 | 2001-09-18 | Clearwater Networks, Inc. | Register transfer unit for electronic processor |
US6311260B1 (en) * | 1999-02-25 | 2001-10-30 | Nec Research Institute, Inc. | Method for perfetching structured data |
US6535962B1 (en) * | 1999-11-08 | 2003-03-18 | International Business Machines Corporation | System and method for prefetching data using a hardware prefetch mechanism |
US6574712B1 (en) * | 1999-11-08 | 2003-06-03 | International Business Machines Corporation | Software prefetch system and method for predetermining amount of streamed data |
US7260704B2 (en) * | 2001-11-30 | 2007-08-21 | Intel Corporation | Method and apparatus for reinforcing a prefetch chain |
US6976147B1 (en) * | 2003-01-21 | 2005-12-13 | Advanced Micro Devices, Inc. | Stride-based prefetch mechanism using a prediction confidence value |
US7849465B2 (en) * | 2003-02-19 | 2010-12-07 | Intel Corporation | Programmable event driven yield mechanism which may activate service threads |
US7487502B2 (en) * | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US7587584B2 (en) * | 2003-02-19 | 2009-09-08 | Intel Corporation | Mechanism to exploit synchronization overhead to improve multithreaded performance |
US7493621B2 (en) * | 2003-12-18 | 2009-02-17 | International Business Machines Corporation | Context switch data prefetching in multithreaded computer |
US7617499B2 (en) * | 2003-12-18 | 2009-11-10 | International Business Machines Corporation | Context switch instruction prefetching in multithreaded computer |
US7873816B2 (en) * | 2008-11-20 | 2011-01-18 | International Business Machines Corporation | Pre-loading context states by inactive hardware thread in advance of context switch |
-
2003
- 2003-12-18 US US10/739,738 patent/US7493621B2/en not_active Expired - Fee Related
-
2004
- 2004-11-17 CN CNB2004100947559A patent/CN100367195C/zh not_active Expired - Fee Related
-
2008
- 2008-04-24 US US12/108,998 patent/US9047116B2/en not_active Expired - Fee Related
- 2008-04-24 US US12/109,011 patent/US20080201565A1/en not_active Abandoned
-
2009
- 2009-01-16 US US12/354,859 patent/US8141098B2/en not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5613114A (en) * | 1994-04-15 | 1997-03-18 | Apple Computer, Inc | System and method for custom context switching |
CN1276888A (zh) * | 1997-10-23 | 2000-12-13 | 国际商业机器公司 | 在多线程处理器中选择线程切换事件的方法和装置 |
CN1364261A (zh) * | 1999-04-29 | 2002-08-14 | 英特尔公司 | 用于在一个多线程处理器内进行线程切换的方法和装置 |
CN1353832A (zh) * | 1999-05-28 | 2002-06-12 | 英特尔公司 | 减少软件数据预取的开销的机制 |
CN1300006A (zh) * | 1999-12-10 | 2001-06-20 | 国际商业机器公司 | 利用从分支预测得出的未来分支路径信息进行预取 |
US20030023663A1 (en) * | 2001-07-27 | 2003-01-30 | Thompson Carol L. | Method and apparatus for enabling a compiler to reduce cache misses by performing pre-fetches in the event of context switch |
Also Published As
Publication number | Publication date |
---|---|
US20080201529A1 (en) | 2008-08-21 |
CN1629800A (zh) | 2005-06-22 |
US20090125913A1 (en) | 2009-05-14 |
US9047116B2 (en) | 2015-06-02 |
US20050138627A1 (en) | 2005-06-23 |
US7493621B2 (en) | 2009-02-17 |
US8141098B2 (en) | 2012-03-20 |
US20080201565A1 (en) | 2008-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100367195C (zh) | 多线程计算机中用于环境切换数据预取的方法和装置 | |
US7617499B2 (en) | Context switch instruction prefetching in multithreaded computer | |
US5974438A (en) | Scoreboard for cached multi-thread processes | |
US6871264B2 (en) | System and method for dynamic processor core and cache partitioning on large-scale multithreaded, multiprocessor integrated circuits | |
US7502890B2 (en) | Method and apparatus for dynamic priority-based cache replacement | |
US9697125B2 (en) | Memory access monitor | |
US5822790A (en) | Voting data prefetch engine | |
US5737750A (en) | Partitioned single array cache memory having first and second storage regions for storing non-branch and branch instructions | |
US5694568A (en) | Prefetch system applicable to complex memory access schemes | |
US9934148B2 (en) | Memory module with embedded access metadata | |
CN1318990C (zh) | 用于控制存储器访问的方法和装置 | |
EP3066572B1 (en) | Cache memory budgeted by chunks based on memory access type | |
US6473836B1 (en) | Computing system and cache memory control apparatus controlling prefetch in hierarchical cache memories | |
US8151012B2 (en) | Virtual row buffers for use with random access memory | |
JP2001515624A (ja) | ペナルティーに基づくキャッシュ格納置換方法 | |
US7454572B2 (en) | Stack caching systems and methods with an active swapping mechanism | |
US20080189487A1 (en) | Control of cache transactions | |
US20070169125A1 (en) | Task scheduling policy for limited memory systems | |
US20060041723A1 (en) | System, apparatus and method for predicting accesses to a memory | |
US20090320006A1 (en) | Learning and cache management in software defined contexts | |
US5724586A (en) | Method for improving cache locality of a computer program | |
EP1586039A2 (en) | Using a cache miss pattern to address a stride prediction table | |
US6434671B2 (en) | Software-controlled cache memory compartmentalization | |
US8266379B2 (en) | Multithreaded processor with multiple caches | |
EP1599803B1 (en) | Reducing cache trashing of certain pieces |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080206 Termination date: 20111117 |