CN1310139C - 用于执行在多个线程中排序的指令的方法和系统 - Google Patents

用于执行在多个线程中排序的指令的方法和系统 Download PDF

Info

Publication number
CN1310139C
CN1310139C CNB2004100348092A CN200410034809A CN1310139C CN 1310139 C CN1310139 C CN 1310139C CN B2004100348092 A CNB2004100348092 A CN B2004100348092A CN 200410034809 A CN200410034809 A CN 200410034809A CN 1310139 C CN1310139 C CN 1310139C
Authority
CN
China
Prior art keywords
instruction
formation
thread
high latency
threads
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
Application number
CNB2004100348092A
Other languages
English (en)
Other versions
CN1550978A (zh
Inventor
维克托·R·奥格斯伯格
杰弗里·T·布里德格斯
迈克尔·S·迈克尔瓦内
托马斯·A·萨托瑞斯
R·韦恩·史密斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1550978A publication Critical patent/CN1550978A/zh
Application granted granted Critical
Publication of CN1310139C publication Critical patent/CN1310139C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

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)

Abstract

本发明提供一种用于执行在多个线程中排序的指令的方法和系统。在多线程微处理器中,用于诸如乘法器之类的稀有资源的队列在各个线程中的指令之间在细粒度基础上交替进行。当在一个线程中发现长等待时间的指令时,在那个线程中的、取决于等待时间的指令从线程中刷新出去直到等待时间被解决为止,在另外一个线程中的指令填充来自等待长等待时间指令的线程的空槽(slots),并且继续执行而没有通过必须等待长等待时间指令而被延迟。

Description

