CN1221892C - 流水线微处理器的循环高速缓冲存储器及高速缓存控制器 - Google Patents
流水线微处理器的循环高速缓冲存储器及高速缓存控制器 Download PDFInfo
- Publication number
- CN1221892C CN1221892C CNB011211393A CN01121139A CN1221892C CN 1221892 C CN1221892 C CN 1221892C CN B011211393 A CNB011211393 A CN B011211393A CN 01121139 A CN01121139 A CN 01121139A CN 1221892 C CN1221892 C CN 1221892C
- Authority
- CN
- China
- Prior art keywords
- instruction
- circulation
- cache memory
- bag
- clock period
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 claims abstract description 26
- 238000004891 communication Methods 0.000 claims abstract description 3
- 230000004087 circulation Effects 0.000 claims description 173
- 238000012545 processing Methods 0.000 claims description 14
- 238000003860 storage Methods 0.000 claims description 6
- 238000009825 accumulation Methods 0.000 claims 2
- 230000008676 import Effects 0.000 claims 2
- 230000006870 function Effects 0.000 description 9
- 238000012546 transfer Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000010276 construction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 101100533652 Homo sapiens SLIRP gene Proteins 0.000 description 2
- 102100025491 SRA stem-loop-interacting RNA-binding protein, mitochondrial Human genes 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- KPMVHELZNRNSMN-UHFFFAOYSA-N chembl1985849 Chemical compound N1=CC=C2NCCN21 KPMVHELZNRNSMN-UHFFFAOYSA-N 0.000 description 1
- 230000003750 conditioning effect Effects 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000007616 round robin method Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000011079 streamline operation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 239000002699 waste material Substances 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4452—Software pipelining
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Microcomputers (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明揭示一种微处理器和用于操作该微处理器的方法。该微处理器包括从一个指令流水线接收指令的多重执行单元,一个循环高速缓存存储器(210)与指令流水线通信,一个循环高速缓存控制器(214)控制指令流。最好由软件指令通知存控制器开始建立一个规定规模的软件流水线循环到缓存器。然后将指令从指令流水线累积到缓存器;当软件流水线循环的核心被建立到缓存器时,控制器最好停顿该指令流水线并使用缓存的指令执行循环。在循环完成后,恢复指令流水线。可减少所需的程序规模并减少功率消耗。
Description
本发明一般涉及流水线(pipeline)微处理器,尤其涉及用于执行软件流水线循环的方法和微处理器结构。
微处理器是将一个计算机的指令处理、算术和逻辑操作结合到单个芯片上的电路。一个数字信号处理器(DSP)是优化成有效地处理大量数据的微处理器。这种处理器集中了许多当代电子产品的操作,如高速调制解调器,高密度磁驱动器,数字蜂窝电话及复杂的自动化系统,并能实现各种未来的其它数字系统功能。在这些环境中对DSP的要求在持续增长,因为消费者从其数字产品中追求更高的性能。
设计师通过增加时钟频率,消除DSP线路设计的体系结构瓶颈,通过在单个处理器线路中加入多重执行单元,以及开发优化的编译器以有效的方式调度处理器执行的操作来成功地增加了DSP的性能。当进一步增加时钟频率变得难以实现时,设计师利用多重执行单元处理器作为达到提高DSP性能的方法。例如,图1示出具有8个执行单元L1、S1、M1、D1、L2、S2、M2和D2的DSP执行单元的寄存器结构的方框图。这些执行单元可以并行地同时完成多个操作,如加、乘、寻址、逻辑功能和数据的存取。
理论上多重操作单元处理器的性能正比于可用的执行单元的数目。但是,此性能优点的利用取决于操作的有效调度,使大多数执行单元在每个时钟周期有事可做。有效的调度对循环指定特别重要,因为在典型的运行时间应用中处理器在循环执行之中花费大量时间。
传统上,编译器是完成调度操作的一段软件。编译器是例如C,BASIC或FORTRAN等源程序翻译成实际上在机器上运行的二进制映象的软件。典型地,编译器由多个不同的阶段(phase)组成,一个阶段称为前端,负责校验源程序语法上的正确性。如果编译器是C编译器,必须保证该源程序是C程序。还有一个程序生成阶段,在前端和程序生成器之间的接口是高级中间表示。高级中间表示是需要完成的更细化的指令序列。例如,在源程序中一个循环可以编码成:for(l=0,l<10,l=l+1),它实际上可以分解成一系列步骤,例如,每次通过循环时首先装入1并将其对10进行校验,以确定是否执行下一个循环。
程序生成阶段的程序生成器取出此高级中间表示,并将其转换成低级中间表示。这更加接近于计算机能理解的实际指令。编译器的优化器必须保持程序的语义(即从源程序翻译到高级中间表示,再到低级中间表示并最终到可执行文件的指令的意义),但重写或转换该程序使计算机以更少的时间执行等价的指令组。
被编译器翻译成机器码的源程序由循环组成,如DO循环、FOR循环,和WHILE循环。对这种循环编译进行优化对于在编译器生成的程序的运行时间性能方面具有重要的影响。在某些情况,大量的时间花费在如做循环迭代和转移等管理功能上而不是在这些循环本身完成的计算上。这些循环常实现科学应用,处理大量数组和数据指令并在高速处理器上运行。在如RISC结构的机器那样的现代处理器上尤其如此。这些处理器的设计使得算术运算一般比存储器存取操作快很多。处理器和存储器速度之间的不匹配是限制微处理器性能的一个很重要的因素。另外,转移指令(无论是条件转移或无条件转移)对程序的性能有附加的影响。这是因为大多数现代的结构是超流水线的且实现某种转移预测算法。该积极的流水线方法使得转移的误预测的不利后果十分大。算术指令是在寄存器内部的指令,可快速执行,而转移指令由于误预测的原因,存取由于存储器速度较慢的原因,可能占用较长的执行时间。
能够安排循环指令得到多个执行单元的优点的一个有效方法是用软件流水线循环。在传统的标量循环中,在任何指令执行下一迭代以前所有指令执行一个单迭代。在软件流水线循环中执行的次序重新调度,使得在前一次迭代结束以前开始执行原始循环的一个或多个迭代。参照图7,其中示出包括A、B、C、D和E指令循环的20次迭代的简单标量循环。图8描述对图7的循环的另一种执行调度,其中每个时钟周期开始原始循环的一个新的迭代。在此调度中对时钟周期I4-I19每个时钟周期执行同样的指令(An,Bn-1,Cn-2,Dn-3,En-4);如果可用多个执行单元平行地执行这些操作,此程序可以重新构造来完成这些循环中的重复指令。于是,A、B、C、D、E的重复样式(以及循环控制操作)形成一个新的软件流水线循环的循环核心(loop kernel),它在16个循环中的时钟周期l4-l19执行这些指令。在图8的时钟周期l1到l3执行的指令仍必须首先执行,以便适当地“填满”软件流水线循环;这些指令称为循环头(loop prolog)。类似地,在图8的时钟周期l20到l23的指令也必须执行以便适当地“流出”此软件流水线;这些指令称为循环的结尾(loop epilog)(注意在许多情况此循环结尾可以通过熟知的思索(Speculative)执行技术予以删除)。
图7和图8的简单例子说明了软件流水线的基本原理,但是依赖性和冲突的其它考虑可能限制特定的调度解决方案。为了更详细地解释软件流水线,可参见Vicki H.Allan,“软件流水线”27 ACM“计算机检测”367(1955)。
软件流水线的一个缺点是对每个循环需要一个专门的循环头。循环头直接将一个流水线的头几次迭代排序,直到能进入稳态循环核心(一般被称为“填充”此流水线)。如果执行此核心,只有在循环核心中的每条指令具有有效的操作量后,才能达到稳态操作。根据经验,在k=l-m时钟周期以后循环核心能进入稳态执行,其中l表示完成流水线循环的一次迭代需要的时钟周期数,而m表示在循环核心的一次迭代中包括的时钟周期数(如果核心是顺序进行的,此公式通常必须修改)。
结合此关系,可理解当流水线循环的单次迭代需要的累计流水线延时增加时,循环头的长度也相应的增加。在某些情况,需要填充流水线的循环头程序可以是循环核心程序的规模的数倍。因为程序规模可能是执行速度的一个确定因素,(短的程序与长的程序相比较通常在更大的范围更能使用芯片上的程序存储器),长的循环头不利于程序执行速度。较长程序的附加缺点是增加了能耗—存储器存取通常比CPU芯片操作需要大得多的能耗。
对于长的循环头的一个解决缺陷方法是“预起动”(“prime”)此循环。即去掉循环头并执行此循环更多次。为此,在头几次执行循环时不执行某些指令,如存储,而在循环执行的最后时刻执行。通过使这些指令条件化且对每组在每个特定的循环迭代开始执行的指令分配一个新计数器就可以实现上述功能。但是,这样增加了每个新循环计算器减量的指令,引起更低的循环效率。它还增加了程序的规模并对通用寄存器和条件寄存器两者增加了额外的寄存器压力,由此,预起动软件流水线循环不总是可能或期望的。
本发明通过消除至少一部分已有技术的软件流水线所需要的预编译循环头和循环核心程序,寻求减少程序规模、能耗和处理的延时。本发明通过实时“编译”或“建造”循环核心消除了直接重复循环头指令,而同时以循环方式执行循环头指令。因此按照本发明的微处理器包括能完成该“建造”功能并循环通过和执行以前产生的指令的硬件。
在一方面,本发明提供一个多重执行单元微处理器,包括一个指令流水线,一个与该指令流水线通信的循环高速缓冲存储器,和一个循环高速缓存控制器。该指令循环缓冲存储器能够对每个执行单元存取直到N个执行单元指令周期。该循环缓存存储器能可选择地从指令流水线和从循环高速缓存存储器将指令发送到执行单元。该循环高速缓存控制器最好能响应软件命令使能该指令循环高速缓存存储器,并控制从循环高速缓冲存储器存取指令。控制器最好还对该高速缓存的循环检测退出条件。最好该控制器功能使用微处理器程序计数器。该控制器还能适当地响应循环高速缓存命令停止和重新起动微处理器的指令流水线。
在另一方面,本发明提供一种具有一个循环高速缓存存储器和一个指令流水线的多重执行单元处理器的操作方法。该方法包括在循环高速缓存存储器中建造软件流水线循环核心的步骤,停止该指令流水线的步骤,使用循环高速缓存存储器中的核心指令执行该循环核心的至少一次迭代的步骤,检测循环退出条件和恢复指令流水线的步骤。最好在建造循环核心同时指令可从循环高速缓冲存储器发出,这就允许减少程序的规模。
本发明的一个优点是由于有较少的数值从存储器取出而节省功耗。
本发明第二个优点是由于存储器加载时,它们是从高速缓存器而不是从存储器加载从而节省功耗。
本发明的第三个优点是可减少需要完成循环指令的程序量。
参照附图可以更好地理解本发明;
图1是方框图,描述了如Texas Instruments公司的C6x处理器那样的多重执行单元处理器的执行单元和寄存器,由此本发明的一个较佳实施例可以操作执行。
图2以更详细的方框图的形式,示出读取包的流程,它从程序存储器30接受,通过读取21、调度22和解码23阶段以及两个数据通路1和2、24a和24b。
图2b详细示出图1和图2中的数据通路1,24a和2,24b。
图3示出图2的8指令宽的读取包的结构。
图4示出以存储器映象模式物理上可编址的C6x处理器的芯片上的地址空间。
图5A示出C6000的流水线阶段,其上以图示方式表明了本发明。
图5B是一图表。示出了在图1的C6x微处理器中一个指令执行流水线的各处理阶段。
图5C是一图表,示出了在图1的C6x微处理器中一个指令执行流水线的各处理阶段。
图6示出对顺序执行的5条指令序列的硬件流水线。
图7示出同样5条指令,它们在20次串行执行迭代的单周期循环中执行,无并行处理,且无软件流水线。
图8示出同样5条指令,用软件流水线在20次迭代的循环中执行。
图9示出用软件流水线在20次迭代的3周期循环中执行的指令A-P。
图10示出图9的3周期循环核心,指令A-P映射到硬件功能单元。
图11示出用软件流水线在具有20次迭代的3周期循环中执行的指令A-P的C6000编码指令序列。
图12示出从C6000流水线的C6000DP/DC阶段的DP阶段进行的指令A-P调度。
图13示出用在3周期循环中执行的指令A-P的软件流水线循环的一次迭代的同一例子填入的C6000流水线。
图14示出按照本发明较佳实施例的带有循环高速缓存执行包构造器(LoopCache Execute Packet Builder)的C6000DP/DC阶段。
图15示出在按照本发明较佳实施例的、实施循环高速缓存执行包构造器的C6000上执行的同一个例子(指令A-P的3周期循环的20次迭代)的新指令序列。
图16a-16f图示出了循环高速缓存执行包构造器逐步操作的例子,特别关注C6000的DP/DC阶段。
图16a示出在将指令A发给C6000CPU的M1单元解码单元且在周期2发给LCEPB的PC0时的循环高速缓存器(Loop Cache)和解码单元。
图16b示出在将指令B和C分别发给C6000CPU的S2和M2解码单元且在周期1发给LCEPB的PC1时的循环高速缓存器和解码单元。
图16c示出在将指令D和E分别发给C6000CPU的M1和M2解码单元且在周期0发给LCEPB的PC2时的循环高速缓存器和解码单元。
图16d示出在将指令FGH分别发给C6000CPU的L2、S1和S2解码单元和LCEPB的PC0,且在周期1将指令从LCEPB的PC0发给C6000CPU的M1解码单元时的循环高速缓存器和解码单元。
图16示出在将指令O和P分别发给C6000CPU的D2和L1解码单元和LCEPB的PC2,且将指令JDE从LCEPB的PC2分别发给C6000CPU的S1、M1和M2解码单元时的循环高速缓存器的解码单元。
图16f示出在将指令KLFGHA从LCEPB的PC0分别发给C6000CPU的D1、D2、L2、S1、S2和M1解码单元而指令的调度是从C6000DP阶段一直停留到“Cntr=0”。
现在叙述本发明几个说明性实施例。虽然有理由相信,本发明可以结合实际上任何具有多重执行单元的处理器使用,为了解释的目的,参照特定的处理器系列Texas Instruments TMS320C62xx详细地描述实施例。本领域的普通技术人员将充分理解下面的描述,且能再现本发明;而对处理器结构、指令集和操作等有关资料,有兴趣的读者可参考德克萨斯仪器股份有限公司的TMS320C62xxCPU和指令集参照指南(1997)和德克萨斯股份有限公司的TMS320C62xx程序设计器指南(1997),通过引用,上述内容与本发明结合。
某些定义对读者也是有用的。这里使用的指令是由处理器上的一个执行单元在一个或多个时钟周期内可以完成的功能。一个执行包(execute packet)是一个或多个指令的组合,它们在相同的时钟周期内调派到各个执行单元。一个取入包(fetch packet)是一个标准规模的指令块,包括一个或多个执行包,它们作为一个单元加载到CPU。
存储器件映射在芯片上的存储器占据正规可寻址程序存储器的一个连接段。一个高速缓存器芯片上存储器包括一个指令的拷贝,它们也驻留在外部存储器且已被CPU请求(通常是那些最新请求的)。这些不需要代表程序存储器的一个连续段,且通常不由CPU直接选址。一个循环高速缓存存储器(loopCache memory)具有附加的特性,它能在操作的任何时刻包含不驻留在传统高速缓冲器或芯片外存储器中的执行包的拷贝。但是这些执行包使用驻留在传统高速缓冲存储器或芯片外存储器中的指令加以构造。
Texas Instruments TMS 320C6xCC6x处理器系列包括若干具体的处理器,它们可以被修改成结合本发明。C6x系列包括标量和浮点结构。这些处理器的CPU核心包含8个执行单元,其中每个需要31位指令。如果所有8个处理器的执行单元对一个给定的时钟周期发出一个指令,需要最大256位指令字长度(8个31位指令加上指示平行排序的8位)。
在图1中示出了连接若干外部数据系统的C6x处理器的方框图。处理器10包括与程序存储器控制器30和数据存储器控制器12通信的CPU核心(core)20。该处理器的其他重要的块包括外设14,外设总线控制器17和DMA控制器18。
处理器10构造成使CPU核心20无须关心从存储控制器12和30来的所请求的数据和指令是否实际上驻留在芯片上或芯片外。如果所请求的数据驻留在芯片上,控制器12或30将从对应的芯片上的数据存储器13或程序存储器/高速缓存器31抽取数据。如果所请求的数据未驻留在芯片上,这些(控制)单元从外部存储器接口(EMIF)16请求数据。EMIF16与外部数据总线70通信,后者连接到如盘71、ROM72或RAM那样的外部数据存储单元。外部数据总线70为32位宽。
CPU核心20包括两个通常相似的数据通路24a和24b,如图1所示,详细示于图2a和2b。第一个通路包括一个共享的多端口寄存器文件A和4个执行单元,包括一个算术和加载/储存单元D1,一个算术和移位单元S1,一个乘法器M1和一个算术单元L1,第二个通路包括多端口寄存器文件B和执行单元:算术单元L2,移位单元S2,乘法器M2和加载/储存单元D2。这两个数据通路之间有共享数据的能力(但并不限定)。
因为CPU核心20包括8个执行单元,指令处理是CPU核心20的一个重要功能。256位宽的指令组由程序取入21请求并从程序存储控制器30作为取入包(即100,200,300,400)接收,其中每个取入包是32位宽。指令调度22从取入包在执行单元之间分配指令作为执行包,将“ADD”指令分配给算术单元L1或算术单元L2,将“MPY”指令分配给乘法单元M1或M2,将“ADDK”指令分配给算术和移位单元S1或S2,并将“STW”指令分配给算术和加载/存储单元D1和D2。在指令调配22以后,指令解码器23在应用到对应的执行单元之前解码此指令。
在较佳实施例中,一个取入包具有固定的8条指令的长度,如图3所示。取入包的执行组合由每条指令的p-位(即位0)指定。取入包在程序存储器中是每8个字对齐。
该P位控制指令的并行执行。P位被指令调配22从左到右(从低地址到高地址)扫描。如果指令i的p位是1,则指令i+1与指令i并行执行,即在同一个执行包。因此,一个执行包可以包含1条到8条指令,且一个取入包可以包括1个到8个执行包,取决于这些执行包的规模。在一个执行包中的所用指令必须使用单独的执行单元。一个执行包也不能跳越8个字的边界。因此,在取入包的最后的p-位总设成0,且每个取入包以一个新的执行包开始。
由于可变的执行包长度和固定的取入包长度,在较佳实施例中,芯片上程序存储器31按照取入包对齐。如果位于取入包中间的一条指令被CPU请求,则抽取整个取入包,但在较低地址的所有指令被忽视(即使它们在其它情况与所请求的指令并行操作)。
C6x处理器的物理的可寻址的地址空间是4G(千兆)字节。芯片上程序存储器31的规模是64K字节。但是每条指令需要4个字节,每个取入包包含8条指令,使得芯片上程序存储器31安排成2K帧,每帧保持长度是32字节或256位的一个取入包。在存储器映射方式,该64K字节的芯片上存储器可以选成在以地址1400000开始的地址空间中的连续存储器块,如图4A所示,或以地址0000000开始,如图4B所示。
图5A示出了当一个包括8条指令的取入包通过硬件流水线被处理时,C6000微处理器的流水线阶段。图5B是一图表,示出在图1的C6000微处理器中一个指令执行流水线的各处理阶段。每个阶段大致相当于系统时钟的一个时钟周期。例如,如果微处理器1以200MHz时钟频率运行,则每个阶段标称为5NS。但是,在等待从如RAM70那样的存储器或外围设备的数据的阶段,在所需的数据未准备好之前流水线一直停顿。在停顿时,给定流水线阶段占据数个系统时钟周期。
在图5B中,处理一条指令的第一阶段是产生在PG阶段中的程序地址。这是通过加载位于程序取入器21中的程序取入计数器PFC完成的。在第二个指令处理阶段PS,一个指令取入包的地址经由程序地址总线PADDR发送到程序存储器31。第三阶段PW是在存储器31的访问时间需要的等待阶段。在第四阶段PR,可得到从程序存储器31经由数据总线PDATA_1的程序取入包。在第五处理阶段DP,检测指令的并行性并将能并行执行的指令每时钟周期一个执行包地调配到适当的功能单元。在DP处理阶段还有一个调配缓存器,其中8条指令驻留在那里等待调配到解码阶段DC。每个8条指令组包括1-8个执行包。每一个时钟周期将一个执行包发送到DC。在所有执行包被发送以后可从存储器得到下一个取入包。在以后的段落中将更详细地描述流水线操作的这个方面。在第六处理阶段DC,执行指令被解码并且产生控制信号控制各种数据通路及功能单元。对每个8个功能单元有8个单独的解码单元,或者对每个功能单元有1个解码单元。
图5C是一图表,示出在图1的C6x微处理器指令执行流水线的执行阶段。在第一执行阶段E1,完成称为“ISC”的单时钟周期指令和称为“BR”的转移指令。指定的执行单元完成在图5C指出由控制线路导向与操作。在第二执行阶段E2,在控制线路控制下由指定的执行单元完成下述类型的指令:整数乘法(IMPY),程序存储指令(STP)和数据存储指令(STD)。在第三执行阶段E3,通常锁存从数据存储系统(DMS)来的数据持续执行加载数据指令,如图所示。在执行阶段E4,在E3锁存的数据被传送到执行单元D1或D2的数据输入寄存器DDATA_1。在执行阶段E5,通过处理在寄存器DDATA_1中的数据并将处理后的数据写到寄存器文件A或B中的指定寄存器中来完成LD指令。
图6示出硬件流水线,它包括对串行执行的下述A、B、C、D、E指令序列的上述详述的阶段,PG、PS、PW、PR、DP、DC和E1。如图所示,指令A、B、C、D、E通过处理阶段进行,每次一个时钟周期,直到以指令E结尾的每条指令到达硬件流水线的执行或E1阶段。
图7示出在没有并行处理和没有软件流水线情况下,以单周期时钟循环的20次迭代串行执行来完成的同样5条指令A、B、C、D和E。此图简单地是整个循环执行的一个周期图。下标1、2、3……20代表特定的循环迭代1,2,3……20。例如,在所示的头5个时钟周期,循环的第一次迭代执行或达到处理的E1阶段。类似地,从时钟周期95到时钟周期99,指令A、B、C、D和E的循环的20次迭代执行或达到处理的E1阶段。循环的执行占用5×20或100个时钟周期。
图8示出在实行软件流水线的情况以单周期循环20次迭代执行的同样5条指令A、B、C、D和E。执行指令A、B、C、D和E的循环的每次迭代的时间从开始到结束是5个周期。在软件流水线中,每一个时钟周期循环的新的迭代开始并结束。因此,例如在第二时钟周期中,在循环A1的第一次迭代完成执行以前该循环的第二次迭代已经开始,A2、B2、C2、D2和E2。循环以所示的代码定义,循环为迭代的执行次数在“LOOP”指令确定。如图8所示,指令A、B、C、D和E的循环总共占用24个时钟执行周期。在前4个时钟周期确定循环头。如以前的段落所确定,循环头建造了循环的核心,如前面所讨论,此循环头能够变成特别长从而本身成为与软件相关的一个问题。在周期0执行指令A1,在周期1执行指令B1和A2,在周期2执行指令C1、B2和A3等,直至整个核心被建成,在软件流水线达到稳态操作以前浪费许多时钟周期。在时钟周期4-19,由循环的每条指令A、B、C、D和E(虽然不同的迭代)构成的循环核心执行16次或16次迭代。例如,在时钟周期4,执行指令A的第5次迭代,同时执行指令B的第4次迭代,同时执行指令C的第3次迭代,同时执行指令D的第2次迭代,同时执行指令E的第1次迭代。因为“LOOP”指令确定迭代次数为20,循环的尾部跟随循环的核心并在周期20-23执行,因此与循环头一起完成循环附加的4次迭代。
图9示出了应用完成的软件流水线在3个时钟周期中用20次迭代执行的循环中的指令A-P。如图所示,指令B和C能并行执行,这就意味着它们使用不同的功能单元来执行。指令D和E,FG和H,K和L,M和N,O和P也能并行执行,由此增加了系统的并行性。图中也示出,指令A1、B1、C1、D1和E1形成前3个周期循环且在时钟周期0-3上执行,但由于还有指令F-P留在循环中,在第4周期上不去开始做A2、B2等指令,而第3周期开始执行指令F1、G1和H1,并还执行指令A、A2的第2次迭代。在周期0-5中头部继续建造核心,直到由指令A-P组成的循环的每条指令在周期6-8的3周期循环中同时执行。在周期60-65执行尾部指令。此循环总共占用66个周期来执行。6个周期用于头部,18×3或54个周期用于循环,6个周期用于尾部。
图10示出图9的3周期循环核心,其指令A-P映射到硬件功能单元。如图所示,在第1个循环周期,在不同的功能单元同时执行指令A、F、G、H、K和L。因此,在上面图9中,在周期3中不仅执行指令F、F1、G、G1和H、H1的第一次迭代,而且执行指令A、A2的第二次迭代,由此完成指令A第二次迭代的执行(指令A按照从程序中调出的“LOOP”指令需要20次迭代来完成,因而使该系统更有效。此效果部分是由于软件流水线,部分是由于C6x微处理器包括8个在每个时钟周期能并行执行的功能单元。类似地,在第二循环周期,指令B、C、L、M和N并行地执行(虽然在互相不同的功能单元)。而且在第三和最后循环周期(记住“LOOP”指令调出3周期循环)指令D、E、J、O和P,由于它们特定功能单元需要,并行地执行。
图11示出在软件流水线情况用20次迭代在3周期循环中执行的指令A-P的C6000编码的指令序列。如在前面的段落描述的,考虑到循环的复杂性和深度,程序的规模可能变得很大。必须对核心或稳态操作建立程序(例如执行调度)。因此,如图9的执行调度所示,程序确定了执行指令A的第一次迭代,然后在下一时钟周期指令B和C并行执行第一次迭代,然后在下一时钟周期,并行执行指令D和E的第一次迭代,然后因为开始一个新的循环周期,执行指令F、G和H的第一次迭代和指令A、A2的第二次迭代。如上面提到,此并行性不仅归功于软件流水线,而且归功于包含在每个时钟周期能并行执行的8个不同的功能单元的C6x微处理器硬件。在第7个时钟周期,开始循环的核心,且显示第一个循环周期,其中第一条指令K与指令L的第一次迭代、指令F1的第二次迭代、指令G的第二次迭代、指令H的第二次迭代及指令A的第三次迭代并行执行。一旦开始循环核心,每3个时钟周期(因为在“LOOP”指令中循环开始定义为3周期循环)指令迭代在“LOOP”指令确定次数。核心占用18×3(在3周期循环的第一部分,在第一循环周期中执行迭代A3到A-20)时钟周期用于执行。在循环核心以后。循环尾部完成从循环头到包括指令A-P3周期循环的整个20次迭代中一直未完成的3周期循环的部分。此循环需要总共48条执行指令。
图12示出从C6000流水线的C6000DP/DC阶段的DP阶段调配指令A-P。因此,使用在上述图9-11中示出的相同例子,示出C6x微处理器的硬件流水线的调配阶段的调配缓存器222、DP22,和硬件流水线C6x的解码阶段的解码器DC23(也示于图2)。其中图9示出在3周期循环中指令A-P的执行调度,图10示出在循环核心的3个周期中指令A-P在哪些功能单元执行,而图11示出编程指令A-P的软件流水线3周期循环的20次迭代所需的C6x程序,图12示出在每个时钟周期将指令A-P从调配阶段DP22的调配缓冲器222调配到各个单独的功能单元的解码单元DC23。因为调配缓冲器222能够储存用于调配的最多8条指令,在时钟周期-2的开始将指令A、B、C、D、E、F、G和H储存到调配缓冲器222。在时钟周期-2,指令A(第一个取入包的第一个执行包)被调配到功能单元M1(乘法器)的解码单元23。在下一个时钟周期-1,指令B和C(第一个取入包的第二个执行包)被调配到分别为存储和乘法单元的功能单元S2和M2的解码单元,在时钟周期0,指令D和E(第一个取入包的第三个执行包)从调配缓冲器222被调配到作为两个乘法器的功能单元M1和M2的解码单元。在时钟周期1,不仅指令F、G和H(第一个取入包的第四个和最后一个执行包)被调配到功能单元L1、S1和S2的解码单元,而且第二取入包的新一组8条指令I、J、K、L、M、N、O和P被加载到调配缓冲器222,使得在下一时钟周期(周期2)指令1在调配到功能单元L2的解码单元23而不必等待将指令加载到调配缓冲器222。第二取入包的各种执行包的调配随后就象对以前取入包所说的那样进行,直至每条指令A-P被调配到功能单元的适当的解码单元。此图只示出循环A-P的第一次迭代。
图13示出C6000硬件流水线和相应的阶段,用在图9-12中示出的以3周期循环执行的指令A-P的软件流水线循环的相同的例子(区别在于一次迭代而非20次迭代)。C6x微处理器硬件流水线的各阶段详述参照图5B和5C。如图所示,指令ABCDEFGH的第一取入包经过PG、PS、PW、PR和符合软件流水线原理的阶段,指令IJKLMNOP的第二取入包在第一取入包之后的一个时钟周期经过同样的阶段PG、PS、PW、PR。一旦第一个取入包到达调配阶段22,且如图12所示存入调配缓冲器222,调配阶段DP停顿来接收和储存更多的取入包,直至所有的执行包从第一取入包被调配到与执行该指令的特定功能单元相关的解码单元23。因此,DP从周期-1停留而到周期1,而执行包A、B和C,D和E,F,G和H被调配到合适的功能单元的解码单元23,并继续通过执行阶段E1。如图12所示。在周期1,当包括指令F、G和H的执行包被调配到合适的解码单元23时,指令IJKLMNOP的下一个取入包存入调配阶段DP22的调配缓冲器222,用于在下一个时钟周期(周期2)调配到解码单元23。与第一取入包相似,当第二取入包被分成能够并行执行的指令执行包时,在所有执行包从第二取入包被调配到特定的解码单元23以前没有新的取入包加载到调配单元22的调配缓冲器222(换言之,硬件流水线的DP阶段停顿)。
图14示出带有按照本发明的较佳实施例的循环高速缓冲执行包构造器(LCEPB)210的C6x微处理器DP/DC级。一方面,本发明提供一个如包括指令流水线230的C6x那样的多重执行单元微处理器,一个与指令流水线230通信的循环高速缓存存储器210和一个与指令流水线230及循环高速缓存存储器210通信的循环高速缓存控制器214。指令循环高速缓存存储器210能够对每个执行单元存放直到N周期的执行单元指令。循环高速缓存存储器210能够有选择地从指令流水线230和从循环高速缓存存储器210发出指令到执行单元。循环高速缓存控制器214最好响应软件指令使能指令循环高速缓存存储器210,并控制从循环高速缓存存储器210存取指令。如图14所示,从调配单元22的调配缓冲器222调配到特定解码单元23的指令同时存入循环高速缓存存储器210。此外,一旦在LCEPB210中建立了循环高速缓冲执行包,在从硬件流水线230来的新指令被从调配单元22的调配缓冲器222调配到合适的解码单元的同时,以前储存在循环高速缓存210的能与刚调配到解码单元23的那些新指令并行执行的指令也被发送到解码单元23,使得硬件流水线230同时执行新指令和循环高速缓存的指令。循环高速缓存控制器214最好还能检测对高速缓存循环的退出条件。最好循环高速缓存控制器214的功能使用微处理器程序计数器。循环高速缓存控制器214也可以响应循环缓存命令适当地停顿和重新启动微处理器的指令流水线230。
图15示出在按照本发明的较佳实施例应用循环高速缓存执行包构造器的C6000上执行的同一例子(指令A-P的3周期循环的20次迭代)的新指令序列。与图11中示出的执行循环A-P的20次迭代所需的48条指令不同,现在只需要17条指令,大量减少了程序的规模并减少了完成从存储器加载和存储所需的功率。如图所示,新的“LOOP”(“循环”)命令调出如“B_LOOP LOOP_LABEL,X,Y”,其中“LOOP_LABEL”表示用于识别目的循环的标号。“B_LOOP”指令的“X”部分表示从“B_LOOP”指令完成第一次转移占用的周期数或完成循环的第一次迭代占用的周期数。“B_LOOP”指令的“Y”部分表示循环的周期的规模。如图15的新“B_LOOP”指令的例子中所示,循环的标号是“LOOP New”,来自A-P指令的循环占用9个周期用于执行(这更容易从图12看到,图中示出从调配缓冲器222调配到解码单元23的执行包),而循环是3周期循环。只有发出“B_LOOP_LABEL,X,Y”出现2周期的延时,从而复位和从DP218清零循环高速缓存器和所有新的指令。
如在图16a-16f中更详细地示出,一旦软件指令被循环高速缓存控制器214所接收,将其转换成循环高速缓存控制器LCC模式,经由DP222调配的指令同时经由循环高速缓存控制器214存入循环高速缓存存储器210,而且循环高速缓存控制器214还将这些指令从循环高速缓存存储器210转发到指令流水线230的DC级23。循环高速缓存控制器214还控制(1)从DP来的NOP(空操作)是被写入还是忽略;(2)DP结果被写入哪个高速缓存存储器行;(3)DC级从哪个高速缓存存储器行读取。为了在第一次通过循环以前清零缓存器,如果在那个周期没有指令执行,DP必须将NOP写入缓存器。在第一次通过以后,不要将另外的NOP写入缓存器的现指令。
按照较佳实施例的方法包括下述步骤:在循环高速缓存存储器中构建软件流水线循环核心;停顿该指令流水线;使用在循环高速缓存存储器中的核心指令执行循环核心的至少一次迭代;检测循环退出条件;和恢复指令流水线。最好在建立循环核心的同时指令从循环高速缓存存储器发出,这样就允许减小程序的规模。
图16a-16f示出参照C6000的DP/DC级,循环高速缓存执行包构造器的操作的说明性的例子。现在使用图1中画出如TMS 320C6xx处理器那样8个执行单元处理器上操作的实施例来描述本发明。图16a-16f示出当硬件流水线被填充时“循环高速缓存执行包构造器”210(LC)如何建立循环高速缓存执行包,即212。PC216表示在取入包(即E1流水线阶段)中的第一条指令的指令地址。在E1流水线阶段的指令意味着该指令在流水线中的调配阶段DP已经到达调配缓存器,且刚被调配到对每个执行单元都特定的解码单元DC,和执行指令的DC/E1单元对。PFC是从存储器中获取下一个取入包的指令地址。PFC在每个时钟周期增加到下一个取入包(除非流水线停顿)或者改变到在E1阶段转移指令的转移目标。循环高速缓存执行包构造器210的操作应该不改变完成上述增量的计数器的值或定时。执行单元D1、D2、L1、L1、S1、S2、M1和M2是上面段落中控制的同样的执行单元,并沿着循环高速缓存执行包构造器的顶部运行。
图16a示出在周期-2期间在将指令A发到C6000CPU的M1单元的解码单元和LCEPB的PC0过程中的循环高速缓存器和解码单元。在周期-2以前(如图9中提供的例子),没有指令加载到LCEPB而调配缓存器222填满了指令A-H。在循环高速缓存控制器LCC214在周期-2中接收到专门的“B-LOOP”指令以后,在本例中从取入包进入E1流水线阶段PC216的第一个执行包—指令A的执行包从调配缓存器222调配到CPU的M1单元的解码单元23,且还发送到LCEPB210的与执行该指令的特定的执行单元类型相关的位置,在本例中是M1。在周期-1的开始,指令A驻留在LCEPB的执行包EP0中,而且LCEPBPC指向EP1。此外,如图13所示,虽然在所有的执行包从留在调配缓存器222取入包发送到对应的解码单元23以前,组成留在调配缓存器222的取入包的执行包发出执行包/时钟周期到对应的解码单元23,在硬件流水线的DP级218以前的流水线级停顿。因此,在周期-1的开始,在硬件流水线的DP级218以前的流水线级停顿,而且一直停顿到周期2的开始,此时所有执行包从调配缓存222发送到对应的解码单元23而且新的取入包在周期1最终从硬件流水线230取入。
图16b示出在周期-1期间在将包括指令B和C的第一个取入包的第二执行包分别发送到C6000CPU的S2和M2解码器及LCEPB的EP1时的循环高速缓存器和解码单元。因此,在周期0的开始,指令A留在LCEPB210的EP0中,指令B和C分别发送到执行单元S2和M2的DC单元23,现在指令B和C也留在LCEPB210的EP1与执行该指令的特定类型执行单元相关的位置,即分别为S2和M2。而且在周期0的开始,PC指向EP2。如以前详细描述的,在硬件流水线的DP阶段218以前的流水线阶段在周期0的开始停顿。
图16c示出在周期0期间将包括指令D和E的第一取入包的第三执行包分别送到C6000CPU的M1和M2的解码单元,并送到LCEPB的EP2时的循环高速缓存器和解码单元。因此,在周期1的开始。指令A留在LCEPB210的EP0中,指令B和C留在LCEPB210的EP1中,现在指令D和E留在LCEPB210的EP2中与执行该指令的特定执行单元类型相关的位置,即分别为M1和M2。因为“LOOP”被指令为具有3个周期(B_LOOP LOOP New,9,3),在周期1的开始,PC从EP2移回到EP0。如前详细所述,在硬件流水线DP阶段218以前的流水线阶段在周期1开始处停顿。
图16d示出在周期1期间,在将包括指令FGH的调配缓存器222的第一个取入包的第四个和最后一个执行包分别送到C6000CPU的L2,S1和S2解码单元,并送到LCEPB的EP0,而且将指令A从LCEPB的EP0送到C6000CPU的M1解码单元时的循环高速缓存器和解码单元。在周期2的开始时PC指向EP1。因为指令FG和H构成以前储存在调配缓存器222的第一取入包的最后的执行包,硬件流水线阶段在DP218之前走出以前的停顿状态,而调配缓存器222中装入从硬件流水线来的下一个或第二个包括指令I,J,K,L,M,N,O和P的取入包,它可以包括1至8个执行包,取决于互相的并行处理和互相的依存关系。
图16e和16f跳过许多步骤,通过周期6的未端和周期7的开始,其中执行包括指令I(第二取入包的第一执行包),J(第二取入包的第二执行包),K和L(第二取入包的第三执行包),和M和N(第二取入包的第四执行包),它们从调配缓存器222发送到对应的解码单元23,并分别发送到LCEPB210的不同的EP1、EP2、EP0,EP1中与执行该指令的特定类型的执行单元相关的位置,即分别为L2,S1,D1和D2及D1和L1。这些执行包如以前执行包一样通过LCEPB210处理。当然,如前已详述的,因为硬件流水线230的DP阶段的调配缓存器222只能存储最多8条指令,且一个时钟周期只能从调配缓存器222发送一个执行包,硬件流水线230的DP阶段218以前的流水线阶段在周期2到周期7结束期间停顿,此时最后一个执行包从硬件流水线的DP阶段的调配缓存器222送到执行这些指令的执行单元的特定解码单元23,在时钟周期6结束,时钟周期7开始时,PC指向EP2。
图16e示出在时钟周期7,在将包括指令O和P以前存入调配缓存器222的第二取入包的第5个和最后的执行包分别送到C6000CPU的D2和L1解码器,并送到LCEPB的EP2,而且将指令JDE从LCEPB的EP2分别送到C6000CPU的S1,M1和M2的解码单元时的循环高速缓存器和解码单元。因为从第一个执行包存入LCEPB开始的时钟周期数现在是9,而且原始“LOOP”指令(B_LOOP LOOPNew,9,3)确定对该“循环”完整的迭代一次的时钟周期数为9,从硬件流水线230的DP阶段218的调配缓存器的进一步调配停顿到循环高速缓存计算器(LCC)214等于“零”,而且所有在LCEPB210中的指令被发送到对应的解码/执行单元23“CNTR”次(本例为20次),在这一点,硬件流水线230的DP阶段的调配缓存器222包含指令Q,R,S,T,U,V,W和X而且随着LCEPB210清除为下一次循环作好准备继续进行正常操作。
图16f示出了上面段落的过程,其中在将指令KLFGHA从LCEPB的EP0分别发送到C6000CPU的D1,D2,L2,S1,S2和M1解码单元并将指令从C6000的DP阶段218调配到对应的解码单元23时,LCEPB210和解码单元23一直停顿到“Cntr”=0。一旦软件流水线循环的第一条转移指令取入(因向所有循环指令被加载到循环高速缓存器且最后的执行包从调制缓存器222被发送到特定的解码单元23),LCC214能使用DP阶段218发送到取入流水线的同样信号停顿该取入流水线阶段。在图16f中示出的LCEPB210包括那些指令,它们在周期8,11,……56的开始时存在于LCEPB210。在时钟周期57-63的余下周期中,当每条指令完成执行“CNTR”次时(本例中是20次)有效地执行循环尾部。
只有在完成LCEPB210中的循环,使得所有的循环的元素(虽然来自不同的循环的迭代)被同时执行以后,LCC214发送一个条件指令停顿该取入流水线阶段,而此循环执行预定的迭代次数。只有在发出:“B_LOOP_LABEL,X,Y”后确实存在2个周期的延时,复位和清零循环高速缓存器以及所有从DP218来的新指令,为下一次循环准备好LCEPB和硬件流水线的DP阶段。如前所述,在“B_LOOP_LABEL,X,Y”指令中,LOOP_LABEL”表示用于识别目的的循环的标号。“B_LOOP”指令的“X”部分表示从“B_LOOP”指令到完成第一次转移占用的周期数,或为完成循环的第一次迭代占用的周期数。“B_LOOP”指令的“Y”部分表示该循环的周期的规模。如前所述,一旦软件流水线循环的第一次转移指令发生(因而所有循环指令被加载的循环高速缓存器),LCC214能使用DP218发送到取入流水线的同一信号来停顿取入流水线阶段。
虽然本发明参照特定的处理器加以描述,但应理解,本领域普通技术人员能容易地采用所描述的实施例在另外多重执行单元处理器上加以运行。类似地,使用那样的产品是示例性的而非必须的,可以理解,本发明通常可以容易地用软件流水线循环来实现。虽然较佳实施例叙述中,参照构造软件流水线循环核心的若干特定方法,然后停顿流水线执行此循环核心的迭代,但本领域技术人员可以容易地用能用于本发明实施例中的特定微处理器的其它类似的方法加以替代,在阅读了本发明揭示的内容以后,其它的修改对于本领域技术人员是显而易见的,因而这些修改均在本发明范围中。
Claims (9)
1.一种操作具有指令流水线和一个能储存N个执行包的循环高速缓存存储器的多重执行单元处理器的方法,其中N是大于零的整数,其特征在于,所述的方法包括下述步骤:
提供一个用于储存N个执行包的循环高速缓存存储器,其中N是一个大于零的整数;
在所述循环高速缓存存储器中建立一个长度为n个执行包的软件流水线循环核心,其中n为大于零且小于或等于N的整数;
停顿所述的指令流水线;
通过对每次迭代发送所述循环高速缓存存储器中的n个执行包的所述软件流水线循环核心,执行所述软件流水线循环核心的至少一次迭代;
检测循环退出条件;和
恢复所述的指令流水线;
其中,所述的建立步骤包括下述步骤:
通过一条指令通知所述处理器开始在所述循环高速缓存存储器中建立长度为n时钟周期的软件流水线循环;
将m时钟周期循环建立指令输入到所述的处理器,其中m大于n且在每个时钟周期m输入一个或多个指令;
将每个所述的m时钟周期的循环建立指令累积到所述循环高速缓存存储器的一个所述n个执行包的位置;
其中,所述的累积步骤包括下述步骤:
将所述m个时钟周期循环建立指令的第一个储存到所述n个执行包的第一个位置;
通过将执行包位置增加1计算新执行包的位置,并如果增加后的位置通过所述n个执行包的最后位置,则将执行包位置复位到所述的第一执行包位置;
将所述m个时钟周期的循环建立指令的第二个存入所述的执行包位置;且
重复所述计算一个新执行包位置的步骤和所述存储一个时钟周期的循环建立指令步骤,直到每个所述m个时钟周期循环建立指令被储存到所述的循环高速缓存存储器。
2.如权利要求1所述的方法,其特征在于,在影响特定执行包位置的所述存储步骤的第一个步骤的时间或以前,清零每个所述n个执行包位置的内容。
3.如权利要求1所述的方法,其特征在于,在所述的建立步骤中发送到所述执行单元的指令包括在所述循环高速缓存存储器中累积的指令。
4.一种操作具有指令流水线和一个能储存N个执行包的循环高速缓存存储器的多重执行单元处理器的方法,其中N是大于零的整数,其特征在于,所述的方法包括下述步骤:
提供一个用于储存N个执行包的循环高速缓存存储器,其中N是一个大于零的整数;
在所述循环高速缓存存储器中建立一个长度为n个执行包的软件流水线循环核心,其中n为大于零且小于或等于N的整数;
停顿所述的指令流水线;
通过对每次迭代发送所述循环高速缓存存储器中的n个执行包的所述软件流水线循环核心,执行所述软件流水线循环核心的至少一次迭代;
检测循环退出条件;和
恢复所述的指令流水线;
其中,所述的建立步骤包括下述步骤:
通过一条指令通知所述处理器开始在所述循环高速缓存存储器中建立长度为n时钟周期的软件流水线循环;
将m时钟周期循环建立指令输入到所述的处理器,其中m大于n且在每个时钟周期m输入一个或多个指令;
将每个所述的m时钟周期的循环建立指令累积到所述循环高速缓存存储器的一个所述n个执行包的位置;
其中,在所述建立步骤中发送到所述执行单元的指令包括从所述m个时钟周期来的单时钟周期循环建立指令和从循环高速缓存存储器执行包来的任何指令的组合,其中将所述单时钟周期循环建立指令储存起来,直到从循环高速缓存存储器执行包来的所述指令不会由于累积所述的单时钟周期循环建立指令到所述执行包而被覆盖为止。
5.一种多重执行单元处理器,其特征在于,它包括:
一个指令流水线;
一个所述指令流水线通信的循环高速缓存存储器,所述的循环高速缓存存储器能够储存指令的N个执行包,其中N是大于零的整数;
一个能够从所述的指令流水线和从所述的循环高速缓存存储器的所述N个执行包可选择地发送指令到所述的执行单元的控制器;
其中,所述控制器可从所述指令流水线发送至少一条指令到一个所述的执行单元,而且在同一时钟周期从所述的循环高速缓存存储器发送至少一条指令到另一个所述执行单元。
6.如权利要求5所述的处理,其特征在于,所述的控制器响应一软件命令从所述指令流水线将指令累积到所述的循环高速缓存存储器。
7.如权利要求5所述处理器,其特征在于,所述控制器可将指令从所述指令流水线发送到所述执行单元,而又将该指令累积到所述的循环高速缓存存储器。
8.如权利要求5所述处理器,其特征在于,所述控制器访问由软件命令设置且包含软件流水线循环规模的循环规模寄存器。
9. 如权利要求8所述的处理器,其特征在于,所述控制器使用储存在所述循环规模寄存器中的循环规模值n,以重复地排序储存在所述循环高速缓存存储器内的n个执行包。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US20850800P | 2000-05-31 | 2000-05-31 | |
US60/208,508 | 2000-05-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1329302A CN1329302A (zh) | 2002-01-02 |
CN1221892C true CN1221892C (zh) | 2005-10-05 |
Family
ID=22774844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB011211393A Expired - Lifetime CN1221892C (zh) | 2000-05-31 | 2001-05-31 | 流水线微处理器的循环高速缓冲存储器及高速缓存控制器 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6567895B2 (zh) |
EP (1) | EP1160663B1 (zh) |
JP (1) | JP2002007141A (zh) |
CN (1) | CN1221892C (zh) |
TW (1) | TW541458B (zh) |
Families Citing this family (60)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7337437B2 (en) * | 1999-12-01 | 2008-02-26 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
US8176108B2 (en) * | 2000-06-20 | 2012-05-08 | International Business Machines Corporation | Method, apparatus and computer program product for network design and analysis |
US7065636B2 (en) * | 2000-12-20 | 2006-06-20 | Intel Corporation | Hardware loops and pipeline system using advanced generation of loop parameters |
JP3847672B2 (ja) | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
US7290089B2 (en) * | 2002-10-15 | 2007-10-30 | Stmicroelectronics, Inc. | Executing cache instructions in an increased latency mode |
US7206927B2 (en) * | 2002-11-19 | 2007-04-17 | Analog Devices, Inc. | Pipelined processor method and circuit with interleaving of iterative operations |
JP3974063B2 (ja) * | 2003-03-24 | 2007-09-12 | 松下電器産業株式会社 | プロセッサおよびコンパイラ |
US7171544B2 (en) * | 2003-12-15 | 2007-01-30 | International Business Machines Corporation | Run-time parallelization of loops in computer programs by access patterns |
KR20050071739A (ko) | 2004-01-02 | 2005-07-08 | 삼성전자주식회사 | 누설 전력을 줄이기 위한 마이크로프로세서 |
WO2006085869A1 (en) | 2005-02-08 | 2006-08-17 | Welldynamics, Inc. | Downhole electrical power generator |
CA2596408C (en) * | 2005-02-08 | 2012-04-17 | Welldynamics, Inc. | Flow regulator for use in a subterranean well |
JP4841861B2 (ja) * | 2005-05-06 | 2011-12-21 | ルネサスエレクトロニクス株式会社 | 演算処理装置及びデータ転送処理の実行方法 |
CA2610365A1 (en) * | 2005-05-31 | 2006-12-07 | Welldynamics, Inc. | Downhole ram pump |
RU2383718C2 (ru) | 2005-08-15 | 2010-03-10 | Веллдайнэмикс, Инк. | Система и способ регулирования потока текучей среды в скважине |
KR100781358B1 (ko) * | 2005-10-21 | 2007-11-30 | 삼성전자주식회사 | 데이터 처리 시스템 및 그의 데이터 처리방법 |
JP4879589B2 (ja) * | 2006-01-20 | 2012-02-22 | パナソニック株式会社 | コンパイラ装置 |
CN100449471C (zh) * | 2006-05-10 | 2009-01-07 | 华为技术有限公司 | 磁盘接口处理器以及磁盘操作命令的处理方法 |
US20090109996A1 (en) * | 2007-10-29 | 2009-04-30 | Hoover Russell D | Network on Chip |
JP5159258B2 (ja) * | 2007-11-06 | 2013-03-06 | 株式会社東芝 | 演算処理装置 |
US20090125706A1 (en) * | 2007-11-08 | 2009-05-14 | Hoover Russell D | Software Pipelining on a Network on Chip |
US20090125703A1 (en) * | 2007-11-09 | 2009-05-14 | Mejdrich Eric O | Context Switching on a Network On Chip |
US8261025B2 (en) * | 2007-11-12 | 2012-09-04 | International Business Machines Corporation | Software pipelining on a network on chip |
US8526422B2 (en) * | 2007-11-27 | 2013-09-03 | International Business Machines Corporation | Network on chip with partitions |
US7917703B2 (en) * | 2007-12-13 | 2011-03-29 | International Business Machines Corporation | Network on chip that maintains cache coherency with invalidate commands |
US8473667B2 (en) * | 2008-01-11 | 2013-06-25 | International Business Machines Corporation | Network on chip that maintains cache coherency with invalidation messages |
US8010750B2 (en) * | 2008-01-17 | 2011-08-30 | International Business Machines Corporation | Network on chip that maintains cache coherency with invalidate commands |
US8018466B2 (en) * | 2008-02-12 | 2011-09-13 | International Business Machines Corporation | Graphics rendering on a network on chip |
US8490110B2 (en) * | 2008-02-15 | 2013-07-16 | International Business Machines Corporation | Network on chip with a low latency, high bandwidth application messaging interconnect |
US7913010B2 (en) * | 2008-02-15 | 2011-03-22 | International Business Machines Corporation | Network on chip with a low latency, high bandwidth application messaging interconnect |
US20090245257A1 (en) * | 2008-04-01 | 2009-10-01 | International Business Machines Corporation | Network On Chip |
US20090260013A1 (en) * | 2008-04-14 | 2009-10-15 | International Business Machines Corporation | Computer Processors With Plural, Pipelined Hardware Threads Of Execution |
US20090271172A1 (en) * | 2008-04-24 | 2009-10-29 | International Business Machines Corporation | Emulating A Computer Run Time Environment |
US8078850B2 (en) * | 2008-04-24 | 2011-12-13 | International Business Machines Corporation | Branch prediction technique using instruction for resetting result table pointer |
US8423715B2 (en) * | 2008-05-01 | 2013-04-16 | International Business Machines Corporation | Memory management among levels of cache in a memory hierarchy |
US20090282419A1 (en) * | 2008-05-09 | 2009-11-12 | International Business Machines Corporation | Ordered And Unordered Network-Addressed Message Control With Embedded DMA Commands For A Network On Chip |
US8214845B2 (en) | 2008-05-09 | 2012-07-03 | International Business Machines Corporation | Context switching in a network on chip by thread saving and restoring pointers to memory arrays containing valid message data |
US7861065B2 (en) * | 2008-05-09 | 2010-12-28 | International Business Machines Corporation | Preferential dispatching of computer program instructions |
US7991978B2 (en) * | 2008-05-09 | 2011-08-02 | International Business Machines Corporation | Network on chip with low latency, high bandwidth application messaging interconnects that abstract hardware inter-thread data communications into an architected state of a processor |
US8494833B2 (en) * | 2008-05-09 | 2013-07-23 | International Business Machines Corporation | Emulating a computer run time environment |
US8392664B2 (en) * | 2008-05-09 | 2013-03-05 | International Business Machines Corporation | Network on chip |
US20090282211A1 (en) * | 2008-05-09 | 2009-11-12 | International Business Machines | Network On Chip With Partitions |
US7958340B2 (en) * | 2008-05-09 | 2011-06-07 | International Business Machines Corporation | Monitoring software pipeline performance on a network on chip |
US8020168B2 (en) * | 2008-05-09 | 2011-09-13 | International Business Machines Corporation | Dynamic virtual software pipelining on a network on chip |
US8230179B2 (en) * | 2008-05-15 | 2012-07-24 | International Business Machines Corporation | Administering non-cacheable memory load instructions |
US8040799B2 (en) * | 2008-05-15 | 2011-10-18 | International Business Machines Corporation | Network on chip with minimum guaranteed bandwidth for virtual communications channels |
US8438578B2 (en) | 2008-06-09 | 2013-05-07 | International Business Machines Corporation | Network on chip with an I/O accelerator |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
US8195884B2 (en) * | 2008-09-18 | 2012-06-05 | International Business Machines Corporation | Network on chip with caching restrictions for pages of computer memory |
KR101854671B1 (ko) * | 2011-11-15 | 2018-05-08 | 삼성전자주식회사 | 소프트웨어 파이프라인이 적용된 루프의 프롤로그와 에필로그에서 루프 외부의 명령어를 실행시키는 장치 및 방법 |
US9038042B2 (en) | 2012-06-29 | 2015-05-19 | Analog Devices, Inc. | Staged loop instructions |
US20140164708A1 (en) * | 2012-12-07 | 2014-06-12 | Advanced Micro Devices, Inc. | Spill data management |
US9459871B2 (en) * | 2012-12-31 | 2016-10-04 | Intel Corporation | System of improved loop detection and execution |
US9563561B2 (en) * | 2013-06-25 | 2017-02-07 | Intel Corporation | Initiation of cache flushes and invalidations on graphics processors |
WO2015097493A1 (en) * | 2013-12-23 | 2015-07-02 | Intel Corporation | Instruction and logic for memory access in a clustered wide-execution machine |
US10862630B2 (en) | 2015-02-13 | 2020-12-08 | Samsung Electronics Co., Ltd | Method and system for contiguous HARQ memory management with memory splitting |
CN107729054B (zh) * | 2017-10-18 | 2020-07-24 | 珠海市杰理科技股份有限公司 | 实现处理器对循环体执行的方法及装置 |
CN110737615B (zh) * | 2018-07-19 | 2021-06-08 | 海鹰航空通用装备有限责任公司 | 一种数据存取方法及装置 |
GB2580316B (en) | 2018-12-27 | 2021-02-24 | Graphcore Ltd | Instruction cache in a multi-threaded processor |
CN113407240B (zh) * | 2021-07-07 | 2022-09-09 | 浙江大学 | 一种C64x+ DSP软件流水循环缓冲机制的模拟方法 |
CN114138334A (zh) * | 2021-10-29 | 2022-03-04 | 北京中科昊芯科技有限公司 | 一种循环程序执行方法、装置以及处理器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998006038A1 (en) * | 1996-08-07 | 1998-02-12 | Sun Microsystems, Inc. | Architectural support for software pipelining of loops |
EP0840208B1 (en) * | 1996-10-31 | 2003-01-08 | Texas Instruments Incorporated | Method and system for single cycle execution of successive iterations of a loop |
US5893142A (en) * | 1996-11-14 | 1999-04-06 | Motorola Inc. | Data processing system having a cache and method therefor |
US6076159A (en) * | 1997-09-12 | 2000-06-13 | Siemens Aktiengesellschaft | Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline |
DE69936952T2 (de) * | 1998-01-28 | 2008-05-21 | Texas Instruments Inc., Dallas | Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen |
-
2001
- 2001-05-14 US US09/855,140 patent/US6567895B2/en not_active Expired - Lifetime
- 2001-05-31 TW TW090113203A patent/TW541458B/zh not_active IP Right Cessation
- 2001-05-31 EP EP01202052.5A patent/EP1160663B1/en not_active Expired - Lifetime
- 2001-05-31 CN CNB011211393A patent/CN1221892C/zh not_active Expired - Lifetime
- 2001-05-31 JP JP2001165352A patent/JP2002007141A/ja not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US6567895B2 (en) | 2003-05-20 |
TW541458B (en) | 2003-07-11 |
EP1160663A3 (en) | 2004-05-26 |
US20020016887A1 (en) | 2002-02-07 |
JP2002007141A (ja) | 2002-01-11 |
EP1160663B1 (en) | 2018-04-25 |
CN1329302A (zh) | 2002-01-02 |
EP1160663A2 (en) | 2001-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1221892C (zh) | 流水线微处理器的循环高速缓冲存储器及高速缓存控制器 | |
US8935515B2 (en) | Method and apparatus for vector execution on a scalar machine | |
JP2928695B2 (ja) | 静的インタリーブを用いたマルチスレッドマイクロプロセッサおよびそれを備えたシステムでの命令スレッド実行方法 | |
US7849453B2 (en) | Method and apparatus for software scouting regions of a program | |
Eichenberger et al. | Using advanced compiler technology to exploit the performance of the Cell Broadband Engine™ architecture | |
CN1267819C (zh) | 计算机系统内部处理指令的装置 | |
US8893104B2 (en) | Method and apparatus for register spill minimization | |
CN101034345A (zh) | 流处理器中数据流、指令流的控制方法 | |
CN1434380A (zh) | 图像处理装置和方法以及用于该装置的编译程序 | |
CN107810477A (zh) | 解码的指令的重复使用 | |
WO2007055889A1 (en) | Facilitating communication and synchronization between main and scout threads | |
CN101021779A (zh) | 一种针对流处理器的指令控制方法 | |
CN102508635A (zh) | 一种处理器装置及其循环处理方法 | |
JPH06176053A (ja) | デ−タ処理装置 | |
CN1173262C (zh) | 虚拟机指令的优化字节码解释器 | |
CN1153131C (zh) | 用于在多个指令的执行期间由微处理机自动插入所需数量的空操作指令的方法 | |
CN109101276A (zh) | 在cpu中执行指令的方法 | |
CN102880449B (zh) | 一种超长指令字结构下延迟槽调度方法及其系统 | |
JP2005504390A (ja) | ジャバハードウェアアクセラレータ用の投機的実行 | |
Merten et al. | Modulo schedule buffers | |
KR101497346B1 (ko) | 명령으로서 데이터 값을 평가하기 위한 시스템 및 방법 | |
US8359589B2 (en) | Helper thread for pre-fetching data | |
CN113791770B (zh) | 代码编译器、代码编译方法、代码编译系统和计算机介质 | |
WO2006136943A2 (en) | High-level language processor apparatus and method | |
CN1860436A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20051005 |
|
CX01 | Expiry of patent term |