CN111026442B - 一种cpu中用于消除程序无条件跳转开销的方法及装置 - Google Patents
一种cpu中用于消除程序无条件跳转开销的方法及装置 Download PDFInfo
- Publication number
- CN111026442B CN111026442B CN201911301010.8A CN201911301010A CN111026442B CN 111026442 B CN111026442 B CN 111026442B CN 201911301010 A CN201911301010 A CN 201911301010A CN 111026442 B CN111026442 B CN 111026442B
- Authority
- CN
- China
- Prior art keywords
- cpu
- jump
- program
- instruction
- unconditional
- 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
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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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/30141—Implementation provisions of register files, e.g. ports
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种使用在嵌入式CPU中的,用于消除程序无条件跳转开销的方法。该方法通过在汇编程序中***CPU寄存器赋值指令,将无条件跳转的源地址和目的地址信息,在跳转发生前就输入CPU内部用于控制跳转的寄存器中。使得CPU能够提前获取无条件跳转的地址信息,进而实现在跳转发生时,无缝切换取指流水线的效果。
Description
技术领域
本发明属于对软件程序中无条件跳转的加速技术领域,尤其是涉及一种通过处理器汇编程序优化实现无条件跳转的加速方法。
背景技术
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性能的主要影响因素之一。
程序跳转,按照类型,可以分为无条件跳转和条件跳转两大类。无条件跳转是指程序会无条件地跳转到另一个确定的指令地址。在软件上通常对应着子函数的调用和退出。条件跳转是指程序会根据某个变量的值,来判断是否跳转到另一个确定的指令地址。由于条件跳转不在本文讨论范围内,因此本文之后的跳转都默认指代无条件跳转。
对无条件跳转的加速方法可以分为软件和硬件两个方面。在软件上通常着重减少程序跳转的次数,比如优化编译器,最常采用的是内联函数等。在硬件上,着重减少跳转产生的延迟开销,最常采用的是跳转地址查找表。
但在实际情况中,内联函数对于多次反复调用子函数的情况,会显著增大程序体量,进而增加总线取指负担,得不偿失。而跳转地址查找表大多采用类似Cache的结构,导致源地址到目的地址的首次跳转,都是未命中的。只有再次发生相同的跳转时才可能命中,因此对于程序中只发生一次的那些跳转,查找表并无作用。此外,查找表容量都很小,即使同一个跳转多次发生,如果相隔时间稍长,往往也不能命中。
目前主流的CPU,已经综合运用了上述多种软硬件机制来减少跳转带来的开销,但从实际效果上只是起到了一定的缓解,并未从根本上消除跳转对取指流水线的影响。
发明内容
有鉴于此,本发明旨在提出一种CPU中用于消除程序无条件跳转开销的方法及装置,使得CPU能够提前获取无条件跳转的地址信息,进而实现在跳转发生时,无缝切换取指流水线的效果。
第一方面,本发明提供一种CPU中用于消除程序无条件跳转开销的方法,包括如下步骤:
1)在汇编程序中找出无条件跳转指令,并记录其跳转目的程序标号,再为该条跳转指令本身添加一个程序标号;
2)在跳转指令之前,***若干条CPU寄存器赋值指令,其所赋的值包含该跳转指令的目的地址信息和源地址信息。
优选的,在跳转指令之前,***4条CPU寄存器赋值指令:一条是将跳转的目的地址标号赋值给CPU的通用寄存器r0;一条是将通用寄存器r0的值赋值给CPU中负责跳转管理的特殊寄存器ubt;一条是将跳转的源地址标号赋值给CPU的通用寄存器r0;一条是将通用寄存器r0的值赋值给CPU中负责跳转管理的特殊寄存器ubs。
第二方面,本发明提供一种CPU中用于消除程序无条件跳转开销的装置,包括:
获取模块:用于在汇编程序中找出无条件跳转指令,并记录其跳转目的程序标号,再为该条跳转指令本身添加一个程序标号;
***模块:用于在跳转指令之前,***若干条CPU寄存器赋值指令,其所赋的值包含该跳转指令的目的地址信息和源地址信息。
第三方面,发明提供一种嵌入式设备,所述设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现上述的CPU中用于消除程序无条件跳转开销的方法。
相对于现有技术,本发明通过在汇编程序中***CPU寄存器赋值指令,将无条件跳转的源地址和目的地址信息,在跳转发生前就输入CPU内部用于控制跳转的寄存器中。使得CPU能够提前获取无条件跳转的地址信息,进而实现在跳转发生时,无缝切换取指流水线的效果。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为现有的无跳转加速的CPU进行跳转取指时的流水线示意图;
图2为本发明实施例所述一种CPU中用于消除程序无条件跳转开销的方法的流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。下面将参考附图并结合实施例来详细说明本发明。
本发明的目的是提出一种使用在嵌入式CPU中的,用于消除程序无条件跳转开销的方法,该方法解决问题的核心手段是通过对汇编程序进行优化来实现的。具体是通过在汇编程序中***CPU寄存器赋值指令,将无条件跳转的源地址和目的地址信息,在跳转发生前就输入CPU内部用于控制跳转的寄存器中。使得CPU能够提前获取无条件跳转的地址信息,进而实现在跳转发生时,无缝切换取指流水线的效果。
本方法的具体步骤如2图所示:
首先,在汇编程序中找出一条无条件跳转指令,并记录下它的跳转目的程序标号(目的地址信息)。next再为该条跳转指令本身添加一个程序标号(源地址信息)source。
之后,在该条跳转指令之前,***若干条CPU寄存器赋值指令,其所赋的值包含目的地址信息和源地址信息,从而使CPU能够在跳转发生前即可得到这一组相关联的源地址和目的地址。
在具体实施上,对汇编程序中的某一条,多条或全部的无条件跳转指令,均可逐个执行上述方法。程序标号的添加以及寄存器赋值指令的***,可以手工完成,也可以编写自动化脚本或软件程序来完成。
为了更为清晰地阐述本发明的方法,下面给出一个基于PowerPC指令集的汇编优化实例,其他CPU及其配套的指令集,可能在具体指令上有所不同,但优化方法是一致的。
本实例中,左侧为原始汇编程序,右侧为优化后的汇编程序。大写字母代表标号,小写字母代表指令。xxx代表某一条无关指令。…代表某一段(一条或多条)无关指令。
原始汇编实例程序在‘EXAMPLE’段中包含一条无条件跳转指令‘bl NEXT’,其跳转的目的程序段标号为‘NEXT’。经过本发明所述方法进行优化后,在无条件跳转指令‘blNEXT’前,加入了4条CPU寄存器赋值指令,并给无条件跳转指令‘bl NEXT’加上了标号‘SOURCE’。‘li32 r0,NEXT’是将跳转目的地址标号‘NEXT’赋值给CPU的通用寄存器r0。‘mtspr ubt,r0’是将r0的值,也就是目的地址标号‘NEXT’,赋值给CPU中负责跳转管理的特殊寄存器ubt。‘li32 r0,SOURCE’是将跳转的源地址标号‘SOURCE’赋值给CPU的通用寄存器r0。‘mtspr ubs,r0’是将r0的值,也就是源地址标号‘SOURCE’,赋值给CPU中负责跳转管理的特殊寄存器ubs。
经过上述程序优化,在无条件跳转指令发生之前,源地址和目的地址信息就输入了CPU中负责跳转管理的相关寄存器,从而预先就为CPU进行跳转无缝切换,提供了完备而准确的信息。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种CPU中用于消除程序无条件跳转开销的方法,其特征在于,包括如下步骤:
1)在汇编程序中找出无条件跳转指令,并记录其跳转目的程序标号,再为该条跳转指令本身添加一个程序标号;
2)在跳转指令之前,***若干条CPU寄存器赋值指令,其所赋的值包含该跳转指令的目的地址信息和源地址信息;
在跳转指令之前,***4条CPU寄存器赋值指令,包括:
一条是将跳转的目的地址标号赋值给CPU的通用寄存器r0;
一条是将通用寄存器r0的值赋值给CPU中负责跳转管理的特殊寄存器ubt;
一条是将跳转的源地址标号赋值给CPU的通用寄存器r0;
一条是将通用寄存器r0的值赋值给CPU中负责跳转管理的特殊寄存器ubs。
2.一种CPU中用于消除程序无条件跳转开销的装置,适用于权利要求1,其特征在于,包括:
获取模块:用于在汇编程序中找出无条件跳转指令,并记录其跳转目的程序标号,再为该条跳转指令本身添加一个程序标号;
***模块:用于在跳转指令之前,***若干条CPU寄存器赋值指令,其所赋的值包含该跳转指令的目的地址信息和源地址信息。
3.一种嵌入式设备,适用于权利要求1,其特征在于,所述设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现如权利要求1所述的CPU中用于消除程序无条件跳转开销的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911301010.8A CN111026442B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中用于消除程序无条件跳转开销的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911301010.8A CN111026442B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中用于消除程序无条件跳转开销的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111026442A CN111026442A (zh) | 2020-04-17 |
CN111026442B true CN111026442B (zh) | 2022-08-02 |
Family
ID=70210004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911301010.8A Active CN111026442B (zh) | 2019-12-17 | 2019-12-17 | 一种cpu中用于消除程序无条件跳转开销的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111026442B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
US5892936A (en) * | 1995-10-30 | 1999-04-06 | Advanced Micro Devices, Inc. | Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register |
CN1222985A (zh) * | 1996-05-03 | 1999-07-14 | 艾利森电话股份有限公司 | 在多级流水线结构中处理条件跳转的方法 |
US6308322B1 (en) * | 1999-04-06 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints |
CN1357122A (zh) * | 1999-05-13 | 2002-07-03 | Arc国际美国控股公司 | 用于流水线化处理器中跳转控制的方法及装置 |
CN101571818A (zh) * | 2008-04-29 | 2009-11-04 | 联发科技股份有限公司 | 修补装置、电子装置以及用于修补只读存储器代码的方法 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5945552A (ja) * | 1982-09-07 | 1984-03-14 | Toyo Electric Mfg Co Ltd | 不揮発性記憶素子の空番地処理方法 |
US5226128A (en) * | 1987-05-01 | 1993-07-06 | Hewlett-Packard Company | Horizontal computer having register multiconnect for execution of a loop with a branch |
JP3394854B2 (ja) * | 1995-07-19 | 2003-04-07 | 富士通株式会社 | 無条件ジャンプ命令処理方法並びにそのための無条件ジャンプ命令処理装置及び汎用レジスタ |
CN103838550B (zh) * | 2012-11-26 | 2018-01-02 | 上海芯豪微电子有限公司 | 一种分支处理***和方法 |
-
2019
- 2019-12-17 CN CN201911301010.8A patent/CN111026442B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
US5892936A (en) * | 1995-10-30 | 1999-04-06 | Advanced Micro Devices, Inc. | Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register |
CN1222985A (zh) * | 1996-05-03 | 1999-07-14 | 艾利森电话股份有限公司 | 在多级流水线结构中处理条件跳转的方法 |
US6308322B1 (en) * | 1999-04-06 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints |
CN1357122A (zh) * | 1999-05-13 | 2002-07-03 | Arc国际美国控股公司 | 用于流水线化处理器中跳转控制的方法及装置 |
CN101571818A (zh) * | 2008-04-29 | 2009-11-04 | 联发科技股份有限公司 | 修补装置、电子装置以及用于修补只读存储器代码的方法 |
CN102110058A (zh) * | 2009-12-25 | 2011-06-29 | 上海芯豪微电子有限公司 | 一种低缺失率、低缺失惩罚的缓存方法和装置 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111026442A (zh) | 2020-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7461237B2 (en) | Method and apparatus for suppressing duplicative prefetches for branch target cache lines | |
US7577826B2 (en) | Stall prediction thread management | |
US20130117543A1 (en) | Low overhead operation latency aware scheduler | |
US9292291B2 (en) | Instruction merging optimization | |
US7266674B2 (en) | Programmable delayed dispatch in a multi-threaded pipeline | |
JP4841861B2 (ja) | 演算処理装置及びデータ転送処理の実行方法 | |
TW200912739A (en) | Method and apparatus for length decoding variable length instructions | |
CN110908716B (zh) | 一种向量聚合装载指令的实现方法 | |
US20190079771A1 (en) | Lookahead out-of-order instruction fetch apparatus for microprocessors | |
JP2022522363A (ja) | リングバッファ更新の処理 | |
US7725659B2 (en) | Alignment of cache fetch return data relative to a thread | |
JP6457836B2 (ja) | プロセッサおよび命令コード生成装置 | |
JP2004529405A (ja) | 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ | |
US20080244224A1 (en) | Scheduling a direct dependent instruction | |
JP5630281B2 (ja) | ベクトル命令制御回路及びリストベクトルの追い越し制御方法 | |
JP2008527559A (ja) | プロセッサ及びその命令発行方法 | |
CN111026442B (zh) | 一种cpu中用于消除程序无条件跳转开销的方法及装置 | |
JP2014191663A (ja) | 演算処理装置、情報処理装置、および演算処理装置の制御方法 | |
US11481250B2 (en) | Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values | |
US9176738B2 (en) | Method and apparatus for fast decoding and enhancing execution speed of an instruction | |
US20040268098A1 (en) | Exploiting parallelism across VLIW traces | |
CN110806898B (zh) | 处理器及指令操作方法 | |
US11593115B2 (en) | Processor, device, and method for executing instructions | |
WO2016201699A1 (zh) | 指令处理方法及设备 | |
JP5696210B2 (ja) | プロセッサ及びその命令処理方法 |
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 |