用于执行在多个线程中 排序的指令的方法和系统
技术领域
本发明的领域是执行多线程程序的微处理器领域,并且尤其是涉及处理在这种程序中的阻塞(需要等待的)指令。
背景技术
许多现代计算机支持其中两个或更多程序同时运行的“多任务处理(multi-tasking)”。操作系统控制在程序之间的交替,而且在程序之间、或者在操作系统和一个程序之间的切换被称作“上下文切换(context switch)”。
另外,多任务处理能够在单个程序中执行,并且通常被称为“多线程处理(multi-threading)”。使用多线程处理能够同时处理多个动作。大部分的多线程处理器排它地每次在一个线程上操作(例如,执行来自线程a的n条指令,然后执行来自线程b的n条指令)。还有在一个周期接一个周期的基础上交错(interleave)不同线程的细粒度(fine-grain)多线程处理器。两种类型的多线程处理都在长等待时间的事件上交错不同线程中的指令。
大部分现代计算机至少包含用于存储经常存取的数据和指令的第一级(1级或者L1)超高速缓冲存储器系统,并且通常还包含用于相同作用的第二级(2级或者L2)超高速缓冲存储器系统。借助于多线程处理,多个程序共享高速缓冲存储器,这样用于一个线程的数据或者指令可以改写用于另一个线程的那些数据或者指令,这增加了高速缓存未中的概率。
在消耗的处理器周期中,高速缓存未中的成本逐渐增加。这是由于在最近几年以及可预见到的未来、处理器速度以比存储器存取速度更高的速率在增加的事实。因此,随着速度增加,需要更多的处理器周期用于存储器存取,而不是更少的处理器周期。因此,存储器存取变成处理器执行速度的限制因素。
除了多线程或者多任务处理之外,增加高速缓存未中的频率的另一个因素是面向对象编程语言的使用。这些语言允许程序员在远离移动数据和执行算术运算的步骤的抽象级别处装配程序,因此限制了程序员对在执行级别处将指令序列或者数据维护在存储器相邻区域中的控制。
用于限制慢速存储器存取效果的一种技术是“无阻塞(non-blocking)”加载或者存储(读取或者写入)操作。“无阻塞”意味着在正在执行存储器存取的同时在处理器中能够继续其它操作。其它加载或者存储操作是“阻塞”加载或者存储,这意味着在等待存储器存取结果的同时停止其它操作的处理(典型地,一个加载处理将阻塞,而存储处理不会阻塞)。由于对在不需要从存储器存取所需数据的情况下能够处理多少指令有限制,所以甚至一个无阻塞加载通常也将在稍后的某个点变成是阻塞的。
用于限制慢速存储器存取效果的另一种技术是线程切换,其中处理器停止在线程a上的操作直到数据从存储器中到达为止,并且通过在线程b、c等上操作而高效地使用该时间。对用于每个线程的单独寄存器和用于每个线程的指令调度(dispatch)缓存器的使用将会影响操作效率。上文假定无阻塞的2级高速缓存,这意味着2级高速缓存能够继续为第一线程进行存取,并且如果必要的话它还能够同时为第二个线程处理高速缓存请求。
能够在基于硬件的系统中、以及基于软件的系统中执行多线程处理,其中基于硬件的系统具有寄存器阵列以存储在一个线程中的指令,并且通过顺序地步进通过该阵列而排序这些指令,而基于软件的系统用指针把线程放置在快速存储器中以控制排序。
具有一个用于在长等待时间的事件上在线程之间进行切换的有效机构是所希望的。
发明内容
本发明提供了一种用于响应一个长等待时间的事件而挂起(suspending)一个线程的操作的方法和装置。
本发明提供了一种在处理器系统中执行在至少两个线程中排序的指令的方法,该处理器系统包含至少一个操作单元,该操作单元中具有一个等待使用所述操作单元的指令队列,其中:至少一个检测装置检测在所述至少一个操作单元的队列中的长等待时间指令;当所述检测装置检测到所述队列中的、某一个线程的长等待时间指令时,刷新装置刷新所述某一个线程的指令;以及所述至少两个线程中的其余线程中的指令不从所述队列中刷新出去。
本发明提供了一个计算机处理器系统,包含一组操作单元、和用于在至少两个线程中被排序并且等待使用所述操作单元的指令的队列,该系统包含:至少一个检测装置,用于检测在至少一个操作单元的队列中的长等待时间指令;刷新装置,用于当所述检测装置在所述队列中的某一个线程中检测到长等待时间指令时,刷新来自所述某一个线程的指令;以及用于继续操作在所述至少两个线程中的其余线程中的没有从所述队列中刷新出去的指令的装置。
在一个实施例中,在诸如ALU(arithmetic-logic unit,算术逻辑单元)的计算机系统中,在等待由稀少资源处理的一个队列中交错来源于几个线程的指令。
在另一个实施例中,从队列当中刷出在一个线程中、在一个长等待时间的指令之后的指令直到等待解决(resolve)了为止,同时继续执行其它线程。
在另一个实施例中,只有那个线程中的、与等待时间相关的指令被刷出,而在同一个线程中的不相关指令则继续。
在一个实施例中,在每个线程中的指令带有一个用于标识将要被切换的下一个指令的位置的线程字段。
最好是,除了用于每个线程的程序地址寄存器和用于每个线程的寄存器文件之外,还提供用于每个线程的指令缓冲器。
为了进一步了解本发明的特性和优点,应当结合附图作为对下列说明的参考。
附图说明
图1是现有的微处理器的方框图。
图2是包含图1中的处理器的计算机系统的方框图。
图3是说明了一种形式的多线程性能的图1处理器的部分框图。
图4是依据本发明的指令队列框图。
图5和6显示了在序列中的下一个步骤。
具体实施方式
图1是微处理器10的方框图,如在美国专利6,295,600中所示的那样,其能够被修改以包括本发明。这个专利说明了一个其中每个队列仅仅包含来自单个线程的指令的系统。指令高速缓存12提供指令到解码单元14。指令高速缓存能够从预取单元16接收它的指令,其中预取单元16从分支转移单元18接收指令、或者向指令TLB(translation look aside buffer,翻译后援缓冲器)20提供虚拟地址,然后指令TLB使指令通过高速缓存控制/系统接口22从片外(off-chip)高速缓存中取出。来自片外高速缓存的指令被提供到预解码单元24,以提供诸如它是否为分支转移指令之类的某些信息到指令高速缓存12。
来自解码单元14的指令被提供给指令缓冲器26,在那儿它们由调度单元28存取。调度单元28将沿着总线30每次提供4个解码指令,其中每个指令被提供给8个功能单元32-46中的一个。调度单元将根据对数据相关性和适当功能单元的可用性的检查,每个周期调度4个这样的指令。
前3个功能单元,加载/存储单元32与两个整数ALU单元34和36共享一组整数寄存器48。浮点寄存器50由浮点单元38、40和42以及图形单元44和46共享。整数和浮点功能单元组中的每一个都分别具有一个相应的完成单元52和54。微处理器还包含一个片内数据高速缓存56和一个数据TLB 58。
图2是包含图1中的处理器10的芯片组的方框图。还显示了L2高速缓存标记存储器80、和L2高速缓存数据存储器82。此外,显示了连接到系统数据总线86的数据缓冲器84。在显示的例子中,地址总线88连接在处理器10和标记存储器80之间,并且在标记数据总线89上提供标记数据。地址总线90连接到数据高速缓存82,并且用数据总线92读或者写高速缓存数据。
图3说明了被修改以支持其中以连续块操作线程的、基于硬件的多线程系统的图1中的处理器部分。如图所示,解码单元14与图1中的相同。然而,提供了四个单独的指令缓冲器102、104、106和108以支持四个不同的线程、即线程0-3。把来自一个特定线程的指令提供给调度单元28,然后调度单元28把它们提供给指令单元41,其包含如图1所示的多个流水线32-46。
整数寄存器文件48被分成四个寄存器文件以支持线程0-3。类似地,浮点寄存器文件50被分为四个寄存器文件以支持线程0-3。这能够通过为每个线程提供物理上分开的寄存器组、或者通过在快速存储器中为每个线程提供空间来实现。
这个例子具有用于线程0-3的四个程序地址寄存器110。所指向的特定线程地址将向指令缓冲器102-108中适当的一个提供用于读取指令的起始地址。在解决了等待时间之后,在指令缓冲器102-108中一个指令缓冲器中的指令流将简单地在它停止的地方开始。
提供逻辑112以给出硬件线程切换性能。在这个例子中,使用了循环(round-robin)计数器128来按照次序循环(cycle)线程。通过例如从图1中的高速缓存控制/系统接口22提供一个L2未中指示,在线114上提供需要线程切换的指示。在提供这样一个指示后,在一个实施例中,使用线116上的下一个线程指针,按照次序执行到下一个线程的切换。下一个线程指针是用于指示按照次序从具有导致高速缓存未中的指令的目前执行的线程起的下一个线程的2位。在从一个线程切换到另一个线程时实现所需数据改变等的机构将会是一个设计选择。用作说明例,在执行单元41中未显示的常规装置将访问在缓冲器102-108中的正确位置、在整数寄存器文件48、FP(浮点)寄存器文件50中的正确位置等。本领域技术人员意识到,在计算机系统中使用了其它用于各种目的的指针,例如,指向一个线程中按照次序的下一个指令的指针,指向存储器中的位置的指针,或者指向在其中放置来自指令读取的数据的CPU中的一个寄存器的指针等,而且指针通常指示数据或者指令被定位或被放置在其中的一个存储位置。
指令的一个说明性的例子包含OP(操作)代码字段以及源和目标寄存器字段。通过向适当的指令增加2位线程字段,能够维持对线程切换操作的控制。在一个实施例中,线程字段被增加到所有加载和存储操作上。或者,它能够被增加到其它可能需要长等待时间的操作、诸如跳转指令上。此外,这些指令具有一个指向该特定线程中的下一个指令的指针。
在替换实施例中,能够使用其它数目的线程。在性能提高与额外硬件的成本和实际状态之间将会有一个折衷。
用于线程字段的可编程2位可被用来使需要协调的两个线程互相相关。因此,即使第三个线程是可利用的,处理也能够在两个线程之间来回跳转。或者,一个优先线程能够具有总是从其它线程返回该优先线程的跳转(transitions)。在一个实施例中,线程字段位将在指令被编译时插入到该指令中。操作系统能够控制允许一次创建和存在的线程的数目。在一个最佳实施例中,操作系统将限制该数目为4个线程。
多线程处理可以被用于用户程序和/或操作系统。
以上讨论的例子是基于硬件的系统,其中队列位于具有在该队列中向上移动指令以到达稀有资源的硬件的寄存器中。在另一种类型的系统中,通过在快速存储器(例如第一级高速缓存)中定位指令而形成队列,并且每个指令都具有指向下一个指令的指针。在这种情况下,线性移动指令到下一个位置是没有必要的;系统在被指向的位置处执行存储器取操作,并且加载该指令到操作单元中。
最好是,当完成导致线程被挂起的存储器存取时,例如通过一旦完成存储器存取就生成一个中断而使挂起线程被立即加载回队列中。从该加载中返回的数据必须被提供给用于请求它的那个线程的适当寄存器。这能够通过使用用于每个线程的单独的加载缓冲器、或者是通过在加载缓冲器中存储指示适当线程的两位标记来实现。
本发明中采用的方法是:在细粒度的基础上交错几个线程中的指令,并且当一个线程不得不等待存储器读取或者某些其它长等待时间的事件时,系统将以其它线程中的指令继续操作;并且,为了提高吞吐量,在被延迟的线程中的指令将被移动到其它地方(称为Aflushing@队列),并且空白空间将用来自其它线程的指令填充。队列的长度(槽(slot)的队列数量)已经被选择为设计选择,这通常要权衡各种工程考虑。队列的全部槽都被填充、并且因此在短的过渡时期之后以它的设计容量进行操作以刷新和再填充队列,是本发明的一个有益特征。
在一个实施例中,本发明还支持无阻塞的加载,它在正在完成存储器访问的同时允许程序在同一个程序线程中继续进行。最好是,除了阻塞加载之外还将支持这种无阻塞的加载,其中阻塞加载在正在完成存储器访问的同时停止程序线程的操作。因此,在无阻塞加载上将不会立即出现线程切换,而是在变为等待数据(或者存储或者其它长等待时间事件)的阻塞加载后出现线程切换。
在一个最佳实施例中,用于处理器体系结构的指令集不需要被修改,这是由于该指令集包含支持本发明所需要的指令。
参见图4,显示了一个系统的部分简化视图,其中显示了一个流水线的ALU和相关单元。一组方框410-n表示正在等待进入通常用数字440表示的ALU的四个线程中的指令。数据流是从上到下,并且数据顺序进入方框431,在其上进行操作,并且前进到方框432,等等。方框410-n可以表示下一指令寄存器或者设置一个线程的其它任何便利方法。已经通过编译器和/或操作系统使用本领域技术人员众所周知的技术预先完成把程序分类排序(sort)到线程中。
被称为线程合并单元的椭圆形420表示依据由系统设计员优先选用的任何算法来合并线程的逻辑。这种算法在本领域中也是众所周知的(例如,按照次序从每一个线程中取一条指令的循环算法)。单元420还具有指定在合并中哪些线程将被利用的装置。在依据本发明的刷新操作之后,将指示单元420不利用那个线程。当数据已经从存储器到达时,单元420把刷新过的指令放置回队列中并恢复利用那个线程。
方框431-438表示正在由流水线ALU 440或者在不同线程之间共享的另一个单元处理的指令。这些方框表示经过流水线中的各个阶段的指令、以及对由方框表示的槽中的指令进行操作的硬件。在这个图中,如在图左边的箭头所示的那样,时间从上到下增加,即指令在方框431开始,转入方框432,然后转入方框433,等等。选择该特定例子来说明在流水线中的序列可能是或者可能不是按线程的数字顺序,并且取决于特定的算法,可以包含来自同一个线程的两个或更多指令。符号(instr)是指指令,而(add)是指加。显示了来自四个线程的8条指令。其它更大数量的指令可以在一个流水线中。该流水线或者队列中的指令总数将被称为队列数量(queue number)。增加指令到队列中以代替被刷掉的指令的处理将被称为维持队列数量。除了流水线之外,本发明的原理还可以应用于通常被称为队列的多个指令序列,并且为了讨论本发明,除非另作说明,术语“流水线”和“队列”将被视为是等效的。
如果一条指令需要从主存储器中取数据,则那条指令直到数据到达才被执行。另一种情况是指令能够被立即执行,但是需要很长时间完成,例如要求迭代的除法或者其它指令。这些及其它指令被称为长等待时间的指令,是因为它们将其它指令延迟了一段相对长的时间。
在图4的右边,方框450是正在等待数据(加载未中)或者出于其它原因的指令队列,被称为等待时间队列。在这个例子中,与在方框435中的指令有关的加载指令刚好被认为是加载未中,并且线程T3正在等待加载的指示已经被放置在方框450的顶端。当数据到达时,已经被刷新的指令(和相关的指令)将返回到队列440中。相同的队列450能够被用于长指令--即主队列440被用于短指令,而长指令进入到与执行除法运算或者其它长指令的慢指令硬件455相连的队列450中。这后一种方法可以要求某些硬件复制,并且系统设计员将就什么硬件被复制和什么长指令将仍然保留在主队列440中进行判断调用。术语Alengthy instruction@将由系统设计员规定,但这意味着包含这样的指令,即该指令调整额外硬件要花费比标准指令长足够多的时间、例如超过刷新队列和重新填充(repopulate)它所需的时间。因此,方框450不仅表示加载未中队列,而且还表示慢指令执行系统的一部分。在后面的权利要求中,术语Along latency@将意味着正在等待存储器取操作或者其它操作的指令、以及正在没有延迟地进行操作但是执行要花费相对长的时间的指令。
当数据已经从存储器到达时,刷新了的指令被送回到队列440中。作为设计选择,触发等待时间的指令被放置在下一指令寄存器的头部(在这个例子中,被放置到方框410-4中),以使单元420把它移动到方框431,并且通过这些方框直到它到达方框435为止。相关的指令(取决于长等待时间的指令的结果)将说明性地通过在经由线程合并单元420的通常序列中被调用而被放回到队列440中(它们是直接进入单元420中还是经由方框410-n进入是一个设计选择)。
长指令的结果不需要进入ALU,所以它们将沿着线457转到ALU的输出级,然后转到处理过程中的下一步(或者,等效地,将该结果传到接收ALU的输出的下一位置上)。为了下列权利要求起见,两种备选方案都将被称为传送长指令操作的输出到队列的输出。
图5显示了在如图4所示的第一指令之后的相同成分(element)。方框435现在被标记为Aempty@,它表示刷新指令已操作以删除线程T3中的该成分。同样地,方框431和433也被标记为empty,是由于那些方框还包含线程T3中的一个成分(其现在被存储在队列440的外部、例如方框410-4中)。还包含来自线程T3的一条指令的方框437没有被标记为empty,这是因为那条指令与长等待时间的指令无关,并且因此不需要被刷新。
在这个图中,方框410是在线程中的指令源的一般表示,并且可以以多种方式实现,例如通过在CPU中、包含线程中的下一组指令的一组寄存器、通过在高速缓冲存储器中的一组指令、或者通过在主存储器中的程序指令来实现。当我们说在方框410中从流水线中刷新出去的指令被保存时,它们可以已经被放置在寄存器中、移到高速缓存、或者简单地被删去,并且当引起刷新的等待时间已经被解决而且该特定线程被再次处理时,等待从主存储器中被调用。在说明的硬件实施例中,刷新操作是指寄存器435被暂时清空(直到依据本发明被填充为止)。当加载指令将被放回到流水线中(或者在开始处,或者在它被刷新时所在的位置处),作为在方框435中的加法指令的一部分或者与其有关的加载指令现在在队列450中,并且将要接收正被加载的内容的加法指令现在在缓存器410-4中,以等待等待时间的解决。在具有以上讨论的类型的软件实施例中,指令位于存储器(例如L1高速缓存)中,并且在指令之间的连接不是在流水线中的一连串寄存器,而是在每个指令中的、指向线程中的下一指令的位置的字段,可比的结果是:过去指向在图4方框435中的指令的存储器位置的、线程T3中的前一指令的指针(在图4方框437中的T3(instr0))现在指向在图4方框434中的指令T0(instr0)的存储器位置。
图6显示了在间距(gap)已经被关闭并且方框435已经被填充了方框434的先前内容之后、一个指令周期以后的相同成分。方框434现在被标记为empty,这是因为在用作例子的特定系统中,每个指令周期只有一个寄存器能够被移位。方框434的先前内容现在在方框435中,并且方框433的内容还没有被移到方框434。这时目前为空的方框在后续周期期间将通过按照次序传送下一指令到一个空方框中、留下最新为空的方框、由按次序下一方框的内容代替最新为空的方框等而被填充,直到所有方框都被填满了来自不等待长等待时间指令的其它线程的指令为止。在基于硬件的系统中,寄存器是昂贵的,并且最好是花费时间把指令从它的寄存器中移出然后返回到另一个寄存器中。而在队列位于存储器中的、基于软件的系统中,不必移动指令。定位在一线程序列中下一指令的指针、及表示流水线440(在图4-6中)中的操作顺序的其它指针(被称为流水线指针)将被改变,以便绕过被刷新了的指令直到满足等待时间为止。例如,指示指令T0(instr0)的流水线指针将被转变为指示在图5的方框434中的指令,其中指令T0(instr0)是要进行由方框436表示的操作的下一指令。
在软件实施例中,当等待时间被解决、并且被延迟的线程能够被处理时,线程合并单元420或者另一个单元将通过队列步进,并且重新激活已经被绕过的指针。在那种情况下,通过延迟将要经历长等待时间指令被刷新出去的操作的指令,以及把长等待时间指令放置回当它被刷新时所在的位置处(在图4中的方框435)、例如能够在下一指令周期中对其操作的槽(slot)中,简单地向长等待时间指令(已经经历了在流水线中的早先操作)赋予高优先级。
无论如何,长等待时间的指令是否在方框431(或者在软件实施例中在第一步)中开始、或者它是否返回到当它被刷新时所在的位置处将取决于系统设计员的设计选择,例如是否已经规定在等待时间期间存储任何中间或临时的数据或者结果。作为一个例子,假定:(a)所涉及的指令比较两个数据项A和B,并且根据比较的结果,在程序中分支转移到两个或更多路径中的一个;以及(b)在进行比较之前检测加载未中。如果系统设计员没有对存储A和B做出规定,则开始那个指令并且重新计算A和B要比暂时把它们存储在高速缓存中并且取回它们以用于已经被放回到当它被刷新时所在的位置处指令更容易。
作为一个加载未中的长等待时间指令(LLI)、或者需要等待的其它指令的处理顺序可以在表I中进行说明。
表I
  在一个队列的第n个线程中检测到LLI(加载未中)
  把LLI传送到加载未中队列中
  检测与该LLI相关的指令
  刷新相关的(更新的)指令
  抑制来自第n个线程的指令加载
  当数据到达时,将相关的指令放置在队列中(在开始处或者在从其处刷新它们的位置处)
  从第n个线程中重新开始利用指令
