CN101689124A - 用于多线程处理器的线程去加重指令 - Google Patents
用于多线程处理器的线程去加重指令 Download PDFInfo
- Publication number
- CN101689124A CN101689124A CN200880015444A CN200880015444A CN101689124A CN 101689124 A CN101689124 A CN 101689124A CN 200880015444 A CN200880015444 A CN 200880015444A CN 200880015444 A CN200880015444 A CN 200880015444A CN 101689124 A CN101689124 A CN 101689124A
- Authority
- CN
- China
- Prior art keywords
- thread
- instruction
- priority
- memory transaction
- unsettled
- 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
- 238000000034 method Methods 0.000 claims abstract description 39
- 230000004044 response Effects 0.000 claims description 21
- 230000008859 change Effects 0.000 claims description 4
- 239000004020 conductor Substances 0.000 description 13
- 238000003860 storage Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 230000002457 bidirectional effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 238000007430 reference method Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/3824—Operand accessing
-
- 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/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- 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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种在处理器(102)中调度线程(221,222)的执行的技术。该技术包括执行线程(221)的线程去加重指令(220),其对线程进行去加重直至与该线程相关联的未决存储器事务(330),如高速缓存未命中,的数目等于或小于阈值(320)。当线程被去加重时,处理器中具有较高优先级的其他线程,可以被执行或被指配系统资源。因此,减小了处理器中发生停止的可能性。
Description
技术领域
[0001]本发明涉及多线程处理器,并且尤其涉及多线程处理器的线程管理。
背景技术
[0002]由于高速缓存未命中(cache misses)或其他存储器事务而引发的指令流水线停止(stall),可能降低处理器的效率。该问题在多线程处理器中尤为严重,由于一个线程引起的指令流水线停止可能延迟其他线程的执行。有些处理器独立于程序流对停止的指令流水线进行监视,并且响应于停止,而许可除了引起停止的线程之外的线程在流水线中被执行的优先级。然而,在指令流水线中监视停止通常是困难的,并且需要额外的处理器开销。因此,需要一种改进的技术,用于在多线程处理器中向线程分配处理器资源。
附图说明
[0003]图1是数据处理设备的具体实施例的框图;
[0004]图2是图1中处理器的具体实施例的框图;
[0005]图3是图2中线程优先级模块的具体实施例的框图;
[0006]图4是描述调度线程的方法的具体实施例的图表;
[0007]图5是描述调度线程的方法的另一具体实施例的图表;以及
[0008]图6是描述调度线程的示例方法的具体实施例的图表。
具体实施方式
[0009]公开了一种在处理器中调度线程的执行的技术。该技术包括执行线程的线程去加重(de-emphasis)指令,其对线程进行去加重,直到与线程相关联的未决存储器事务,诸如高速缓存未命中,的数目等于或小于阈值。当线程被去加重时,在处理器中具有较高优先级的其他线程可以被执行或被指配系统资源。因此,降低了处理器中停止的可能性。
[0010]在一个实施例中,线程去加重指令是程序流中的这样一种指令:该指令在与第一线程相关联的未决存储器事务的数目超过阈值时,通过改变第一线程的优先级状况来对第一线程进行去加重。一旦未决存储器事务的数目等于或低于阈值,即可以恢复第一线程的优先级状况。阈值可以基于线程去加重指令的操作对象(operand),或可以基于预定值。在具体实施例中,阈值是零,从而线程去加重指令对线程进行去加重,直到已经解决了所有与线程相关联的未决存储器事务。
[0011]例如,可以针对特定的存储器事务类型对线程进行去加重。线程去加重指令可以基于与线程相关联的高速缓存未命中数目来对该线程进行去加重。另一种线程去加重指令可以基于与线程相关联的不可高速缓存的存储器访问的数目(即,对标识为不可高速缓存的地址进行的存储器访问的数目)来对线程进行去加重。可替代实施例可以基于除了存储器事务的数目之外的特性来对线程进行去加重。此外,可替代实施例可以通过改变除了线程优先级状况之外的线程特性,诸如改变与线程相关联的“可直接运行(ready-to-run)”比特,来对线程进行去加重。
[0012]相比其他线程,去加重线程被给予较低的处理器资源优先级。例如,如果处理器采用粗粒度多线程,使得在某一时间只有一个线程被指配到指令流水线,那么去加重线程将不会在指令流水线中被执行,直到它相对其他线程不再被去加重。如果处理器采用细粒度多线程,使得在某一时间与不同线程相关联的指令可以在指令流水线的不同级被执行,那么与去加重程序相关联的指令不在指令流水线的特定级被执行,直到执行了与在该级未决的较高优先级的线程相关联的指令。此外,在指令流水线的某些级,去加重线程可以比其他线程具有更低的优先级,但在其他级仍保持其优先级。
[0013]去加重线程也可以在其他处理器资源的分配中被给予较低的优先级。例如,针对高速缓存访问、存储队列访问、完成缓冲条目、指令获取等,去加重线程可被给予较低的优先级。此外,线程可以相对于某些线程被去加重,但相对于其他线程仍维持优先级。
[0014]参考图1,描述了数据处理设备100的具体实施例的框图。数据处理设备100包括处理器102、存储器控制器104、以及存储器106。处理器102和存储器控制器分别连接到总线105。存储器106包括与存储器控制器104的双向连接。
[0015]存储器控制器104经由总线105接收存储器访问信息,并且基于该信息来访问存储器106。存储器106可以存储软件程序和例程,其包括用于在处理器102中执行的指令。存储器106可以是易失性存储器,诸如RAM存储器,或非易失性存储器,诸如闪速存储器或硬盘驱动器。在特定实施例中,存储器106和存储器控制器104集成在与处理器102相同的半导体衬底上。在另一具体实施例中,存储器106处在与处理器102和存储器控制器104分离的半导体衬底上。
[0016]处理器102可以是微处理器、微控制器、ASIC等等。该处理器102是多线程处理器,其被配置用于执行多个线程。线程可以与不同的软件程序或例程相关联,或者可以与单个软件程序或程序或其组合的不同任务相关联。
[0017]在图1所示的实施例中,处理器102包括指令高速缓存110、线程控制模块112、指令流水线114和数据高速缓存116。指令高速缓存110对于指令流水线114和线程控制模块112是可访问的。指令流水线114对于线程控制模块112是可访问的。此外,数据高速缓存116对于指令流水线114是可访问的。
[0018]指令高速缓存110存储指令数据,该指令数据表示要在处理器102中执行的指令。高速缓存的指令数据可以是存储在存储器106中的软件程序数据的拷贝。
[0019]指令流水线114执行指令,以执行任务,诸如存储器访问、算术运算等等。例如,响应于特定的指令,指令流水线114可以访问数据高速缓存116以检索数据。响应于另一指令,指令流水线114可以经由存储器控制器104从存储器106中请求数据,并将请求的数据存储在数据高速缓存116中。
[0020]线程控制模块112存储用于指示每个线程的状况的状态信息,包括每个线程的优先级状况。基于每个线程的优先级状况和其他属性,线程控制模块112分配处理器102的资源,诸如通过调度在指令流水线114中执行线程的顺序。线程控制模块112也跟踪与每个线程相关联的未决存储器事务的数目。
[0021]指令高速缓存110包括明确的线程去加重指令120。在线程去加重指令120的执行过程中,指令流水线114通知线程控制模块112,第一线程的优先级应该已被去加重,直到与第一线程相关联的未决存储器事务的数目等于或低于阈值。在特定实施例中,线程去加重指令120具有无操作(no-op)指令的特殊形式,其指示线程应被去加重,直到没有与该线程相关联的存储器事务是未决的。
[0022]响应于指令流水线114中线程去加重指令120的执行,线程控制模块112调整第一线程的优先级状态,以相对于其他线程对该线程进行去加重。在特定实施例中,这是通过清除与该线程相关联的“可直接运行”比特来实现的。只要该比特被清除,该线程将被给予低的执行优先级。即使当该比特被清除时,线程控制模块仍可以针对该线程跟踪其他的优先级信息,使得当可直接运行比特被设置时,给予该线程适当的优先级。此外,线程控制模块112监视指令流水线114,并且跟踪与第一线程相关联的未决存储器事务的数目。一旦已经解决了由线程去加重指令120指示的未决存储器事务的数目,线程控制模块112即设置优先级状态使得第一线程不再被去加重。
[0023]因此,线程去加重指令120可用于对特定的线程进行去加重,直到与该线程相关联的存储器事务数目等于或低于阈值。这允许程序员或编译器有效地分配指令流水线114的资源。例如,线程去加重指令120可以在用户认为将导致指令流水线114的停止的指令之后或之前的线程的程序流中实施,诸如在一系列加载指令之后,其可导致大量的高速缓存未命中。线程被去加重,直到解决了与加载指令相关联的存储器事务,当存储器事务正在解决时,允许指令流水线114执行与其他线程相关联的指令。
[0024]参考图2,示出了对应于诸如图1的处理器102的处理器的处理器202的框图。处理器202包括指令高速缓存210、线程控制模块212、指令流水线214和数据高速缓存216。指令高速缓存210可由线程控制模块212经由总线296访问以及可由指令流水线214访问。数据高速缓存216可由指令流水线214访问。
[0025]指令高速缓存210包括与线程相关联的指令集合,包括线程A指令221和线程B指令222。线程A指令221包括线程去加重指令220,以相对于线程B对线程A进行去加重,直到与线程A相关联的未决存储器事务已经得到解决。
[0026]线程控制模块212包括连接到线程优先级模块235的线程调度器模块230。线程优先级模块235包括连接到总线290的输入,以接收已经完成了线程的存储器事务的指示。该线程调度器模块230包括连接到总线291、总线292、总线293、总线294、总线295及总线296的输出。该线程调度器模块230在每个总线291-296上提供控制信息,用于在指令流水线214的各级调度指令的执行。
[0027]线程优先级模块235针对处理器202中的每个线程存储优先级状态信息,包括线程A和线程B,并且基于优先级状态信息,将优先级状况信息提供给线程调度器模块230。基于优先级状况信息,线程调度器模块230在总线291-296上提供控制信息,用于在指令流水线214的各级调度指令的执行。
[0028]指令流水线214包括指令获取级240、解码级242、调遣级244和加载/存储单元246、执行单元248和执行单元249。执行单元248和249可以是加载/存储单元、浮点运算单元、整数运算单元等等。指令流水线214还包括缓冲器250-254。
[0029]指令获取级240包括连接到指令高速缓存210的输入和输出。缓冲器250包括连接到指令获取级240的输出的输入、连接到总线295的输入、和输出。解码级242包括连接到缓冲器250的输入和输出。缓冲器251包括连接到解码级240的输出的输入、连接到总线294的输入、和输出。调遣级244包括连接到缓冲器251的输出的输入和三个输出。
[0030]缓冲器252包括连接到调遣级244的第一输出的输入、连接到总线292的输入、和输出。加载/存储单元246包括连接到缓冲器251的输出的输入、至总线290的连接和至数据高速缓存216的连接。
[0031]缓冲器253包括连接到调遣级244的第二输出的输入、连接到总线293的输入、和输出。执行单元248包括连接到缓冲器253的输出的输入。缓冲器254包括连接到调遣级244的第三输出的输入、连接到总线291的输入、和输出。执行单元249包括连接到缓冲器254的输出的输入。
[0032]指令获取级240从指令高速缓存210获取指令数据并且向缓冲器250提供所获取的指令数据。基于经由总线293接收到的控制信息,解码部分242访问来自缓冲器250的指令。
[0033]解码级242对在缓冲器250中访问的指令进行解码,并将解码指令提供给缓冲器251。基于经由总线292接收到的控制信息,调遣级访问在缓冲器251中的解码指令。调遣级244确定加载/存储单元246、执行单元248、和执行单元249中的哪个执行单元,并基于该确定将解码指令发送到缓冲器252-254之一。
[0034]缓冲器252存储由调遣级244提供的解码指令。基于经由总线292提供的控制信息,加载/存储单元246访问解码指令。基于从缓冲器252接收到的指令,加载/存储单元246在数据高速缓存216处执行加载和存储操作。此外,加载/存储单元可对处理器202外部的存储器执行加载和存储操作。例如,当数据高速缓存216处发生高速缓存未命中时,加载/存储单元通过从数据高速缓存216的外部存储器加载与高速缓存未命中相关联的数据来解决高速缓存未命中。而且,加载/存储经由总线290提供关于每个线程的未决存储器事务的信息。例如,在与某线程相关联的高速缓存未命中得到解决之后,加载/存储单元246经由总线290提供这样的信息:该信息指示与该线程相关联的未决高速缓存未命中的数目已减小了一。
[0035]缓冲器253存储由调遣级244提供的解码指令。基于经由总线293提供的控制信息,执行单元248访问解码指令。执行单元248执行由缓冲器253提供的指令。缓冲器254存储由调遣级244提供的解码指令。基于经由总线291提供的控制信息,执行单元249访问解码指令。执行单元249执行在缓冲器254中访问的指令。
[0036]在操作过程中,线程调度器模块230从线程优先级模块235接收优先级信息。基于该优先级信息,线程调度器模块230向缓冲器250-254以及指令高速缓存210提供控制信息,以控制处理器资源的分配,包括在指令流水线214的每级执行线程指令的顺序。例如,基于接收到的优先级信息,线程调度器模块230可以确定在解码级242中,应当给予线程A指令221比线程B指令222高的优先级。因此,线程调度器模块230经由总线295向缓冲器250提供控制信息,使得存储在缓冲器250中的线程A指令在存储在缓冲器250的线程B指令被提供之前被提供给解码级242。因此,通过向指令高速缓存210和缓冲器250-254提供适当控制信息,线程调度器模块230控制在指令流水线214的每级执行线程指令的顺序。
[0037]线程调度器模块230基于存储在线程优先级模块235中的优先级信息,确定线程指令的执行顺序。在加载/存储单元246中通过执行线程去加重指令220,可以改变线程优先级信息。响应于线程去加重指令220的执行,加载/存储单元246向线程优先级模块235提供这样的信息:该信息指示线程A应被去加重,直到与该线程相关联的未决存储器事务数目低于阈值。加载/存储单元246也可以基于线程去加重指令220的操作对象,提供用于设置该阈值的信息。
[0038]作为响应,线程优先级模块235确定与线程A相关联的未决存储器事务的数目,并且如果该数目超过阈值,则改变与线程A相关联的优先级状态,以便使其相对于线程B去加重。
[0039]当加载/存储单元246解决了与线程A相关联的未决存储器事务时,它经由总线290通知线程优先级模块235。作为响应,线程优先级模块235调整与线程A相关联的未决存储器事务的数目,并且当存储器事务的数目低于阈值时,调整线程A的优先级状态,以使它相对于线程B不再被去加重。因此,当未决存储器事务的数目下滑至低于阈值时,线程A的优先级状况自动恢复到其以前的状况。
[0040]参考图3,图3示出对应于图2的线程优先级模块235的线程优先级模块335的框图。线程优先级模块335包括存储器事务控制模块302、存储器事务寄存器集合304、存储器事务计数器集合306、优先级状况寄存器集合308、和优先级确定模块310。存储器事务控制模块302包括至存储器事务寄存器集合304以及至存储器事务计数器集合306的双向连接。存储器事务控制模块还包括来自加载/存储单元246(图2)的输入和输出。优先级状况寄存器集合308包括连接到存储器事务控制模块302的输出的输入和输出。优先级确定模块310包括连接到优先级状况寄存器集合308的输出的输入和连接到线程调度器模块230的输出(图2)。
[0041]存储器事务控制模块302被配置用于接收来自加载/存储单元246的控制信息,并且基于该信息对存储在存储器事务寄存器集合304中、存储器事务计数器集合306中、以及优先级状况寄存器集合308中的值进行适当调整。
[0042]存储器事务寄存器集合304包括寄存器320,其用于存储与线程A相关联的存储器事务的阈值,和寄存器321,其用于存储与线程B相关联的存储器事务的阈值,存储在寄存器320和321中的存储器事务的阈值可以基于加载/存储单元246提供的信息,通过存储器事务控制模块302被设置,例如基于线程去加重指令的操作对象的信息。在另一实施例中,存储器事务阈值是由ROM存储器、操作系统等等固定的值。
[0043]存储器事务计数器集合306包括计数器330,其存储与线程A相关联的未决存储器事务的数目,以及计数器331,其存储与线程B相关联的未决存储器事务的数目。存储器事务控制模块302可以单独地调整存储在计数器330和331中的值。
[0044]优先级状况寄存器集合308包括寄存器340,其存储与线程A相关联的优先级状况信息,以及寄存器341,其存储与线程B相关联的优先级状况信息。存储器事务控制模块302可以单独地调整存储在寄存器340和341中的状态信息。
[0045]优先级确定模块基于存储在寄存器340和341中的优先级状况状态信息,确定线程A和线程B的优先级。基于每个线程的优先级,优先级确定模块向线程调度器模块230提供控制信息,以使与每个线程相关联的指令以适当的顺序在指令流水线214的每级被执行(图2)。
[0046]在操作过程中,存储器事务控制模块302接收来自加载/存储单元246的信息,该信息指示与线程相关联的存储器事务未决,或者指示与线程相关联的存储器事务已得到解决。作为响应,存储器事务控制模块302调整存储在存储器事务计数器集合306中的值。
[0047]例如,加载/存储单元246可以向存储器事务控制模块302指示由于与线程A相关联的指令发生了高速缓存未命中。作为响应,存储器事务控制模块302调整存储在计数器330中的值,以反映该高速缓存未命中未决。在该高速缓存未命中解决之后(即通过从外部存储器获得数据并将其加载到数据高速缓存216(图2)),加载/存储单元246向存储器事务控制模块302指示高速缓存未命中已解决。作为响应,存储器事务控制模块302调整存储在计数器330中的值,以反映该存储器事务已得到解决。因此,存储在计数器330和331中的值反映与线程A和线程B分别相关联的未决存储器事务的数目。
[0048]此外,加载/存储单元246可以向存储器事务控制模块302提供信息,该信息指示已经接收到与线程相关联的线程去加重指令。作为响应,存储器事务控制模块302将如存储器事务计数器集合306所反映的与线程相关联的未决存储器事务的数目和如存储器事务计数器集合304所反映的与该线程相关联的存储器事务阈值相比较。基于比较结果,存储器事务控制模块302通过在优先级状况寄存器308中调整线程的状况状态,来调整线程的优先级。
[0049]例如,如果线程去加重指令与线程B相关联,则存储器事务控制模块302将存储在计数器331中的值和存储在寄存器321中的阈值进行比较。如果比较表明,与线程B相关联的未决存储器事务的数目超过阈值,则存储器事务控制模块302调整寄存器321所存储的值,以使线程B去加重。
[0050]参考图4,图4示出了调度线程执行的方法的具体实施例的图示。在框402中,在时间t0基于每个线程的优先级状况执行线程。在示出的示例中,线程A的优先级高于线程B,使得线程A指令在线程B指令之前执行。
[0051]在框404中,在时间t1处理线程A中的线程去加重指令。该线程去加重指令的执行导致线程A的去加重,从而给予线程B最高优先级。因此,在框406中,线程A的执行被暂停,直到与线程A相关联的未决存储器事务已经得到解决。因此,在示出的实施例中,在时间t2只有线程B指令被执行,直到线程A的未决存储器事务已经得到解决。
[0052]进行至框408,在线程A的未决存储器事务已经得到解决之后,在时间t3恢复线程A的优先级状况。因此,如图所示线程A重新获得高于线程B的执行优先级。
[0053]参考图5,图5示出了调度线程执行的方法的另一个具体实施例的图示。在框502,在时间t0基于每个线程的优先级状况执行线程。在示出的示例中,线程A的优先级高于线程B和C,而线程B的优先级高于线程C。
[0054]在框504中,在时间t1接收到针对线程A的线程去加重指令,导致线程A的去加重。因此,在框506中,线程A被去加重,直到与线程A相关联的未决存储器事务已经得到解决。因此,在示出的示例中,在框506中,在时间t2线程B具有高于线程A的执行优先级。然而,线程A的优先级仍保持高于线程C。因此,在示出的示例中,可以相对于其他线程单独地对线程进行去加重。
[0055]进行至框508,在线程A的未决存储器事务已经得到解决之后,在时间t3恢复线程A的优先级状况。因此,如图所示线程A的优先级重新获得高于线程B的优先级。
[0056]参考图6,图6示出了在指令流水线中调度线程执行的示例性方法602和604的框图。方法602描述了在没有线程去加重指令时指令流水线中的线程调度。相反,方法604描述了当从线程A执行线程去加重指令时,在指令流水线中的线程调度。如图所示,对于两种方法602和604,在缺少明确的去加重的情况下,线程A通常具有高于线程B的优先级。
[0057]参考方法602,在框610,在指令高速缓存中存储两个指令,第一个与线程A相关联,第二个与线程B相关联。在框612中,根据每个指令的当前优先级,指令流水线的获取级获得指令,使得线程A指令先于线程B指令被获得。
[0058]在框614中,在指令流水线的解码级在缓冲器中存储两个指令。在框616中,基于每个指令的当前优先级状况对指令进行解码,使得线程A指令先于线程B指令被解码。因此,如果线程A指令导致停止,则直到停止得到解决才对线程B指令进行解码。
[0059]参考方法604,在框620中,在指令高速缓存中存储两个指令,第一个与线程A相关联,第二个与线程B相关联。在框622中,根据每个指令的当前优先级状况,指令流水线的获取级获得指令,使得线程A指令先于线程B指令被获得。
[0060]在框624中,在指令流水线的解码级在缓冲器中存储两个指令。如图所示,在框624,缓冲器接收控制信息,该控制信息指示与线程A相关联的线程去加重指令已经在指令流水线的另一级中被执行。响应于线程去加重指令,线程A的优先级状况相对于线程B被去加重。因此,在框626,基于每个指令的当前优先级状况对指令进行解码,使得线程B指令先于线程A指令被解码。因此,如果线程A指令导致停止,则在停止被解决的同时对线程B指令进行解码,这导致指令流水线的操作相对于方法602更高效。
[0061]在此文档中,关系术语,诸如“第一”和“第二”,等等,可以仅用于将一个实体或动作与另一个实体或动作区分开,而不必要求或暗示这些实体和动作之间的任何实际的这种关系或顺序。术语“包括”,或其任何其他变形,是用以涵盖非排他的内含物,使得包括一系列元素的过程、方法、物品或装置不仅仅包括那些元素,还可能包括没有明确列出的或该过程、方法、物品或装置所固有的其他元素。在没有更多的限制的情况下,以“包括…一”开始的元素,并没有排除在包括该元素的过程、方法、物品或装置中存在其他同等元素。术语“或”往往指包含性的“或”,以使得在“或”条件性的两个条件都得到满足时,条件性得到满足。术语“范围”可以包括只包括单个值的范围。
[0062]本文中所使用的术语“另一个”,被定义为至少第二或更多。本文中所使用的术语“包括”、“具有”及其任何变形被定义为包括。此外使用的术语“耦合”,参考电-光技术,被定义为连接,尽管不必是直接连接,也不必是机械连接。
[0063]此处使用的术语“总线”用于指可以用于传输一个或多个不同类型的信息,诸如数据、地址、控制或状况的多个信号或导体。此处所讨论的导体,可示出或描述为单个导体、多个导体、单向导体或双向导体。然而,不同实施例可以改变导体的实现方式。例如,可以使用独立的单向导体而非双向导体,反之亦然。而且,多个导体可由单个导体替换,其串行传输或以时间复用方式传输多个信号。同样,承载多个信号的单个导体可被分割成多个不同的导体来承载这些信号的子集。因此,存在用于传输信号的许多选项。
[0064]只要考虑到此处公开的说明书和实践,该发明的其它实施例、使用和优点对于本领域技术人员来说将是显而易见的。例如,虽然此处公开的性能事件监视技术是相对于单个处理器讨论的,但类似的技术也可以应用于具有多个处理器核的设备。每个处理器核可以与不同的性能事件监视相关联,或设备的每个性能事件监视可与多个处理器核相关联。说明书和附图应当仅仅作为示例,并且本发明的范围相应地仅由所附权利要求及其等效范围所限定。
Claims (20)
1.一种方法,包括:
在处理器中执行第一线程的第一线程去加重指令;以及
响应于执行所述第一线程去加重指令,基于与所述第一线程相关联的未决存储器事务的数目与第一阈值之间的第一关系,对所述第一线程的优先级状况进行去加重。
2.根据权利要求1所述的方法,进一步包括:响应于对所述第一线程的优先级状况进行去加重,暂停所述第一线程的执行,所述第一线程的优先级状况被设置为第一状态。
3.根据权利要求1所述的方法,进一步包括:当所述第一线程的优先级状况被去加重时,在所述处理器中执行第二线程。
4.根据权利要求1所述的方法,进一步包括:基于所述第一线程的优先级状况,指配所述处理器中的处理器资源。
5.根据权利要求1所述的方法,进一步包括:
当所述第一线程的优先级状况被去加重时,接收与所述第一线程相关联的未决存储器事务的数目改变的指示;
响应于所述指示,将所述第一线程的优先级状况恢复为第二状态。
6.根据权利要求5所述的方法,进一步包括:
响应于对所述第一线程的优先级状况进行去加重,暂停所述第一线程的执行;以及
响应于恢复所述第一线程的优先级状况,而再继续所述第一线程的执行。
7.根据权利要求1所述的方法,其中与所述第一线程相关联的未决存储器事务的数目是基于与所述第一线程相关联的高速缓存未命中的数目。
8.根据权利要求1所述的方法,其中与所述第一线程相关联的未决存储器事务的数目是基于与所述第一线程相关联的不可高速缓存的存储器事务的数目。
9.根据权利要求1所述的方法,其中与所述第一线程相关联的未决存储器事务的数目与第一存储器事务类型相关联,所述第一存储器事务类型是基于所述第一线程去加重指令。
10.根据权利要求1所述的方法,其中所述第一阈值是基于所述第一线程去加重指令的操作对象。
11.根据权利要求1所述的方法,其中所述第一线程去加重指令是无操作指令。
12.根据权利要求1所述的方法,进一步包括:
在所述处理器中接收第二线程的第二线程去加重指令;
响应于接收所述第二线程去加重指令,基于与所述第二线程相关联的未决存储器事务数目与第二阈值之间的第一关系,对所述第二线程的优先级状况进行去加重。
13.一种设备,包括:
指令流水线,所述指令流水线被配置用于执行多个线程的指令;以及
线程控制模块,包括:
线程调度器模块,所述线程调度器模块被配置为基于所述多个线程中的每一个线程的优先级水平,调度所述指令流水线中多个线程的指令的执行;以及
优先级控制模块,所述优先级控制模块被配置为响应于所述指令流水线中第一线程去加重指令的执行,基于与所述第一线程相关联的未决存储器事务数目与第一阈值之间的第一关系,对所述多个线程中的第一线程的优先级状况进行去加重。
14.根据权利要求13所述的设备,其中所述线程调度器模块被配置为响应于对所述第一线程的优先级状况进行去加重,而暂停所述第一线程的执行。
15.根据权利要求13所述的设备,其中所述线程调度器模块被配置为基于所述多个线程中的每一个线程的优先级状况,分配所述指令流水线的资源。
16.根据权利要求13所述的设备,其中
优先级控制模块被配置为响应于所述指令流水线中第二指令的执行,而将所述多个线程中的第二线程的优先级水平设置为第一状态,基于与所述第二线程相关联的未决存储器事务数目与第二阈值之间的第一关系,将所述第二线程的优先级水平设置为所述第一状态。
17.根据权利要求13所述的设备,其中所述第一阈值是基于所述第一线程去加重指令的操作对象。
18.根据权利要求13所述的设备,其中与所述第一线程相关联的未决存储器事务的数目是基于与所述第一线程相关联的高速缓存未命中的数目。
19.根据权利要求13所述的设备,其中与所述第一线程相关联的未决存储器事务的数目是基于与所述第一线程相关联的不可高速缓存的存储器事务的数目。
20.一种包括用于操控处理器的多个指令的计算机可读介质,所述多个指令包括:
用于在处理器中执行多个线程中的第一线程的第一线程去加重指令的指令;以及
用于基于与所述第一线程相关联的未决存储器事务数目与第一阈值之间的第一关系来对所述第一线程的优先级状况进行去加重的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/746,998 US8832702B2 (en) | 2007-05-10 | 2007-05-10 | Thread de-emphasis instruction for multithreaded processor |
US11/746,998 | 2007-05-10 | ||
PCT/US2008/061713 WO2008140921A1 (en) | 2007-05-10 | 2008-04-28 | Thread de-emphasis instruction for multithreaded processor |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101689124A true CN101689124A (zh) | 2010-03-31 |
Family
ID=39970715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200880015444A Pending CN101689124A (zh) | 2007-05-10 | 2008-04-28 | 用于多线程处理器的线程去加重指令 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8832702B2 (zh) |
EP (1) | EP2147373B1 (zh) |
JP (1) | JP5413853B2 (zh) |
KR (1) | KR101519891B1 (zh) |
CN (1) | CN101689124A (zh) |
WO (1) | WO2008140921A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106909444A (zh) * | 2011-12-22 | 2017-06-30 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8886918B2 (en) * | 2007-11-28 | 2014-11-11 | International Business Machines Corporation | Dynamic instruction execution based on transaction priority tagging |
US20090138683A1 (en) * | 2007-11-28 | 2009-05-28 | Capps Jr Louis B | Dynamic instruction execution using distributed transaction priority registers |
US8453146B2 (en) * | 2009-12-23 | 2013-05-28 | Intel Corporation | Apportioning a counted value to a task executed on a multi-core processor |
US8589934B2 (en) * | 2011-04-01 | 2013-11-19 | Arm Limited | Controlling priority levels of pending threads awaiting processing |
KR101420592B1 (ko) * | 2012-12-21 | 2014-07-17 | 전남대학교산학협력단 | 컴퓨터 시스템 |
KR101553649B1 (ko) | 2013-05-13 | 2015-09-16 | 삼성전자 주식회사 | 멀티 코어 장치 및 멀티 코어 장치의 작업 스케줄링 방법 |
JP6183049B2 (ja) * | 2013-08-15 | 2017-08-23 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US9928068B2 (en) * | 2015-12-07 | 2018-03-27 | International Business Machines Corporation | Hardware managed dynamic thread fetch rate control |
US10572307B2 (en) * | 2017-07-26 | 2020-02-25 | Bank Of America Corportion | System and method of training machine learning algorithm to satisfactorily allocate resources for task execution |
KR102639415B1 (ko) * | 2023-07-18 | 2024-02-23 | 메티스엑스 주식회사 | 프로세서에서 단일 트랜잭션으로부터 변환된 복수의 트랜잭션들을 처리하는 방법 및 이를 수행하기 위한 프로세서 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07110773A (ja) | 1993-10-12 | 1995-04-25 | Canon Inc | タスクの切替え装置 |
US5724565A (en) | 1995-02-03 | 1998-03-03 | International Business Machines Corporation | Method and system for processing first and second sets of instructions by first and second types of processing systems |
US5887166A (en) | 1996-12-16 | 1999-03-23 | International Business Machines Corporation | Method and system for constructing a program including a navigation instruction |
US6658447B2 (en) * | 1997-07-08 | 2003-12-02 | Intel Corporation | Priority based simultaneous multi-threading |
US6105051A (en) * | 1997-10-23 | 2000-08-15 | International Business Machines Corporation | Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor |
US6212544B1 (en) * | 1997-10-23 | 2001-04-03 | International Business Machines Corporation | Altering thread priorities in a multithreaded processor |
US6567839B1 (en) | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US6477562B2 (en) | 1998-12-16 | 2002-11-05 | Clearwater Networks, Inc. | Prioritized instruction scheduling for multi-streaming processors |
GB2372847B (en) * | 2001-02-19 | 2004-12-29 | Imagination Tech Ltd | Control of priority and instruction rates on a multithreaded processor |
US6918116B2 (en) * | 2001-05-15 | 2005-07-12 | Hewlett-Packard Development Company, L.P. | Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit |
NZ534314A (en) * | 2002-01-30 | 2005-04-29 | Real Entpr Solutions Dev B | Method of setting priority levels in a multiprogramming computer system with priority scheduling, multiprogramming computer system and program therefor |
JP2004234123A (ja) * | 2003-01-28 | 2004-08-19 | Fujitsu Ltd | マルチスレッドコンピュータ |
US7469407B2 (en) * | 2003-04-24 | 2008-12-23 | International Business Machines Corporation | Method for resource balancing using dispatch flush in a simultaneous multithread processor |
US7401207B2 (en) * | 2003-04-25 | 2008-07-15 | International Business Machines Corporation | Apparatus and method for adjusting instruction thread priority in a multi-thread processor |
US7380247B2 (en) * | 2003-07-24 | 2008-05-27 | International Business Machines Corporation | System for delaying priority boost in a priority offset amount only after detecting of preemption event during access to critical section |
JP2006099569A (ja) | 2004-09-30 | 2006-04-13 | Kyocera Mita Corp | メモリインタフェース回路及びクロック制御方法 |
US7584344B2 (en) * | 2006-05-02 | 2009-09-01 | Freescale Semiconductor, Inc. | Instruction for conditionally yielding to a ready thread based on priority criteria |
-
2007
- 2007-05-10 US US11/746,998 patent/US8832702B2/en active Active
-
2008
- 2008-04-28 EP EP08746993.8A patent/EP2147373B1/en active Active
- 2008-04-28 CN CN200880015444A patent/CN101689124A/zh active Pending
- 2008-04-28 KR KR1020097023333A patent/KR101519891B1/ko active IP Right Grant
- 2008-04-28 WO PCT/US2008/061713 patent/WO2008140921A1/en active Application Filing
- 2008-04-28 JP JP2010507523A patent/JP5413853B2/ja active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106909444A (zh) * | 2011-12-22 | 2017-06-30 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
CN106909444B (zh) * | 2011-12-22 | 2021-01-12 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2147373B1 (en) | 2018-11-21 |
WO2008140921A1 (en) | 2008-11-20 |
US8832702B2 (en) | 2014-09-09 |
KR101519891B1 (ko) | 2015-05-13 |
EP2147373A1 (en) | 2010-01-27 |
US20080282251A1 (en) | 2008-11-13 |
EP2147373A4 (en) | 2011-11-23 |
JP5413853B2 (ja) | 2014-02-12 |
JP2010527071A (ja) | 2010-08-05 |
KR20100016347A (ko) | 2010-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101689124A (zh) | 用于多线程处理器的线程去加重指令 | |
US8898435B2 (en) | Optimizing system throughput by automatically altering thread co-execution based on operating system directives | |
US8539485B2 (en) | Polling using reservation mechanism | |
US8555039B2 (en) | System and method for using a local condition code register for accelerating conditional instruction execution in a pipeline processor | |
US10761846B2 (en) | Method for managing software threads dependent on condition variables | |
EP1685486B1 (en) | Interrupt handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation | |
US9652243B2 (en) | Predicting out-of-order instruction level parallelism of threads in a multi-threaded processor | |
US6845504B2 (en) | Method and system for managing lock contention in a computer system | |
US10078518B2 (en) | Intelligent context management | |
JP5548037B2 (ja) | 命令発行制御装置及び方法 | |
US10831537B2 (en) | Dynamic update of the number of architected registers assigned to software threads using spill counts | |
WO2013117434A1 (en) | Multi-threaded processor instruction balancing through instruction uncertainty | |
US20120284720A1 (en) | Hardware assisted scheduling in computer system | |
US20110302395A1 (en) | Hardware assist thread for dynamic performance profiling | |
US20160357554A1 (en) | Controlling execution of instructions for a processing pipeline having first and second execution circuitry | |
US10884754B2 (en) | Infinite processor thread balancing | |
US8589942B2 (en) | Non-real time thread scheduling | |
US10102003B2 (en) | Intelligent context management | |
EP4217855A1 (en) | Processor with multiple fetch and decode pipelines | |
US10353817B2 (en) | Cache miss thread balancing | |
US20040128488A1 (en) | Strand switching algorithm to avoid strand starvation | |
US20190146831A1 (en) | Thread switch for accesses to slow memory | |
CN116324719A (zh) | 具有多个op高速缓存管线的处理器 |
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: 20100331 |