CN111026442B - 一种cpu中用于消除程序无条件跳转开销的方法及装置 - Google Patents

一种cpu中用于消除程序无条件跳转开销的方法及装置 Download PDF

Info

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
Application number
CN201911301010.8A
Other languages
English (en)
Other versions
CN111026442A (zh
Inventor
王粟
肖佐楠
郑茳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
C core Technology Co ltd
Original Assignee
C core Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by C core Technology Co ltd filed Critical C core Technology Co ltd
Priority to CN201911301010.8A priority Critical patent/CN111026442B/zh
Publication of CN111026442A publication Critical patent/CN111026442A/zh
Application granted granted Critical
Publication of CN111026442B publication Critical patent/CN111026442B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation 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发出地址,到总线或存储设备返回目标指令,是有一定延迟时间的。为了整体上在一定时间内尽量多的取指,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代表某一条无关指令。…代表某一段(一条或多条)无关指令。
Figure BDA0002321778320000051
Figure BDA0002321778320000061
原始汇编实例程序在‘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中用于消除程序无条件跳转开销的方法。
CN201911301010.8A 2019-12-17 2019-12-17 一种cpu中用于消除程序无条件跳转开销的方法及装置 Active CN111026442B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 上海芯豪微电子有限公司 一种分支处理***和方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
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