在长指令、诸如除法的情况下,开始在表II中的顺序。
表II
  在一个队列的第n个线程中检测到LLI
  把LLI传送到存取适当慢指令硬件的特定队列
  检测与该LLI相关的指令
  使用附着于特定队列的慢指令硬件执行长指令
  把LLI的结果传递到队列的输出(或者在队列之后的下一级)
  当数据到达时,将相关的指令放置在队列中(在开始处或者在从其处刷新它们的位置处)
  从第n个线程中重新开始利用指令
已经就用于ALU的队列讨论了本发明,但是在对来自不同线程的指令进行操作的系统中的任何稀有资源可能经历来自高速缓存未中的延迟或者其它延迟,并且能够使用本发明。因此,能够在一个系统中的许多位置中应用本发明。在某些应用中,实现能够是基于硬件的,并且在相同的系统中,其它位置能够是基于软件的。
虽然已经就单个最佳实施例对本发明进行了描述,但是本领域技术人员将会认识到:能够在下列权利要求的精神和范围之内的各个方案中实践本发明。

Claims (17)

1.一种在处理器系统中执行在至少两个线程中排序的指令的方法,该处理器系统包含至少一个操作单元,该操作单元中具有一个等待使用所述操作单元的指令队列,其中:
至少一个检测装置检测在所述至少一个操作单元的队列中的长等待时间指令;
当所述检测装置检测到所述队列中的、某一个线程的长等待时间指令时,刷新装置刷新所述某一个线程的指令;以及
所述至少两个线程中的其余线程中的指令不从所述队列中刷新出去。
2.依据权利要求1所述的方法,其中所述刷新装置刷新所述长等待时间指令、以及在所述某一个线程中与所述长等待时间指令相关的指令,在所述队列中留下所述某一个线程中、不与所述长等待时间指令相关的指令。
3.依据权利要求1所述的方法,其中所述检测装置把具有高速缓存未中的指令检测为长等待时间指令。
4.依据权利要求3所述的方法,其中所述刷新装置在一个等待时间队列中存储从所述队列中刷新出去的所述长等待时间指令。
5.依据权利要求2所述的方法,其中所述检测装置把具有高速缓存未中的指令检测为长等待时间指令。
6.依据权利要求5所述的方法,其中所述刷新装置在等待时间队列中存储从所述队列中刷新出去的所述长等待时间指令。
7.依据权利要求1所述的方法,其中所述队列包含队列数目的、用于指令的槽;
由来自所述队列的指令刷新而产生的空槽被来自其它线程的指令填充;
来自其它线程的指令被增加到所述队列中以维持所述队列数目的槽被填充。
8.依据权利要求1所述的方法,其中所述检测装置把长指令检测为长等待时间指令,并且把所述长指令传送到可操作地连接到慢指令操作硬件的长指令队列。
9.依据权利要求8所述的方法,其中所述刷新装置刷新所述长等待时间指令、以及所述第n个线程中的与所述长等待时间指令相关的指令,在所述队列中留下所述第n个线程中、不与所述长等待时间指令相关的指令。
10.依据权利要求8所述的方法,其中所述检测装置把除法指令检测为长指令。
11.依据权利要求8所述的方法,其中所述长指令由连接到所述长指令队列的慢指令操作装置进行操作;以及
所述长指令的结果被传送到所述队列的输出。
12.一个计算机处理器系统,包含一组操作单元、和用于在至少两个线程中被排序并且等待使用所述操作单元的指令的队列,该系统包含:
至少一个检测装置,用于检测在至少一个操作单元的队列中的长等待时间指令;
刷新装置,用于当所述检测装置在所述队列中的某一个线程中检测到长等待时间指令时,刷新来自所述某一个线程的指令;以及
用于继续操作在所述至少两个线程中的其余线程中的没有从所述队列中刷新出去的指令的装置。
13.依据权利要求12所述的系统,其中所述刷新装置刷新所述长等待时间的指令、以及在所述某一个线程中与所述长等待时间指令相关的指令,在所述队列中留下所述某一个线程中、不与所述长等待时间指令相关的指令。
14.依据权利要求12所述的系统,其中所述检测装置把具有高速缓存未中的指令检测为长等待时间指令。
15.依据权利要求12所述的系统,其中所述队列包含队列数目的、用于指令的槽;
由来自所述队列的指令刷新而产生的空槽被来自其它线程的指令填充;
来自其它线程的指令被增加到所述队列中以维持所述队列数目的槽被填充。
16.依据权利要求12所述的系统,其中所述检测装置把长指令检测为长等待时间指令,并且把所述长指令传送到可操作地连接到慢指令操作硬件的长指令队列。
17.依据权利要求16所述的系统,其中所述长指令由连接到所述长指令队列的慢指令操作装置进行操作;以及
所述长指令的结果被传送到所述队列的输出。
CNB2004100348092A 2003-05-08 2004-04-14 用于执行在多个线程中排序的指令的方法和系统 Expired - Fee Related CN1310139C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/249,793 US20040226011A1 (en) 2003-05-08 2003-05-08 Multi-threaded microprocessor with queue flushing
US10/249,793 2003-05-08

