CN1842770A - 一种在处理器中挂起和释放执行过程中计算线程的整体机制 - Google Patents
一种在处理器中挂起和释放执行过程中计算线程的整体机制 Download PDFInfo
- Publication number
- CN1842770A CN1842770A CN 200480024800 CN200480024800A CN1842770A CN 1842770 A CN1842770 A CN 1842770A CN 200480024800 CN200480024800 CN 200480024800 CN 200480024800 A CN200480024800 A CN 200480024800A CN 1842770 A CN1842770 A CN 1842770A
- Authority
- CN
- China
- Prior art keywords
- thread
- parameter
- instruction
- relevant
- parameters
- 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.)
- Pending
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种在能支持和执行多个程序线程的处理器中的处理机制,包括用于调度一个程序线程的参数和该程序线程中的一个指令,该指令能够存取该参数。当该参数等于第一数值时,且当一个程序线程发出该指令时,该指令根据编码在该参数中的一个或多个条件而重新调度该程序线程。
Description
本发明要求以下申请的优先权:
(1)美国暂时申请案No.60/499,180,申请日2003年8月28日,其标题为“多线程应用的特别扩充(Multithreading Application SpecificExtension)”(代理人标号P3865,发明人凯文基赛尔(Kevin D.Kissell),快邮编号EV 315085819 US),
(2)美国暂时申请案No.60/502,358,申请日2003年9月12日,其标题为“在一处理器架构上多线程应用的特别扩充(MultithreadingApplication Specific Extension to a Processor Architecture)”(代理人标号0188.02US,发明人凯文基赛尔(Kevin D.Kissell),快邮编号ER456368993US),和
(3)美国暂时申请案No.60/502,359,申请日2003年9月12日,其标题为“在一处理器架构上多线程应用的特别扩充(MultithreadingApplication Specific Extension to a Processor Architecture)”(代理人标号0188.03US,发明人凯文基赛尔(Kevin D.Kissell),快邮编号ER456369013US),其中提到的各申请案的全部内容皆为本发明所参照的参考资料。
本发明也与申请中的美国非暂时申请案No.(尚未收到)相关,申请日2003年10月10日,其标题为“确定多线程处理器上执行的程序的服务质量的机制(Mechanisms for Assuring Quality of Servicefor Programs Executing on a Multithreaded Processor)”(代理人标号3865.01,发明人凯文基赛尔(Kevin D.Kissell),快邮编号EL988990749 US),这里提到的申请案的全部内容皆为本发明所参照的参考资料。
技术领域
本发明属于数字处理器的领域(例如,微处理器、数字信号处理器、微控制器等等),特别是有关于,涉及在单个处理器中管理多个线程的执行的装置与方法。
技术背景
在数字计算的领域,计算能力的发展历史显示了在各方面都有持续的进步。持续的进步一直在发生,例如处理器的装置密度与线路互连的技术,可用于改善运算速度、容错能力、使用更高速的时脉信号或者更多其它改进。另一个可改善整体计算能力的研究领域为并行处理,其不仅包括使用多个分开的处理器执行并行操作。
并行处理的概念包括将任务分散至多个分开的处理器,但是也包括多个程序同时在一个处理器上执行的方案。此方案一般被称为多线程。
接下来将介绍多线程的概念:随着处理器操作频率逐渐加快,要隐藏在计算机***的操作中固有的延迟(latency)也变的越来越困难。一个高级处理器在一个特定应用中其高速数据缓存中丢失了百分之一的指令,如果它对于片外RAM有50个周期的延迟的话,则可能导致大概百分之五十的时间停顿。如果当该处理器因为丢失的高速缓存指令而停顿时,属于另一个不同应用程序的指令可以被执行的话,该处理器的性能可以因此而改善,并且一部份或者全部的跟内存有关的延迟也可有效的被消除。举例来说,图1A显示了因为高速缓存丢失而停顿的单个指令流101。支持该指令运作的机器仅可在一个时间内执行单个线程或任务。相反的,图1B显示了在指令流101停顿时指令流102可被执行。在这种情况当中,该支持机器可以同时支持两个线程,也因此更有效的使用该机器所拥有的资源。
更一般的说,各个单独的计算机指令都具有特定的语法,使得不同种类的指令需要不同的资源去执行期望的运算。整数负载没有充分使用到整个浮点运算单元的逻辑或寄存器,任何除了寄存器移位之外的运算皆需要使用加载/储存单元的资源。没有一个单一指令使用到全部处理器的资源,而且当为了追求更高性能的设计而因此加入了更多的管线级与并行功能单元后,会进而降低平均被所有指令使用而全部消耗的处理器资源的比例。
多线程的发展一大部分源自于,如果一个顺序程序基本上不能有效率地完全使用处理器的全部资源,该处理器就应该能够将这些资源中的一部分在属于程序执行的多个线程当中进行分配。这种方式并不一定导致任何特定程序可被更快速的执行,事实上,一些多线程方案实质上降低了单一线程程序执行的性能,然而却可使一个并行指令流的集合在更短的时间内和/或使用更少的处理器数目来运行。这个概念可用图2A与图2B来说明,其中各自显示了单一线程处理器210与双线程处理器250。处理器210支持单一线程212,表示为使用加载/储存单元214。如果当存取高速缓存216时发生一个丢失,那么处理器210便会停顿(根据图1A所描述)直到重新获得该丢失数据。在这个过程当中,乘法器/除法器单元218始终处于闲置状态而且没有被有效使用。然而,处理器250支持两个线程;即212与262。因此,若是线程212发生停顿,处理器250仍然可以同时执行线程262与乘法器/除法器单元218,因而更有效地利用了所有的资源(根据图1B所描述)。
在单一处理器上具有多线程可获得更佳的多任务处理能力的好处。然而,捆绑多个程序线程在关键事件上可以降低事件反应时间,而且线程级的并行处理在原理上可在单一应用程序中被充分利用。
已经提出了各种多线程处理方式。其中之一为指令交错多线程(interleaved multithreading),也就是分时复用(TDM)方案,对于每个发出的指令从一个线程切换至另一个线程。该方案在调度上有一定程度的“公平性”,但是为了静态分配多个发起槽(issue slot)至多个线程,通常会限制单一程序线程的性能。动态交错的方式可以改良这个问题,但是实现这个方式比较复杂。
另一个多线程的方案是块交错多线程(blocked multithreading),其从一个单一程序线程持续地发出连续多个指令,直到某个特定的阻塞事件发生,例如高速缓存丢失或者重新设定,举例来说,导致该线程被挂起而另一个线程被激活。因为块交错多线程变换线程的频率较小,所以其实现方式可以是比较简单的。另一方面,阻塞的动作在调度线程的过程中是比较不具有“公平性”。单个线程可以独占整个处理器很长一段时间,如果它非常地幸运能在高速缓存中找到它需要的所有数据。一种混合调度方案结合了块交错多线程与指令交错多线程的特定,也常被使用与研究。
仍然有另一种多线程的形式为同时多线程(simultaneousmultithreading),是一种在超标量处理器上实现的方案。在同步多线程中,来自不同线程的多个指令可以被同时发出。例如,一个超标量精简指令集计算机(RISC),每周期发出总共两个指令,以及一个同步多线程的超标量管线,每周期从两个线程中任一个发出总计两个指令。那些单一程序线程所依附或停顿的周期会导致该处理器不被充分利用,因此在同步多线程中这些周期可被另一线程的发出指令所填补。
同步多线程也因此成为一个非常有用的技术,用以解决并恢复在超标量管线中所浪费的效率。但也有争议地被认为是最复杂的多线程***所使用的方法,因为在一周期内激活多于一个线程,会使得内存存取保护装置的实现更加地复杂等等。另外一个值得注意的一点,对于一定的工作量,中央处理器(CPU)操作的管线化越完善,越会降低其多线程实现的潜在获得的效率。
多线程与多重处理实质上是非常相关的。事实上,一般可认为其中的差异只有一点不同:也就是多重处理器只共享内存和/或线路连线,而多线程处理器除了共享内存和/或线路连线之外,还共享指令提取与发出逻辑,和其它可能的处理器资源。在单个多线程处理器当中,各个线程互相竞争发起槽与其它资源,从而限制了并行处理能力。某些多线程程序与架构模型假设了新线程会被分配到不同的处理器,使得该程序可被有效的并行处理。
在本申请案提出申请时,应该已有许多的多线程解决方案,用以解决当前领域许多不同的问题。其中之一即为实时线程的改善方案。一般来说,实时多媒体算法通常被执行于专用处理器/数字信号处理器(DSP),用以保证服务质量(QoS)与响应时间,且并不包括将线程混合并共享于多线程方案当中,因为实时软件并无法容易地获得保证该软件可被适时地执行。
在这方面,非常清楚的必须要有一个方案与机制,允许一个或多个实时线程或虚拟处理器能够在特定的指令间的间隔保证获得在多线程处理器中特定比例的指令发起槽,因而计算带宽与响应时间能被清楚的定义。如果这样的机制能被使用,则具有严格QoS要求的线程即可被包含在此多线程的混用中。另外,这种***中的实时线程(如DSP相关的线程),可以或多或少地被避免于遇到中断而因搬动重要资源而变化执行的时间。这种技术可以在特殊的情况下使用具有DSP加强功能的RISC处理器与内核,以取代一般在消费性多媒体应用上使用分离的RISC与DSP内核。
在本申请案提出申请时,当前技术中多线程方案的另一个问题为在处理器中产出与消灭激活的线程。为了支持相对细粒度多线程(fine-grained multithreading),期望以可能的最小***开销产生和消灭程序执行过程的并行线程,并且至少在一般的情况下不会干扰到必须的操作***功能。在这个方面,清楚需要的是一些指令如FORK(线程产生)与JOIN(线程终止)。另一个存在于多线程处理器中的问题为,调度原则使得一个线程持续运行直到被另一些资源阻塞,然而一个没有被任何资源阻塞的线程仍然需要使得该处理器切换至其它的线程。所以在这个方面可以清楚的知道,还有需要PAUSE或YIELD指令。
发明内容
本发明的一个基本目的是提供一种适用于细粒度多线程的健壮***,其中可以利用最小的***开销来产生和消灭线程。根据这个目的,在根据本发明的一个较佳实施例中,在一个能够支持并执行多程序线程的处理器中,提供了一种处理机制,其包括:一个参数,用于调度一个程序线程;和一个设置于该程序线程中并且能存取该参数的指令。当该参数等于第一数值时,该指令即根据编码在该参数中的一个或多个条件来重新调度该程序线程。在一个有关该机制的较佳实施例中,该参数被保存在一个数据储存装置中。并且在另一个较佳实施例中,当该参数等于第二数值时,其中该第二数值不等于该第一数值,该指令即释放该程序线程。在某些实施例中,该第二数值为零。
在某些实施例中,当该参数等于该第二数值时,其中该第二数值不等于该第一数值,该指令即无条件的重新调度该程序线程。另外在一些实施例中,该第二数值为一奇数值。在一些其它的较佳实施例中,该第二数值为负1。
在一些较佳实施例中,该一个或多个条件中的一个条件与将执行机会让与其他线程直到一个条件被满足的程序线程相关。另外,在一些实施例中,该一个条件被编码于该参数中的一个位向量或位字段中。还有,在一些实施例中,在该程序线程被重新调度的情形下,该程序线程的执行在该线程当中该指令之后继续。还有,在其他一些较佳实施例中,当该参数等于第三数值时,其中该第三数值不等于该第一数值与第二数值,该指令无条件地重新调度该程序线程。
某一些有关于该机制的较佳实施例中,该一个或多个条件中的一个条件为一个硬件中断。还有,在一些实施例中,该一个或多个条件中的一个条件为一个软件中断。还有,在许多实施例中,当该程序线程被重新调度的情形下,该程序线程的执行在该线程中该指令之后的位置继续。
根据本发明的另一方面,在一个能够支持并执行多程序线程的处理器中,提供了一种由一个线程重新调度执行或释放该线程本身的方法,其包括:(a)发出一个指令,其能存取一个数据储存装置中的一部分记录,该部分记录编码了与决定该线程是否会被重新调度的一个或多个条件相关的一个或多个参数;和(b)遵循该条件,根据在该部分记录中的一个或多个参数重新调度或释放该线程。在一个较佳实施例中,该记录被置于一个通用寄存器(GPR)中。另外,在一个较佳实施例中,这些参数中的一个参数与该被释放的而不是被重新调度的线程相关。在一些较佳实施例中,与该被释放的线程相关的该一个参数的值为零。
在一些实施该方法的实施例当中,这些参数中的一个参数与被重新排队等待调度的线程相关。在一些实施例当中,该参数为任意的奇数值。在一些实施例当中,该参数为负1的二进制补码值。在一些实施例中,这些参数中的一个参数与将执行机会让与其他线程直到一个特定条件被满足的实施例相关。另外,在另一些实施例中,该一个条件被编码于该记录中的一个位向量或是一个或多个位字段中。
在许多实施该方法的实施例当中,在该线程发出该指令并且被重新调度的情形下,当该一个或多个条件被满足时,该线程的执行在线程指令流中该线程发出的该指令之后的位置继续。在一些实施例当中,这些参数中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。在其它的一些实施例当中,这些参数中的一个参数与该被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。在其它的一些实施例当中,这些参数中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定的条件被满足的线程相关。另外,在其它的一些实施例当中,这些参数中的一个参数与该被释放而不是被重新调度的线程相关,而这些参数中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定的条件被满足的线程相关。
根据本发明的另一个方面,提供了一种能支持与执行多个软件实体的数字处理器,包括一个数据储存装置中的一部分记录,该部分记录编码了与一个或多个条件相关的一个或多个参数,该一个或多个条件决定了当一个线程将执行机会让与其它线程时该线程是否会被重新调度。
在该处理器的一些实施例当中,该部分记录被置于一个通用寄存器(GPR)中。在一些其它较佳实施例,这些参数中的一个参数与被释放而不是被重新调度的线程相关。在另一些较佳实施例中,该与被释放的线程相关的参数的值为零。
在该处理器的其他一些实施例当中,这些参数中的一个参数与被重新排队等待调度的线程相关。在一些实施例当中,该一个参数为任意的奇数值。在另一些实施例当中,该参数为负1的二进制补码值。在另一些实施例中,这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。另外,在一些情况下,该一个参数可以被编码于该记录中的一个位向量或是一个或多个位字段中。
在该处理器的其他一些实施例当中,这些参数中的一个参数与该被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。在其它的一些实施例当中,这些参数中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。在其它的一些实施例当中,该参数当中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
在其它的一些实施例当中,这些参数中的一个参数与被释放而不是被重新调度的线程相关,而该参数当中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
根据本发明的另一方面,提供一种能支持与执行多个程序线程的处理***,包括:一个数字处理器;一个数据储存装置中的一部分记录,该部分记录编码了与决定一个线程是否会被重新调度的一个或多个条件相关的一个或多个参数;和一个指令集,其包含一个指令用以重新调度和释放该线程。当该线程发出该指令时,该指令存取该记录中的该一个或多个参数,并且该***遵循该一个或多个条件,根据该部分记录中的该一个或多个参数,重新调度和释放发出该指令的线程。
在该处理***的一些较佳实施例当中,该记录被置于一个通用寄存器(GPR)中。在一些其它的较佳实施例,这些参数中的一个参数与被释放而不是被重新调度的线程相关。在一些实施例中,与被释放的线程相关的该一个参数的值为零。在一些其它的实施例当中,这些参数中的一个参数与被重新排队等待调度的线程相关。在一些实施例当中,该用来重新调度的参数为任意的奇数值。在其它的一些实施例当中,该用来重新调度的参数为负1的二进制补码值。
在该***的一些实施例当中,这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。另外,在一些实施例中,该一个参数被编码于该记录中的一个位向量或是一个或多个位字段中。在该***的许多实施例当中,在一个线程发出该指令并且被有条件地重新调度的情形下,当该一个或多个条件被满足时,该线程的执行在该线程指令流中该指令之后的位置继续。
在该处理***的一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。在其它的一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
在其它的一些实施例当中,该参数当中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。另外,在其它的一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,而该参数当中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
另外,根据本发明的又一个方面,提供了一种数字储存介质,其上写入了来自一个指令集的指令,用于在一个数字处理器上执行多个软件线程中的各个软件线程,该指令集包含了一个指令,该指令使发出该指令的线程放弃执行,并且存取一个数据储存装置中的一部份记录中的一个参数,其中,关于释放或重新调度的条件与该参数相关,并且遵循该条件,根据该部份记录中的该参数执行释放或重新调度。
在该介质的一些实施例当中,该记录被置于一个通用寄存器(GPR)中。在该介质的一些其它实施例中,这些参数中的一个参数与被释放而不是被重新调度的线程相关。在一些实施例中,该与被释放的线程相关的参数的值为零。在该介质的一些其它实施例当中,这些参数中的一个参数与被重新排队等待调度的线程相关。在一些实施例当中,该一个参数为任意的奇数值。在另一些实施例当中,该一个参数为负1的二进制补码值。
在该介质的另一些实施例当中,这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。在另一些实施例中,该参数被编码于该记录中的一个位向量或是一个或多个位字段中。在另外一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。在其它的一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
在该机制的一些实施例当中,该参数当中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。另外,在该数字储存介质的一些实施例当中,该参数当中的一个参数与被释放而不是被重新调度的线程相关,而该参数当中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
在该机制的一些实施例当中,该指令为一个YIELD指令。还有,在该机制的一些实施例当中,该部分记录包括一个位向量。另外,在该机制的其他一些实施例当中,该部分记录包括一个或多个多位字段。
在该方法的一些实施例当中,该指令为一个YIELD指令。还有,在该处理***的一些实施例当中,该指令为一个YIELD指令。
在该数字储存介质的实施例当中,该指令为一个YIELD指令。
根据本发明的另一个方面,提供了一种包含在传输介质中的计算机数据信号,包括计算机可读的程序代码,该程序代码描述了一个能够支持并执行多程序线程的处理器,并且包括用于释放与重新调度一个线程的机制,该程序编码包括:第一程序代码段,用于描述一个数据储存装置中的一部份记录,该部分记录编码了与决定一个线程是否会被重新调度的一个或多个条件相关的一个或多个参数;和第二程序代码段,用于描述能够存取该记录中的该一个或多个参数的一条指令,其中,当该线程发出该指令时,该指令存取该记录中的该一个或多个值,并且遵循该一个或多个条件,根据该一个或多个值重新调度或释放该线程。
根据本发明的另一方面,在一个能够支持多程序线程的处理器当中,提供了一种方法,包括:执行一个指令,该指令存取与线程调度相关的一个参数,其中该指令包含在一个程序线程中;当该参数等于第一数值时,则根据该指令释放该程序线程。在该方法的一些实施例当中,该第一数值为零。在该方法的另一些实施例当中,该方法还包括一个步骤:当该参数等于第二数值时,根据该指令挂起该程序线程的执行,其中该第二数值不等于该第一数值。在该方法的一些实施例当中,该第二数值表示,执行该程序线程所需要具备的条件并不满足。
在该方法的一些其它实施例当中,该条件以一个位向量或值字段的形式被编码在该参数之中。在一些其它的实施例当中,当该参数等于第三数值时,根据该指令而重新调度该程序线程,其中该第三数值不等于该第一数值与第二数值。在其他一些实施例当中,该第三数值为负1。在另外一些实施例当中,该第三数值为奇数值。
根据本发明的另一个方面,在一个能够支持多程序线程的处理器当中,提供了一个方法,包括:执行一条指令,该指令存取与线程调度相关的一个参数,其中该指令包含于一个程序线程中;当该参数等于第一数值时,则根据该指令挂起该程序线程的执行。在该方法的一些其它实施例当中,该方法还包含一个步骤:当该参数等于第二数值时,根据该指令而重新调度该程序线程,其中该第二数值不等于该第一数值。
根据本发明的另一方面,在一个能够支持多程序线程的处理器当中,提供了一个方法,包括:执行一个指令,该指令存取与线程调度相关的一个参数,其中该指令包含于一个程序线程中;当该参数等于第一数值时,则根据该指令重新调度该程序线程。在该方法的一些实施例当中,该方法还包括一个步骤:当该参数等于第二数值时,根据该指令释放该程序线程,其中该第二数值不等于该第一数值。
本发明的实施例将在下文中更加详细的描述,在这些实施例中将第一次提供一种用于细粒度多线程的真正强壮的***,使得产生与消灭线程所用的***开销最小化。
附图说明
图1A是一个示意图,显示单一指令流由于高速缓存丢失而停顿的情况;
图1B是一个示意图,显示当如图1A的指令流被停顿时一个指令流仍然能被执行;
图2A是一个示意图,显示单一线程处理器;
图2B是一个示意图,显示双线程处理器250;
图3是一个示意图,描述了根据本发明的一个实施例中,一个处理器支持第一与第二VPE;
图4是一个示意图,描述了根据本发明的一个实施例中,一个处理器能够支持单一VPE,该VPE能进一步支持三个线程;
图5显示了根据本发明的一个实施例中,一个FORK指令的格式;
图6显示了根据本发明的一个实施例中,一个YIELD指令的格式;
图7是一个表格,显示了一个用于GPR rs的十六位的限定掩码;
图8显示了根据本发明的一个实施例中,一个MFTR指令的格式;
图9是一个表格,说明了根据本发明的一个实施例中,一个MFTR指令的字段;
图10显示了根据本发明的一个实施例中,一个MTTR指令的格式;
图11是一个表格,说明了根据本发明的一个实施例中,一个MTTR指令u和sel位;
图12显示了根据本发明的一个实施例中,一个EMT指令的格式;
图13显示了根据本发明的一个实施例中,一个DMT指令的格式;
图14显示了根据本发明的一个实施例中,一个ECONF指令的格式;
图15是根据本发明的一个实施例中,一个***协处理器特权资源的说明表格;
图16是根据本发明的一个实施例中,一个ThreadControl寄存器的架构;
图17是根据本发明的一个实施例中,一个ThreadControl寄存器架构中各字段的说明表格;
图18是根据本发明的一个实施例中,一个ThreadStatus寄存器的架构;
图19是根据本发明的一个实施例中,一个ThreadStatus寄存器架构中各字段的说明表格;
图20是根据本发明的一个实施例中,一个ThreadContext寄存器的架构;
图21是根据本发明的一个实施例中,一个ThreadConfig寄存器的架构;
图22是根据本发明的一个实施例中,一个ThreadConfig寄存器架构中各字段的说明表格;
图23是根据本发明的一个实施例中,一个ThreadSchedule寄存器的架构;
图24是根据本发明的一个实施例中,一个VPESchedule寄存器的架构;
图25是根据本发明的一个实施例中,一个Config4寄存器的架构;
图26是根据本发明的一个实施例中,一个Config4寄存器架构中各字段的说明表格;
图27是一个表格,定义了线程异常所需的Cause寄存器的异常代码值;
图28是一个表格,定义了ITC指示符;
图29是一个表格,定义了Config3寄存器架构中的各字段;
图30是一个表格,描述了每个VPE上下文的VPE禁止位;
图31是一个表格,描述了ITC储存的运作方式;
图32是一个示意图,描述了根据本发明的一个实施例中的YIELD功能的操作;
图33是一个示意图,描述了根据本发明的一个实施例的一个计算机操作***;
图34是一个示意图,描述了根据本发明的一个实施例中,在一个处理器中使用VPE和在一个VPE中使用线程来实施调度。
具体实施方式
根据本发明的一个较佳实施例,一处理器架构包括一指令集,而该指令集包含多个特征、多个功能与多个指令,而能够在一兼容处理器上产生多线程的运算。本发明并不止限于任何特定的处理器架构与指令集,而是可以大致归类为众所皆知而参照的MIPS架构,指令集与处理器技术(总言之,为MIPS技术)。并且加上本发明所详细描述的实施例也可归类为MIPS技术。更多有关MIPS技术的信息(包括以下所参照到的文件)可以从MIPS科技公司(MIPS ttechnology,Inc.)(位于Mountain View,California)和其网站
www.mips.com(该公司网站)获得。
所提到的“处理器”与“数字处理器”其意义包含任何可程序化的装置(举例来说,微处理器、微控制器、数字信号处理器、中央处理单元、处理器内核等等),包含在硬件方面(例如,专用硅芯片、现场可程序门阵列(FPGA)等等),在软件方面(例如,硬件描述语言、C语言、C+语言等等)或任何其组成(或其组合)。
术语“线程”与“程序线程”在本文中代表相同的意义。
概要描述
在本发明的实施例中,“线程上下文”是一处理器状态的集合,用于描述在一处理器上的一指令流执行的状态。所说的状态通常反映在处理器寄存器的内容中。举例来说,在一个与工业规格MIPS32和/或MIPS64指令集架构兼容的处理器(MIPS处理器)中,线程上下文为由通用寄存器(GPRs),高低(Hi/Lo)乘法结果寄存器,有程序计数器(PC)功能和一些相关的特权***控制状态的寄存器组成。***控制状态在MIPS处理器中通常称作第零协处理器(CP0)的部分保留,并且一大部分是被***控制寄存器与翻译后援缓存器(Translation Lookaside Buffer,TLB)所保存(如果使用了TLB)。相反的,“处理器上下文”是一个更大的处理器状态集合,包含至少一个线程上下文。再参照之前提到的MIPS处理器为例,一个处理器上下文包含至少一个线程上下文(如前述),也就是CP0和必须的***状态,用以描述已知的MIPS32与MIPS64专属资源或特权资源架构(PRA)。(简单的说,PRA是一组有关一个指令集架构操作时所依据的环境与能力参数的集合。该PRA提供了操作***所必须的机制用以管理处理器的资源,例如,虚拟内存、高速缓存、异常运算与使用者上下文)。
根据本发明的一个实施例,关于一指令集架构与PRA的一个特殊应用扩充的多线程(multithreading application-specific extensions,Multithreading ASE)允许在一处理器中包含两个不同,但并不互相排斥的多线程性能。首先,一个单一处理器可以有一定数目的处理器上下文,而其中每一个都透过共享某些处理器的资源且支持一个指令集架构而作为独立的处理单元操作。这些独立的处理单元在这里被称为虚拟处理单元(VPE)。对软件而言,具有N个VPE的处理器被看成是有N个路径且对称的多处理器(SMP)。这允许已有的具SMP功能的操作***可以管理VPE集合,也就是透明地共享处理器的执行单元。
图3用一个单一处理器301描述了相关的性能,其支持了一个第一VPE(VPE0),VPE0包含第零寄存器状态302与第零***协处理器状态304。处理器301也支持第二VPE(VPE1),其包含第一寄存器状态306与第一***协处理器状态308。VPE0与VPE1共享处理器301的这些部分,包括取指、译码、管线化执行和高速缓存310。与SMP兼容的操作***320被执行在该处理器301上,并支持VPE0与VPE1。如图所示,软件进程A 322与进程C 326分别被执行于VPE0与VPE1上,如同他们被执行于两个不同的处理器上。进程B 324处于队列状态,而可以在VPE0或VPE1的任一个上执行。
多线程ASE所允许的第二个能力为,每个处理器或VPE皆可以在基本架构中所需的单一线程上下文之外,再含有某些数目的线程上下文。多线程VPEs需要特别的操作***支持,并且在其支持下提供一个简易、细粒度多线程程序模型,其中线程可以被产生与消灭,使得在一般的情况下不会干扰操作***,并且***服务线程可以响应外部条件(例如,事件等等)安排调度,而没有中断的延迟。
图4描述了这第二个能力且使用了处理器401来支持单一VPE,其包含寄存器状态402,404与406(支持三个线程422)以及***协处理器状态408。与图3不同的是,在这个例子中三个线程是在单一应用地址空间中,且在单一VPE上共享CP0资源(以及硬件资源)。另外也描述了一个专门多线程操作***420。在此范例中,多线程VPE正在处理来自一个宽带网络450的数据包,而此数据包的下载分布于整组的先进先出缓冲器(FIFO)452(在多线程VPE的输入/输出内存空间中每个FIFO皆有不同的地址)。控制应用程序产生了足够多的线程,与使用的FIFO数目相同,且将每一线程应用于在读取FIFO的紧凑循环中。
一个线程上下文可以是四种状态之一。其可以是空闲(free),激活(activated),停止(halted)或连线(wired)。一个空闲的线程上下文不具有有效的内容,且不能被调度为可发出指令。一个激活的线程上下文可以根据实施的规则来调度,而从程序计数器提取与发出指令。一个停止的线程上下文可以具有有效的内容,但是不能够提取与发出指令。一个连线的线程上下文可以被指定作为映像寄存器使用,也就是说其被保留成专用于异常处理程序,以避免在该异常处理程序中储存与恢复存储器上下文所产生的开销。一个空闲的线程上下文不可以是激活,停止或连线的。只有激活的线程上下文可以被调度。只有空闲的线程上下文可以被分配而产生新的线程。
为了允许协同线程的细粒度同步,一个供线程内部之间沟通(ITC)的记忆空间在虚拟内存中被产生,并且有空(empty)/满(full)位语法用来允许线程在加载或储存时被阻塞,直到数据被其它线程产生或消耗。
线程产生/消灭与同步特性在一般情况下不会干预操作***,但是他们所操控的资源可通过操作***将之虚拟化。这允许了多线程程序可以利用更多的虚拟线程执行,其数目多于在一个VPE上的线程上下文数目,而使得线程的迁移能平衡多处理器***的负荷。
再仔细的从执行过程的某个点来看,一个线程与一个特定VPE上的一个特定线程上下文捆绑在一起。VPE的线程上下文组合的索引在该点的发生时间提供了一个唯一的标识符。但是上下文的切换与迁移能够使单一相继的线程的执行具有一连串不同的线程索引,例如是在一连串不同的VPE上。
在一个特定的处理器重置调整状态中执行线程上下文、TLB项目和其它资源与同一处理器上多个VPE的动态绑定。每一个VPE输入其重置向量,如同它就是一个独立的处理器。
多线程的执行和异常模型
多线程ASE并没有强加任何特殊的实现方式或调度模型用于并行线程与VPE的执行。调度方式可以是循环式的,任意粒度的时间切割或同时的。然而没有一个实现方式允许一个阻塞的线程独占任何共享的处理器资源,然后使得硬件运行陷入死锁。
在一MIPS处理器中,多个线程执行在一个单一VPE上,并皆共享一样的***协处理器(CP0),一样的TLB和一样的虚拟地址空间。每一个线程有一个独立的内核/监督者/使用者状态,用于内存访问与指令译码。当一个异常发生时,除了执行该异常的线程之外,所有的线程都被停止或挂起,直到状态字符串的EXL与ERL位被清除。或者,在EJTAG调试异常的情形下,退出该调试状态。该状态字符串被置于CP0中的状态寄存器中。有关该EXL与ERL位还有EJTAG调试异常的详细资料可以从下列的两个出版物获得,可以从MIPS科技公司取得该出版物,并且其全部内容在各种情形下可列为本文的参考文件:MIPS32TM Architecture for Programmers Volumn III:TheMIPS32TM Privileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)和MIPS64TM Architecture for Programmers Volumn III:TheMIPS64TM Privileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)。
因为执行一个指令流而引起的同步异常的异常处理程序,例如TLB的丢失与浮点的异常,都由用于执行该指令流的该线程来执行。当一个未被屏蔽的异步异常,例如一个中断,被提升至一个VPE时,它的实现与执行了该异常处理程序的那个线程相关。
甚至当使用影像寄存器组来执行例外处理程序时,每一个异常都与一个线程上下文有关。这个相关的线程上下文是被异常处理程序执行的RDPGPR与WRPGPR指令所要处理的目标。有关RDPGPR与WRPGPR指令(用来访问影像寄存器)的详细描述可以从以下两个出版物中获得,可以从MIPS科技公司取得该出版物,并且其全部内容在各种情形下可列为本文的参考文件:MIPS32TM Architecture forProgrammers Volumn III:The MIPS32TM Instruction Set,Rev.2.00,MIPS科技公司(2003)和MIPS64TM Architecture for ProgrammersVolumn III:The MIPS64TM Instruction Set,Rev.2.00,MIPS科技公司(2003)。
该多线程ASE包含了两个异常状况。第一个是线程未取得的状况,其中一个线程分配要求不能被满足。第二个为线程下溢状况,其中一个线程的终止与释放使得没有线程被分配于一个VPE上。这两种异常状况都被映射至一个新的单一线程异常。当该异常发生时,他们可以根据CP0寄存器的位设置而被区分。
指令
在一个较佳的实施例中,多线程ASE包含七个指令。FORK与YIELD指令控制线程分配,释放和调度,并且可以在被执行和使能的全部执行模式中取得。MFTR与MTTR指令是***协处理器(Cop0)指令,可用于特权***软件来管理线程状态。一个新的EMT指令与一个新的DMT指令是特权的Cop0指令,其用来激活与禁能一个VPE的多线程操作。最后,一个新的ECONF指令是特权的Cop0指令,用于退出一个特殊处理器配置状态并重新初始化该处理器。
FORK-分配与调度一个新的线程
FORK指令可以驱使一个空闲线程上下文被分配与激活。它的格式500如图5所示。FORK指令从由字段502(rs)与504(rt)标识的GPR(通用寄存器)取得两个操作数值。GPR rs的内容是用来对新线程开始提取与执行的地址。GPR rt的内容是一个值,用来传送至新线程的GPR。目的GPR由CP0的ThreadConfig寄存器的ForkTarget字段的值确定,其说明位于图21中,并于稍后会加以描述。新线程的内核/监督者/使用者状态被设定于FORK处理的线程中。如果没有空闲线程上下文给该FORK指令使用,产生关于该FORK指令的一个线程异常。
YIELD-重调度与有条件的释放一个线程
YIELD指令使得当前的线程被重新调度。它的格式600如图6所示,并且图32中的流程图3200描述了根据本发明的一个实施例的***操作,来说明YIELD指令的功能。
YIELD指令例如从字段602(rs)中指定的GPR得到一个单一操作数值。在一较佳实施例中使用了一个GPR,但是在其它的实施例中,该操作数值可以在实质上任何可由***访问的数据储存装置(例如,非GPR寄存器,内存等等)中被储存或取得。在一实施例中,GPR rs的内容可以被视为是一个描述符,描述了一个发出的线程应该被重新调度的情况。如果该GPR rs的内容是零(即该操作数的值为零),如图32的步骤3202所示,则该线程并不会被重调度,而是会如同步骤3204所示被释放(即,终止或永久的停止更进一步的执行),并且与其相关的线程上下文的储存器(即上述提到的用于保存状态的寄存器)变成空闲,从而可以被其它线程发出的接下来的FORK指令进行分配。如果该GPR rs的最低有效位被设定(即,rs0=1),则如图32的步骤3206所示该线程马上被重新调度,并且如果没有其它可执行的线程抢先的话,就继续执行该线程。在该实施例中,该GPR rs的内容被视为15位的限定符掩码,如图7中表格700的描述(即,用于编码各种条件的位向量)。
请参照表格700,寄存器rs的位15至位10表示提供给处理器的硬件中断信号,位9至位8表示处理器中产生的软件中断信号,位7至位6表示MIPS架构中最基本地关联加载(Load Linked)和条件存储(Store Conditional)同步原语的操作,还有位5至位2表示提供给处理器的外部非中断信号。
如果GPR rs的内容值是一偶数(即,位0未被设定),并且GPRrs的限定符掩码中的任何其他位皆被设定(步骤3208),则该线程被挂起,直到满足至少一个对应条件。如果当此情形发生,该线程就被重新调度(步骤3210),并且从YIELD之后的指令重新开始执行。这个过程的使能并不会受CP0.Status.iMn中断屏蔽位的影响,因此总共有被位15至10和位5至2(如图7所示)编码的十个外部条件(例如,事件等等)以及被位9至6(如图7所示)编码的四个软件条件,在目前的实施例中被用来响应外部信号以使能独立的线程,而不需要处理器执行异常处理。在这个特定例子中,有六个硬件中断和四个非中断信号,再加上两个软件中断和两个非中断信号,最后再加上一个专用于重调度功能的信号(即rs0),总共对应于十五个条件。(该CP0.Status.iMn中断屏蔽位是在CP0 Status寄存器中的一个八位的集合,其可选择性地屏蔽MIPS处理器的八个基本的中断输入。如果一个IM位被设定,则其它相关的中断输入就不会引起处理器的异常事件。)
在EIC的中断模式中,位IP2至IP7对有最高优先权的中断进行编码,而不只是表示了一个有正交指示的向量。当处理器使用EIC的中断模式时,在一个YIELD指令中与位IP2至IP7相关联的GPR rs的位因此不再能够被用于针对一个特定外部事件去重新使能一个线程。在EIC的中断模式中,只有与***相关连的外部事件指示符(例如,在本实施例中,是GPR rs的位5至2)可以被用作YIELD的限定符。EIC的中断模式与位IP2至IP7已被更进一步地描述于下列的出版物,上文中已经指出并引用了该出版物的整个内容:MIPS32TMArchitecture for Programmers Volumn III:The MIPS32TM PrivilegedResource Architecture,与MIPS64TM Architecture for ProgrammersVolumn III:The MIPS64TM Privileged Resource Architecture。
如果执行YIELD的结果是对于处理器或VPE上最近分配的线程的释放,则关于该YIELD指令产生一个线程异常,具有在CP0的ThreadStatus寄存器中的下溢指示(如图18所示且在稍后会加以说明)。
上述实施例使用了YIELD指令的GPR rs中所包含的操作数作为线程调度的参数。在该例子中,这个参数被看作一个15位的正交指示的向量(参照图7,位1与15被保留,所以在此较佳实施例中只有十五个条件被编码)。此实施例也将此参数当成是一个指定的值(即,用于决定是否一个给定的线程应该被释放,参考图32的步骤3202)。然而,这样一个参数的特性可以被改变,以适合各种不同指令的实施例。例如,不是依靠最低有效位(即rs0)来决定是否一个线程可被立即重新调度,而是使用该参数本身的值(例如,二进制补码形式的负一{-1})来决定一个线程是不是应该被立即重新调度(即,用于调度的重新排队)。
在该指令的其他实施例中,可以将这样的线程调度参数看作包含一个或多个多位值的字段,以使得一个线程可以确定,它将关于一个大的时间名空间(例如,32位或更大)中的一个单一事件而产生。在这样的实施例中,至少与该目标事件有关的位可以被当前YIELD指令访问。当然,如一特定实施例所期望的,更多的位字段可被传送至该指令(与更多的事件相关联)。
该YIELD指令的其他实施例,在由该指令访问的一个线程调度参数中可以包含前述位向量与值字段的组合,或其它具体应用的改进和提高,(例如)以满足特定实现的需要。YIELD指令的可选实施例可以用任何已知方法访问如前所述的一个线程调度的参数,例如,从一个GPR(如图6所示),从任意其它的数据存储装置(包含内存)以及作为该指令本身中的立即值。
MFTR-从线程寄存器移动
MFTR指令是一个特权(Cop0)指令,可允许一个操作***执行一个线程来访问另一个不同的线程上下文。其格式800被描述于图8。
要被访问的线程上下文由CP0的ThreadControl寄存器的AlternateThread字段的值确定,该字段如图16所示并且会在稍后描述。在选定的线程上下文中,要被读取的寄存器由字段802标定的rt操作数寄存器的值,和分别位于该MFTR指令的字段804与806中的u与sel位来确定,并且依据图9所示的表格900进行说明。产生的值被写入由字段808标定的目的寄存器rd。
MTTR-向线程寄存器移动
MTTR指令与MFTR指令相反。它是一个特权Cop0指令,其将当前线程的线程上下文中的寄存器值复制到另一个线程上下文的寄存器中。其格式1000如图10所示。
要被访问的线程上下文由CP0的ThreadControl寄存器的AlternateThread字段的值确定,该字段如图16所示并且会在稍后描述。在选定的线程上下文中,要被写入的寄存器由字段1002标定的rd操作数寄存器中的值,结合分别在该MTTR指令的字段1004与1006中提供的u与sel位来确定,并且依据在图11中所显示的表格1100进行解释(其编码相似于MFTR)。由字段1008标定的寄存器rt中的值被复制到选定的寄存器。
EMT-使能多线程
EMT指令为特权Cop0指令,其通过设定CP0的ThreadControl寄存器的TE位来使能多个线程的并行执行,该寄存器如图16所示并且会在稍后描述。该指令的格式1200显示于图12。包含在该EMT执行之前的TE(Thread Enabled)位值的该ThreadControl寄存器的值会被传回寄存器rt。
DMT-禁能多线程
DMT指令为特权Cop0指令,其通过清除CP0的ThreadControl寄存器的TE位来禁止多线程的并行执行,该寄存器如图16所示并且会在稍后描述。该指令的格式1300显示于图13。
除了发出该DMT指令的线程之外,所有的线程都被禁止进一步的指令提取与执行。这与所有线程暂停状态是无关的。包含该DMT执行之前的TE(Thread Enabled)位值的该ThreadControl寄存器的值会被传回寄存器rt。
ECONF-结束处理器的配置
ECONF指令为一特权Cop0指令,其通知VPE配置的结束,并使能多VPE的执行。该指令的格式1400显示于图14。
当一个ECONF指令被执行时,Config3寄存器的VPC位(稍后描述)即被清除,而该寄存器的MVP位的当前值也变成只读,并且处理器的所有VPE,包含正在执行ECNOF的这个VPE,都产生一个Reset异常。
特权资源(Privileged Resource)
图15的表格1500列出了***协处理器的与多线程ASE相关的特权资源。除了特别的说明之外,不管是新的还是修改过的第零协处理器(CP0)的如下所述的寄存器都是可访问的(即,写入和读出),就像传统的第零协处理器(即,MIPS处理器)的***控制寄存器一样。
新的特权资源
(A)ThreadControl寄存器(CP0寄存器号码7,选择号码1)
该ThreadControl寄存器是在每个VPE中作为***协处理器的一个部分。其结构1600显示于图16。该ThreadControl寄存器的字段可根据图17的表格1700来设定。
(B)ThreadStatus寄存器(CP0寄存器号码12,选择号码4)
该ThreadStatus寄存器存在于每个线程上下文中。每一个线程皆有其ThreadStatus的拷贝,并且特权程序代码可以通过MFTR与MTTR指令访问其它线程的ThreadStatus。其结构1800显示于图18。该ThreadStatus寄存器的字段可根据图19的表格1900来设定。
在一个激活线程的Halted位写入一个1,会使得该激活线程停止提取指令,并且将内部重启动程序计数器(PC)设定到下一个发出的指令。在一个激活线程的Halted位写入一个0,使得被调度的该线程从内部重启动程序计数器(PC)地址提取和执行指令。只要在未被激活的线程的Activated位或是Halted位中有任一为1,则该线程就可避免被一个FORK指令分配和激活。
(C)ThreadContext寄存器(CP0寄存器号码4,选择号码1)
该ThreadContext寄存器2000存在于每个线程上下文中,并且如图20所示其长度与处理器的GPR是相同的。这纯粹是一个软件可读/写的寄存器,可***作***用作特定线程储存的指针,例如一个线程上下文保存的区域。
(D)ThreadConfig寄存器(CP0寄存器号码6,选择号码1)
该ThreadConfig寄存器存在于每个处理器或VPE中。其结构2100显示于图21中。该ThreadConfig寄存器的字段被定义在图22的表格2200中。
ThreadConfig寄存器的WiredThread字段允许在一个VPE上可获得的线程上下文的集合在影像寄存器集合与并行执行线程之间被分割。线程上下文的索引若是小于该WireThread的值,则可从影像寄存器获得该线程上下文。
(E)ThreadSchedule寄存器(CP0寄存器号码6,选择号码2)
ThreadSchedule寄存器是选择性的,但是当被实现时,最好被实现于每个线程中。其结构2300显示于图23中。
调度向量(Schedule Vector)(如图所示,在一较佳实施例中其宽度为32位)为对于相关线程进行调度所要求的发出带宽的描述。在此实施例中,每一位皆代表该处理器或VPE的发出带宽的1/32,并且每一位的位置代表了在有32个时段的调度循环中的一个明确的时段。
如果在一个线程的ThreadSchedule寄存器中设定了一位,那么该线程即被保证了在相关的处理器或VPE上每32个可能的连续发出中,可获得一个对应的发出时段。在ThreadSchedule寄存器的一位上写入一个1,当相同处理器或VPE上的其它线程已经具有一样的ThreadSchedule位设定时,则将产生线程异常。虽然在这里,ThreadSchedule寄存器的优选宽度是32位,但是可以预料的到,在其它的实施例中该宽度可以改变(即,增加或减少)。
(F)VPESchedule寄存器(CP0寄存器号码6,选择号码3)
VPESchedule寄存器是可选择的,并且优选的存在于每个VPE中。它只有当Config3寄存器的MVP位被设定时才能被写入(请参考图29)。其格式2400显示于图24。
调度向量(如图所示,在一较佳实施例中其宽度为32位)为对于相关VPE进行调度所要求的发出带宽的描述。在此实施例中,每一位皆代表一个多VPE处理器的发出总带宽的1/32,并且每一位的位置代表了在有32个时段的调度循环中的一个明确的时段。
如果VPE的VPESchedule寄存器中的一个位被设定,那么该线程即被保证了在相关处理器上每32个可能的连续发出中,可获得一个对应的发出时段。在VPE的VPESchedule寄存器的一位上写入一个1,当其它VPE已经具有一样的VPESchedule位设定时,则将产生线程异常。
依据处理器目前默认的线程调度原则(例如,循环法等等),只要发出时段未被任何线程特别的排定,其仍然可被自由的分配给任何可执行的VPE/线程。
VPESchedule寄存器与ThreadSchedule寄存器创造了一个发出带宽分配的结构。VPESchedule寄存器的设定指定了对于VPE的带宽,其为在一个处理器或内核上全部可取得带宽的一定比例,而ThreadSchedule寄存器指定了对于线程的带宽,其为在一个包含线程的VPE中可取得全部带宽的一定比例。
虽然在这里,VPESchedule寄存器的优选宽度是32位,但是可以预期,在其它的实施例中该宽度可以改变(即,增加或减小)。
(G)Config4寄存器(CP0寄存器号码16,选择号码4)
寄存器Config4存在于每一个处理器中。其包含了对于动态多VPE处理器配置所必须配置信息。如果处理器并不处于VPE配置状态(即,Config3寄存器的VMC位被设定),则除了M(连续)字段之外的所有字段的值都会成为与实施方式有关且是不可预测其结果的。其结构2500描述于图25。Config4寄存器的字段的定义如图26的表格2600中所示。在某些实现方式或实施例中,Config3寄存器的VMC位可以是一个被事先保留/不指定的位。
对于目前存在的特权资源架构的修改
该多线程ASE对于当前MIPS32与MIPS64PRA的一些单元做了变更。
(A)Status寄存器
Status寄存器中的CU位对于多线程配置具有一些额外的意义。设定CU位的动作也就是要求将一个协处理器上下文与和该CU位关联的线程绑定。如果一个协处理器上下文是可用的,则将它与该线程绑定在一起,以使该线程所发出的指令能传送到该协处理器,并且该CU位会保留写入该位的1。如果没有一个协处理器上下文是可用的,则该CU位便会读回0。写入一个0去设定该CU位,会使得任何相关联的协处理器被释放。
(B)Cause寄存器
如图27所示,线程异常需要有一个新的Cause寄存器的异常代码值。
(C)EntryLo寄存器
如图28所示,一个事先被保留的高速缓存标志变成ITC指示符。
(D)Config3寄存器
如图29的表格2900中所示,定义了新的Config3寄存器的字段,用来表示多线程ASE与多个线程上下文是否可用。
(E)Ebase
如图30所示,Ebase寄存器的一个事先被保留的位30变成每个VPE上下文中的一个VPE的禁止位。
(F)SRSCtl
先前预设定的HSS字段现在变成了ThreadConfig寄存器的WiredThread字段的一个功能。
未使用FORK指令的线程分配与初始化
在一较佳实施例中,一个操作***“手动”产生一个线程的过程如下:
1.执行一个DMT,用以停止其它线程的执行或是可能的FORK指令执行。
2.通过将连续的值设定在ThreadControl寄存器的AlternateThread字段,并用MFTR指令来读取ThreadStatus寄存器,来识别一个可获得的线程上下文。一个空闲的线程在其ThreadStatus寄存器中不会有Halted或Activated位被设定。
3.设定选定线程的ThreadStatus寄存器的Halted位,用以避免其被其它线程配置。
4.执行一个EMT指令去重新使能多线程。
5.使用MTTR指令并使其u字段设定为1,来复制任何需要的GPR至选定的线程上下文。
6.使用MTTR指令并使其u和sel字段设定为0且rt字段设定为14(EPC),从而写入所需的开始执行地址至该线程的内部重启动地址寄存器中。
7.使用MTTR指令将0和1分别写入选定的ThreadStatus寄存器的Halted位和Activated位。
然后该新分配的线程可以被调度。如果在该过程中设定了EXL或ERL,由于他们隐含了禁止多线程的执行,则执行DMT,设定新线程的Halted位和执行EMT的这些步骤可以被省略。
未使用YIELD指令的线程的终止和释放
在本发明的一较佳实施例中,一个操作***用来终止当前线程的过程如下:
1.如果操作***不支持关于线程下溢状态的线程异常,则使用MFTR指令来扫描ThreadStatus寄存器的设定,以检验在处理器上有另一个可运行的线程,相反的如果没有,就向程序发出错误信号。
2.写入任何重要的GPR寄存器的值至内存。
3.在Status/ThreadStatus寄存器中,设定内核模式(Kernel mode)。
4.当目前的线程维持在一个特权状态时,清除EXL/ERL来允许其他线程被调度。
5.使用一个标准的MTC0指令来写入0值至ThreadStatus寄存器的Halted与Activated位。
正常的过程是一个线程按照这种方式终止自己。在一个特权模式当中,一个线程也可以使用MTTR指令来终止另一个线程,只不过会有额外的问题产生,这时操作***需要决定应该释放哪个线程上下文,以及在哪点上该线程的运算状态是稳定的。
线程间通讯的储存(Inter-Thread Communication Storage)
线程间通讯(ITC)的储存是一个可选择的功能,其可以替代用于细粒度多线程的关联载入/条件存储同步方法。因为通过载入与储存的动作来操作,所以这个ITC存储在指令集架构中是不可见的,但是在特权资源架构中,它是可见的,并且需要有效的微架构的支持。
参照虚拟内存页面,其包含有被标示为ITC储存的TLB项目,可以被归为是一个有特定属性的储存。每一个页面映射至一组1-128个64位的存储位置,其中每一个存储位置都有一个与其相关的Empty/Full位,并且可以使用标准的载入和储存指令,以四个方法之一来访问该存储位置。该访问模式被编码在所产生的虚拟地址的最低有效(和未翻译)位,如图31的表格3100所示。
因此每一个储存位置可以用C语言的结构来描述:
struct{
unit64 ef_sync_location;
unit64 force_ef_location;
unit64 bypass_location;
unit64 ef_state;
}ITC_location;
其中,全部四个位置都参考潜在存储空间的相同64位。当每次访问实施同样的Empty/Full协议时,该储存的参考可以具有小于64位的访问类型(例如,LW,LH,LB)。
Empty与Full位不相同,因此不相互耦合的多项目数据缓冲器,如FIFO,可以被映射至ITC储存空间。
可以通过向和从通用储存器复制{bypass_location,ef_state}对的方式来保存和恢复ITC的存储。严格的说,当64位的bypass_location必须被保留时,只有ef_state的最低有效位需要***控。在多项目的数据缓冲器中,每一个位置必须被读取直到Empty位,从而通过拷贝读出该缓冲器的内容。
每4K页面的位置数目与每一个VPE的ITC页面的数目都是VPE或处理器可以设定的参数。
ITC储存的“物理地址空间”可以是全局的,跨越一个多处理器***中的所有VPE和处理器,这样一个线程便可以从正在执行该线程的一个VPE同步到另一个不同VPE的一个位置上。全局的ITC储存地址可以从每一个VPE的EBase寄存器的CPUNum字段上取得。该CPUNum的10个位对应于ITC储存地址的10个有效位。一般为了单处理器的应用所设计的处理器或内核不需要输出一个物理接口至ITC储存,并且可以将其作为一个处理器内部的资源。
多VPE处理器
一个内核或处理器可以实现多个共享资源的VPE,如共享功能单元。每一个VPE都可以看到自己的在MIPS32或MIPS64指令中的具体实施和特权资源架构。每一个都可以看到自己的寄存器堆或线程上下文阵列,并且也可看到自己的CP0***协处理器和自己的TLB状态。对于在具有2-CPU高速缓存相干的SMP多处理器的软件而言,在同一个处理器上的两个VPE是无法区分的。
一个处理器上的每个VPE都可以在CP0在Ebase寄存器的CPUNum字段中看到一个不同的值。
处理器架构上的资源,如线程上下文,TLB储存和协处理器,可以在硬件式的配置下与VPE绑定,或者可以在一个支持必须的配置能力的处理器中被动态地配置。
重置与虚拟处理器配置
为了能够反向兼容MIPS32与MIPS64PRA,在重置时,一个可配置的多线程/多VPE处理器必须具有完全的默认线程/VPE配置。一般的情形下都是如此,但是对于一个有单一线程上下文的单一VPE却不一定必须如此。Config3寄存器的MVP位可以在重置时被取得,用来决定动态的VPE配置是否是可能的。如果这项能力被忽略,例如在传统的软件中,该处理器就会按照默认配置中的每个具体设定来操作。
如果该MVP位被设定,则寄存器Config3的VPC(虚拟处理器配置)位就可以通过软件设定。这可以使得处理器进入一个设定状态,该设定状态下,Config4寄存器的内容可以被读出,用以决定可使用的VPE上下文,线程上下文,TLB项目和协处理器的数目,并且可使某些正常情况下只读的Config寄存器的“预设”字段变成可写入。可以将一些限制施加在配置状态指令流上,例如它们可以被禁止使用高速缓存的或是TLB映射的内存地址。
在配置状态中,可配置的VPE的全部数目被编码于Config4寄存器的PVPE字段中。通过将每个VPE的索引写入EBase寄存器的CPUNum字段中,可以选择每一个VPE。对于被选择的VPE,下列的寄存器字段都可通过写入而被设定。
·Config1.MMU_Size
·Config1.FP
·Config1.MX
·Config1.C2
·Config3.NThreads
·Config3.NITC_Pages
·Config3.NITC_PLocs
·Config3.MVP
·VPESchedule
并不是所有上述所提到的设定参数都需要是可配置的。举例来说,即使每一个VPE的ITC页面是可配置的,每一个页面的ITC位置的数目可以是固定的,或者两个参数都可以被固定,对于每个VPE,FPU可以被预先分配或是硬连线的,等等。
协处理器作为分离的不同单元被分配给VPE。协处理器可被多线程化的程度应该经由协处理器特定的控制和状态寄存器被表示和控制。
通过清除EBase寄存器的VPI禁止位,使能一个VPE,用于配置之后的执行。
通过发出一个ECONF指令可以退出该配置状态。这个指令使得所有未被禁止的VPE取得一个重置异常,并且开始同时执行。如果Config3寄存器的MVP位在配置期间被清除,而且被一个ECONF指令保持为零,则该VPC位就不能再被设定,而且该处理器配置就会被有效的冻结,直到下一个处理器重置。如果MVP仍然被设定,则再次设定该VPC位可以使一个操作***再次进入配置模式。可是,如果该处理器的一个运行中的VPE重新进入配置模式,可能会有不可预测的结果。
对于多线程处理器的服务质量调度
到目前为止该说明书描述了一种MIPS兼容***的具体应用扩展,用于实现多线程。如前面所述,所描述的MIPS实现只是用于列举描述,而并不用于限制本发明所包含的范围。如同之前所描述的功能与机制可以应用于MIPS之外的***。
在实时和近乎实时线程的多线程中的特殊服务的问题在背景段落被提出,该问题在之前有关于ThreadSchedule寄存器(图23)和VPESchedule寄存器(图24)的说明中已经简单地涉及。本说明书的以下部分将更详细地处理该问题;也更清楚地说明用于具体处理线程级服务质量(QoS)的特定扩充。
背景
一般用于传输多媒体数据的网络设计都会牵涉到服务质量(QoS)的概念,用来描述需要使用不同策略来处理在网络中不同的数据流。以语音的传输为例,相对的对于带宽的要求不高,但是却不能忍受几十毫秒的延迟。在宽带的多媒体网络中,QoS协议可以保证在时间为关键要素的传输中,能取得任何特别的处理与优先权,这是在时间上能适时传输的必须保证。
影响在单一芯片上RISC与DSP相组合的程序执行的其中一个主要问题是,在一个组合的多任务的环境中,要去保证DSP程序代码的严格实时执行是非常困难的。从而该DSP应用可被视为,在处理器带宽中需要一个QoS条件。
多线程与QoS
有许多种方式可以对来自多线程的指令发出进行调度。交错式的调度器可以在每个周期改变线程,而块交错式的调度器可以在当一个高速缓存丢失或其它严重的停顿发生时改变线程。以上详细描述的多线程ASE,提供了一个架构给多线程处理器,用于避免对于一个特定线程调度的机制或策略任何依赖。然而,调度策略可能对于Qos为各种线程的执行所提供保证的内容有重大的影响。
一个具有DSP扩充功能的RISC在Qos能够保证实时DSP程序代码能够被执行的情形下会变的更有用处。在该处理器上实现多线程,使得在一个独立的线程上执行DSP程序代码,甚至也有可能是在一个独立的虚拟处理器上执行DSP程序代码,使得DSP线程的硬件调度能够被可编程地确定来保证QoS,从而理所当然的消除了具有DSP加强功能的RISC的一个主要障碍。
QoS线程调度算法
服务质量线程的调度可以宽松的被定义为一组调度机制和策略,其允许程序员或***设计者对于一段特定的程序代码的执行时间可以作出确信的和可预测的陈述。一般来说,这些陈述的形式为“这段程序代码将执行不多于Nmax且不少于Nmin个周期”。在许多的情形下,只有Nmax数字在实际的执行中被考虑,但是在某些应用中,程序代码的运行超前于调度也会造成问题,所以Nmin也应该被考量。如果Nmax数字与Nmin数字的差距能更小的话,整个***的行为也更能精确的被预测。
简单的优先权方案
一种简单的模型被提出来,用于在多线程发出调度时提供一定程度的QoS,其为简单地将最高优先权分配给一个指定实时线程,因此当该线程可执行时,总是选择它来发出指令。这种方式可以提供一个Nmin的最小值,似乎也可提供该指定线程的Nmax的可能的最小值,但是仍然会有一些不太好的后果。
首先,在该方案中只有一个线程可以有QoS的保证。该算法暗含了在一个不同于该指定实时线程的线程中,任意程序代码的Nmax会变成实质上不受约束。其次,当该特定线程内的一段程序代码的Nmin数被最小化的时候,则异常就必须被包含在模型当中。如果该指定线程产生该异常,则该Nmax的值就会变的更复杂,并且在某种情形下是不可能确定的。如果该异常是被该指定线程以外的线程所产生的,则该指定线程中的程序代码的Nmax就会受到严格约束,但是该处理器的中断响应时间变得不受约束。
这种简单的优先权方案也许在某些情形下是有用的,并且在硬件的实现上也有实际的优点,但是它们仍然没有提供一个通用的QoS调度的解决方案。
基于保留的方案
另一个功能更强大且独特的线程调度模型是基于保留发出时段。在这种方案中,硬件调度机制允许一个或多个线程可被分配得到M个连续发出时段中的N个。在一个没有中断的环境中,对于一个实时代码段,该方案并没有提供向优先权方案所提供的低Nmin值,可是却拥有了其它的优点。
·多于一个的线程可以被保证有QoS。
·即使当中断是与具有最高优先权的线程之外的其他线程绑定的,该中断延迟也可以是受约束的。这样可以使实时程序代码区段有较低的Nmax。
基于保留方案的调度的一种简单形式是,将每第N个发出时段分配给一个实时线程。在1与2之间并没有N的中间值,这说明在一个多线程环境中的实时线程可以取得最多50%的处理器的发出时段。当一个实时任务需要使用多于50%的嵌入式处理器的带宽时,十分需要一种方案,其允许更灵活地分配发出带宽。
具有QoS的混合线程调度
上述的多线程***是侧重中立的调度策略,但是还可以被扩充,以允许形成一种混合的线程调度模型。在这种模型中,实时线程可以被给予一定比例的线程发出时段的固定调度,并且用与实现方式相关的默认调度方案来分配剩余的时段。
绑定线程至发出时段
处理器中的指令是被快速地顺序发出。在一个多线程的环境当中,在多数的线程当中,一个线程可以通过在一个给定的时段数目中所占用的时段数目的比例来计算出所使用的带宽。相反的,本发明认识到,可以任意的声明一确定数目的时段,并限制该处理器为某特定的线程保留该固定数目中的一定数目的时段。从而可以指定带宽中的一个固定部分来保证一个实时线程。
很清楚地,可以将时段按比例地分配给多于一个实时线程,并且该方案进行操作的粒度受到发出时段的该固定数目的约束,所述比例就是以该固定数目为基础得到的。举例来说,如果选择32个时段,则任意一个特定的线程可以被保证具有带宽的1/32至32/32。
也许用于将固定发出带宽分配给线程的最具一般性的模型是将每个线程与一对整数{N,D}关联,这对整数表示分配给该线程的发出时段比例的分子与分母,例如是1/2或4/5。如果所允许的整数范围足够大的话,这样可以允许对于线程优先权分配的几乎任意细粒度的调整,但是如此做的话还是会有一些实质上的缺点。其中一个问题是,要使用一个硬件逻辑将一个很大的配对集合{N0,D0},{N1,D1},…{Nn,Dn}}转换成一个发出调度并不是一件简单的事,并且多于100%的时段被分配这种错误情况无法非常容易的被检测出来。另一个问题就是,这种方案允许在相当长的一段时间上,一个线程被分配N/D比例的发出时段,但是它并不一定允许任意声明关于哪个发出时段被分配给一个较短子程序代码片段的线程。
因此,在本发明的一较佳实施例中,不使用整数对,而是用一个位向量与每一个需要有实时带宽QoS的线程相关联,该位向量表示要被分配给该线程的调度时段。在该较佳实施例中,该向量也就是前述ThreadSchedule寄存器(图23)的内容,可以被***软件所看到。虽然该ThreadSchedule寄存器具有32位宽的调度“掩码”,但是在其他实施例中该屏蔽当中可以具有更长或更短的位宽度。一个具有32位宽度的线程调度掩码可以允许一个线程被分配从1/32至32/32的该处理器的发出带宽,并且也可进一步对于特定的发出线程给予特定的发出带宽模式。对于一个32位的掩码,值0xaaaaaaaa将每第二个时段分配给该线程。值0x0000ffff也可以将50%的发出带宽分配给该线程,但是以16个连续时段的块方式进行分配。将值0xeeeeeeee分配给线程X并且将值0x01010101分配给线程Y,从而给予线程X每四个周期中的三个(32个中的24个)和给予线程Y每八个周期中的一个(32个中的4个),并且将剩下的每一组32个周期中的4个,被其它可能确定性较低的硬件算法分配给其它线程。更进一步的说,线程X将具有每四个周期中的三个,并且该线程Y在两组连续指令之间具有不超过八个周期。
在该实施例中的调度冲突可以被很简单地检测出,因为没有一位将被设置在多于一个线程的ThreadSchedule寄存器中。也就是说,如果为一个线程设定了一个特定的位,那么对于被分配了发出掩码的所有其他线程,该位必须是零值。因此,如果有任何的冲突,都可以被轻易的检测出。
实时线程的发出逻辑相对的简单直接:每一个发出机会皆关联至一个32模数的索引,该索引会被传送给所有就绪的线程,这些就绪线程中的至多一个会被分配该关联的发出时段。如果得到该时段,则该相关联的线程就会发出它的下一个指令。如果没有任何线程拥有该时段,则该处理器会选择一个可执行的非实时线程。
ThreadSchedule寄存器的硬件实现如果使用少于32位的话,可以减少每个线程的储存与逻辑的大小,但却会同时降低调度的灵活性。原则上,该寄存器可以扩充至64位,或甚至被实现(在MIPS处理器的情况下)为一连串的寄存器,增加了在MIPS32 CP0寄存器空间中的选择值,从而提供更长的调度向量。
使线程免除中断服务
如前所述,中断服务可以使得执行该异常程序的线程在执行时间上具有很大的可变性。因此,期望使需要严格QoS保证的线程能够免除中断服务。这里提出了一个较佳的实施例,对于每一个线程利用一个单一位,该位对于操作***是可以看见的,用来使任何异步异常延迟,直到一个非免除的线程被调度(即,ThreadStatus寄存器的IXMT位,请参考图18与图19)。这样会增加中断的延迟,但是通过ThreadSchedule寄存器的值的选择,可以将该中断延迟限制在受约束和可控的程度下。如果中断处理程序只是执行在那些没有被分配给可免除的实时QoS线程的发出时段中,自然地该中断服务对于该实时程序代码的执行时间就没有任何优先的影响。
线程与虚拟处理单元的发出时段分配
以上详细描述的多线程ASE描述了一种线程资源的有层次的分配,其中一些数目的VPE(虚拟处理单元)各自具有一些数目的线程。每一个VPE具有CP0的硬件实现和特权资源架构(当配置在一MIPS处理器上时),所以运行在其中一个VPE上的操作***软件(OS)不可能直接知道和控制被其它VPE所要求的发出时段。因此每一VPE的发出时段名称空间被关联到该VPE,这就形成了一个发出时段分配的层次结构。
图34为调度电路3400的方框示意图,其描述了这种线程资源的层次分配。处理器调度器3402(即,主处理器的全部调度逻辑)经由“时段选择”信号3403传递一个发出时段号码至该主处理器内的全部VPE中的全部VPESchedule寄存器。信号3403对应于VPESchedule寄存器内一个位的位置(在本较佳实施例中,即为三十二个位置中的一个)。通过使该位的位置在每个发出时段出现时移至一个增加的位置,并且当到达了最高有效位位置时(即,在此较佳实施例中是第31位)再重置到最低有效位位置(即,第0位),调度器3402重复地循环信号3403。
再参照图34,以此图为例,位位置1(即,时段1)经由信号3403传递至该主处理器的全部VPESchedule寄存器,即寄存器3414与3416。在任一个VPESchedule寄存器中,如果其对应位为“设定”(即,该位为逻辑1),该寄存器就用一个“VPE发出要求”信号来通知处理器调度器。作为响应,调度器就会用一个“VPE发出允许”信号来允许该VPE使用目前的发出时段。再参照图34,(VPE0中的)VPESchedule寄存器3414的位位置1被设定,因此发出了一个VPE发出要求信号3415至处理器调度器3402,然后该处理器调度器3402也会响应一个VPE发出允许信号3405。
当一个VPE被授予一个发出时,他在VPE层次上采用相类似的逻辑。再参照图34,VPE调度器3412(即VPE0 3406的调度逻辑)响应于信号3405,而经由时段选择信号3413传递一个发出时段号码给该VPE内的全部ThreadSchedule寄存器。这些ThreadSchedule寄存器每一个都关联至由该相关VPE所支持的线程。信号3413对应于ThreadSchedule寄存器中的一个位位置(在本实施例中,可以是三十二个位中的一个)。通过使位位置在每个发出时段出现时移至一个增加的位置,并且当到达了最高有效位位置时(即,在此较佳实施例中是第31位)再重置到最低有效位位置(即,第0位),调度器3412重复地循环信号3403。该时段号码独立于在VPESchedule层次所使用的时段号码。
请参照图34并以其为例,位位置0(即,“时段0”)经由信号3413传递至在该目标VPE内的全部ThreadSchedule寄存器,也就是寄存器3418与3420。任一个线程的ThreadSchedule寄存器的该选定位置的位已被设定的话,该线程通知VPE调度器,从而被允许使用目前的发出时段。参照图34,(线程0的)ThreadSchedule寄存器3418的位位置0被设定,因此将线程发出要求信号3419发送至该VPE调度器3412,而该VPE调度器也响应了一个线程发出允许信号3417(从而允许线程0可以使用目前的发出时段)。在一些周期当中,如果VPESchedule寄存器中没有设定与指定的时段对应的位,或是ThreadSchedule寄存器中没有设定与指定的时段对应的位,则该处理器或VPE调度器就会根据某种其它默认调度算法来分配下一个发出时段。
根据之前所述,在一个较佳实施例当中,每一个VPE,例如图34的VPE0(3406)和VPE1(3404),都具有一个VPESchedule寄存器(其格式显示于图24),用来允许以该寄存器内容的长度为模的特定时段,可以被确定地分配给该VPE。图34的VPESchedule寄存器为VPE0的寄存器3414和VPE1的寄存器3416。那些没有被分配给任何VPE的发出时段,通过特定实现方式的分配策略进行分配。
另外根据上文的描述,被分配给在一个VPE之内的线程的时段是从给予该VPE的时段中分配的。举一个具体例子,如果一个处理器有两个VPE,如图34所示,其中一个VPE的VPESchedule寄存器具有0xaaaaaaaa值,而另一个VPE的VPESchedule寄存器具有0x55555555值,则发出时段就会被交替分配给这两个VPE。如果这两个VPE之一中的一个线程的ThreadSchedule寄存器包含0x55555555值,则该线程会取得包含该线程的VPE的每两个发出时段中的一个,或者是说整个处理器的每四个发出时段中的一个。
因此,该每一个VPE相关的VPESchedule寄存器的值决定了每个VPE会得到哪些处理时段。特定线程被分配给每一个VPE,例如是VPE0中所示的线程0与线程1。其它没有显示的线程也类似地被分配给VPE1。每个线程都有一个关联的ThreadSchedule寄存器,例如线程0的寄存器3418,线程1的寄存器3420。ThreadSchedule寄存器的值决定了一个VPE中每个线程的处理时段的分配。
调度器3402与3412可以用简单的组合逻辑来实现,以执行上述的功能,根据本发明的公开内容,建构这些调度器并不需要复杂的实验就能够由本领域技术人员来实现。例如,调度器的构成也可以使用传统的方法,如通过组合逻辑,可程序逻辑,软件等等,用以得到所描述的功能。
图33描述了一个通用形式的计算机***3300,根据本发明的各种实施例可以在该计算机***上实施。该***包含了具有必须的译码和执行逻辑的一个处理器3302(本领域一般技术人员对此应该很清楚),用以支持一个或多个上述指令(即,FORK,YIELD,MFTR,MTTR,EMT,DMT和ECONF)。在一个较佳实施例当中,内核3302还包含如图34所示的调度电路3400,并且代表上述的“主处理器”。***3300还包含:***接口控制器3304,可以与该处理器双向通信;RAM3316和ROM3314,可被***接口控制器进行存取;三个I/O装置3306,3308和3310,通过总线3312与***接口控制器通信。通过这里对装置和程序代码应用的详细描述,***3300可以作为一个多线程***进行操作。本领域技术人员应该很清楚,图33中所示的一般形式可以有很多替代形式。举例来说,总线3312可以有许多的形式来实现,并且在某些实施例当中可以是一种芯片上的总线。同样的,I/O装置的数目也只是为了描述方便,实质上是可以在不同的***上做任意的变更。另外,虽然在图中只有装置3306发出了一个中断要求,很明显地其它的装置也可以发出中断要求。
更进一步的改善
到目前为止,所描述的实施例中,32位的ThreadSchedule寄存器和VPESchedule寄存器并不允许精确地分配奇数比例的发出带宽。如果一个程序员期望精确地分配所有发出时段的三分之一给一个指定的线程,他只能近似到10/32或11/32。在一个实施例中,一个具有可程序的掩码或长度的寄存器,允许程序员去指定ThreadSchedule寄存器和/或VPESchedule寄存器中的位的子集,在重新开始这次序列之前被发出逻辑使用。在所提出的例子当中,该程序员设定了只有30个位是有效的,并且将VPESchedule寄存器和/或ThreadSchedule寄存器适当地编程为具有值0x24924924。
本文所描述的多线程ASE当然可以实现在硬件中,例如,在中央处理单元(CPU),微处理器,数字信号处理器,处理器内核,***整合芯片(SOC)或其它任何可编程器件内,或与上述各个器件连接。另外,该多线程ASE也可以实现在软件之中(例如,计算机可读程序代码,程序代码,任何形式的指令和/或数据,如源语言,目标语言或机器语言),该软件设置在计算机可使用的(例如,可读的)的介质中,该介质用来储存该软件。该软件实现了这里描述的装置和过程的功能,制造,建模,仿真,描述和/或测试。举例来说,这些可以通过使用以下工具实现:通用编程语言(比如C语言,C++语言),GDSII数据库,硬件描述语言(HDL),其包含Verilog HDL、VHDL、AHDL(Altera HDL)等等,或者其它可利用的程序,数据库和/或电路(即原理图)设计工具。这些软件可以被置于任何已知的计算机可使用的介质,包含半导体,磁盘,光盘(例如CD-ROM,DVD-ROM等等),或是作为任何计算机可使用(例如,可读取)的传输介质(例如,载波,包括数字、光学的任何其它介质,或基于模拟的介质)中所容纳的计算机数据信号。因此,该软件可以在包括互联网络与内联网络的通信网络中传输。
一个由软件实施的多线程ASE可以被包含在一个半导体的知识产权内核内,如一个处理器内核(例如,以HDL实现),并且可以在集成电路的生产过程中被转变成硬件。另外,这里描述的一个多线程ASE也可以作为硬件与软件的组合实现。
对于本领域技术人员来说,很明显地可以在不超出本发明所揭示的精神与范围的情况下,对本发明所揭示的实施例加以润饰与修改。举例来说,之前所描述的实施例大多是使用MIPS处理器,架构和技术,作为具体例子。本发明具有各种实施例,可以被用于更广的范围,而不限于这些具体例子。更进一步而言,一个本领域技术人员可以找到方法对本发明所描述的功能性做些微的改变,而这仍然是在本发明的精神与范围内。在描述QoS时,ThreadSchedule寄存器与VPESchedule寄存器的内容不限于所描述的长度,而且可以在本发明的精神和范围内作出修改。
因此,实质上只能依照所附权利要求的范围来限定本发明的范围。
Claims (87)
1.在一个能够支持和执行多程序线程的处理器中,一种处理的机制,包括:
一个参数,用于调度一个程序线程;以及
一个指令,置于该程序线程中,并且能够存取该参数;
其中,当该参数等于第一数值时,该指令根据一个或多个编码于该参数中的条件,重新调度该程序线程。
2.如权利要求1所述的机制,其中该参数保存在一个数据储存装置中。
3.如权利要求1所述的机制,其中当该参数等于第二数值,且该第二数值不等于该第一数值时,该指令释放该程序线程。
4.如权利要求3所述的机制,其中该第二数值为零。
5.如权利要求1所述的机制,其中当该参数等于第二数值,且该第二数值不等于该第一数值时,该指令无条件地重新调度该程序线程。
6.如权利要求5所述的机制,其中该第二数值为一奇数。
7.如权利要求5所述的机制,其中该第二数值为负1。
8.如权利要求1所述的机制,其中该一个或多个条件中的一个条件与将执行机会让与其它线程直到该一个条件被满足为止的该程序线程相关。
9.如权利要求8所述的机制,其中该一个条件被编码于该参数中的位向量或位字段之一中。
10.如权利要求5所述的机制,其中,在该程序线程被重新调度的情形下,该程序线程的执行会在该线程中该指令之后的位置继续。
11.如权利要求3所述的机制,其中当该参数等于第三数值,且该第三数值不等于该第一数值与该第二数值时,该指令无条件地重新调度该程序线程。
12.如权利要求1所述的机制,其中该一个或多个条件中的一个条件为一个硬件中断。
13.如权利要求1所述的机制,其中该一个或多个条件中的一个条件为一个软件中断。
14.如权利要求1所述的机制,其中,在该程序线程被重新调度的情形下,该程序线程的执行会在该线程中该指令之后的位置继续。
15.在一个能够支持与执行多程序线程的处理器中,一种由一个线程重新调度执行或释放该线程本身的方法,包括:
(a)发出一个指令,该指令存取一个数据存储装置中的一部分记录,该部份记录编码了与决定该线程是否被重新调度的一个或多个条件相关的一个或多个参数;以及
(b)根据在该部分记录中的该一个或多个参数来依照该条件重新调度该线程或释放该线程。
16.如权利要求15所述的方法,其中该记录被置于一个通用寄存器(GPR)中。
17.如权利要求15所述的方法,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关。
18.如权利要求17所述的方法,其中与该被释放的线程相关的该一个参数为一零值。
19.如权利要求15所述的方法,其中这些参数中的一个参数与被重新排队等待调度的线程相关。
20.如权利要求19所述的方法,其中该一个参数为一任意奇数值。
21.如权利要求19所述的方法,其中该一个参数为负1的二进制补码值。
22.如权利要求15所述的方法,其中这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足为止的该线程相关。
23.如权利要求22所述的方法,其中该一个参数被编码于该记录中的位向量或者一个或多个值字段之一中。
24.如权利要求15所述的方法,其中,在该线程发出该指令并被重新调度的情形下,当该一个或多个条件被满足时,该线程的执行会在该线程指令流中该线程所发出的该指令之后的位置继续。
25.如权利要求15所述的方法,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。
26.如权利要求15所述的方法,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
27.如权利要求15所述的方法,其中这些参数中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
28.如权利要求15所述的方法,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,这些参数中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
29.一种支持与执行多个软件实体的数字处理器,包括:
一个数据储存装置中的一部分记录,该部分记录编码了与一个或多个条件相关的一个或多个参数,该一个或多个条件决定了当一个线程将执行机会让与其它线程时该线程是否被重新调度。
30.如权利要求29所述的数字处理器,其中该部分记录被置于一个通用寄存器(GPR)中。
31.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关。
32.如权利要求31所述的数字处理器,其中与该被释放的线程相关的该一个参数为一零值。
33.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被重新排队等待调度的线程相关。
34.如权利要求33所述的数字处理器,其中该一个参数的值为一任意奇数值。
35.如权利要求33所述的数字处理器,其中该一个参数的值为负1的二进制补码值。
36.如权利要求29所述的数字处理器,其中这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
37.如权利要求36所述的数字处理器,其中该一个参数被编码于该记录中的位向量或是一个或多个值字段之一中。
38.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与一个被重新排队等待调度的线程相关。
39.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
40.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
41.如权利要求29所述的数字处理器,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,这些参数中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
42.一种能够支持与执行多个程序线程的处理***,包括:
一个数字处理器;
一个数据储存装置中的一部分记录,该部分记录编码了与一个或多个条件相关的一个或多个参数,该一个或多个条件决定了一个线程是否被重新调度;以及
一个指令集,包含用于重新调度和释放该线程的一个指令;
其中当该线程发出该指令时,该指令存取该记录中的该一个或多个参数,并且该***根据该部分记录中的该一个或多个参数来依照该一个或多个条件重新调度或释放该发出指令的线程。
43.如权利要求42所述的处理***,其中该部分记录被置于一个通用寄存器(GPR)中。
44.如权利要求41所述的处理***,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关。
45.如权利要求44所述的处理***,其中与该被释放的线程相关的该一个参数为一零值。
46.如权利要求44所述的处理***,其中这些参数中的一个参数与被重新排队等待调度的线程相关。
47.如权利要求46所述的处理***,其中该一个参数的值为一任意奇数值。
48.如权利要求46所述的处理***,其中该一个参数的值为负1的二进制补码值。
49.如权利要求41所述的处理***,其中这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
50.如权利要求49所述的处理***,其中该一个参数被编码于该记录中的位向量或是一个或多个值字段之一中。
51.如权利要求44所述的处理***,其中,在一个线程发出该指令并且被有条件地重新调度的情形下,当该一个或多个条件被满足时,该线程的执行会在该线程指令流中该指令之后的位置继续。
52.如权利要求42所述的处理***,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。
53.如权利要求42所述的处理***,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
54.如权利要求42所述的处理***,其中这些参数中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
55.如权利要求42所述的处理***,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,这些参数中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
56.一种数字储存介质,其上被写入来自一个指令集的指令,用于在一个数字处理器上执行多个软件线程中的各个软件线程,该指令集包含了一个指令,用于使发出指令的线程放弃执行,并且存取一个数据储存装置中的一部份记录中的一个参数,其中,释放或重新调度的条件与该参数相关,并且根据该部分记录中的该参数来依照该条件进行释放或重新调度。
57.如权利要求56所述的数字储存介质,其中该记录被置于一个通用寄存器(GPR)中。
58.如权利要求57所述的数字储存介质,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关。
59.如权利要求58所述的数字储存介质,其中该与被释放的线程相关的参数为一零值。
60.如权利要求56所述的数字储存介质,其中这些参数当中的一个参数与被重新排队等待调度的线程相关。
61.如权利要求60所述的数字储存介质,其中该一个参数的值为一任意奇数值。
62.如权利要求60所述的数字储存介质,其中该一个参数的值为负1的二进制补码值。
63.如权利要求16所述的数字储存介质,其中这些参数中的一个参数与将执行机会让与其它线程直到一个特定条件被满足的线程相关。
64.如权利要求63所述的数字储存介质,其中该一个参数被编码于该记录中的位向量或是一个或多个位字段之一中。
65.如权利要求56所述的数字储存介质,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与被重新排队等待调度的线程相关。
66.如权利要求56所述的数字储存介质,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
67.如权利要求56所述的数字储存介质,其中这些参数中的一个参数与被重新排队等待重新调度的线程相关,并且这些参数中的另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
68.如权利要求56所述的数字储存介质,其中这些参数中的一个参数与被释放的而不是被重新调度的线程相关,这些参数中的另一个参数与被重新排队等待调度的线程相关,并且这些参数中的再另一个参数与将执行机会让与其它线程直到一个特定条件被满足相关。
69.如权利要求1所述的机制,其中该指令为一个YIELD指令。
70.如权利要求1所述的机制,其中该部分记录包括位向量。
71.如权利要求1所述的机制,其中该部分记录包括一个或多个多位字段。
72.如权利要求15所述的方法,其中该指令为一个YIELD指令。
73.如权利要求42所述的处理***,其中该指令为一个YIELD指令。
74.如权利要求56所述的数字储存介质,其中该指令为一个YIELD指令。
75.一种包含在传输介质中的计算机数据信号,包括:
计算机可读的程序代码,其用于描述一个能够支持并执行多个程序线程的处理器,并且其包括一种用以释放和重新调度一个线程的机制,该程序代码包括:
第一程序代码段,用于描述一个数据存储装置中的一部分记录,该部分记录编码了与决定一个线程是否被重新调度的一个或多个条件相关的一个或多个参数;以及
第二程序代码段,用于描述能够存取该记录中的该一个或多个参数的一个指令,其中当该线程发出该指令时,该指令存取该记录中的一个或多个值,并根据该一个或多个值来依照该一个或多个条件重新调度或释放该线程。
76.在一个能够支持多个程序线程的处理器中,一种方法,包含:
执行一个指令,该指令可以存取与线程调度相关的一个参数,其中该指令包含在一个程序线程中;以及
当该参数等于第一数值时,响应于该指令而释放该程序线程。
77.如权利要求76所述的方法,其中该第一数值为零。
78.如权利要求76所述的方法,还包括:
当该参数等于第二数值时,响应于该指令而挂起该程序线程的执行,其中该第二数值不等于该第一数值。
79.如权利要求78所述的方法,其中该第二数值表示,执行该程序线程所需具备的条件并不满足。
80.如权利要求79所述的方法,其中该条件被编码于该参数中作为位向量或值字段。
81.如权利要求78所述的方法,还包括:
当该参数等于第三数值时,响应于该指令而重新调度该程序线程,其中该第三数值不相等于该第一数值和第二数值。
82.如权利要求81所述的方法,其中该第三数值为负1。
83.如权利要求81所述的方法,其中该第三数值为一个奇数值。
84.在一个能够支持多个程序线程的处理器中,一种方法,包括:
执行一个指令,该指令存取一个与线程调度相关的参数,其中该指令包含于一个程序线程中;
当该参数等于第一数值时,响应于该指令而挂起该程序线程的执行。
85.如权利要求84所述的方法,还包括:
当该参数等于第二数值时,响应于该指令而重新调度该程序线程,其中该第二数值不等于该第一数值。
86.在一个能够支持多个程序线程的处理器中,一种方法,包括:
执行一个指令,该指令存取与线程调度相关的一个参数,其中该指令包含于一个程序线程当中;以及
当该参数等于第一数值时,响应于该指令而重新调度该程序线程。
87.如权利要求86所述的方法,还包括:
当该参数等于第二数值时,响应于该指令而释放该程序线程,其中该第二数值不等于该第一数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210164802.7A CN102880447B (zh) | 2003-08-28 | 2004-08-26 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US49918003P | 2003-08-28 | 2003-08-28 | |
US60/499,180 | 2003-08-28 | ||
US60/502,358 | 2003-09-12 | ||
US60/502,359 | 2003-09-12 | ||
US10/684,348 | 2003-10-10 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210164802.7A Division CN102880447B (zh) | 2003-08-28 | 2004-08-26 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1842770A true CN1842770A (zh) | 2006-10-04 |
Family
ID=37031160
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200480024800 Pending CN1842770A (zh) | 2003-08-28 | 2004-08-26 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
CN2004800248529A Expired - Fee Related CN1846194B (zh) | 2003-08-28 | 2004-08-27 | 执行并行程序线程的方法和装置 |
CNB2004800247988A Expired - Fee Related CN100489784C (zh) | 2003-08-28 | 2004-08-27 | 多线程微处理器及其新线程的创建方法和多线程处理*** |
CNB2004800248016A Expired - Fee Related CN100538640C (zh) | 2003-08-28 | 2004-08-27 | 动态配置虚拟处理器资源的装置 |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2004800248529A Expired - Fee Related CN1846194B (zh) | 2003-08-28 | 2004-08-27 | 执行并行程序线程的方法和装置 |
CNB2004800247988A Expired - Fee Related CN100489784C (zh) | 2003-08-28 | 2004-08-27 | 多线程微处理器及其新线程的创建方法和多线程处理*** |
CNB2004800248016A Expired - Fee Related CN100538640C (zh) | 2003-08-28 | 2004-08-27 | 动态配置虚拟处理器资源的装置 |
Country Status (1)
Country | Link |
---|---|
CN (4) | CN1842770A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102317912A (zh) * | 2009-02-17 | 2012-01-11 | 松下电器产业株式会社 | 多线程处理器和数字电视*** |
CN102567090A (zh) * | 2010-12-02 | 2012-07-11 | 国际商业机器公司 | 在计算机处理器中创建执行线程的方法和*** |
CN102831053A (zh) * | 2011-06-17 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种测试执行的调度方法及装置 |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9417914B2 (en) * | 2008-06-02 | 2016-08-16 | Microsoft Technology Licensing, Llc | Regaining control of a processing resource that executes an external execution context |
GB2474521B (en) * | 2009-10-19 | 2014-10-15 | Ublox Ag | Program flow control |
CN102183922A (zh) * | 2011-03-21 | 2011-09-14 | 浙江机电职业技术学院 | Acs运动控制器实时暂停的实现方法 |
WO2011127862A2 (zh) * | 2011-05-20 | 2011-10-20 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
US9507638B2 (en) * | 2011-11-08 | 2016-11-29 | Nvidia Corporation | Compute work distribution reference counters |
CN102750132B (zh) * | 2012-06-13 | 2015-02-11 | 深圳中微电科技有限公司 | 多线程虚拟流水线处理器的线程控制和调用方法及其处理器 |
CN103973600B (zh) * | 2013-02-01 | 2018-10-09 | 德克萨斯仪器股份有限公司 | 用于分组处理旋转掩码合并和寄存字段指令的方法及装置 |
JP6122749B2 (ja) * | 2013-09-30 | 2017-04-26 | ルネサスエレクトロニクス株式会社 | コンピュータシステム |
CN108228321B (zh) * | 2014-12-16 | 2021-08-10 | 北京奇虎科技有限公司 | 一种安卓***应用关闭方法和装置 |
US9747108B2 (en) * | 2015-03-27 | 2017-08-29 | Intel Corporation | User-level fork and join processors, methods, systems, and instructions |
US9720693B2 (en) * | 2015-06-26 | 2017-08-01 | Microsoft Technology Licensing, Llc | Bulk allocation of instruction blocks to a processor instruction window |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US10169105B2 (en) * | 2015-07-30 | 2019-01-01 | Qualcomm Incorporated | Method for simplified task-based runtime for efficient parallel computing |
US9921838B2 (en) * | 2015-10-02 | 2018-03-20 | Mediatek Inc. | System and method for managing static divergence in a SIMD computing architecture |
GB2544994A (en) * | 2015-12-02 | 2017-06-07 | Swarm64 As | Data processing |
CN105700913B (zh) * | 2015-12-30 | 2018-10-12 | 广东工业大学 | 一种轻量级裸片代码的并行运行方法 |
US10761849B2 (en) * | 2016-09-22 | 2020-09-01 | Intel Corporation | Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction |
GB201717303D0 (en) * | 2017-10-20 | 2017-12-06 | Graphcore Ltd | Scheduling tasks in a multi-threaded processor |
GB2569098B (en) * | 2017-10-20 | 2020-01-08 | Graphcore Ltd | Combining states of multiple threads in a multi-threaded processor |
GB2569275B (en) * | 2017-10-20 | 2020-06-03 | Graphcore Ltd | Time deterministic exchange |
CN109697084B (zh) * | 2017-10-22 | 2021-04-09 | 刘欣 | 一个用于时分复用流水线处理器的快速访问存储器结构 |
CN108536613B (zh) * | 2018-03-08 | 2022-09-16 | 创新先进技术有限公司 | 数据清理方法、装置、及服务器 |
CN110768807B (zh) * | 2018-07-25 | 2023-04-18 | 中兴通讯股份有限公司 | 虚拟资源方法及装置、虚拟资源处理网元及存储介质 |
CN110955503B (zh) * | 2018-09-27 | 2023-06-27 | 深圳市创客工场科技有限公司 | 任务调度方法及装置 |
GB2580327B (en) * | 2018-12-31 | 2021-04-28 | Graphcore Ltd | Register files in a multi-threaded processor |
CN111414196B (zh) * | 2020-04-03 | 2022-07-19 | 中国人民解放军国防科技大学 | 一种零值寄存器的实现方法及装置 |
CN112395095A (zh) * | 2020-11-09 | 2021-02-23 | 王志平 | 一种基于cpoc的进程同步方法 |
CN112579278B (zh) * | 2020-12-24 | 2023-01-20 | 海光信息技术股份有限公司 | 用于同步多线程的中央处理单元、方法、设备及存储介质 |
TWI775259B (zh) * | 2020-12-29 | 2022-08-21 | 新唐科技股份有限公司 | 直接記憶體存取裝置與使用其的電子設備 |
CN116701085B (zh) * | 2023-06-02 | 2024-03-19 | 中国科学院软件研究所 | RISC-V处理器Chisel设计指令集一致性的形式验证方法及装置 |
CN116954950B (zh) * | 2023-09-04 | 2024-03-12 | 北京凯芯微科技有限公司 | 一种核间通信方法和电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812811A (en) * | 1995-02-03 | 1998-09-22 | International Business Machines Corporation | Executing speculative parallel instructions threads with forking and inter-thread communication |
-
2004
- 2004-08-26 CN CN 200480024800 patent/CN1842770A/zh active Pending
- 2004-08-27 CN CN2004800248529A patent/CN1846194B/zh not_active Expired - Fee Related
- 2004-08-27 CN CNB2004800247988A patent/CN100489784C/zh not_active Expired - Fee Related
- 2004-08-27 CN CNB2004800248016A patent/CN100538640C/zh not_active Expired - Fee Related
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102317912A (zh) * | 2009-02-17 | 2012-01-11 | 松下电器产业株式会社 | 多线程处理器和数字电视*** |
CN102567090A (zh) * | 2010-12-02 | 2012-07-11 | 国际商业机器公司 | 在计算机处理器中创建执行线程的方法和*** |
US9009716B2 (en) | 2010-12-02 | 2015-04-14 | International Business Machines Corporation | Creating a thread of execution in a computer processor |
CN102567090B (zh) * | 2010-12-02 | 2016-03-16 | 国际商业机器公司 | 在计算机处理器中创建执行线程的方法和*** |
CN102831053A (zh) * | 2011-06-17 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种测试执行的调度方法及装置 |
CN102831053B (zh) * | 2011-06-17 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种测试执行的调度方法及装置 |
CN104750607A (zh) * | 2011-06-17 | 2015-07-01 | 阿里巴巴集团控股有限公司 | 一种选择性恢复测试执行的方法及装置 |
CN104750607B (zh) * | 2011-06-17 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 一种选择性恢复测试执行的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100538640C (zh) | 2009-09-09 |
CN1846194B (zh) | 2010-12-15 |
CN1846194A (zh) | 2006-10-11 |
CN1842769A (zh) | 2006-10-04 |
CN1842771A (zh) | 2006-10-04 |
CN100489784C (zh) | 2009-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1842770A (zh) | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 | |
CN1280714C (zh) | 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器 | |
CN1185592C (zh) | 并行处理器结构 | |
CN1287282C (zh) | 执行实时操作的方法和*** | |
CN102880447B (zh) | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 | |
CN1296818C (zh) | 用于多线程并行处理器的指令 | |
CN1111787C (zh) | 使面向目标的应用程序与过程操作***接口的方法与装置 | |
CN100342349C (zh) | 错误推测之后的指令再执行的流水线外部跟踪缓冲器 | |
CN100351788C (zh) | 嵌入式设备的驱动方法 | |
CN1273890C (zh) | Arm处理器架构的微内核设计方法 | |
CN101051301A (zh) | 用于操作计算机处理器阵列的方法和装置 | |
CN1285064A (zh) | 进行无序多线程执行的加载和存储指令排序*** | |
CN1113289C (zh) | 能执行多异步运行任务中的异步事件任务的处理器 | |
CN1284095C (zh) | 多处理器***中的任务分配方法和多处理器*** | |
CN1601474A (zh) | 执行实时操作的方法和*** | |
CN1609812A (zh) | 用于增强协处理器性能的***和方法 | |
CN1577281A (zh) | 调度方法和信息处理*** | |
CN1577311A (zh) | 调度方法和实时处理*** | |
CN1434938A (zh) | 重启动翻译的指令 | |
CN1264078A (zh) | 执行多个操作***的计算机 | |
CN1387644A (zh) | 并行处理器体系结构的sdram控制器 | |
CN1233016A (zh) | 具有事件相关矢量选择的历境控制器和采用其的处理器 | |
CN1918546A (zh) | 程序转换装置及程序转换方法 | |
CN1484787A (zh) | 处理器流水线中的硬件指令翻译 | |
CN1095133C (zh) | 多处理器计算机***中共享结果数据的方法,装置和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20061004 |