CN111190645B - 分离式指令cache结构 - Google Patents
分离式指令cache结构 Download PDFInfo
- Publication number
- CN111190645B CN111190645B CN202010114531.9A CN202010114531A CN111190645B CN 111190645 B CN111190645 B CN 111190645B CN 202010114531 A CN202010114531 A CN 202010114531A CN 111190645 B CN111190645 B CN 111190645B
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- bic
- instruction cache
- ric
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 10
- 230000008569 process Effects 0.000 claims description 4
- 238000005457 optimization Methods 0.000 abstract description 4
- 230000000694 effects Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- 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
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
本发明公开了分离式指令cache结构,将指令cache拆分为两部分,一部分称为BIC(Branch Information Cache),另一部分称为RIC(Remainder Information Cache)。由于BIC只保存指令的一部分内容,因此BIC的容量和读写宽度都比传统的指令cache小的多,可以有更低的访问延迟,有利于减少取指流水线的级数,BIC和RIC的内容合起来是传统的1级指令cache的内容,由于RIC的面积优化,分离式指令cache的总面积甚至可能小于传统的1级指令cache。与传统的0级+1级的两级指令cache方案对比,本发明可达到类似的时序优化效果,但是避免了0级指令cache命中率低的问题,同时在面积和功耗上大大低于两级指令cache的方案。
Description
技术领域
本发明涉及指令cache技术领域,具体为分离式指令cache结构。
背景技术
指令cache是CPU中用于缓存指令的部件,CPU在运行时根据PC从指令cache中取得地址;之后会对这些地址进行预译码,并根据预译码的结果进行分支预测;分支预测会给出新的PC,使用新的PC再次访问指令cache获得更新的指令,以上过程周而复始,使得CPU能够在指令cache命中时持续地获得指令供给。
如图1中所示,从获得PC开始到对应的指令到达分支预测器进行预测获得预测的取指PC需要经过多个步骤,这些步骤难以在一个时钟周期内完成,因此普遍被划分到多级流水线当中,这就导致指令到达分支预测器时后面还有多级流水线需要填充,由于进行分支预测前无法预测指令是否发生跳转以及跳转的目标地址,因此只能按照指令不发生跳转来按照PC自然增加的方向继续取指,当分支预测器预测指令发生跳转时,要改变取指的方向,此时已经填充到取指流水线中的指令将被无效化,新的指令要重新经过图1中的流程,这会导致后面的流水线级有几个时钟周期没有指令经过,在现代CPU中,从获得PC到进行分支预测往往需要经过3~4个周期,如果分支指令被预测为跳转则至少会有1~2个周期没有有效指令进入后面的流水线中,在实际的程序运行过程中,分支指令占到很高的比例,一般认为在定点程序的运行中有25%的指令是分支指令,现代的超标量CPU一般都能做到每周期执行4条或更多的指令,这就表示平均每周期都遇到一条分支指令,在这种情况下取指流水线会因为分支预测为跳转而被频繁排空,这造成处理器的取指很不连续,对处理器的性能造成很大影响。
为了减小上述情况对CPU性能的影响,有些CPU在指令cache之外又增加了一个容量更小、结构更简单的0级指令cache(传统的指令cache被视为1级cache),0级指令cache有更短的访问时间,当它命中时可以减少从获得PC到进行分支预测的延迟。
0级指令cache为了相对1级指令cache减小访问延迟必须减小容量和设计复杂度,比如减少组相联度,使用路预测直接提前预测命中的路并只读取该路减小读出的数据宽度等,这些方法毫无疑问使得0级指令cache的命中率比1级指令cache的命中率低,而采用0级指令cache的CPU的1级指令cache的访问延迟往往会加长,因此如果0级指令cache的命中率低则对性能提高有限甚至在某些场景下会影响性能,此外,实现0级指令cache需要占用很大的芯片面积。
发明内容
本发明的目的在于提供分离式指令cache结构,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:分离式指令cache结构,将指令cache拆分为两部分,一部分称为:
BIC,另一部分称为RIC,当取指的指令为分支指令时,所述BIC内保存指令中可能与分支预测相关的信息,所述RIC则保存指令中的其他部分,在分支预测时只需要BIC中保存的数据,然后将BIC与RIC中的数据拼装为完整的指令进行译码,当取指的指令为非分支;
指令时,指令内的内容也会被拆成两部分分别保存在BIC和RIC内,在取指的过程中BIC的分支类型指示此指令不是分支指令,分支预测器不会对它进行预测,在和RIC的内容进行拼接后这些指令会直接按照普通的方式进行译码以及后继操作,所述BIC内具体保存的信;
息为在指令加载到指令cache之前进行预译码的结果,所述RIC内保存的是取指指令中的原始操作码和寄存器地址。
优选的,所述预译码的结果包括:
(1)指令是否为分支指令;
(2)如果是分支指令,分支指令的类型,以及指示分支指令的对应预测方法;
(3)分支目标地址的偏移量。
优选的,所述分支指令的类型包括:非分支、条件分支、间接跳转、函数调用、函数返回和直接跳转。
优选的,所述分支目标地址的偏移量来自于指令内的立即数或是立即数与指令PC的和。
与现有技术相比,本发明的有益效果是:
(1)由于BIC指令只保存指令的一部分内容,因此BIC指令的容量和读写宽度都比传统的指令cache小的多,可以有更低的访问延迟,有利于减少取指流水线的级数;
(2)BIC指令的组织形式与传统的指令cache完全一致,它们有相同的组数和相联度,采用相同的命中判断逻辑和替换策略,因此它的命中率和传统的1级指令cache完全一样,高于0级指令cache;
(3)RIC指令内的数据由于并不会立即使用,因此可以使用BIC指令的命中信息只读出命中的路,这样可以节省面积和功耗;
(4)BIC指令和RIC指令的内容合起来是传统的1级指令cache的内容,由于RIC的面积优化,分离式指令cache的总面积甚至可能小于传统的1级指令cache,与传统的0级+1级的两级指令cache方案对比,本发明可达到类似的时序优化效果,但是避免了0级指令cache命中率低的问题,同时在面积和功耗上大大低于两级指令cache的方案。
附图说明
图1为传统的取指流程图。
图2为分离式指令cache结构图。
图3为常见的分支指令编码格式图。
图4为常见的分支指令编码格式图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图2、图3和图4,本发明提供一种技术方案:分离式指令cache结构,将指令cache拆分为两部分指令,一部分称为BIC指令,另一部分称为RIC指令,当取指的指令为分支指令时,BIC指令内保存指令中可能与分支预测相关的信息,RIC指令则保存指令中的其他部分,在取指流水线中只获取BIC指令内的数据,通过预译码后利用这个数据进行分支预测,然后将BIC指令与RIC指令中的数据拼装为完整的指令进行译码,由于BIC指令中只保存指令的部分信息,因此可以比普通的1级指令cache容量更小,可以更快速,从而起到缩短取指流水线访问延迟的作用。
BIC指令内具体保存的信息为在指令加载到指令cache之前进行预译码的结果,预译码的结果包括:
(1)指令是否为分支指令,分支指令的类型包括:非分支、条件分支、间接跳转、函数调用、函数返回和直接跳转;
(2)如果是分支指令,分支指令的类型,以及分支指令的类型对应于分支指令的预测方法;
(3)分支目标地址的偏移量,分支目标地址的偏移量来自于指令内的立即数或是立即数与指令PC的和。
常见的分支指令的编码如图3和图4中所示,主要包含指令的操作码、寄存器地址和立即数,从指令的操作码可以得出具体的指令操作,寄存器地址表示从哪个寄存器获得源操作数或者结果写回到哪个寄存器,立即数表示分支目标地址相对于当前PC的偏移,在BIC指令中保存的就是这些预译码的结果,使用这些结果就可以进行分支预测,而RIC指令中保存的是指令的原始操作码和寄存器地址,如图4所示,BIC指令中的偏移量直接来自于图3中指令的低16位,而3位的分支类型是来自于对6位操作码的预译码结果,用于指导分支预测器的工作,因此只记录了指令是不是分支指令以及是何种分支指令,而其他的译码信息在进行分支预测之前并不需要,所以不保存在BIC指令当中,RIC指令内保存的是取指指令中的原始操作码和寄存器地址,这些内容在指令译码时才会被使用,因此会在译码前和RIC的内容合并。
当取指的指令为非分支指令时,指令内的内容也会被拆成两部分分别保存在BIC指令和RIC指令内,在取指的过程中BIC的分支类型指示此指令不是分支指令,分支预测器不会对它进行预测,在和RIC的内容进行拼接后这些指令会直接按照普通的方式进行译码以及后继操作。
RIC指令的内容在很晚的时候才会真正需要,因此RIC指令的读出速度不是很关键,这可以使得RIC指令根据BIC指令命中信息直接读取命中的路,而不需要像传统的指令cache那样同时读取所有的路,再根据命中情况选择输出的路,只读取一路使得RIC指令的读写宽度大大降低,由此带来面积和功耗的节省。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (4)
1.分离式指令cache结构,其特征在于:将指令cache拆分为两部分,一部分称为:
BIC,另一部分称为RIC,当取指的指令为分支指令时,所述BIC内保存指令中可能与分支预测相关的信息,所述RIC则保存指令中的其他部分,在分支预测时只需要BIC中保存的数据,然后将BIC与RIC中的数据拼装为完整的指令进行译码,当取指的指令为非分支;
指令时,指令内的内容也会被拆成两部分分别保存在BIC和RIC内,在取指的过程中BIC的分支类型指示此指令不是分支指令,分支预测器不会对它进行预测,在和RIC的内容进行拼接后这些指令会直接按照普通的方式进行译码以及后继操作,所述BIC内具体保存的信;
息为在指令加载到指令cache之前进行预译码的结果,所述RIC内保存的是取指指令中的原始操作码和寄存器地址。
2.根据权利要求1所述的分离式指令cache结构,其特征在于:所述预译码的结果包括:
(1)指令是否为分支指令;
(2)如果是分支指令,分支指令的类型,以及指示分支指令的对应预测方法;
(3)分支目标地址的偏移量。
3.根据权利要求2所述的分离式指令cache结构,其特征在于:所述分支指令的类型包括:非分支、条件分支、间接跳转、函数调用、函数返回和直接跳转。
4.根据权利要求2所述的分离式指令cache结构,其特征在于:所述分支目标地址的偏移量来自于指令内的立即数或是立即数与指令PC的和。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010114531.9A CN111190645B (zh) | 2020-02-25 | 2020-02-25 | 分离式指令cache结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010114531.9A CN111190645B (zh) | 2020-02-25 | 2020-02-25 | 分离式指令cache结构 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190645A CN111190645A (zh) | 2020-05-22 |
CN111190645B true CN111190645B (zh) | 2024-03-19 |
Family
ID=70708416
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010114531.9A Active CN111190645B (zh) | 2020-02-25 | 2020-02-25 | 分离式指令cache结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190645B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101275A (zh) * | 2018-06-26 | 2018-12-28 | 天津飞腾信息技术有限公司 | 一种基于移位的指令提取与缓冲方法及超标量微处理器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7809926B2 (en) * | 2006-11-03 | 2010-10-05 | Cornell Research Foundation, Inc. | Systems and methods for reconfiguring on-chip multiprocessors |
-
2020
- 2020-02-25 CN CN202010114531.9A patent/CN111190645B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109101275A (zh) * | 2018-06-26 | 2018-12-28 | 天津飞腾信息技术有限公司 | 一种基于移位的指令提取与缓冲方法及超标量微处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN111190645A (zh) | 2020-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8943300B2 (en) | Method and apparatus for generating return address predictions for implicit and explicit subroutine calls using predecode information | |
US10248395B2 (en) | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control | |
KR101099302B1 (ko) | 현재 실행중이 아닌 명령 세트로부터 명령들을 프리로드하기 위한 시스템, 방법 및 소프트웨어 | |
US20150186293A1 (en) | High-performance cache system and method | |
US9753855B2 (en) | High-performance instruction cache system and method | |
TW201351145A (zh) | 指令快取的減少耗能 | |
JP2009536770A (ja) | ブロックに基づく分岐先アドレスキャッシュ | |
US20080162903A1 (en) | Information processing apparatus | |
US20180232232A1 (en) | Compiler-assisted lookahead (cal) memory system apparatus for microprocessors | |
US7346737B2 (en) | Cache system having branch target address cache | |
US20150193348A1 (en) | High-performance data cache system and method | |
CN111190645B (zh) | 分离式指令cache结构 | |
US11567776B2 (en) | Branch density detection for prefetcher | |
CN111209043B (zh) | 一种超前指针法实现前端流水线中指令预取的方法 | |
US20140344551A1 (en) | Dual-mode instruction fetching apparatus and method | |
CN114116010B (zh) | 一种针对处理器循环体的体系结构优化方法及装置 | |
CN118152012A (zh) | 一种基于risc-v架构处理器的多分支预测器及预测方法 | |
CN117311814A (zh) | 取指单元、指令读取方法及芯片 | |
KR20080015529A (ko) | 명령어 페치 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |