CN111124494B - 一种cpu中加速无条件跳转的方法及电路 - Google Patents
一种cpu中加速无条件跳转的方法及电路 Download PDFInfo
- Publication number
- CN111124494B CN111124494B CN201911301722.XA CN201911301722A CN111124494B CN 111124494 B CN111124494 B CN 111124494B CN 201911301722 A CN201911301722 A CN 201911301722A CN 111124494 B CN111124494 B CN 111124494B
- Authority
- CN
- China
- Prior art keywords
- address
- cpu
- instruction
- low
- circuit
- 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
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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明提供了一种使用在嵌入式CPU中的,用于加速程序中无条件跳转的方法及其电路实现。该方法通过在CPU中,加入软件可寻址寄存器及相应的取指计算与控制电路,从而实现通过寄存器访问指令,直接无缝切换CPU取指流水线,达到在绝大多数情况下加速无条件跳转的效果。
Description
技术领域
本发明属于集成电路中的嵌入式处理器技术领域,尤其是涉及一种CPU中加速无条件跳转的方法及电路。
背景技术
CPU(中央处理器)的核心功能是读取并执行软件程序指令。读取并执行指令的第一步就是取指,即CPU向总线或存储设备发出目标指令的地址,总线或存储设备根据CPU发出的地址,返回目标指令给CPU的过程。程序一般是顺序读取并执行的,直到发生程序的跳转。也就是说,取指时目标指令的地址是顺序递增的,直到遇到跳转指令。
从CPU发出地址,到总线或存储设备返回目标指令,是有一定延迟时间的。为了整体上在一定时间内尽量多的取指,CPU通常采用流水线的方式发出地址和接受指令,如图1所示。CPU在时间t0发出目标地址0,在下一个cycle(时钟周期)不等指令0返回,就继续顺序发出地址1,如此下去。当总线或存储设备返回目标地址0所对应的指令0时,CPU已流水线化地发出了d个地址,即CPU的取指延迟是d。
如果指令0经过CPU译码,发现正好是一条跳转指令,它的执行会将CPU的下一条指令的目标地址跳转到了一个新的地址n,那么时间t(d+j)之前发出的地址和已经取得的指令,就都作废了。CPU重新流水线化地发出地址n及其后续地址。当指令n进入CPU时,时间已经过去了t(d+j+d)了。
总结起来,一条跳转指令,使得CPU相对浪费了d+j个cycle,其中d是取指延迟时间,j是跳转指令译码和目标地址的计算时间。程序的跳转打断了原有的取指流水线,不仅使CPU陷入等待而不能全速运行,而且取到的很多作废的指令数据,白白浪费了宝贵的总线带宽资源。可以说,程序跳转是CPU性能的主要影响因素之一。
程序跳转,按照类型,可以分为无条件跳转和条件跳转两大类。无条件跳转是指程序会无条件地跳转到另一个确定的指令地址。在软件上通常对应着子函数的调用和退出。条件跳转是指程序会根据某个变量的值,来判断是否跳转到另一个确定的指令地址。由于条件跳转不在本文讨论范围内,因此本文之后的跳转都默认指代无条件跳转。
对无条件跳转的加速方法可以分为软件和硬件两个方面。在软件上着重减少程序跳转的次数,比如优化编译器,采用内联函数等。在硬件上,着重减少跳转产生的延迟开销,比如采用跳转地址查找表等。
跳转地址查找表,其基本结构与CPU中常用的缓存(Cache)基本一致。CPU中的取指单元,流水线化地向总线发出指令的目的地址,每条地址除了送至总线外,还送入跳转地址查找表中,与各表项中存储的源地址进行逐一比较。如果与某个源地址一致(即所谓的命中),该源地址对应的目的地址,就被路选出来,作为下一条取指地址。上述过程使得取指流水线无缝地跳转到了新的程序段继续运行,避免了跳转的延迟开销,其效果如图2所示。
图2中在t0时刻地址0在跳转地址查找表中命中,查得新的指令地址为n,因此在t1时刻CPU直接向总线发出地址n,并在t2时刻继续顺序寻址n+1。经过td延迟后,总线依次流水化地返回指令0,指令n,指令n+1等。t0时刻的无缝跳转切换,节省了d+j个cycle。指令n在译码执行时发现需要跳转至地址f,即t1时刻的地址n未在查找表中命中,导致在t(d+j+1)时刻CPU重新发出地址f,并等待至t(2d+j+1)时刻才取得指令f,浪费了d+j个cycle。
由上可知,跳转地址查找表对跳转的加速效果是十分理想的,但前提是跳转源地址在查表时必须命中。
但在实际情况中,由于采用Cache结构,源地址到目的地址的首次跳转,都是未命中的。只有再次发生相同的跳转时才可能命中,因此对于程序中只发生一次的那些跳转,查找表并无作用。
此外,由于查找表容量有限,记录的跳转只有最近发生的几个,在此之前的跳转,即使已经发生过,也无法命中。因此对于程序中多次发生,但在时间上并不集中的跳转,查找表也作用不大。
发明内容
有鉴于此,本发明旨在提出一种CPU中加速无条件跳转的方法及电路,以解决上述问题。
本发明的核心思想是:通过在CPU中加入软件可寻址寄存器及相应的取指计算与控制电路,从而实现通过寄存器访问指令,直接无缝切换CPU取指流水线,达到在绝大多数情况下加速无条件跳转的效果。
为达到上述目的,本发明的技术方案是这样实现的:
第一方面,本发明提供一种CPU中加速无条件跳转的方法,包括如下步骤:
1)首先存储源地址低位值和目的地址偏移量;
2)在CPU运行的每个时钟周期,将存储的源地址低位值与CPU的当前取指地址的等位宽的低位部分进行比较得到比较结果;
3)在CPU运行的每个时钟周期,将目的地址偏移量与CPU的当前取指地址进行加法运算得到相加结果;
4)在CPU运行的每个时钟周期,判断比较结果是否为相等:
若相等,则将步骤3)得到的相加结果作为最终地址进行输出,并在下个时钟周期,将当前取指地址更新为相加结果;
若不等,则将CPU计算出的下一个取指地址作为最终地址进行输出。
第二方面,本发明提供一种CPU中加速无条件跳转的电路,在CPU的取指地址计算电路中增加:
软件可配置寄存器,分为两部分,一部分存储用于比较的源地址低位值;另一部分存储用于做加法运算的目的地址偏移量;
低位地址比较电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的源地址低位值,与CPU的当前取指地址的等位宽的低位部分进行比较,并将比较结果输出给地址路选器;
地址加法电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的目的地址偏移量,与CPU的当前取指地址进行加法运算,并将结果输出给地址路选器;
地址路选电路,在CPU运行的每个时钟周期,接收低位地址比较电路的比较结果,如果比较结果为相等,则将地址加法电路的运算结果路选输出,并在下个时钟周期,将当前取指地址更新为地址加法电路的运算结果;如果比较结果为不等,则将CPU计算出的下一个取指地址路选输出。
相对于现有技术,本发明所述的方法及电路具有以下优势:
本发明实现通过软件指令,直接无缝切换CPU取指流水线,达到在绝大多数情况下加速无条件跳转的效果。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为现有的无跳转加速的CPU进行跳转取指时的流水线示意图;
图2为现有的带有跳转预测的CPU进行跳转取指时的流水线示意图;
图3为本发明创造的CPU中加速无条件跳转的电路的原理框图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。下面将参考附图并结合实施例来详细说明本发明。
本发明的一种CPU中加速无条件跳转的方法,包括如下步骤:
1)首先存储源地址低位值和目的地址偏移量;
2)在CPU运行的每个时钟周期,将存储的源地址低位值与CPU的当前取指地址的等位宽的低位部分进行比较得到比较结果;
3)在CPU运行的每个时钟周期,将目的地址偏移量与CPU的当前取指地址进行加法运算得到相加结果;
4)在CPU运行的每个时钟周期,判断比较结果是否为相等:
若相等,则将步骤3)得到的相加结果作为最终地址进行输出,并在下个时钟周期,将当前取指地址更新为相加结果;
若不等,则将CPU计算出的下一个取指地址作为最终地址进行输出。
本发明实现上述CPU中加速无条件跳转的方法的电路结构,如图3所示,在CPU的取指地址计算电路中增加:
软件可配置寄存器,可以分为两部分,一部分存储着用于比较的源地址的低位地址值;另一部分存储着用于做加法运算的目的地址偏移量。该寄存器可以通过CPU的move指令或类似指令,进行赋值;
低位地址比较电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的源地址低位值,与CPU的当前取指地址的等位宽的低位部分进行比较,并将比较结果输出给地址路选器;
地址加法电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的目的地址偏移量,与CPU的当前取指地址进行加法运算,并将结果输出给地址路选器;
地址路选电路,在CPU运行的每个时钟周期,接收低位地址比较电路的比较结果,如果比较结果为相等,则将地址加法电路的运算结果路选输出,并在下个时钟周期,将当前取指地址更新为地址加法电路的运算结果;如果比较结果为不等,则将CPU计算出的下一个取指地址路选输出。
本发明提出了一种使用在嵌入式CPU中的,用于加速程序中无条件跳转的方法及其电路实现。该方法通过在CPU中加入软件可寻址寄存器及相应的地址计算与控制电路,从而实现通过软件指令,直接无缝切换CPU取指流水线,达到在绝大多数情况下加速无条件跳转的效果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种CPU中加速无条件跳转的方法,其特征在于,包括如下步骤:
1)首先存储源地址低位值和目的地址偏移量;
2)在CPU运行的每个时钟周期,将存储的源地址低位值与CPU的当前取指地址的等位宽的低位部分进行比较得到比较结果;
3)在CPU运行的每个时钟周期,将目的地址偏移量与CPU的当前取指地址进行加法运算得到相加结果;
4)在CPU运行的每个时钟周期,判断比较结果是否为相等:
若相等,则将步骤3)得到的相加结果作为最终地址进行输出,并在下个时钟周期,将当前取指地址更新为相加结果;
若不等,则将CPU计算出的下一个取指地址作为最终地址进行输出;
在CPU的取指地址计算电路中增加:
软件可配置寄存器,分为两部分,一部分存储用于比较的源地址低位值;另一部分存储用于做加法运算的目的地址偏移量;
低位地址比较电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的源地址低位值,与CPU的当前取指地址的等位宽的低位部分进行比较,并将比较结果输出给地址路选器;
地址加法电路,在CPU运行的每个时钟周期,将软件可配置寄存器中存储的目的地址偏移量,与CPU的当前取指地址进行加法运算,并将结果输出给地址路选器;
地址路选电路,在CPU运行的每个时钟周期,接收低位地址比较电路的比较结果,如果比较结果为相等,则将地址加法电路的运算结果路选输出,并在下个时钟周期,将当前取指地址更新为地址加法电路的运算结果;如果比较结果为不等,则将CPU计算出的下一个取指地址路选输出。
2.根据权利要求1所述的一种CPU中加速无条件跳转的方法,其特征在于:所述软件可配置寄存器可以通过CPU的move指令或类似指令进行赋值。
3.一种实现权利要求1所述的CPU中加速无条件跳转的方法的CPU模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911301722.XA CN111124494B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中加速无条件跳转的方法及电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911301722.XA CN111124494B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中加速无条件跳转的方法及电路 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111124494A CN111124494A (zh) | 2020-05-08 |
CN111124494B true CN111124494B (zh) | 2023-07-25 |
Family
ID=70499448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911301722.XA Active CN111124494B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中加速无条件跳转的方法及电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124494B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095744A1 (en) * | 2004-09-06 | 2006-05-04 | Fujitsu Limited | Memory control circuit and microprocessor system |
CN101571818A (zh) * | 2008-04-29 | 2009-11-04 | 联发科技股份有限公司 | 修补装置、电子装置以及用于修补只读存储器代码的方法 |
CN103019655A (zh) * | 2012-11-28 | 2013-04-03 | 中国人民解放军国防科学技术大学 | 面向多核微处理器的内存拷贝加速方法及装置 |
CN104407968A (zh) * | 2014-10-30 | 2015-03-11 | 北京控制工程研究所 | 一种通过静态分析测算代码指令最长运行时间的方法 |
CN104424129A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于指令读缓冲的缓存系统和方法 |
CN107943727A (zh) * | 2017-12-08 | 2018-04-20 | 深圳市德赛微电子技术有限公司 | 一种高效dma控制器 |
CN109582364A (zh) * | 2018-10-29 | 2019-04-05 | 华中科技大学 | 基于忆阻器的精简指令集处理器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918130A (zh) * | 2019-01-24 | 2019-06-21 | 中山大学 | 一种具有快速数据旁路结构的四级流水线risc-v处理器 |
-
2019
- 2019-12-17 CN CN201911301722.XA patent/CN111124494B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095744A1 (en) * | 2004-09-06 | 2006-05-04 | Fujitsu Limited | Memory control circuit and microprocessor system |
CN101571818A (zh) * | 2008-04-29 | 2009-11-04 | 联发科技股份有限公司 | 修补装置、电子装置以及用于修补只读存储器代码的方法 |
CN103019655A (zh) * | 2012-11-28 | 2013-04-03 | 中国人民解放军国防科学技术大学 | 面向多核微处理器的内存拷贝加速方法及装置 |
CN104424129A (zh) * | 2013-08-19 | 2015-03-18 | 上海芯豪微电子有限公司 | 基于指令读缓冲的缓存系统和方法 |
CN104407968A (zh) * | 2014-10-30 | 2015-03-11 | 北京控制工程研究所 | 一种通过静态分析测算代码指令最长运行时间的方法 |
CN107943727A (zh) * | 2017-12-08 | 2018-04-20 | 深圳市德赛微电子技术有限公司 | 一种高效dma控制器 |
CN109582364A (zh) * | 2018-10-29 | 2019-04-05 | 华中科技大学 | 基于忆阻器的精简指令集处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN111124494A (zh) | 2020-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9965274B2 (en) | Computer processor employing bypass network using result tags for routing result operands | |
US9367471B2 (en) | Fetch width predictor | |
US9529595B2 (en) | Branch processing method and system | |
US9170817B2 (en) | Reducing branch checking for non control flow instructions | |
CN106681695B (zh) | 提前取出分支目标缓冲器 | |
US7152170B2 (en) | Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels based on a number of operating threads and methods of operating | |
US7447883B2 (en) | Allocation of branch target cache resources in dependence upon program instructions within an instruction queue | |
CN112579175B (zh) | 分支预测方法、分支预测装置和处理器核 | |
US20190079771A1 (en) | Lookahead out-of-order instruction fetch apparatus for microprocessors | |
WO2012093489A1 (ja) | 演算処理装置および分岐予測方法 | |
US20060095746A1 (en) | Branch predictor, processor and branch prediction method | |
CN111124493A (zh) | 一种cpu中用于减少程序跳转开销的方法及电路 | |
US8578135B2 (en) | Apparatus for calculating and prefetching a branch target address | |
JP2004145454A (ja) | 情報処理装置及び情報処理方法 | |
CN111124494B (zh) | 一种cpu中加速无条件跳转的方法及电路 | |
US20040111592A1 (en) | Microprocessor performing pipeline processing of a plurality of stages | |
US7793085B2 (en) | Memory control circuit and microprocessory system for pre-fetching instructions | |
US20080065870A1 (en) | Information processing apparatus | |
WO2013121516A1 (ja) | データ処理装置 | |
US20100082946A1 (en) | Microcomputer and its instruction execution method | |
CN112395000B (zh) | 一种数据预加载方法和指令处理装置 | |
CN113795823A (zh) | 处理器资源的可编程控制 | |
WO2012132214A1 (ja) | プロセッサ及びその命令処理方法 | |
US12086600B2 (en) | Branch target buffer with shared target bits | |
US11687342B2 (en) | Way predictor and enable logic for instruction tightly-coupled memory and instruction cache |
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 |