Publications (2)

Publication Number Publication Date
CN1550978A CN1550978A (zh) 2004-12-01
CN1310139C true CN1310139C (zh) 2007-04-11

Family

ID=33415557

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100348092A Expired - Fee Related CN1310139C (zh) 2003-05-08 2004-04-14 用于执行在多个线程中排序的指令的方法和系统

Country Status (2)

Country Link
US (1) US20040226011A1 (zh)
CN (1) CN1310139C (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7558939B2 (en) * 2005-03-08 2009-07-07 Mips Technologies, Inc. Three-tiered translation lookaside buffer hierarchy in a multithreading microprocessor
US7571304B2 (en) * 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US7634641B2 (en) * 2005-03-18 2009-12-15 Sun Microsystems, Inc. Method and apparatus for using multiple threads to spectulatively execute instructions
US7313673B2 (en) * 2005-06-16 2007-12-25 International Business Machines Corporation Fine grained multi-thread dispatch block mechanism
US7975272B2 (en) * 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
US7730288B2 (en) * 2007-06-27 2010-06-01 International Business Machines Corporation Method and apparatus for multiple load instruction execution
US8099582B2 (en) 2009-03-24 2012-01-17 International Business Machines Corporation Tracking deallocated load instructions using a dependence matrix
US9830157B2 (en) * 2010-08-18 2017-11-28 Wisconsin Alumni Research Foundation System and method for selectively delaying execution of an operation based on a search for uncompleted predicate operations in processor-associated queues
US9665375B2 (en) * 2012-04-26 2017-05-30 Oracle International Corporation Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss
US8982124B2 (en) 2012-09-29 2015-03-17 Intel Corporation Load balancing and merging of tessellation thread workloads
US9123167B2 (en) 2012-09-29 2015-09-01 Intel Corporation Shader serialization and instance unrolling
US9367472B2 (en) 2013-06-10 2016-06-14 Oracle International Corporation Observation of data in persistent memory
WO2016201699A1 (zh) * 2015-06-19 2016-12-22 华为技术有限公司 指令处理方法及设备
US11294713B2 (en) 2020-03-20 2022-04-05 Nvidia Corporation Asynchronous data movement pipeline
JP2023013799A (ja) * 2021-07-16 2023-01-26 富士通株式会社 演算処理装置及び演算処理方法
US11734919B1 (en) * 2022-04-19 2023-08-22 Sas Institute, Inc. Flexible computer architecture for performing digital image analysis
CN115408153B (zh) * 2022-08-26 2023-06-30 海光信息技术股份有限公司 多线程处理器的指令分发方法、装置和存储介质
CN116466996B (zh) * 2023-04-24 2024-01-09 惠州市乐亿通科技股份有限公司 基于多线程的通信方法及上位机

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6381676B2 (en) * 1998-05-27 2002-04-30 Hewlett-Packard Company Cache management for a multi-threaded processor
US6427195B1 (en) * 2000-06-13 2002-07-30 Hewlett-Packard Company Thread local cache memory allocator in a multitasking operating system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
BR9506997A (pt) * 1994-03-01 1997-11-18 Intel Corp Arquitetura de barramento altamente canalizada
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US5907702A (en) * 1997-03-28 1999-05-25 International Business Machines Corporation Method and apparatus for decreasing thread switch latency in a multithread processor
US6209076B1 (en) * 1997-11-18 2001-03-27 Intrinsity, Inc. Method and apparatus for two-stage address generation
US6308261B1 (en) * 1998-01-30 2001-10-23 Hewlett-Packard Company Computer system having an instruction for probing memory latency
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6381676B2 (en) * 1998-05-27 2002-04-30 Hewlett-Packard Company Cache management for a multi-threaded processor
US6427195B1 (en) * 2000-06-13 2002-07-30 Hewlett-Packard Company Thread local cache memory allocator in a multitasking operating system

Also Published As

Publication number Publication date
US20040226011A1 (en) 2004-11-11
CN1550978A (zh) 2004-12-01

Similar Documents

Publication Publication Date Title
CN1310139C (zh) 用于执行在多个线程中排序的指令的方法和系统
KR100880686B1 (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
CN1296827C (zh) 一种使用数据地址增加组相关存储器的访问速度的方法
KR101966712B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
Sethia et al. Mascar: Speeding up GPU warps by reducing memory pitstops
KR101620676B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US6907520B2 (en) Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
EP2783281B1 (en) A microprocessor accelerated code optimizer
US7590830B2 (en) Method and structure for concurrent branch prediction in a processor
CN1310155C (zh) 用于先行执行期间的存储器通信的装置
US6233599B1 (en) Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
KR101355496B1 (ko) 복수의 병렬 클러스터들을 포함하는 계층 프로세서의스케쥴링 메카니즘
US20080126771A1 (en) Branch Target Extension for an Instruction Cache
CN1760826A (zh) 用于处理指令的方法、处理器以及系统
US20130086364A1 (en) Managing a Register Cache Based on an Architected Computer Instruction Set Having Operand Last-User Information
CN1429361A (zh) 用于在一个多线程处理器内在多个线程之间划分资源的方法和装置
CN1945525A (zh) 从队列处理指令刷新的生存期计数器设计的系统和方法
US9146745B2 (en) Method and apparatus for partitioned pipelined execution of multiple execution threads
WO1996041250A2 (en) System and method for processing multiple requests and out of order returns
US20110154002A1 (en) Methods And Apparatuses For Efficient Load Processing Using Buffers
US9665375B2 (en) Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss
JP2003514274A (ja) 接近して結合される多重プロセッサのための高速マルチスレッディング
US20110029978A1 (en) Dynamic mitigation of thread hogs on a threaded processor
KR101940523B1 (ko) 워프 스케줄링을 위한 장치 및 방법
WO2019018665A1 (en) PRIVATE CACHE STORAGE FOR ACCESS TO LOCAL STORAGE DATA

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: 20070411