CN101218561B - 用于提供用户可编程低开销多线程化的处理器、系统和方法 - Google Patents
用于提供用户可编程低开销多线程化的处理器、系统和方法 Download PDFInfo
- Publication number
- CN101218561B CN101218561B CN200480041283.9A CN200480041283A CN101218561B CN 101218561 B CN101218561 B CN 101218561B CN 200480041283 A CN200480041283 A CN 200480041283A CN 101218561 B CN101218561 B CN 101218561B
- Authority
- CN
- China
- Prior art keywords
- thread
- user
- processor
- event
- trigger
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 33
- 230000007246 mechanism Effects 0.000 claims abstract description 38
- 230000001360 synchronised effect Effects 0.000 claims abstract description 8
- 230000004044 response Effects 0.000 claims description 80
- 230000009467 reduction Effects 0.000 claims description 5
- 238000001514 detection method Methods 0.000 claims description 3
- 238000005259 measurement Methods 0.000 claims 1
- 230000001960 triggered effect Effects 0.000 abstract description 4
- 230000015572 biosynthetic process Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000009795 derivation Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000015654 memory Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000013459 approach Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 238000004321 preservation Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Processing (AREA)
Abstract
虚拟多线程化硬件机制提供单线程处理器上的多线程化。线程切换由用户定义的触发来触发。同步触发可以以特殊的触发指令的形式来定义。异步触发可以通过标识异步触发条件的特殊的标记指令来定义。所述异步触发条件可以基于多个原子处理器事件。一旦线程切换,例如仅仅为指令指针地址的最小上下文信息被硬件维持。和传统的同时多线程化方案形成对照,所述虚拟多线程化硬件提供对操作系统透明并且无需操作系统干预可以进行的线程切换。
Description
背景
技术领域
本公开一般地涉及信息处理系统,并且更具体地,涉及低开销(overhead)并发线程的派生和管理。
背景技术
已被用来改善处理器性能的一种途径被称为“多线程化(multithreading)”。在软件多线程化中,指令流被分割成可以被并行执行的多个指令流。在一种途径中,多处理器系统中的多个处理器可以各自并发地作用于多个线程中的一个。
在另一种被称为时间片(time-slice)多线程化的途径中,在固定的时间段后,单个处理器在线程间切换。再在另一种途径中,一旦发生触发事件(例如长延时(latency)缓存未命中),单个处理器在线程间切换。后一种途径被称为基于事件切换的多线程化(Switch-on-event multithreading)。
传统地,用于基于事件切换的多线程化的触发器事件是硬连线的。然而,期望程序设计者或用户可以指定各种触发事件中的任一来触发单个处理器上的线程切换。本文公开的方法和设备的实施方案解决与多线程化相关的这个和其他所关注的问题。
附图简要说明
参照附图可以理解本发明,其中类似的元件由相同的编号来指示。这些附图不是要成为限制性的,而是相反被提供来描述用于提供低开销并发助手线程的方法、设备和系统的被选择的实施方案。
图1是能够利用被公开的技术的处理系统的至少一个实施方案的框图。
图2是示出触发响应装置(trigger-response mechanism)的至少一个实施方案的状态的状态图。
图3是示出在主线程缓存未命中停止期间进行数据预取的低开销助手线程的异步派生操作的时间线。
图4是示出在两个示范性上下文(context)切换期间上下文信息的保存和还原的数据流图。
图5是示出用于提供用户可编程低开销多线程化的方法的流程图。
详细说明
本文描述的是用于一个或更多个低开销并发助手线程的用户可编程派生(spawning)的系统、设备和方法的选择的实施方案。在以下的说明中,已经阐述了例如处理器类型、处理器事件的类型、探测处理器事件的方式和控制流排序的很多具体细节,以提供对本发明的更透彻的理解。然而,本领域技术人员将意识到,无需使用这些具体的细节可以实践本发明。此外,一些公知结构、电路等等没有被详细示出,以免不必要地模糊本发明。
在为多线程化提供硬件支持的处理器中,例如在那些支持被称为同时多线程化(“SMT”)的方法的处理器中,对操作系统和用户程序来讲,使单个物理处理器被呈现为多个逻辑处理器。对SMT,多个线程可以是活动的,并且并发地在单个处理器上执行而无需切换。也即,每个逻辑处理器维持完整的体系结构状态集合,但是物理处理器的许多其他的资源,例如缓存(cache)、执行单元、分支预测器、控制逻辑和总线是共享的。来自多个线程的指令可以并发地执行,其中来自每个线程的至少一条指令在同一时间帧期间被执行。
对不提供支持SMT的硬件特征的处理器来讲,可以仍然期望实现多线程化,从而当主线程已经遭遇触发事件(例如长延时指令)时,第二线程可以利用处理器的执行资源。例如,如果处理器执行导致缓存未命中的装载指令(load instruction),那么,在等待要被取的被载数据(load data)时第一线程为潜伏的(latent)时间期间,可以派生第二线程来为第一线程的未来预期的缓存未命中进行数据预取。
图1是示出包括提供用户可编程低开销多线程化的虚拟多线程化硬件的处理器101的框图。也即,针对额外线程,处理器101提供具有缩减的上下文大小的用户级非对称多线程化。与支持传统的基于事件切换的多线程化的处理器形成对照,在图1中示出的处理器101允许一个或更多个用户指定的触发事件来实现助手线程的派生。
图1示出处理器101的虚拟多线程化硬件包括触发响应装置120和线程切换处理机(handler)130。一旦上下文切换到低开销线程或者从低开销线程切换而来,线程切换处理机130保存和还原某种最小的体系结构状态信息。触发响应装置120确定用户定义的线程切换准则已经满足,并且生成适当的响应以导致期望的线程切换发生。
处理器101支持的多线程化方案至少在以下意义上是非对称的:为助手线程保存的上下文信息比为主线程维持的上下文信息小得多。为线程切换保存的上下文信息量被称为上下文切换的“重量(weight)”。对至少一个实施方案,上下文切换的重量是直接可编程的。也即,要在队列104中保存的体系结构状态的程度可以通过控制寄存器150来编程。该上下文重量可编程性是和传统的基于事件切换的多线程化形成对照的。
使用在这里,术语“助手(helper)”线程想要包括与主线程并发地执行的线程。使用在这里,“并发地”指示两个线程同时是活动的,因为处理系统的资源并发地处理每个线程的工作。典型地,助手线程预先进行在主线程的指令流中预期主线程稍后要利用的工作。当主线程招致导致主线程经历停滞的触发事件、释放处理器的执行资源时,可以派生助手线程。当一个资源(例如存储器系统)为主线程进行处理(例如,将被载数据从存储器取到缓存)时,其他执行资源可以被利用来并发地处理助手线程的指令。
例如,助手线程的执行可以导致将数据置入数据缓存,从而可以避免主线程中未来的缓存未命中。对至少一个其他的实施方案,助手线程可以被利用来将指令取到被主线程利用的指令缓存。
因此,在整个公开中使用术语“助手”线程来指响应于用户定义的触发条件而派生的低开销并发线程。可以理解,对至少一些实施方案,派生的线程可以进行与主线程的工作不相关的工作。这样的响应于用户定义的触发条件而派生的线程包括与主线程相比相对低的开销,并且在主线程也是活动时执行(但是在派生的线程的执行的所有或部分期间,主线程可以被停止)。然而,对这样的实施方案,派生的线程进行与主线程的工作不相关的工作。使用在这里,术语“助手”线程也包括这样的线程。
图1示出触发响应装置120可以从处理器事件计数器110接收作为输入数据的信息。基于在活动的触发响应寄存器组(bank)115中用户提供的值,触发响应装置120基于事件计数寄存器110的内容来确定响应是否被批准(warranted)。如果被批准,触发响应装置120可以生成同步响应或非同步响应。
图1示出触发响应装置120包括至少一组用户可编程触发响应寄存器115。对示出的实施方案,提供了n个触发响应寄存器集合(或“组”)115a-115n,其中在任何给定时刻只有一个集合是活动的。在组115中的寄存器的个数指示用户在指定触发条件以生成低开销线程中可以利用的条件的个数。
例如,每个寄存器可以反映一个处理器事件,例如周期计数、缓存未命中、指令操作码等等。这些触发响应寄存器115,连同事件计数寄存器110,通过提供对几种原子事件(atomic event)的用户访问来支持鲁棒的可编程性,所述原子事件可以被用户用来制定(formulate)具体的异步触发事件。在触发寄存器110中被跟踪的“原始”事件可以被用户单独地或与一个或更多个其他“原始”事件一起使用,以为助手线程的派生指定触发条件(在触发响应寄存器组115中给出)。触发事件可以是同步或异步事件,并且可以是体系结构或微体系结构的处理器事件。
由触发响应装置120生成的响应可以是同步响应或异步响应。对于同步响应,线程切换处理机130可以响应于主线程的指令流水线中的特定指令而进行线程切换。对这样的情形,线程切换被认为是“同步的”,因为它与主线程的指令流中的具体指令直接对应。对这样的实施方案,当触发响应装置120探测到操作码事件计数器110指示已经遭遇特定操作码时,线程切换可能被触发。对至少一个实施方案,操作码可以对应于不以其他方式改变处理器状态的指令。例如,在立即字段具有具体值的noop指令可以被视为“触发”指令。(注意,如下所述,所述立即值可以与标记指令所用到的立即值不同)。
对至少一个实施方案,在图1中示出的处理器101为“触发”指令提供体系结构的支持,所述体系结构的支持给用户提供了几个线程管理能力。触发指令被支持来完成以下功能:线程创建、线程销毁、线程挂起和线程恢复。这些类型的“触发”指令中的每一个具有下面的特性。首先,指令对处理器状态没有副作用。其次,指令的操作码被事件计数寄存器110中的至少一个识别为触发指令,针对所述触发指令同步响应应该由触发响应装置来生成。
如果这样的触发指令到达执行流水线的执行阶段,针对所述指令的操作码可以被操作码事件计数寄存器110探测并报告。这可以导致触发响应装置120向线程切换处理机130发送同步响应,指示线程切换被批准,而与任何其他处理器事件的状态无关。对这样的实施方案,线程切换处理机130把返回指令指针(“IP”)地址标记为用来触发指令的指令指针地址。切换处理机增加返回指令指针地址值,并且将返回IP地址储存在任务队列140中。本领域技术人员将认识到,返回IP地址的值可以在储存到队列140之前被先增加,或可以在值从队列140中被取得之后被后增加。
任务队列140可以是任何硬件储存结构。对至少一个实施方案,在存储器中实现任务队列140。对至少一个其他的实施方案,任务队列140被实现为一个或更多个寄存器。相应地,返回IP地址可以被保存在存储单元或寄存器中。
与上面讨论的同步响应形成对照,触发响应装置120可以另外生成异步响应。也即,指示线程切换被批准的异步响应可以基于处理器事件,并且独立于当前线程正被执行的指令。对至少一个实施方案,触发响应装置120以下面的方式来确定异步响应是否是被批准的。
处理器事件计数器110跟踪用户在指定触发条件以派生低开销线程中可以利用的条件。例如,每个寄存器可以反映一个“原始”处理器事件,例如周期计数、缓存未命中、指令操作码等等。事件计数器110可以被实现为计数寄存器,以计数各种“原始”处理器事件。给定事件计数寄存器110的位大小,事件计数寄存器110可以被初始化为事件计数寄存器110的范围内的数字。
触发响应装置120可以被编程来探测来自触发寄存器110的上溢信号,并且相应地处理所述信号。例如,如果特定的事件计数寄存器110要探测L3缓存未命中,那么计数寄存器110可以被初始化为比上溢值少一的值。在这种情况下,一旦第一次发生L3缓存未命中,生成针对所述计数器110的上溢信号。触发响应装置120可以探测和作用于这样的情形。
用户可以编程将触发线程切换的事件计数寄存器110的特定状态。也即,用户可以利用特殊的标记指令来编程触发响应寄存器115的值。对至少一个实施方案,标记指令是具有特定立即值的nop指令。用户可以在要被处理器101执行的用户程序中使用该指令。当用户程序的标记指令到达处理器101的执行流水线的执行阶段时,触发响应寄存器115被相应地修改。该动作有效地使触发响应装置120“处于注意状态(on notice)”,以监控由用户指定的期望的线程切换触发事件。
对至少一个实施方案,如果探测到线程切换触发事件,触发响应装置120向线程切换处理机130提供异步响应。对于如触发响应寄存器所指示的触发条件被满足的情形,那么线程切换可以发生在主线程的执行流的任一点。在这个意义上,线程切换是异步的,因为它与主线程流中的任何特定指令无关,而是与主线程的进展异步地发生。
触发响应装置120的至少一个实施方案每次只针对一个线程切换触发事件进行监控。例如,如果两条标记指令被执行,那么每次只有一条可以被触发响应装置120处理。对这种情况,可以存在在多个触发响应寄存器组150a-150n的每一组中被指示的多个线程切换触发条件,但是在任一给定时刻,所述组中只有一组是活动的。可以实现超时特征,以便触发响应装置120仅在指定的时间量(例如,可以通过已经过周期(elapsed cycle)的个数或退役指令(retired instruction)的个数来测量)内针对第一线程切换触发事件进行监控。如果在分配的时间帧内没有探测到线程切换触发事件,那么可以处理下一个线程切换触发事件。
简要参照图2,结合图1示出超时特征的实施例。图2是示出触发响应装置120通过单事件探测方案的状态202、204、206转换的状态图。为了讨论图2,出于示例性的目的,假定第一标记指令指示一旦L3缓存未命中,线程切换应该发生。图2示出了在标记指令的执行之前,触发响应装置120是处于默认状态202。
当接收到标记指令时,触发响应装置120转换到探测状态204。一旦进入探测状态204,在活动的触发响应寄存器组115中的值被相应地修改。对缓存未命中的实施例,如果L3缓存未命中通过事件计数器110被报告,触发响应寄存器组115根据标记指令被编程,以生成异步线程切换响应。同样地,一旦进入探测状态204,超时时间段开始。
在探测状态204期间,触发响应装置120监控指定的线程切换触发条件是否满足。如果在指定的超时时间段完成之前没有探测到所述条件,那么已经发生了超时。所述超时导致回到默认状态202的转换。
对我们的实施例而言,如果在指定的周期个数内来自适当的事件计数器110的L3未命中计数器上溢指示没有被指示,那么超时可以发生。类似地,如果自进入探测状态204以来某个数量的指令已经退役,那么超时可以发生。在这种情况下,可能感兴趣的存储器访问在缓存中已经命中。在这种情况下,触发响应装置120被还原到默认状态202,并且随后准备接收下一条标记指令。
如果第二标记指令已经被执行,以致触发响应寄存器115的第二组可以被用来激活,那么触发响应装置可以转换回探测状态204,以便针对第二指定的线程切换触发事件进行监控。否则,触发响应装置120停留在默认状态202,直到另一个标记指令被执行。
图2示出如果在探测阶段204触发响应装置120探测到指定的线程切换触发事件已经发生,那么触发响应装置120转换到状态206。在状态206,触发响应装置120向切换处理机130指示线程切换应该发生。随后触发事件装置转换回到默认状态202。
回到图1,图1示出由触发响应装置120生成的响应(同步的或异步的)可以被线程切换处理机130接收。线程切换处理机130为派生的线程提供最小的保存/还原处理。当来自触发响应装置120的响应指示线程切换是适当的时,线程切换处理机130在切换到另一个线程之前为当前线程保存最小的上下文信息。最小的上下文信息可以保存在队列140中。如上面讨论的,取决于队列140的实现,最小的上下文信息可以被保存在一个或更多个寄存器中,或它可以被保存在存储器中。
对至少一个实施方案,在切换到另一个线程之前,用于当前线程的指令指针(IP)地址是保存在队列140中的仅有的上下文信息。然而,对至少一个其他的实施方案,可以保存额外的上下文信息。控制寄存器150向切换处理机130指示一旦上下文切换哪些信息要被保存在队列140中。
从主线程派生的一个或多个助手线程在以下意义上是“低开销”线程:相对于处理器为主线程维持的上下文信息量而言,一旦线程切换,所述硬件维持相对少的上下文信息。其他传统的上下文信息(例如通用寄存器值)被排除在为低开销线程切换保存的最小上下文信息之外。硬件(例如在图1中示出的实施方案)为其保存仅仅最小的信息(例如,指令指针(IP)地址可以是被保存在队列140中仅有的上下文信息)的线程还可以被可替换地称为“低开销线程”、“蝇重量线程”、“瘦线程”或“纤程(fiber)”。
对至少一个实施方案,假定在其中用户已经指定了线程派生触发事件的软件负责管理未被维持在队列140中的其他体系结构状态信息。应该注意到,因为线程切换是由用户显式地编程,所以线程切换是基于用户程序与硬件的交互而发生的;操作系统不处理用于这样的实施方案的线程创建。例如,对至少一个实施方案,假定编译器通过寄存器分片(partitioning)来为低开销线程显式地管理额外的上下文信息。低开销线程切换对操作系统来说是透明的。
与传统多线程化上下文切换相比,上面讨论的用户可编程低开销多线程化方案的副作用在于线程切换可能高效地、更频繁地发生,并且具有更小的粒度(granularity)。与这样的上下文切换相关联的低开销可以在相对小的量(quantum)上被分摊和补偿。例如,如这里所描述的低开销上下文切换的粒度可以是大约200个机器周期。相反地,操作系统支持的传统的多线程化的上下文切换的粒度可能是许多毫秒。在计算效率方面,该差别是显著的——1毫秒可以表示数百万个机器周期。
图3是根据上面描述的可编程低开销多线程化方案的异步使用模型示出事件的示例性时序的时间线。对在图3中示出的异步使用模型,主线程T1包括标记指令,所述标记指令指示在主线程T1执行期间,一旦L3缓存未命中,线程切换应该发生。标记指令x在t0时刻之前被执行,它警告触发响应装置120(图1)针对用户指定的线程切换事件进行监控(即针对L3缓存未命中进行监控)。
图3示出L3缓存未命中发生在t0时刻。缓存未命中导致主线程T1的执行停止,直到从存储器取得未命中数据。图3示出该停止从t0时刻发生,直到t4时刻。
图3示出在t0时刻的缓存未命中还触发了触发响应装置120(图1)发起低开销上下文切换,从而助手线程T2被异步地派生。上下文切换在t0时刻开始并且在t1时刻完成,其中在t1时刻助手线程T2开始执行。相应地,在图3中的时间间隔A示出将控制从主线程T1转移到助手线程T2所用的时间。
对在图3中示出的实施方案,助手线程T2为未来的主线程(T1)指令执行指令的预计算片(slice),其中预期未来的主线程指令会招致缓存未命中。也即,例如,通过剖析或其他手段,已经确定由于在主线程T1的执行期间在装载指令上的缓存未命中,预期在t6时指令会发生性能损失。因此,在由于t0时刻主线程经历的缓存未命中而停止期间,助手线程将数据预取到数据缓存,希望避免稍后预期的主线程(T1)中的缓存未命中(在t6时刻)。
助手线程T2从t1时刻直到t2时刻执行的预计算片是预计算目标装载指令的地址所必需的主线程指令的最小子集,所述目标装载指令预期在t6时刻导致主线程T1中的缓存未命中。在执行预计算片后,助手线程执行目标装载指令。图3示出目标装载指令在t2时刻被执行。
对至少一个实施方案,用户可以在助手线程代码中的目标装载指令之后放置触发指令,以便指示所述线程已经完成执行,并且主线程T1可以恢复控制。触发指令可以是异步或同步指令。对至少一个实施方案,同步和异步指令两者都可以放置在助手线程T2的末尾。
图3示出,在t2时刻,上下文切换在目标装载指令完成之后被发起。(正如上面陈述的,该上下文切换可以被放置在助手线程指令流中的目标装载指令之后的触发指令发起。)图3示出上下文切换在t3时刻完成。相应地,图3中的时间间隔B示出将控制从助手线程T2转移回主线程T1所用的时间。
虽然上下文切换已经在t3时刻完成,主线程T1仍然停止,等待在time0时刻请求的被载数据data1。图3示出被载数据data1在t4时刻被返回,此时主线程不再停滞并且恢复指令的执行。
在此期间,助手线程T2从它的目标装载指令在t2时刻被发布直到在t5时刻这样的被载数据data2从存储器系统被返回是停止的。
在t3时刻恢复控制之后,主线程T1于是继续它的指令流的执行,最后在t6时刻到达装载指令。因为用于该装载指令的数据data2已被助手线程预取并且在t5时刻已被置入缓存,所以在t6时刻避免了主线程T1中的缓存未命中。
图4示出在图3的A和B处示出的上下文切换期间线程切换处理机130的处理。在t0时刻上下文切换A被发起之前,主线程T1是活动线程。图4示出主线程T1是正要进入切换处理机130的活动线程。切换处理机130通过在任务队列140中保存上下文信息来进行低开销上下文切换。并且,在上下文切换期间,切换处理机130将处理器的指令指针设置到助手线程T2的首条指令。例如,切换处理机130可以从预先指明的存储单元或从寄存器获得T2指令指针值。此后,处理器继续助手线程T2的指令的执行。
对图3中示出的上下文切换B,图4示出在t2时刻上下文切换B被发起之前助手线程T2是活动的线程。因此,在t2时刻助手线程T2是正要进入切换处理机130的活动线程。在上下文切换B期间,切换处理机130在任务队列140中为线程T2保存上下文信息,并且还原到来自T1上下文信息的处理器的指令指针,所述T1上下文信息在之前的上下文切换期间已被存入任务队列140。此后,处理器继续主线程T1的指令的执行。
图5是示出用于进行用户可编程多线程化的方法500的至少一个实施方案的流程图。对至少一个实施方案,所述方法的进行无需操作系统的干预,并且所述方法对操作系统是透明的。在图5中示出的用户直接触发处理的能力可以由编译器提供,所述编译器可以将线程生成驱动器(driver)作为运行时库的一部分来提供。
图5示出方法500的处理在框502开始并且前进到框504。在框504,硬件(例如图1中示出的触发响应寄存器115)探测用户指定的线程切换触发条件。所述条件可以是同步的(例如显式触发指令的执行)或异步的(例如由标记语言指示的条件)。如果没有探测到触发条件,处理循环回到框502。响应于在框504探测到触发事件,处理前进到框506。
在框506,硬件(例如图1中示出的切换处理机130)挂起当前线程的执行。对至少一个实施方案,当前线程是完整上下文的主线程。挂起(suspension)可以包括在任务队列中为当前线程保存最小的上下文信息,所述任务队列例如图1中示出的任务队列140。用户可以编程在框506保存的上下文信息的重量或量。编译器或类似的工具可以维持不由硬件维护的额外的上下文信息(在本文中有时被称为“被排除的”上下文信息)。
随后处理前进到框508,其中低开销助手线程被激活。对至少一个实施方案,助手线程被例如切换处理机130的硬件激活,所述硬件将用于助手线程指令流的开始指令指针地址置入处理器的指令指针寄存器。从框508处理前进到框510。
在框510,硬件(例如图1中示出的触发响应寄存器115)探测导致放弃助手线程并且因此恢复主线程的用户指定的线程切换触发条件。所述条件可以是同步的(例如显式触发指令的执行)或异步的(例如由标记指令指示的条件)。如果没有探测到触发条件,处理循环回到框510,并且助手线程继续执行。响应于在框510探测到放弃(relinquishment)触发事件,处理前进到框512。
在框512,助手线程被挂起。如果在框510探测到的条件指示助手线程应该被销毁,那么不需要为该助手线程保存上下文信息。然而,如果助手线程是要被挂起,那么在框512的挂起期间保存助手线程的上下文信息。随后处理前进到框514。
在框514,已在框506被保存的“当前”线程的上下文被还原。随后,当前线程的处理在被还原的指令指针地址处恢复。随后处理在框516结束。
应该注意到,对至少一个实施方案,进行框506、508、512和514处实现的上下文切换无需操作系统的干预。
前面的讨论公开了设备、系统和方法的被选择的实施方案,所述设备、系统和方法用于一个或更多个低开销同时(simultaneous)助手线程的用户可编程的派生和管理。这里描述的方法可以在例如图1中示出的处理系统100的处理系统上进行。
图1示出可以利用被公开技术的处理系统100的实施方案。例如,系统100可以被用来执行提供用户可编程多线程化(例如这里描述的实施方案)的一种或更多种方法。对于本公开的目的,处理系统可以包括任何具有处理器的处理系统,所述处理器例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。系统100表示基于和2微处理器以及 Pro、 II、III和4微处理器的处理系统,所有这些微处理器可从Intel(英特尔)公司获得。还可以使用其他的系统(包括具有其他微处理器的个人计算机(PC)、工程工作站、个人数字助理和其他手持式设备、机顶盒等等)。系统100的至少一个实施方案可以执行从Microsoft公司可获得的WindowsTM操作系统的版本,但是还可以使用例如其他的操作系统和图形用户接口。
处理系统100包括存储器系统150和处理器101。存储器系统150可以储存用来控制处理器101的操作的指令140和数据141。存储器系统150旨在作为存储器的普遍表示,并且可以包括各种形式的存储器,例如硬盘驱动器、CD-ROM、随机访问存储器(RAM)、动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)、闪存存储器和相关的电路。存储器系统150可以储存由可以被处理器101执行的数据信号表示的指令140和/或数据141。
在前面的说明中,公开了用于实现用户可编程多线程化的方法、设备和系统的各个方面。出于解释的目的,阐述了具体的数字、实施例、系统和配置,以便提供更透彻的理解。然而,本领域技术人员应该清楚,无需所述具体的细节可以实践所描述的方法和设备。对本领域技术人员来说很明显的,可以在更宽泛的方面做出改变和修改而不背离本发明。例如,图3中示出的时间线和图5中示出的方法500可以被修改,以为多个助手线程提供支持——助手线程本身可以派生另一个助手线程。尽管已经图示和描述了本发明的特定方案,但是所附权利要求书要将落在本发明的真实范围内的所有的这样的改变和修改包括在它的范围内。
Claims (23)
1.一种用于提供多线程化的处理器,包括:
触发响应装置,其包括至少一组用户可编程寄存器,用于识别用户定义的触发事件;以及
线程切换处理机,其耦合到所述触发响应装置,用于响应于在第一线程执行期间发生的所述用户定义的触发事件,用第二线程的第二指令指针对来自第一线程的第一指令指针进行线程切换,
其中,为第一指令指针的线程切换所保存的上下文信息量小于全部上下文信息量。
2.如权利要求1所述的处理器,其中
所述用户定义的触发事件包括同步的用户定义的触发事件,该事件对应于第一线程内的指令。
3.如权利要求1所述的处理器,其中
所述用户定义的触发事件包括异步的用户定义的触发事件,该事件与第一线程内的指令流无关。
4.如权利要求1所述的处理器,其中
所述线程切换处理机进行从第一线程的第一指令指针至第二线程的第二指令指针的线程切换包括:在用第二线程的第二指令指针地址替换第一指令指针地址之前,保存第一线程的第一指令指针地址。
5.如权利要求4所述的处理器,还包括:
用于接收第一指令指针地址的任务队列。
6.如权利要求5所述的处理器,其中:
所述任务队列还包括存储单元。
7.如权利要求5所述的处理器,其中:
所述任务队列还包括寄存器。
8.如权利要求1所述的设备,还包括:
多个事件计数器,其耦合到所述触发响应装置,其中每个事件计数器探测原子处理器事件。
9.如权利要求8所述的处理器,其中
所述用户定义的触发事件包括基于所述原子处理器事件中的一个或更多个的异步触发事件,该事件与第一线程内的指令流无关。
10.如权利要求1所述的处理器,其中
所述线程切换处理机在进行从第一线程的第一指令指针至第二线程的第二指令指针的线程切换,该低重量线程切换对于操作系统OS来说是透明的,且无需操作系统的干预。
11.如权利要求1所述的处理器,还包括:
一个或更多个用户可编程控制寄存器,其耦合到所述线程切换处理机;
所述一个或更多个控制寄存器的值将所述线程切换的上下文信息量指示为仅仅是指令指针。
12.一种用于提供多线程化的系统,包括:
存储器,用于储存指令;以及
单线程处理器,其耦合到所述存储器,
其中,所述处理器包括:
用户可修改寄存器,用于根据至少一个探测到的原始事件,指定用户定义的触发事件,其中用户能够使用特殊的标记指令对所述用户可修改寄存器进行编程;
切换处理机,其响应于所述用户定义的触发事件的发生而调用助手线程;以及
用户可寻址控制寄存器,用于响应于调用所述助手线程而指定将被存储的上下文信息量。
13.如权利要求12所述的系统,其中:
所述指令包括标记指令,当执行时,所述标记指令指定用户可修改寄存器中的用户定义的触发事件。
14.如权利要求12所述的系统,其中:
所述指令是触发指令;并且
当所述触发指令到达执行流水线的执行阶段时,所述原始事件是所述触发指令的操作码。
15.如权利要求12所述的系统,其中:
所述切换处理机在调用所述助手线程前,还为当前线程维持最小上下文信息,其中所述最小上下文信息包括小于或等于全部上下文信息量减去通用寄存器值而得到的上下文信息量。
16.如权利要求15所述的系统,其中所述最小上下文信息包括指令指针地址值。
17.一种用于提供多线程化的方法,包括以下步骤:
探测用户指定的触发条件;
响应于对用户指定的触发条件的探测,在单线程处理器上挂起第一线程的执行;以及
利用硬件来用第二线程的上下文信息量切换第一线程的上下文信息量而无需操作系统干预,其中所述上下文信息量具有在用户可寻址控制寄存器中用户定义的第一信息量。
18.如权利要求17所述的方法,其中:
用于探测用户指定的触发条件的所述步骤还包括确定已经遭遇触发指令。
19.如权利要求17所述的方法,其中:
用于探测用户指定的触发条件的所述步骤还包括确定已经遭遇在标记指令中指定的异步条件,该异步条件与第一线程内的指令流无关。
20.如权利要求17所述的方法,其中:
所述第一信息量仅仅包括指令指针地址值。
21.如权利要求17所述的方法,还包括:
确定所述第一线程应该被恢复;
为所述第一线程还原具有第一信息量的上下文信息;以及
恢复所述第一线程的执行而无需操作系统干预。
22.如权利要求17所述的方法,其中用于探测用户指定的触发条件的所述步骤还包括:
接收指定所述触发条件的标记指令;以及
监控多个原子事件指示符,以基于所述接收到指定所述触发条件的标记指令而探测所述触发条件。
23.如权利要求17所述的方法,其中用于探测用户指定的触发条件的所述步骤还包括:
生成异步响应,以指示所述第二线程应该被调用,该异步响应与第一线程内的指令流无关。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/728,649 US7631307B2 (en) | 2003-12-05 | 2003-12-05 | User-programmable low-overhead multithreading |
US10/728,649 | 2003-12-05 | ||
PCT/US2004/038987 WO2005062168A2 (en) | 2003-12-05 | 2004-11-19 | User-programmable low-overhead multithreading |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101218561A CN101218561A (zh) | 2008-07-09 |
CN101218561B true CN101218561B (zh) | 2013-03-06 |
Family
ID=34633761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200480041283.9A Active CN101218561B (zh) | 2003-12-05 | 2004-11-19 | 用于提供用户可编程低开销多线程化的处理器、系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7631307B2 (zh) |
CN (1) | CN101218561B (zh) |
DE (1) | DE112004002296B4 (zh) |
WO (1) | WO2005062168A2 (zh) |
Families Citing this family (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7487502B2 (en) | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US20050166177A1 (en) * | 2004-01-27 | 2005-07-28 | Ylian Saint-Hilaire | Thread module chaining |
CA2558892A1 (en) | 2004-03-13 | 2005-09-29 | Cluster Resources, Inc. | System and method for a self-optimizing reservation in time of compute resources |
US20070266388A1 (en) | 2004-06-18 | 2007-11-15 | Cluster Resources, Inc. | System and method for providing advanced reservations in a compute environment |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US8176490B1 (en) | 2004-08-20 | 2012-05-08 | Adaptive Computing Enterprises, Inc. | System and method of interfacing a workload manager and scheduler with an identity manager |
CA2827035A1 (en) | 2004-11-08 | 2006-05-18 | Adaptive Computing Enterprises, Inc. | System and method of providing system jobs within a compute environment |
US7810083B2 (en) * | 2004-12-30 | 2010-10-05 | Intel Corporation | Mechanism to emulate user-level multithreading on an OS-sequestered sequencer |
US7870081B2 (en) * | 2004-12-31 | 2011-01-11 | Intel Corporation | Parallelization of bayesian network structure learning |
US8863143B2 (en) | 2006-03-16 | 2014-10-14 | Adaptive Computing Enterprises, Inc. | System and method for managing a hybrid compute environment |
US7950012B2 (en) * | 2005-03-16 | 2011-05-24 | Oracle America, Inc. | Facilitating communication and synchronization between main and scout threads |
US9231886B2 (en) | 2005-03-16 | 2016-01-05 | Adaptive Computing Enterprises, Inc. | Simple integration of an on-demand compute environment |
CA2603577A1 (en) | 2005-04-07 | 2006-10-12 | Cluster Resources, Inc. | On-demand access to compute resources |
US7472256B1 (en) | 2005-04-12 | 2008-12-30 | Sun Microsystems, Inc. | Software value prediction using pendency records of predicted prefetch values |
US20070094213A1 (en) * | 2005-07-14 | 2007-04-26 | Chunrong Lai | Data partitioning and critical section reduction for Bayesian network structure learning |
US20070094214A1 (en) * | 2005-07-15 | 2007-04-26 | Li Eric Q | Parallelization of bayesian network structure learning |
US20070079294A1 (en) * | 2005-09-30 | 2007-04-05 | Robert Knight | Profiling using a user-level control mechanism |
US7774779B2 (en) * | 2005-11-18 | 2010-08-10 | At&T Intellectual Property I, L.P. | Generating a timeout in a computer software application |
US9003421B2 (en) * | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
US8065690B2 (en) * | 2005-12-01 | 2011-11-22 | Cisco Technology, Inc. | Method and system for event-based remote procedure call implementation in a distributed computing system |
US9754265B2 (en) * | 2006-05-01 | 2017-09-05 | At&T Intellectual Property I, L.P. | Systems and methods to automatically activate distribution channels provided by business partners |
US7502913B2 (en) * | 2006-06-16 | 2009-03-10 | Microsoft Corporation | Switch prefetch in a multicore computer chip |
GB2443507A (en) * | 2006-10-24 | 2008-05-07 | Advanced Risc Mach Ltd | Debugging parallel programs |
US20080141268A1 (en) * | 2006-12-12 | 2008-06-12 | Tirumalai Partha P | Utility function execution using scout threads |
KR20100014823A (ko) * | 2007-01-23 | 2010-02-11 | 에이저 시스템즈 인크 | 디바이스들을 위한 단일 스레드 아키텍쳐에서 애플리케이션 스위칭 |
US8495627B2 (en) * | 2007-06-27 | 2013-07-23 | International Business Machines Corporation | Resource allocation based on anticipated resource underutilization in a logically partitioned multi-processor environment |
US8219988B2 (en) * | 2007-08-02 | 2012-07-10 | International Business Machines Corporation | Partition adjunct for data processing system |
US8645974B2 (en) * | 2007-08-02 | 2014-02-04 | International Business Machines Corporation | Multiple partition adjunct instances interfacing multiple logical partitions to a self-virtualizing input/output device |
US8574393B2 (en) * | 2007-12-21 | 2013-11-05 | Tsinghua University | Method for making touch panel |
US7996663B2 (en) * | 2007-12-27 | 2011-08-09 | Intel Corporation | Saving and restoring architectural state for processor cores |
US8145849B2 (en) | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8225120B2 (en) * | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
US8732683B2 (en) * | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
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 |
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 |
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 |
US8516484B2 (en) * | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8316218B2 (en) | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
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 |
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 |
US8612977B2 (en) * | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8386822B2 (en) * | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8082315B2 (en) * | 2009-04-16 | 2011-12-20 | International Business Machines Corporation | Programming idiom accelerator for remote update |
US8886919B2 (en) * | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
US8145723B2 (en) * | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming 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 |
US8327059B2 (en) * | 2009-09-30 | 2012-12-04 | Vmware, Inc. | System and method to enhance memory protection for programs in a virtual machine environment |
US11720290B2 (en) | 2009-10-30 | 2023-08-08 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US8423750B2 (en) * | 2010-05-12 | 2013-04-16 | International Business Machines Corporation | Hardware assist thread for increasing code parallelism |
US8667253B2 (en) | 2010-08-04 | 2014-03-04 | International Business Machines Corporation | Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register |
US8793474B2 (en) | 2010-09-20 | 2014-07-29 | International Business Machines Corporation | Obtaining and releasing hardware threads without hypervisor involvement |
US8713290B2 (en) | 2010-09-20 | 2014-04-29 | International Business Machines Corporation | Scaleable status tracking of multiple assist hardware threads |
US8694832B2 (en) | 2011-03-03 | 2014-04-08 | International Business Machines Corporation | Assist thread analysis and debug mechanism |
US9201689B2 (en) * | 2011-04-22 | 2015-12-01 | Cray Inc. | Software emulation of massive hardware threading for tolerating remote memory references |
CN106909444B (zh) | 2011-12-22 | 2021-01-12 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
WO2013147887A1 (en) | 2012-03-30 | 2013-10-03 | Intel Corporation | Context switching mechanism for a processing core having a general purpose cpu core and a tightly coupled accelerator |
US9286081B2 (en) * | 2012-06-12 | 2016-03-15 | Apple Inc. | Input device event processing |
US9582320B2 (en) * | 2013-03-14 | 2017-02-28 | Nxp Usa, Inc. | Computer systems and methods with resource transfer hint instruction |
JP6477216B2 (ja) * | 2015-05-08 | 2019-03-06 | 富士通株式会社 | 演算装置、スレッド切替方法、及びマルチスレッドプログラム |
US10019283B2 (en) * | 2015-06-22 | 2018-07-10 | Advanced Micro Devices, Inc. | Predicting a context portion to move between a context buffer and registers based on context portions previously used by at least one other thread |
CN106980546B (zh) * | 2016-01-18 | 2021-08-27 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
US10318302B2 (en) | 2016-06-03 | 2019-06-11 | Synopsys, Inc. | Thread switching in microprocessor without full save and restore of register file |
US10558463B2 (en) | 2016-06-03 | 2020-02-11 | Synopsys, Inc. | Communication between threads of multi-thread processor |
US10628320B2 (en) * | 2016-06-03 | 2020-04-21 | Synopsys, Inc. | Modulization of cache structure utilizing independent tag array and data array in microprocessor |
US10613859B2 (en) | 2016-08-18 | 2020-04-07 | Synopsys, Inc. | Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions |
US10552158B2 (en) | 2016-08-18 | 2020-02-04 | Synopsys, Inc. | Reorder buffer scoreboard having multiple valid bits to indicate a location of data |
US10210650B1 (en) * | 2017-11-30 | 2019-02-19 | Advanced Micro Devices, Inc. | Primitive level preemption using discrete non-real-time and real time pipelines |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
WO2020186630A1 (en) * | 2019-03-21 | 2020-09-24 | Huawei Technologies Co., Ltd. | Serializing divergent accesses using peeling |
US11474861B1 (en) * | 2019-11-27 | 2022-10-18 | Meta Platforms Technologies, Llc | Methods and systems for managing asynchronous function calls |
US11194503B2 (en) | 2020-03-11 | 2021-12-07 | Samsung Electronics Co., Ltd. | Storage device having a configurable command response trigger |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US2055964A (en) * | 1934-09-26 | 1936-09-29 | Granberg Meter Corp | Flow shut-off mechanism |
US3061445A (en) * | 1959-04-30 | 1962-10-30 | Abbott Lab | Effervescent sweetening tablet |
US3018686A (en) * | 1961-01-10 | 1962-01-30 | Sawyer S Inc | Tachistoscope |
US4539637A (en) * | 1982-08-26 | 1985-09-03 | At&T Bell Laboratories | Method and apparatus for handling interprocessor calls in a multiprocessor system |
JP3034873B2 (ja) * | 1988-07-01 | 2000-04-17 | 株式会社日立製作所 | 情報処理装置 |
US5247676A (en) * | 1989-06-29 | 1993-09-21 | Digital Equipment Corporation | RPC based computer system using transparent callback and associated method |
US5179702A (en) * | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
US5390329A (en) * | 1990-06-11 | 1995-02-14 | Cray Research, Inc. | Responding to service requests using minimal system-side context in a multiprocessor environment |
US6697935B1 (en) | 1997-10-23 | 2004-02-24 | International Business Machines Corporation | Method and apparatus for selecting thread switch events in a multithreaded processor |
US6098169A (en) * | 1997-12-23 | 2000-08-01 | Intel Corporation | Thread performance analysis by monitoring processor performance event registers at thread switch |
US6272520B1 (en) * | 1997-12-31 | 2001-08-07 | Intel Corporation | Method for detecting thread switch events |
US6560626B1 (en) * | 1998-04-02 | 2003-05-06 | Microsoft Corporation | Thread interruption with minimal resource usage using an asynchronous procedure call |
US6401155B1 (en) * | 1998-12-22 | 2002-06-04 | Philips Electronics North America Corporation | Interrupt/software-controlled thread processing |
US6535905B1 (en) | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US7343602B2 (en) | 2000-04-19 | 2008-03-11 | Hewlett-Packard Development Company, L.P. | Software controlled pre-execution in a multithreaded processor |
US7222150B1 (en) * | 2000-08-15 | 2007-05-22 | Ikadega, Inc. | Network server card and method for handling requests received via a network interface |
US20020138706A1 (en) * | 2001-03-21 | 2002-09-26 | Littera, Inc. | Reader-writer lock method and system |
US6928645B2 (en) * | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
EP1421704B1 (en) | 2001-08-29 | 2007-11-14 | Analog Devices, Inc. | Methods and apparatus for clock and power control in wireless systems |
US7047533B2 (en) * | 2001-09-10 | 2006-05-16 | Hewlett-Packard Development Company, L.P. | Wait utility and method |
US7117346B2 (en) * | 2002-05-31 | 2006-10-03 | Freescale Semiconductor, Inc. | Data processing system having multiple register contexts and method therefor |
US7228348B1 (en) * | 2002-08-13 | 2007-06-05 | Finisar Corporation | System and method for triggering communications data capture |
US8176298B2 (en) * | 2002-10-08 | 2012-05-08 | Netlogic Microsystems, Inc. | Multi-core multi-threaded processing systems with instruction reordering in an in-order pipeline |
US7010672B2 (en) * | 2002-12-11 | 2006-03-07 | Infineon Technologies Ag | Digital processor with programmable breakpoint/watchpoint trigger generation circuit |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US6931354B2 (en) * | 2003-11-13 | 2005-08-16 | International Business Machines Corporation | Method, apparatus and computer program product for efficient, large counts of per thread performance events |
-
2003
- 2003-12-05 US US10/728,649 patent/US7631307B2/en active Active
-
2004
- 2004-11-19 DE DE112004002296T patent/DE112004002296B4/de active Active
- 2004-11-19 CN CN200480041283.9A patent/CN101218561B/zh active Active
- 2004-11-19 WO PCT/US2004/038987 patent/WO2005062168A2/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2005062168A3 (en) | 2008-01-03 |
DE112004002296B4 (de) | 2010-07-08 |
WO2005062168A2 (en) | 2005-07-07 |
US20050125802A1 (en) | 2005-06-09 |
CN101218561A (zh) | 2008-07-09 |
DE112004002296T5 (de) | 2006-09-28 |
US7631307B2 (en) | 2009-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101218561B (zh) | 用于提供用户可编程低开销多线程化的处理器、系统和方法 | |
US6256775B1 (en) | Facilities for detailed software performance analysis in a multithreaded processor | |
US7676808B2 (en) | System and method for CPI load balancing in SMT processors | |
US8607235B2 (en) | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention | |
US6493741B1 (en) | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit | |
US7698707B2 (en) | Scheduling compatible threads in a simultaneous multi-threading processor using cycle per instruction value occurred during identified time interval | |
US8689215B2 (en) | Structured exception handling for application-managed thread units | |
JP4642305B2 (ja) | マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置 | |
JP3531731B2 (ja) | 投機的プロセッサ内で非投機的イベントをカウントするための方法およびシステム | |
JP3871458B2 (ja) | コンピュータ・システム | |
CN103842959A (zh) | 在计算机系统中维持操作数活性信息 | |
US10831494B2 (en) | Event triggered programmable prefetcher | |
US20090132796A1 (en) | Polling using reservation mechanism | |
WO2007038800A2 (en) | Profiling using a user-level control mechanism | |
JPH10275100A (ja) | マルチスレッド・プロセッサ内でパフォーマンスを監視する方法およびシステム | |
JP2008165834A (ja) | 指定されたメモリアクセスが発生するまでスレッドの実行をサスペンドする方法及び装置 | |
US10628160B2 (en) | Selective poisoning of data during runahead | |
EP0473714A1 (en) | Parallel multithreaded data processing system | |
JP2009501366A (ja) | スレッドレベルの投機実行を拡張するためのプリミティブ | |
JPH10275099A (ja) | データ処理システムにおけるパフォーマンス監視 | |
Loikkanen et al. | A fine-grain multithreading superscalar architecture | |
US6550002B1 (en) | Method and system for detecting a flush of an instruction without a flush indicator | |
US7350110B2 (en) | Method and system using hardware assistance for continuance of trap mode during or after interruption sequences | |
KR101531455B1 (ko) | 하드웨어 및 소프트웨어 시스템이 자동으로 프로그램을 복수의 병렬 스레드들로 분해하는 시스템들, 장치들, 및 방법들 | |
JP6477216B2 (ja) | 演算装置、スレッド切替方法、及びマルチスレッドプログラム |
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 |