CN101689109A - 指令控制装置以及指令控制方法 - Google Patents
指令控制装置以及指令控制方法 Download PDFInfo
- Publication number
- CN101689109A CN101689109A CN200780053381A CN200780053381A CN101689109A CN 101689109 A CN101689109 A CN 101689109A CN 200780053381 A CN200780053381 A CN 200780053381A CN 200780053381 A CN200780053381 A CN 200780053381A CN 101689109 A CN101689109 A CN 101689109A
- Authority
- CN
- China
- Prior art keywords
- instruction
- lsb decoder
- thread
- described instruction
- buffer
- 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 title claims description 21
- 239000000872 buffer Substances 0.000 claims abstract description 83
- 230000014509 gene expression Effects 0.000 claims description 34
- 238000012423 maintenance Methods 0.000 claims description 10
- 238000002347 injection Methods 0.000 claims description 6
- 239000007924 injection Substances 0.000 claims description 6
- 238000012545 processing Methods 0.000 abstract description 77
- 230000006870 function Effects 0.000 description 26
- 238000010586 diagram Methods 0.000 description 15
- 238000012360 testing method Methods 0.000 description 14
- 238000004321 preservation Methods 0.000 description 12
- 102100040024 Adhesion G-protein coupled receptor G5 Human genes 0.000 description 11
- 101000959600 Homo sapiens Adhesion G-protein coupled receptor G5 Proteins 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 8
- 230000005055 memory storage Effects 0.000 description 8
- 238000012546 transfer Methods 0.000 description 6
- 230000001151 other effect Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 230000005764 inhibitory process Effects 0.000 description 3
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000002203 pretreatment Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- WSZPRLKJOJINEP-UHFFFAOYSA-N 1-fluoro-2-[(2-fluoro-2,2-dinitroethoxy)methoxy]-1,1-dinitroethane Chemical compound [O-][N+](=O)C(F)([N+]([O-])=O)COCOCC(F)([N+]([O-])=O)[N+]([O-])=O WSZPRLKJOJINEP-UHFFFAOYSA-N 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
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
本发明在具有执行多个由一系列表示处理的指令组成的线程的SMT功能的CPU(10)中,包括:解码部(109),对多个线程的指令表示的处理进行解码;指令缓冲器(104),从线程获取指令并保持,按照线程中的顺序将保持的指令注入解码部(109);和执行流水线(220),执行由解码部(109)解码的指令的处理;解码部(109)在上述指令解码时,确认该指令可执行的条件是否具备,对于条件不具备的指令以后的由指令缓冲器(104)保持的指令,对该解码部(109)请求再次注入。
Description
技术领域
本发明涉及具有同时执行多个包括一系列表示处理的指令的线程的同步多线程功能的指令控制装置以及指令控制方法。
背景技术
在由CPU代表的指令控制装置的内部,表示处理的指令经过指令的取入(读取(Fetch))、指令的解读(解码(decode))、指令的执行、执行结果的确定(提交(commit))等一系列阶段而被处理。以前,为了使指令控制装置中的上述各阶段的处理高速化,有称作流水线的处理系统。在流水线中,读取和解码等各阶段的处理分别由独立的小系统进行。据此,例如能够在某个指令执行的同时并行执行其他指令,等等,指令控制装置中的处理实现高速化。
近年来,包括多个这种流水线、进一步实现处理的高速化的称作超标量体系结构(superscalar)的处理系统正在普及。并且,作为该超标量体系结构中的实现处理的进一步高速化的功能,有称作乱序执行的功能。
图1是表示超标量体系结构中的乱序执行的概念图。
该图1中表示超标量体系结构中的乱序执行的一个例子。
在图1的例子中处理4个指令。各个指令经过读取(步骤S501)、解码(步骤S502)、执行(步骤S503)以及提交(步骤S504)这4个阶段而被处理。在此,对于4个指令,读取(步骤S501)、解码(步骤S502)以及提交(步骤S504)通过按照程序上的处理顺序来执行处理的按序执行来进行。并且,指令的执行(步骤S503)通过不按照程序上的处理顺序执行的乱序执行来进行。
4个指令按照程序上的处理顺序被读取(步骤S501)并被解码(步骤S502)以后,与该处理顺序无关地、在获得执行(步骤S501)所需的计算数据等(操作数(operand))后转向执行(步骤S503)。在图1的例子中,对于4个指令同时获得操作数,各个指令相互同时地开始。
以上述方式,通过乱序执行,能够与程序上的处理顺序无关地同时并行处理多个指令,因此指令控制装置中的处理实现高速化。
在执行(步骤S503)以后,以按序执行的方式按照程序上的处理顺序进行对4个指令的提交(步骤S504)。在比该处理顺序中的先行指令先结束了执行(步骤S503)的后续指令,在先行指令的执行(步骤S503)结束之前成为等待提交的状态。在图1的例子中,针对4个指令的执行(步骤S503)分为4层图示,图中越上层的,在程序上的处理顺序越早。在该图1的例子中,最上层图示的处理顺序是最早的,该指令的执行(步骤S503)最花时间,因此其他3个指令成为等待提交。
另外,近年来,由指令控制装置处理的程序大多组合多个处理单位(线程)而构成,这些处理单位包括一系列的多个指令,能够相互同时地并行执行。
为了执行指令,指令控制装置大多包括多个运算器。并且,在指令执行时,很多情况下,在各个周期中仅使用上述多个运算器中的一部分,因此运算器的利用率有较大的余量。
因此,作为提高运算器的利用率的技术,提出了在各周期中,将某个线程不使用的运算器分配给其他线程以同时并行处理多个线程的指令的同步多线程(SMT:Simultaneous Multi Threading)功能这一技术。
图2是概念性地表示SMT功能的一个例子的图。
在该图2中,表示属于线程A以及线程B这两种线程的指令通过SMT功能执行的情形。在图2中的纵轴方向上排列的4个方块分别表示在指令控制装置中进行指令的执行的运算器,各个方块中记载的字母“A”以及“B”分别表示由对应于该方块的运算器执行的指令所属的线程种类。
此外,横轴表示指令控制装置中的时钟周期。在图2的例子中,在第1周期(步骤S511)中,上面的2个运算器执行线程A的指令,下面的2个运算器执行线程B的指令。在第2周期(步骤S512)中,最上面和最下面的2个运算器执行线程A的指令,中间的2个运算器执行线程B的指令。此外,在第3周期(步骤S513)中,上面的3个运算器执行线程A的指令,最下面的1个运算器执行线程B的指令。
这样,通过SMT功能,在各个周期中同时并行执行多个线程的指令。
图3是表示SMT功能的一个例子的与图2不同的概念图。
在该图3的例子中,属于线程A以及线程B这两种线程的指令被交替地读取和解码后,在执行中,在取得了各个指令的执行所需的操作数和运算器的情况下,如图2所示那样在两种线程之间同时并行进行指令的执行。在图3的例子中,在图中用斜线表示的时间T1中,在两种线程之间同时并行进行指令的执行。
此外,关于提交,在相同种类的线程之间,先行指令的提交全部结束之前无法进行后续指令的提交,但在不同种类的线程之间,无须等待先行指令的提交的结束便可进行后续指令的提交。在图3的例子中,无须等待对线程A读取的指令的提交结束,便可进行对线程B读取的指令的提交。
如上面参照图2以及图3说明的那样,根据SMT功能,在多种线程间,指令的执行能够相互同时地并行执行,在不同种类的线程间,无须等待先行指令的提交结束便可进行后续指令的提交,因此实现了指令控制装置的处理效率的提高。
在包括这种SMT功能的指令控制装置中,为了能够实现多种线程间的指令的同时并行执行,具备数量为线程数的在程序上指示访问的所谓程序可见的构成要素。另一方面,关于运算器和解码部,往往在多种线程之间共同使用。对于如上所述的运算器,由于将多个运算器在多种线程间分配来使用,所以无须具备数量为线程数的运算器便可实现多种线程间的指令的同时并行执行。但是,对于解码部,由于电路结构复杂并且电路规模大,所以与上述运算器不同,往往只具备一个解码部。在此情况下,解码部在多种线程间共同使用,一次只能解码一个线程的指令。在此,在指令中,存在在同一线程中禁止与先行指令同时执行的指令。像这样由于某种原因而无法执行指令的处理的状态称作停顿(stall)。此外,将引起该停顿的原因称作停顿原因。
以前,对于被确认发生停顿的指令,在所需的条件具备、停顿原因消除之前,原样停留在解码部中。
图4是表示在单线程类型的指令控制装置中,发生了指令的解码部中的停顿的情形的概念图。
在该图4的例子中,通过指令读取部501中的一次读取,8个指令被取入指令缓冲器502中。指令缓冲器502具有多个项(IBR:InstructionBuffeR,指令缓冲器)502a,按照与线程中的处理顺序相同的顺序保持8个解码前的指令。
指令缓冲器502将IBR502a中保存的指令向解码部503中依次注入4个。解码部503包括4个寄存器(IWR:Instruction Word Register,指令字寄存器)503a,每个寄存器保存一个上述注入的指令,4个指令被依次保存在各IWR503a中。并且,在解码部503中,依次进行这些被保存的4个指令的解码。并且,解码部503将解码完毕的4个指令移交给后面的执行部。此时,当在指令中如上所述存在被确认为无法立即执行而停顿的指令时,向执行部的移交在该指令之前停止。在图4的例子中,已被解码的4个指令中的第3个指令被确认停顿,向执行部的移交到第2个指令为止停止。
在具有SMT功能的指令控制装置中,若某个线程的指令在解码部中停顿了,则解码部被一个线程的指令占用,无法进行其他线程的指令的解码。
在此,关于处理单线程的程序的单线程类型的指令控制装置提出了如下技术(例如参照专利文献1):将被确认停顿的指令转移到指定的存储器中,以为后续指令腾空解码部,在获得先行指令的执行结果后执行该被确认停顿的指令。根据该技术,上述的乱序执行无延迟地进行。但是,即便将该技术应用于具有SMT功能的指令控制装置,与该被确认停顿的指令相同线程的后续指令,在该被确认停顿的指令的停顿原因消除并提交结束之前成为等待提交,因此即使暂时避免了解码部的占用,不久也会产生由该线程的指令造成的解码部的占用。
此外,提出了如下技术(例如参照专利文献2):在一个线程的指令被确认停顿的情况下,使该指令无效以为其他线程腾空解码部,在停顿消除后再次从读取开始重新执行该指令。
图5是表示在一个线程的指令被确认停顿的情况下,使该指令无效以为其他线程腾空解码部的技术的概念图。
在该图5的例子中,通过指令读取部511,将两种线程的指令每次8个交替地取入指令缓冲器512中,通过指令缓冲器512,每次4个交替地注入解码部513中。并且,当在解码部513的解码时,确认了某个线程的4个指令中的一个停顿的情况下,在解码部513中使该指令和该线程中的后续指令无效。其结果是,消除解码部513中的占用,能够进行其他线程的指令的解码。此外,从指令读取部511的取入开始重新执行被无效的线程的指令。
专利文献1:日本特开平7-271582号公报
专利文献2:日本特开2001-356903号公报
但是,在上述专利文献2记载的技术中,被确认停顿的指令从读取开始重新执行,因此存在关于该指令曾经进行的读取变得无用,指令控制装置中的处理效率降低的问题。
鉴于上述情况,本发明的目的是提供一种能够效率较好地处理指令的指令控制装置以及指令控制方法。
发明内容
实现上述目的的本发明的指令控制装置的特征在于具有:
指令读取部,从具有多个指令的线程取得指令;
指令缓冲器,保持上述取得的指令;
指令解码部,保持并解码从上述指令缓冲器输出的指令;
指令执行部,执行上述被解码的指令;以及
指令注入控制部,在将上述指令缓冲器中保持的指令注入上述指令解码部的情况下,在先行于上述指令缓冲器中保持的指令的指令正在使用上述指令执行部时,使上述指令解码部保持的指令和上述指令解码部保持的指令的后续指令无效,并且使上述指令缓冲器再次保持上述指令解码部保持的指令和上述指令解码部保持的指令的后续指令。
根据本发明的指令控制装置,在先行指令正在使用上述指令执行部时,上述指令解码部保持的指令以后的指令被无效。因此,能够将上述指令解码部腾空给其他可执行的指令。此外,对于曾经被无效的指令,由上述指令缓冲器再次保持,因此从上述线程取得指令的工作不会白费,因而效率较高。即,根据本发明的指令控制装置,能够效率较高地处理指令。
此外,在本发明的指令控制装置中,如下方式是优选方式:其特征在于:
上述指令读取部从多个上述线程中取得指令;
上述指令缓冲器保持上述取得的多个线程中包含的指令;
上述指令解码部保持属于上述多个线程中的任一个线程的指令;
在上述指令注入控制部将使上述指令缓冲器再次保持的属于上述线程的上述指令解码部保持的指令和上述指令解码部保持的指令的后续指令再次注入上述指令解码器部的情况下,在上述指令解码部中保持属于与上述线程不同的线程的指令。
根据该优选方式的指令控制装置,在处理多个线程的指令时,在对一个线程在上述指令缓冲器中再次保持指令的情况下,将上述指令解码部腾空给其他线程的指令,因此能够高效地处理多个线程的指令。
在该处理多个线程的指令的优选方式的指令控制装置中,以下方式是更为优选的方式:
在上述指令注入控制部未保持属于与上述线程不同的线程的指令的情况下,上述指令解码部不对上述指令注入控制部请求上述再次注入,保持成为上述再次注入的对象的指令。
根据该更为优选方式的指令控制装置,在不存在为其腾空上述指令解码部的其他线程的情况和其他线程中不存在应该处理的指令的情况等、也可以将指令留在上述指令解码部中的情况下,在上述指令解码部中有效地保持成为再注入的对象的指令,因此避免不必要的再注入,能够更高效地处理指令。
此外,在本发明的指令控制装置中,以下方式是优选的方式:
上述指令注入控制部,在具有表示成为上述再次注入的对象的指令能够执行的信息,由上述指令解码部请求了上述再次注入的情况下,基于上述信息信息进行上述再次注入。
根据该优选方式的指令控制装置,借助于上述信息向上述指令注入控制部传达能够执行成为上述再次投入的对象的指令的情况,因此该指令注入控制部能够在适当的时机进行再次注入。
此外,在本发明的指令控制装置中,以下方式是优选的方式:
上述指令注入控制部,具有用于保持向上述指令解码部进行注入的上述指令的指令注入缓冲器,在上述指令注入缓冲器中保持的指令全部已由上述指令解码部解码的情况下,放开上述指令注入缓冲器。
根据该优选方式的指令控制装置,适当地放开上述指令注入缓冲器,因此能够平滑地反复利用该指令注入缓冲器,能够更加高效地处理指令。
此外,在本发明的指令控制装置中,以下方式是优选的方式:
上述指令解码部,在判断为上述已解码的指令不具备能够执行的条件的情况下,对上述指令注入控制部请求上述指令的后续指令的再次注入。
根据该优选方式的指令控制装置,对于上述指令的能够执行的条件是否具备,在准确把握指令的处理的上述指令解码部中进行判断,因此能够无误地进行对上述指令注入控制部的再次注入的请求。
此外,实现上述目的的本发明的指令控制方法是一种具有保持指令的指令缓冲器部、保持并解码从上述指令缓冲器部输出的指令的指令解码部、和执行被解码的指令的指令执行部的指令控制装置的指令控制方法,其特征在于:
在将上述指令缓冲器中保持的指令注入上述指令解码部的情况下,判断先行于上述指令缓冲器中保持的指令的指令是否正在使用上述指令执行部;
在先行于上述指令缓冲器中保持的指令的指令正在使用上述指令执行部时,使上述指令解码部保持的上述指令和上述指令解码部保持的指令的后续指令无效;以及
使上述指令缓冲器再次保持上述指令解码部保持的指令和上述指令解码部保持的指令的后续指令。
根据本发明的指令控制方法,能够与上述指令控制装置相同地高效地处理指令。
根据本发明,能够得到可高效地处理指令的指令控制装置以及指令控制方法。
附图说明
图1是表示超标量体系结构中的乱序执行的概念图。
图2是概念性地表示SMT功能的一个例子的图。
图3是概念性地表示SMT功能的一个例子的与图2不同的其他概念图。
图4是表示在单线程类型的指令控制装置中,发生指令解码部中的停顿的情形的概念图。
图5是表示在一个线程的指令被确认停顿的情况下,使该指令无效以将解码部腾空给其他线程的技术的概念图。
图6是表示作为指令控制装置的一个实施例的CPU10的硬件结构图。
图7是表示图6的CPU10中的与停顿指令有关的处理的概念图。
图8是为了说明与停顿指令有关的处理,简化图6的CPU10的一部分,用功能模块表示一部分的图。
图9是表示从指令的读取到向解码部109的指令注入为止的处理流程的概念图。
图10是表示与各IBR104a对应的缓冲器信息的图。
图11是用于说明单线程类型的CPU执行的递交(presentation)的说明图。
图12是用于说明本实施例的CPU10执行的递交的说明图。
图13是表示在解码部109中被确认停顿的情况下的处理流程的概念图。
图14是用IWR109a内保存的指令的转变表示在解码部109中被确认停顿的情况下的处理流程的图。
图15是表示D倒退(reverse)指示电路的图。
图16是表示D倒退执行时CPU10中的各指针的控制的流程的概念图。
图17是使用具体的数值例以表的形式表示保存用指针253的内容的生成的图。
图18是表示从停顿的发生到进行再次递交和解码为止的处理流程的流程图。
图19是表示不存在检测电路的图。
图20是表示从停顿发生,经过对停顿原因的监视,直到再次递交的执行的处理的流程图。
图21是用于说明在一次解码时被进行D释放的4个指令横跨两个IBR109a的情况下IBR109a的放开的说明图。
图22是表示在CSE127中通过按序执行进行寄存器更新的结构的概念图。
图23是说明取得与指令处理的高效化不同的其他效果的状况的图。
图24是说明吞吐量提高这一其他效果图的图。
具体实施方式
以下,参照附图说明指令控制装置的一个实施方式。
图6是表示作为指令控制装置的一个实施方式的CPU10的硬件结构图。
该图6所示的CPU10是具有同时处理两种线程的指令的SMT功能的指令控制装置,在该CPU10中,依次进行下面的7个阶段的处理。即,顺序进行:以按序执行的方式交替地读取两种线程的指令的读取阶段(步骤S101)、以按序执行的方式解码所读取的指令表示的处理的解码阶段(步骤S102)、以按序执行的方式将已被解码的指令保存在与该指令的处理执行所需的运算器连接的后述的保留站(reservationstation)中,以乱序执行的方式将该保存的指令移交给运算器的发送阶段(步骤S103)、以乱序执行的方式将保留站中保存的指令的执行所需的操作数从寄存器中读出的寄存器读出阶段(步骤S104)、使用从寄存器读出的操作数以乱序执行的方式来执行保留站中保存的指令的执行阶段(步骤S105)、以乱序执行的方式进行向CPU10以外的存储器记录执行结果等的存储器阶段(步骤S106)、以及以按序执行的方式进行按照执行结果更新操作数保存用的寄存器等并使该执行结果成为从程序可见的状态的提交阶段(步骤S107)这7个阶段的处理。
以下,详细地说明各个阶段。
在读取阶段(步骤S101)中,分别为两种线程(线程0、线程1)准备的两个程序计数器101按照各线程的记载顺序指示取入第几个指令。并且,在各程序计数器101指示指令的取入(读取)的时机,指令读取部102从指令一级高速缓存103中将该被指示的指令取入指令缓冲器104。两个程序计数器101交替动作,在一次读取中,任意一个程序计数器101指示对应线程的指令的取入。此外,在本实施例中,在一次读取中,通过按序执行按照线程中的处理顺序进行8个指令的取入。在此,有时基于按序执行的处理顺序从线程中的指令的记载顺序中分支。该CPU10具有预测这种分支的有无以及线程中的分支目的位置的分支预测部105。并且,指令读取部102参照该分支预测部105的预测结果进行读取。
在此,本实施例的CPU10执行的程序被保存在未图示的外部存储器中。并且,CPU10经由与该CPU10中内置的二级高速缓存106连接的系统总线接口107与该外部存储器等连接。程序计数器101指示了指令的读取后,指令读取部102参照分支预测部105的预测结果向指令一级高速缓存103请求8个指令。接着,被请求的8个指令从外部存储器经由系统总线接口107和二级高速缓存106被输入到指令一级高速缓存103,指令一级高速缓存103将这些指令移交到指令缓冲器104。
在解码阶段(步骤S102)中,指令缓冲器104以按序执行的方式将通过指令读取部102取入并保持的8个指令中的4个指令注入解码部109。解码部109以按序执行的方式分别解码被注入的4个指令。此外,在解码时,对于各个指令,作为指令标识符(IID:InstructionIDentification)对各个线程按照解码顺序分配从“0”到“63”的编号。在此,在本实施例中,线程0的指令被解码时,分配从“0”到“31”的IID,线程1的指令被解码时,分配从“32”到“63”的IID。此时,解码部109在具有线程0用的32个项和线程1用的32个项、共计64个项的后述的提交堆栈项(CSE)127的解码对象指令属于的项组中的空项中,设置为解码对象指令分配的IID。
解码部109对于已经分配各个IID的解码完毕的4个指令的每个,确定各指令的处理的执行所需的运算器。并且,以按序执行的方式将解码完毕的各指令保存到与该指令的处理的执行所需的运算器连接的保留站中。
保留站保持多个解码完毕的指令,在发送阶段(步骤S103)中,以乱序执行的方式将各个指令向运算器移交。即,保留站与线程中的处理顺序无关地、从已确保处理的执行所需的操作数和运算器的指令开始向运算器移交。此时,在能够移交的指令存在多个的情况下,从上述多个指令中先解码的指令开始向运算器移交。在本实施方式的CPU10中,包括以下4种保留站。即,包括:地址生成用保留站(RSA:ReservationStation for Address generation)110、整数运算用保留站(RSE:Reservation Station for fix point Execution)111、浮动小数点运算用保留站(RSF:Reservation Station for Floating point)112、以及分支用保留站(RSBR:Reservation Station for BRanch)113这4种保留站。在此,RSA110、RSE111和RSF112经由操作数保存用的寄存器与各自对应的运算器连接。与之相对,RSBR113与上述分支预测部105连接,起到进行分支预测部105中的预测结果的确定等待、预测失败时指令的再次读取指示等的作用。
在寄存器读出阶段(步骤S104)中,以乱序执行的方式读出寄存器内的操作数。即,与线程中的处理顺序无关地、读出与已经向运算器移交指令的保留站连接的寄存器内的操作数,并交给对应的运算器。CPU10中包括整数制寄存器(GPR:General Purpose Register,通用寄存器)114和浮动小数点制寄存器(FPR:Floating Point Register)116这两种寄存器。在此,GPR114以及FPR116都是程序可见的寄存器,对线程0和线程1的每个准备它们。此外,用于各寄存器的更新之前保持指令的执行结果的缓冲器分别与GPR114以及FPR116连接。GPR114上连接整数制寄存器更新缓冲器(GUB:GPR Update Buffer)115,FPR116上连接浮动小数点制寄存器更新缓冲器(FPR:FPR UpdateBuffer)116。
地址生成以及整数运算使用整数的操作数进行,因此GPR114与上述的RSA110和RSE111连接。此外,在本实施方式中,使用GPR114更新前的阶段的GUB115中保持的操作数的整数运算也被允许,因此该GUB115也与RSA110和RSE111连接。此外,浮动小数点运算使用浮动小数点形式的操作数进行,因此FPR116与上述的RSF112连接。此外,在本实施方式中,使用FUB117中保持的操作数的浮动小数点运算也被允许,因此FUB117也与RSF112连接。
此外,在本实施方式的CPU10中,包括两个地址生成运算器(EAGA和EAGB:Effective Address Generation units A and B,有效地址生成单元A和B)118、119;两个整数运算器(EXA和EXB)120、121;以及两个浮动小数点运算器(FLA和FLB)122、123。并且,GPR114和GUB115与使用整数操作数的EAGA118、EAGB119、EXA120、和EXB121连接,FPR116和FUB117与使用浮动小数点形式的操作数的FLA122和FLB123连接。
在执行阶段(步骤S105)中,由运算器以乱序执行的方式进行指令的执行。即,与线程中的处理顺序无关地、上述多种运算器中的已从保留站传递了指令且已从寄存器传递了运算所需的操作数的运算器使用该已传递的操作数执行该已传递的指令的处理。此外,在执行阶段(步骤S105),在某个运算器的执行过程中,在其他运算器中进行了指令和操作数的传递时,这些运算器同时并行地执行处理。
在该执行阶段(步骤S105)中,从RSA110向EAGA118传递了地址生成处理的指令,从GPR114向EAGA118传递了整数的操作数后,EAGA118使用该整数的操作数执行地址生成处理。此外,从RSE111向EXA120传递了整数运算处理的指令,从GPR114向EXA120传递了整数的操作数后,EXA120使用该整数的操作数执行整数运算处理;从RSF112向FLA122传递了浮动小数点运算处理的指令,从FPR116向FLA122传递了浮动小数点形式的操作数后,FLA122使用该浮动小数点形式的操作数执行浮动小数点运算处理。
在经由系统总线接口107向外部存储器的访问中使用EAGA118以及EAGB119的执行结果,因此这些运算器与作为从外部存储器读出数据的读出口的读取端口124和作为写入口的存储端口125连接。EXA120和EXB121的执行结果与用于更新GPR114的中继缓冲器GUB115连接,还与起到用于更新存储器的中间缓冲器的作用的上述存储端口125连接。此外,FLA122和FLB123的执行结果与用于更新FPR116的中继缓冲器FUB117连接,还与起到用于更新存储器的中间缓冲器的作用的上述存储端口125连接。
在存储器阶段(步骤S106)中,以乱序执行的方式进行将执行结果向外部存储器记录等向外部存储器的访问。即,在需要这种访问的处理的指令有多个的情况下,与线程中的处理顺序无关地、按照获得执行结果的顺序进行访问。在该存储器阶段(步骤S106)中,经由数据一级高速缓存126、二级高速缓存106、以及系统总线接口107,通过读取端口124和存储端口125进行访问。此外,向外部存储器的访问结束后,从读取端口124和存储端口125经由未图示的连接线向CSE127发送执行结束通知。
此外,EXA120、EXB121、FLA122以及FLB123通过为了避免复杂而省略图示的连接线与CSE127连接。并且,在各运算器执行的处理是无须对外部存储器的访问、各运算器中的执行结束后便完成的处理的情况下,执行结束时从各运算器向CSE127发送执行结束通知。
在提交阶段(步骤S107)中,CSE127以按序执行的方式按照如下方式更新保持在GPR114、FPR116、程序计数器101以及CPU10中的上述处理以外的其他处理中使用的操作数的控制器寄存器128。在从上述运算器等向CSE127发送来的执行结束通知中,记载与该执行结束通知对应的指令的IID、和该指令结束后的更新对象的寄存器等执行结果的确定(提交)所需的信息(提交信息)。CSE127在执行结束通知发送来后,在CSE127具有的64个项中的设置有与执行结束通知中记载的IID相同的IID的项中,保存该执行结束通知中记载的提交信息。并且,通过按序执行,按照线程中的处理顺序依据已经保存的与各指令对应的提交信息进行寄存器的更新。此外,在该提交结束后,上述保留站中保持的与该提交对应的指令被删除。
CPU10大概以上述方式构成,按照以上说明的7个阶段工作。
然而,在解码的指令中,有禁止与同一线程中先行的其他指令同时执行的指令和执行中所需的执行资源不空闲、无法立即执行从而停顿的指令(停顿指令)。CPU10中的作为本实施方式的特征是与这种停顿指令有关的处理。以下,关注这一点继续进行说明。
图7是表示图6的CPU10中的与停顿指令有关的处理的概念图。
在该图7的例子中,从步骤S201到步骤S204之间,对属于线程0的指令和属于线程1的指令交替地每次解码4个。在此,在该图7的例子中,步骤S203处理的线程0的4个指令中的任一个成为停顿指令。在本实施方式的CPU10中,如图7所示,该停顿指令以后的指令在解码后,在上述的指令缓冲器104中保持到步骤S201处理的先行指令的提交结束,并获得所需的操作数,能够执行的条件具备为止。并且,在条件具备后,再次从解码开始重新执行停顿指令以后的指令。
在此,在本实施方式的CPU10中,如图6所示仅具备一个电路结构复杂、电路规模大的解码部109,CPU10成为在两种线程间共同使用该解码部109的结构。
在本实施方式中,即使一个线程的指令为停顿指令,该停顿指令以后的指令在指令缓冲器104中也保持到能够执行的条件具备为止,因此解码部109从该停顿指令所属的线程中放开,腾空给另一个线程。据此,如图7所示,虽然线程0中的处理停滞,但是无停滞地处理线程1中的指令。
以下,对该与停顿指令有关的处理进行详细说明,该说明与图6的说明有部分重复的地方。
图8是为了说明与停顿指令有关的处理对图6的CPU10的一部分进行了简化,用功能模块表示一部分的图。
此外,在该图8中,对于与图6的模块一一对应的结构要素,附加与图6相同的编号来表示。
CPU10包括线程0用程序计数器101_0和线程1用程序计数器101_1这两个程序计数器,从这两个程序计数器中,交替发出旨在执行指令的读取的指示。
指令读取部102根据来自两个程序计数器的指示,经由图6的指令一级高速缓存103将指令取入到指令缓冲器109中。
指令缓冲器104保持该取入的指令,并且将该保持的指令注入解码部109。解码部109对所注入的指令进行解码,并且确认解码完毕的指令是否具备能够执行的条件,即该指令是否停顿。
解码部109将条件具备的指令传递给后面的保留站210,使条件不具备的停顿指令以后的指令无效。据此,解码部109被释放,能进行新的解码。此外,在本实施方式中,关于被无效的指令,在停顿原因消除后从解码部109向指令缓冲器109请求再注入。在此,在该图8中,图6所示的4种保留站被简化,用一个方框表示。
图9是表示从指令的读取开始到向解码部109的指令注入为止的处理流程的概念图。
在本实施方式中,通过指令读取部102,对两种线程,交替地向指令缓冲器104中每次取入8个指令,通过指令缓冲器104向解码部109每次注入4个指令。在解码部109中,作为该解码部109具有的4个寄存器的从第0级到第3级的IWR109a中分别保存指令。此外,从第0级的IWR109a开始按顺序进行向IWR109a的保存。在此,将从指令缓冲器104向解码部109的4个IWR109a的指令注入称作递交(presentation)。
以下,进一步详细地说明从由指令读取部102进行的读取开始到由指令缓冲器104进行的递交为止的处理。
在本实施方式中,指令缓冲器104包括从第0级到第7级的共计8级的各自能够保存8个指令的IBR104a,在每次读取时,8个指令按照各线程中的处理顺序被保存到各个IBR104a中。在此,在读取时,指令按照由下面的缓冲器信息定义的顺序被保存到从第0级到第7级的IBR104a中。
图10是表示与各IBR104a对应的缓冲器信息的图。
如该图10所示,各IBR104a中,对应附加:VALID信息I1,表示该IBR104a是否作为指令的当前的保存目的位置被分配;NEXT_SEQ_IBR信息I2,表示下一次读取中作为指令的保存目的位置被分配的IBR104a的级数;NEXT_SEQ_VALID信息I3,表示是否从指令读取部102对指令一级高速缓存103请求了下一个读取对象的指令;STATUS_VALID信息I4,表示当前保存的指令是否是对该IBR104a进行的最新读取的结果。
所读取的8个指令被保存在由VALID信息I1表示作为指令的保存目的位置分配的IBR104a中。此外,在保存之后,该IBR104a的STATUS_VALID信息I4被更新为表示当前保存的指令是对该IBR104a进行的最新读取的结果的内容。此外,在下一个指令读取发出后,其IBR编号被保存在IBR104a的NEXT_SEQ_IBR信息I2表示的级数中,IBR104a中的VALID信息I1被更新。
特别是通过上述4个信息中的VALID信息I1、NEXT_SEQ_IBR信息I2和NEXT_SEQ_VALID信息I3,定义向8个级的IBR104a的指令的保存顺序。此外,通过STATUS_VALID信息I4,确认当前保存的指令是对于该IBR104a的最新信息。
接着,对递交进行说明。
在此,本实施方式的CPU10是具有同时处理两种线程的指令的SMT功能的指令控制装置,以下,首先为了简化说明,首先说明处理一种线程的指令的单线程类型的CPU中的递交。
图11是用于说明单线程类型的CPU执行的递交的说明图。
按照程序的处理顺序,即通过指令读取部601读取的顺序,从指令缓冲器602对解码部603的4个IWR603a进行递交。为了能够按照这种顺序进行递交,使用该图11所示的指针604。
指针604中记载如下的3个信息。
即,记载如下3个信息:E_CURRENT_IBR信息I5,表示最初取出成为本次递交的对象的指令的IBR104a的级数;E_NEXT_SEQ_IBR信息I6,表示在该RIBR104a之后接着取出指令的IBR104a的级数;和E_NSI_CTR信息I7,表示成为本次递交的对象的4个指令中的起始指令是IBR中以读取顺序排列的8个指令中的第几个指令。
指令缓冲器602在递交时参照指针604,将E_CURRENT_IBR信息I5表示的级数的IBR104a中的8个指令中的、从E_NSI_CTR信息I7表示的指令开始的4个指令从第0级到第3级的4个IWR603a中的第0级IWR603a开始依次保存。
此外,在E_CURRENT_IBR信息I5表示的级数的IBR104a中的8个指令到最后一个指令为止被保存到IWR603a中的时间点,E_CURRENT_IBR信息I5的内容被更新为E_NEXT_SEQ_IBR信息I6的内容,E_NSI_CTR信息I7表示的编号上加上“4”。此外,E_NEXT_SEQ_IBR信息I6的内容被更新为在上述更新后的E_CURRENT_IBR信息I5表示的级数的IBR104a之后接着取出指令的IBR104a的级数。
通过这种参照指针604的递交,指令缓冲器602能够以读取顺序取出4个指令并依次保存到4个IWR603a中。
接着,说明具有同时处理两种线程的指令的SMT功能的本实施方式的CPU10中的递交。
图12是用于说明本实施方式的CPU10执行的递交的说明图。
如该图12所示,对于两种线程的每个,准备与图11所示的指针604相同的指针。即,具备线程0用指针251和线程1用指针252。此外,在本实施方式中,还具备后述的再次递交时使用的、保存本次指令取出所参照的指针的保存用指针253。
线程0用指针251中记载3个信息:TH0_CURRENT_IBR信息I8,表示本次最初取出线程0的指令的IBR104a的级数;TH0_NEXT_SEQ_IBR信息I9,表示在该IBR104a之后接着取出线程0的指令的IBR104a的级数;和TH0_NSI_CTR信息I10,表示本次取出的线程0的起始指令是第几个指令。
此外,线程1用指针252中记载3个信息:TH1_CURRENT_IBR信息I11,表示本次最初取出线程1的指令的IBR104a的级数;TH1_NEXT_SEQ_IBR信息I12,表示在该IBR104a之后接着取出线程1的指令的IBR104a的级数;和TH1_NSI_CTR信息I13,表示本次取出的线程1的起始指令是第几个指令。
此外,保存用指针253中记载如下3个信息:D_TH_CURRENT_IBR信息I14,表示取出起始指令的IBR104a的级数;D_TH_NEXT_SEQ_IBR信息I15,形式地表示在该IBR104a之后接着取出指令的IBR的级数;和D_TH_NSI_CTR信息I16,表示取出的起始指令是第几个指令。
此外,在本实施方式中,具备对象线程指示部254,保存线程0和线程1这两种线程中成为本次递交的对象的线程的编号。此外,还具备再次递交对象线程指示部255,保存成为后述的再次递交的对象的线程的编号。
在递交时,首先在两个指针中选择对象线程指示部254中保存的编号的线程的指针。此外,此时的对象线程指示部254中保存的编号被复制到再次递交对象线程指示部255,上述选择的指针内的3个信息被复制为保存用指针253内的3个信息。
接着,指令缓冲器104参照所选择的指针,将该指针中的信息表示的级数的IBR中的8个指令中的包含该指针中的信息表示的指令的4个指令从第0级到第3级的4个IWR603a中的第0级IWR603a开始依次保存。并且,在递交之后,适当地更新该指针中的3个信息。
再次递交时再次递交对象线程指示部255以及保存用指针253的工作在后面描述。
通过这种参照了与各线程对应的指针的递交,指令缓冲器104能够按照读取顺序取出4个指令并依次保存到4个IWR109a中。
这样,在解码部109的4个IWR109a中保存指令后,在解码部109中进行各个指令的解码,并对解码完毕的各个指令确认是否因为能够执行的条件不具备而停顿。并且,解码部109将具备能够执行的条件的不停顿的有效指令传递给后面的保留站210,使条件不具备的停顿指令以后的指令无效。
图13是表示在解码部109中确认了停顿的情况下的处理流程的概念图。
在该图13的例子中,从指令缓冲器104针对线程0进行递交,该线程0中的4个指令被保存到解码部109的4个IWR109a中。并且,在解码之后,确认了第2级IWR109a内的指令停顿,使该指令和后续的第3级IWR109a内的指令无效。
对于被无效的指令,在被确认了停顿的时间点,从解码部109对指令缓冲器104发出请求,以在停顿原因消除后进行再次递交。以下,将请求停顿原因消除后的再次递交称作D倒退(reverse)。
另一方面,将未被确认停顿的有效的第0级的IWR109a内的指令和第1级的IWR109a内的指令向保留站210移交。以下,将指令有效并向保留站210移交称作D释放(release)。
在本实施方式中,当在解码部109中已确认了停顿的情况下,通过该被确认了停顿的指令(停顿指令)以后的指令的无效化和上述D释放,将解码部109放开。并且,该被放开的解码部109在停顿原因消除之前,继续用于与停顿指令所属的线程(在图13的例子中是线程0)不同的线程(在图13的例子中是线程1)的指令的解码。
图14是用IWR109a内保存的指令的转变表示在解码部109中已确认了停顿的情况下的处理流程的图。
在该图14的例子中,在某个周期中,对线程0进行递交,此时,第2级的IWR109a内的指令C停顿,对指令缓冲器104进行D倒退。其结果是,在该周期中,第2级的IWR109a内的指令C和后续的第3级的IWR109a内的指令D被无效。同时,第0级的IWR109a内的指令A以及第1级的IWR109a内的指令B是有效的指令,因此进行D释放,并被传递给保留站210。通过该无效和D释放,在该周期中解码部109被放开。
在下一个周期中,对上述被放开的解码部109进行关于线程1的递交。并且,在该周期中递交到解码部109中的线程1的4个指令a、b、c、d均有效,全部被D释放,并被传递给保留站210。
这样,在本实施方式中,在解码部109中,对一个线程的指令确认了停顿的情况下,通过上述无效化和D释放使解码部109放开,将解码部109为另一个线程腾空。据此,在该CPU10中,两种线程的指令无停滞地高效地得到处理。
另外,有时同一线程的多个指令发生解码部109中的停顿。在此,在本实施方式中,停顿指令以后的指令全部被无效,因此,即便在多个指令发生了停顿的情况下,仅对上述多个指令中级数最小的IWR109a内的指令进行D倒退便可。因此,在本实施方式中,解码部109中具备D倒退指示电路,在多个指令发生了停顿的情况下指示关于级数最小的IWR109a内的指令的D倒退的执行。
图15是表示D倒退指示电路的图。
该图15中所示的D倒退指示电路109_1具备用于检测所递交的指令发生停顿的、分别与IWR109a连接的4个停顿检测电路109_1a。各停顿检测电路109_1a,关于对应的IWR109a内的指令,确认执行资源不足,或者该指令是禁止与同一线程中先行的其他指令同时执行的同步(sync)属性的指令等停顿原因的存在,在已确认了停顿原因存在的情况下输出“1”。
另外,在不同线程共享的执行资源不足的情况下,虽然出现停顿原因,但不进行基于此的D倒退指示。这是因为会出现如下情况:假设共享的执行资源不足而进行了D倒退后,则D倒退以后其他线程进行指令解码时,正好该共享资源被放开而使用,在下一个周期中共享资源不足,相同线程再次反复进行D倒退。
此外,该图15所示的D倒退指示电路109_1具备第一算子109_1b,在与第1级的IWR109a连接的停顿检测电路109_1a是确认了停顿原因存在的检测电路中与级数最小的IWR109a连接的电路的情况下输出“1”。此外,D倒退指示电路109_1包括:第二算子109_1c,在与第2级的IWR109a连接的停顿检测电路109_1a是确认了停顿原因存在的检测电路中与级数最小的IWR109a连接的电路的情况下输出“1”;和第三算子109_1d,在与第3级的IWR109a连接的停顿检测电路109_1a是确认了停顿原因存在的检测电路中与级数最小的IWR109a连接的电路的情况下输出“1”。
利用该D倒退指示电路109_1,在具有停顿原因的指令中级数最小的IWR109a内的指令是第0级的IWR109a内的指令的情况下,仅从与第0级的IWR109a连接的停顿检测电路109_1a输出“1”,该“1”作为指示执行针对第0级的IWR109a内的指令的D倒退的D0_REVERSE信号S0,被输出到该D0_REVERSE信号S0用的信号线。此外,在级数最小的IWR109a内的指令是第1级的IWR109a内的指令的情况下,仅从第一算子109_1b输出的“1”作为指示执行针对第1级的IWR109a内的指令的D倒退的D1_REVERSE信号S1,被输出到该D1_REVERSE信号S1用的信号线。此外,在级数最小的IWR109a内的指令是第2级的IWR109a内的指令的情况下,仅从第二算子109_1c输出的“1”作为指示执行针对第2级的IWR109a内的指令的D倒退的D2_REVERSE信号S2,被输出到该D2_REVERSE信号S2用的信号线。此外,在级数最小的IWR109a内的指令是第3级的IWR109a内的指令的情况下,仅从第三算子109_1c输出的“1”作为指示执行针对第3级的IWR109a内的指令的D倒退的D3_REVERSE信号S3,被输出到该D3_REVERSE信号S3用的信号线。
在本实施例中,利用该D倒退指示电路109_1,在确认了多个指令停顿的情况下,指示执行针对级数最小的IWR109a内的指令的D倒退。
接着,说明D倒退执行时CPU10中的各指针的控制。
图16是表示D倒退执行时CPU10中的各指针的控制的流程的概念图。
该图16中表示上述图12所示的线程0用指针251、线程1用指针252、保存用指针253以及对象线程指示部254包括在还起到控制对解码部109的指令注入的功能的指令缓冲器104中的情形。此外,在本实施方式中,指令缓冲器104中包括D倒退执行时再次递交时参照的D倒退用指针256。
此外,上述图12所示的再次递交对象线程指示部255如该图16所示包括在解码部109中。
在参照上述图12说明的通常的递交时,每次递交时更新线程0用指针251或线程1用指针252。此外,对象线程指示部254指示的线程用的指针更新前的内容被复制到保存用指针253中,此时的对象线程指示部254的指示内容被复制到再次递交对象线程指示部255中。
在此,在执行了D倒退时,使用保存用指针253的内容以如下方式生成D倒退用指针256的内容。
图17是使用具体的数值例子以表的形式表示保存用指针253的内容的生成的图。
在该图17的例子中,在所递交的线程0的4个指令中,对第2级的IWR109a内的指令执行D倒退。
首先,线程0的4个指令递交时,对象线程指示部254中保存的线程的编号为“0”。此时参照的线程0用指针251中的TH0_CURRENT_IBR信息I8、TH0_NSI_CTR信息I10以及TH0_NEXT_SEQ_IBR信息I9在该图17的例子中分别为“1 ”、“5”、“3”。通过参照这3个信息,指令缓冲器104中的第0级到第7级的IBR104a中的第1级的IBR104a中的第5个指令到第8个指令的4个被递交。并且,在递交后,线程0用指针251的内容为了下次递交使用而被更新为“3”、“1”、“5”。此外,更新前的内容被保存在保存用指针253中,对象线程指示部254中保存的线程的编号“0”被复制到再次递交对象线程指示部255中。
在此,在上述D2_REVERSE信号S2用的信号线上,作为D2_REVERSE信号S2输出“1”,其结果是,对所递交的4个指令中的第2级的IWR109a内的指令执行D倒退后,根据保存用指针253中保存的该递交时的线程0用指针251的内容,生成D倒退用指针256的内容。在该图17的例子中,虽然执行了D倒退,但是由于是第2级的IWR109a内的指令,所以对上述第1级的IBR104a中的相当于第5个起数第3个的第7个指令执行D倒退。在本实施方式中,在解码部109中,被执行该D倒退的指令以后的指令被无效,因此在再次递交中,被执行该D倒退的指令成为起始指令。即,D倒退用指针256中的CURRENT_IBR信息、NSI_CTR信息以及NEXT_SEQ_IBR信息如该图17所示分别成为“1”、“7”、“3”。
以此方式生成D倒退用指针256的内容后,如图16所示,再次递交对象线程指示部255指示的、D倒退执行时被复制的线程用指针的内容被更新为该生成的D倒退用指针256的内容。该被更新的指针的内容维持到再次递交被执行并重新开始对该线程的处理为止。并且,在D倒退之后,若停顿原因消除了,则基于在此之前维持的上述指针的内容进行递交。
将以上说明的从停顿的发生到再次递交的执行为止的处理流程汇总在流程图中。
图18是表示从停顿的发生到进行再次递交和解码为止的处理流程的流程图。
首先,解码部109检测出停顿后(步骤S301),被确认停顿的指令以后的指令由解码部109无效,执行对该指令的D倒退(步骤S302)。接着,执行上述D倒退用指针256的内容的生成和被确认停顿的指令所属的线程用的指针的更新(步骤S303)。在本实施方式中,到此为止的处理在一个周期中执行。
在此,假设在与执行D倒退的周期相同的周期中,例如像先行指令的提交结束从而得到所需的操作数等这样,停顿原因消除。在本实施方式中,在此情况下,在执行上述从步骤S301到步骤S303的处理的周期的下一个周期中,优先于对与被确认停顿的指令所属的线程不同的其他线程的处理,执行针对被确认停顿的指令所属的线程的再次递交(步骤S304)。并且,在该再次递交(步骤S304)的下一个周期中,被确认停顿的指令以后的指令被解码(步骤S305)。
该图18的流程图所示的处理是假设停顿原因最快消除时的处理,在这种假设以外的情况下,在执行D倒退以后的周期中,在停顿原因消除之前,将解码部109腾空给与被确认停顿的指令所属的线程不同的其他线程,优先执行针对该线程的处理。
在此,根据CPU10执行的程序不同,即使如上所述在发生停顿时优先执行与被确认停顿的指令所属的线程不同的其他线程的处理,但该其他线程有时处于在CPU10中未被执行的空闲状态,或者处于未读取该其他线程的指令而处于没有可处理的指令的状态,而不存在应该优先的对象。在本实施方式中,在这种情况下,停止上述的停顿指令以后的指令的无效化以及D倒退的执行,停顿指令以后的指令被原样保留在解码部109的IWR109a中。在本实施方式中,为了能够进行这种处理,具备用于检测应该优先的对象的不存在的不存在检测电路。
图19是表示不存在检测电路的图。
如该图19所示,在本实施方式中,在与当前处理中的线程不同的其他线程处于空闲状态的情况下,由OS通知这一情况。此外,在与当前处理中的线程不同的其他线程处于指令未读取、没有可处理的指令的状态的情况下,从指令缓冲器104通知这一情况。
图19所示的不存在检测电路257包括:OR算子257a,在存在上述两种通知中的任一方的通知时输出“1”;和通知电路257b,在该OR算子257a输出“1”时,向解码部109通知存在对停顿指令以后的指令的无效化以及D倒退的执行的抑制要求的情况。该不存在检测电路257通知上述抑制要求存在的情况后,停顿指令以后的指令被原样保留在解码部109中。
在不存在这种抑制要求,执行停顿指令以后的指令的无效化以及D倒退,并将解码部109腾空给与这些指令所属的线程不同的其他线程时,该其他线程的指令的处理被优先执行,并且在指令缓冲器104中进行针对停顿原因的监视。并且,在取得表示停顿原因已消除的信息后,指令缓冲器104对停顿指令所属的线程进行上述的再次递交。
图20是表示从停顿发生,经过针对停顿原因的监视,直到再次递交的执行的处理的流程图。
由于无法确保执行资源,或者同步属性的指令未得到操作数这样的停顿原因,指令被确认停顿,并对该指令执行D倒退后(步骤S401),在指令缓冲器109中进行针对停顿原因的监视(步骤S402)。通过在每个周期中确认作为执行资源使用的寄存器的空闲状况和保存操作数的寄存器的内容来进行该监视。并且,在该监视中,在取得表示停顿原因持续存在的信息的情况下(步骤S402中的“是”判定),指令缓冲器109进行未停顿的其他线程的指令的递交(步骤S403)。另一方面,在取得表示停顿原因已消除的信息的情况下(步骤S402中的“否”判定),指令缓冲器109进行已停顿的线程的指令的再次递交(步骤S404)。
接着,说明指令缓冲器109的IBR109a的放开。
在本实施方式中,在IBR109a中的8个指令全部在解码部109中被D释放的时间点,上述8个指令被删除并放开指令缓冲器109的IBR109a。如果没有停顿的发生,则IBR109a中的8个指令在解码部109中的一次解码时D释放4个,所以在两次解码结束的时间点IBR109a被放开。
在此,如果存在伴随着停顿的发生的从中途的位置开始的再次递交,则有时一次解码时被D释放的4个指令会横跨两个IBR109a。在本实施方式中,在这种情况下,为了高效地放开IBR109a,采取如下措施。
图21是用于说明在一次解码时被D释放的4个指令横跨两个IBR109a的情况下IBR109a的放开的说明图。
在该图21的例子中,第1级的IBR109a中的从第5个指令数起的4个指令被递交到解码部109。在此,第1级的IBR109a中的指令在相当于第3个的第7个指令处结束,因此按照上述指针表示的接着取出指令的IBR109a的级数,该级数的IBR109a中的第0个指令作为第4个指令而被递交。在图21的例子中,如保存用指针253的D_TH_NEXT_SEQ_IBR信息I15所示的那样,接着取出指令的IBR109a的级数为“3”,第3级的IBR109a中的第0个指令作为第4个指令被递交。
被递交的4个指令依次被保存到从第0级到第3级的4个IWR109a中,以该被保存的顺序被解码并被D释放。此时,在图21的例子中,在第2级的IWR109a内的指令被D释放的时间点,指令缓冲器104的第1级IBR104a中的全部指令被D释放。在本实施方式中,如上所述,在IBR104a放开的条件具备的情况下,不等待全部IWR的指令解码结束便进行该IBR104a的放开。在图21的例子中,在第2级的IWR109a内的指令被D释放的时间点,进行第1级IBR104a的放开。在本实施方式中,利用这种放开方法实现处理的高效化。
如以上说明的那样,在本实施方式的CPU10中,当在解码部109中被确认指令停顿的情况下,通过无效化相同线程中停顿指令以后的指令,解码部109被腾空给其他线程。并且,在停顿原因消除后,停顿指令所属的线程从递交开始重新执行。利用这种处理,能够对两种线程平滑地进行图8的CPU10中的到向保留站210的指令注入为止的处理。
以下,参照图8说明CPU10中的向保留站210的指令注入之后的处理。
如上所述,解码部109对解码完毕的指令按照各个线程中的解码顺序分配从“0”到“63”的IID。并且,将解码完毕的指令和IID一起传递给保留站210。此外,在本实施方式中,如上所述,CSE12具有线程0用的32个项组127_0和线程1用的32个项组127_1。并且,解码部109在将解码完毕的指令传递给保留站210时,在CSE127中的解码对象的指令所属的线程用的项组中的空项中,设置为解码对象的指令分配的IID。
保留站210从执行所需的输入数据已齐备的指令中的被保存的较早的指令开始,依次注入执行流水线220中。
执行流水线220分别相当于图6所示的6种运算器。并且,在执行流水线220中的执行结束后,执行结果被保存到寄存器更新缓冲器230中。该寄存器更新缓冲器230相当于图6所示的GUB115以及FUB117。此外,在执行流水线220中的执行结束时,向CSE127发送执行结束通知。该执行结束通知中记载有与该执行结束通知对应的指令的IID和该指令的提交所需的提交信息。CSE127在发送来执行结束通知后,在CSE127具有的64个项中的被设置有与执行结束通知中记载的IID相同的IID的项中,保存该执行结束通知中记载的提交信息。
此外,CSE127具有指令提交部127_3,该指令提交部127_3通过按序执行的方式,按照线程中的处理顺序,进行按照各项组127_0、127_1中保存的与各指令对应的提交信息的寄存器更新。
图22是表示在CSE127中通过按序执行的方式进行寄存器更新的结构的概念图。
CSE127具有的上述指令提交部127_3具有:线程0用出指针127_3a,记载线程0中接着应提交的指令的IID;线程1用出指针127_3b,记载线程1中接着应提交的指令的IID;和CSE-窗口127_3c,决定实际要提交的指令。
CSE-窗口127_3c选择设置有线程0用出指针127_3a的IID的项和设置有线程1用出指针127_3b的IID的项中的任意一个,并将与保存有上述提交信息的项对应的指令决定为提交对象。在两个项中保存有提交信息的情况下,基本上交替地切换作为提交对象的线程。
以上述方式决定作为提交对象的指令后,如图8所示,指令提交部127_3更新与该指令所属的线程对应的程序计数器以及控制寄存器。此外,指令提交部127_3向寄存器更新缓冲器230发出指示,以更新相当于图6的GPR114和FPR116的、为每个线程设置的寄存器240_0、240_1中的与提交对象指令所属的线程对应的寄存器。并且,上述CSE127中保持的该提交对象的指令被删除。
如上述所说明的那样,在本实施方式的CPU10中,当在解码部109中确认了指令停顿的情况下,通过将解码部109腾空给其他线程,实现处理的平滑化和高效化。
在此之前,说明了通过上述D倒退和再次递交的执行等措施高效地进行具有SMT功能的CPU10中的多线程指令的处理。
在此,根据这种措施,除了多线程指令处理的高效化以外,还能取得后述的其他效果。此外,该其他效果不仅在本实施方式这种具有SMT功能的CPU10中,在单线程类型的CPU中也能取得。以下,针对该其他效果,为了简化说明,以单线程类型的CPU中的处理为例进行说明。
首先,说明在什么样的状况下取得该其他效果。
图23是说明取得与指令处理的高效化不同的其他效果的状况的图。
在CPU处理的指令中,有在解码时被分解为多个指令部分、花费多个周期被解码的称作多流指令的指令。在图23的例子中,在图中第1个周期(步骤S451)中,解码部301的4个IWR301a中保存的4个指令A、B、C、D中的第2级的IWR301a中保存的指令C是2流类型的多流指令。在此,该指令后续的指令D在先行指令的D释放结束之前无法解码。第2级的IWR301a中保存的指令C在解码时需要2个周期,因此如图23所示,后续的指令D停顿。在接下来的第2个周期(步骤S452)中,进行指令C的第2个周期的解码,后续的指令D的停顿继续,在第3个周期(步骤S453)中,后续的指令D终于在被D释放后开始执行。
在此,观察该图23所示的3个周期的每个中的解码数,第1个周期(步骤S452)中为3个,第2个周期(步骤S452)中为1个,第3个周期(步骤S452)中为1个。这样,在该图23所示的例子中,仅解码1个指令的周期连续持续2个周期,解码的吞吐量较低。
因此,在这种状况中,通过以如下方式利用上述的D倒退和再次递交的执行等措施,能够取得提高解码吞吐量这一与SMT功能的指令处理的高效化不同的其他效果。
图24是说明吞吐量提高这一其他效果图的图。
在该图24的例子中,与上述图23相同,在指令缓冲器401的4个IWR401a中保存的4个指令A、B、C、D中的第2级的IWR401a中保存的指令C是2流类型的多流指令。
在此,在该图24的例子中,第1个周期(步骤S461)中,确认了因为先行指令是多流指令因此同步属性的指令D发生停顿后,该指令D立即被无效,对未图示的指令缓冲器,从解码部401对该指令执行D倒退。在接下来的第2个周期(步骤S462)中,进行指令C的第2个周期的解码。并且,在该第2个周期(步骤S462)中,指令D的停顿原因消除,因此在接下来的第3个周期(步骤S463)中,指令D以后的4个指令D、E、F、G被保存到4个IWR401a中并进行解码。观察该图24所示的3个周期的每个中的解码数,第1个周期(步骤S452)中为3个,第2个周期(步骤S452)中为1个,第3个周期(步骤S452)中为4个。
如上述图23的例子那样,在不进行D倒退和再次递交的执行等时,停顿指令被解码时,仅解码该指令,与此相对,若如上述图24的例子那样,进行了D倒退和再次递交的执行等,则在对停顿指令解码时,还对该指令以后的指令进行解码,因此能够取得吞吐量提高的效果。
此外,在此之前以单线程类型的CPU的处理为例,说明了处理多流指令时的吞吐量提高的效果,但该效果在具有SMT功能的CPU处理多流指令时同样也能取得。
此外,上面作为具有SMT功能的CPU,例示了同时处理两种线程的指令的CPU10,但具有SMT功能的CPU也可以是例如同时处理三种线程的指令的CPU等。
Claims (7)
1、一种指令控制装置,其特征在于,具有:
指令读取部,从具有多个指令的线程取得指令;
指令缓冲器,保持所述取得的指令;
指令解码部,保持并解码从所述指令缓冲器输出的指令;
指令执行部,执行所述被解码的指令;以及
指令注入控制部,在将所述指令缓冲器中保持的指令注入所述指令解码部的情况下,在先行于所述指令缓冲器中保持的指令的指令正在使用所述指令执行部时,使所述指令解码部保持的指令和所述指令解码部保持的指令的后续指令无效,并且使所述指令缓冲器再次保持所述指令解码部保持的指令和所述指令解码部保持的指令的后续指令。
2、根据权利要求1所述的指令控制装置,其特征在于:
所述指令读取部从多个所述线程中取得指令;
所述指令缓冲器保持所述取得的多个线程中包含的指令;
所述指令解码部保持属于所述多个线程中任一个线程的指令;
在所述指令注入控制部将使所述指令缓冲器再次保持的属于所述线程的所述指令解码部保持的指令和所述指令解码部保持的指令的后续指令再次注入所述指令解码器部的情况下,在所述指令解码部中保持属于与所述线程不同的线程的指令。
3、根据权利要求2所述的指令控制装置,其特征在于:
在所述指令注入控制部未保持属于与所述线程不同的线程的指令的情况下,所述指令解码部不对所述指令注入控制部请求所述再次注入,保持成为所述再次注入的对象的指令。
4、根据权利要求1至4中任一项所述的指令控制装置,其特征在于:
所述指令注入控制部,在具有表示成为所述再次注入的对象的指令能够执行的信息,由所述指令解码部请求了所述再次注入的情况下,基于所述信息信息进行所述再次注入。
5、根据权利要求1至4中任一项所述的指令控制装置,其特征在于:
所述指令注入控制部,具有用于保持向所述指令解码部注入的所述指令的指令注入缓冲器,在所述指令注入缓冲器中保持的指令全部已由所述指令解码部解码的情况下,放开所述指令注入缓冲器。
6、根据权利要求1至5中任一项所述的指令控制装置,其特征在于:
所述指令解码部,在判断为所述已解码的指令不具备能够执行的条件的情况下,对所述指令注入控制部请求所述指令的后续指令的再次注入。
7、一种指令控制方法,是具有保持指令的指令缓冲器部、保持并解码从所述指令缓冲器部输出的指令的指令解码部、和执行被解码的指令的指令执行部的指令控制装置的指令控制方法,其特征在于:
在将所述指令缓冲器中保持的指令注入所述指令解码部的情况下,判断先行于所述指令缓冲器中保持的指令的指令是否正在使用所述指令执行部;
在先行于所述指令缓冲器中保持的指令的指令正在使用所述指令执行部时,使所述指令解码部保持的所述指令和所述指令解码部保持的指令的后续指令无效;以及
使所述指令缓冲器再次保持所述指令解码部保持的指令和所述指令解码部保持的指令的后续指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2007/062426 WO2008155840A1 (ja) | 2007-06-20 | 2007-06-20 | 命令制御装置及び命令制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101689109A true CN101689109A (zh) | 2010-03-31 |
Family
ID=40156006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200780053381A Pending CN101689109A (zh) | 2007-06-20 | 2007-06-20 | 指令控制装置以及指令控制方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20100100709A1 (zh) |
EP (1) | EP2169539A4 (zh) |
JP (1) | JP5168277B2 (zh) |
KR (1) | KR101122180B1 (zh) |
CN (1) | CN101689109A (zh) |
WO (1) | WO2008155840A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10346173B2 (en) | 2011-03-07 | 2019-07-09 | Oracle International Corporation | Multi-threaded instruction buffer design |
US8984511B2 (en) * | 2012-03-29 | 2015-03-17 | Advanced Micro Devices, Inc. | Visibility ordering in a memory model for a unified computing system |
US10095518B2 (en) * | 2015-11-16 | 2018-10-09 | Arm Limited | Allowing deletion of a dispatched instruction from an instruction queue when sufficient processor resources are predicted for that instruction |
CN110832653A (zh) | 2017-07-07 | 2020-02-21 | 大金工业株式会社 | 振动传感器和压电元件 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694425B1 (en) * | 2000-05-04 | 2004-02-17 | International Business Machines Corporation | Selective flush of shared and other pipeline stages in a multithread processor |
US20060206692A1 (en) * | 2005-02-04 | 2006-09-14 | Mips Technologies, Inc. | Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW260765B (zh) * | 1994-03-31 | 1995-10-21 | Ibm | |
TW353732B (en) * | 1994-03-31 | 1999-03-01 | Ibm | Processing system and method of operation |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
US6016542A (en) * | 1997-12-31 | 2000-01-18 | Intel Corporation | Detecting long latency pipeline stalls for thread switching |
US6889319B1 (en) * | 1999-12-09 | 2005-05-03 | Intel Corporation | Method and apparatus for entering and exiting multiple threads within a multithreaded processor |
US6609193B1 (en) * | 1999-12-30 | 2003-08-19 | Intel Corporation | Method and apparatus for multi-thread pipelined instruction decoder |
JP3564445B2 (ja) * | 2001-09-20 | 2004-09-08 | 松下電器産業株式会社 | プロセッサ、コンパイル装置及びコンパイル方法 |
JP3769249B2 (ja) * | 2002-06-27 | 2006-04-19 | 富士通株式会社 | 命令処理装置および命令処理方法 |
JP3727324B2 (ja) * | 2004-04-26 | 2005-12-14 | 松下電器産業株式会社 | プロセッサ及びコンパイル装置 |
US7613904B2 (en) * | 2005-02-04 | 2009-11-03 | Mips Technologies, Inc. | Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler |
JP2006343872A (ja) * | 2005-06-07 | 2006-12-21 | Keio Gijuku | マルチスレッド中央演算装置および同時マルチスレッディング制御方法 |
-
2007
- 2007-06-20 CN CN200780053381A patent/CN101689109A/zh active Pending
- 2007-06-20 WO PCT/JP2007/062426 patent/WO2008155840A1/ja active Application Filing
- 2007-06-20 KR KR1020097025599A patent/KR101122180B1/ko not_active IP Right Cessation
- 2007-06-20 JP JP2009520194A patent/JP5168277B2/ja not_active Expired - Fee Related
- 2007-06-20 EP EP07767264A patent/EP2169539A4/en not_active Withdrawn
-
2009
- 2009-12-15 US US12/654,262 patent/US20100100709A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694425B1 (en) * | 2000-05-04 | 2004-02-17 | International Business Machines Corporation | Selective flush of shared and other pipeline stages in a multithread processor |
US20060206692A1 (en) * | 2005-02-04 | 2006-09-14 | Mips Technologies, Inc. | Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor |
Also Published As
Publication number | Publication date |
---|---|
EP2169539A4 (en) | 2010-12-29 |
EP2169539A1 (en) | 2010-03-31 |
WO2008155840A1 (ja) | 2008-12-24 |
JPWO2008155840A1 (ja) | 2010-08-26 |
US20100100709A1 (en) | 2010-04-22 |
JP5168277B2 (ja) | 2013-03-21 |
KR101122180B1 (ko) | 2012-03-20 |
KR20100007972A (ko) | 2010-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100357884C (zh) | 用于处理指令的方法、处理器以及系统 | |
US5546593A (en) | Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream | |
CN100487642C (zh) | D缓存缺失预测和调度的方法和装置 | |
KR101148495B1 (ko) | 파이프라인 프로세서에서 조건 명령 실행을 촉진시키기 위해 로컬 조건 코드 레지스터를 이용하기 위한 방법 및 장치 | |
TW425528B (en) | Memory system for ordering load and store instructions in a processor that performs out-of-order multithread execution | |
US5918033A (en) | Method and apparatus for dynamic location and control of processor resources to increase resolution of data dependency stalls | |
US5742782A (en) | Processing apparatus for executing a plurality of VLIW threads in parallel | |
US7734897B2 (en) | Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads | |
RU2233470C2 (ru) | Способ и устройство для блокировки сигнала синхронизации в многопоточном процессоре | |
CN101501636A (zh) | 用于基于动态可改变延迟来执行处理器指令的方法和设备 | |
EP2425329B1 (en) | Method and apparatus for scheduling the issue of instructions in a multithreaded microprocessor | |
CN106990941A (zh) | 使用寄存器重命名处理移动指令 | |
JPH0668726B2 (ja) | レジスタ管理システム | |
KR100681199B1 (ko) | 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치 | |
JPH04270421A (ja) | プロセサアーキテクチャ | |
CN101681261A (zh) | 指令执行控制装置以及指令执行控制方法 | |
JPS61107434A (ja) | デ−タ処理装置 | |
US7711934B2 (en) | Processor core and method for managing branch misprediction in an out-of-order processor pipeline | |
JPH09120359A (ja) | プロセッサ内の資源割当て追跡方法及びそのシステム | |
JP2005182825A5 (zh) | ||
KR100493126B1 (ko) | 데이터정밀도모드표시기를구비한다중파이프라인형마이크로프로세서 | |
CN101689124A (zh) | 用于多线程处理器的线程去加重指令 | |
CN101689109A (zh) | 指令控制装置以及指令控制方法 | |
JPH10301778A (ja) | レジスタの名前変更を管理する方法および装置 | |
EP2159686A1 (en) | Information processor |
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 |