CN102736894A - 一种跳转指令编码的方法和系统 - Google Patents
一种跳转指令编码的方法和系统 Download PDFInfo
- Publication number
- CN102736894A CN102736894A CN2011100819391A CN201110081939A CN102736894A CN 102736894 A CN102736894 A CN 102736894A CN 2011100819391 A CN2011100819391 A CN 2011100819391A CN 201110081939 A CN201110081939 A CN 201110081939A CN 102736894 A CN102736894 A CN 102736894A
- Authority
- CN
- China
- Prior art keywords
- instruction
- week
- operating cycle
- circulation
- loop
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000015654 memory Effects 0.000 claims abstract description 36
- 230000002708 enhancing effect Effects 0.000 abstract 1
- 238000007781 pre-processing Methods 0.000 abstract 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000003550 marker 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种跳转指令编码的方法和系统,均可在执行循环时,相对于操作周期,提前到内存中获取循环开始指令;当循环体最后一条指令执行完时,完成循环开始指令的获取。本发明方法和系统,通过汇编编码的预处理,从软件的层面简化了硬件逻辑,保证不需要去添加额外的逻辑来解决循环折回时流水线需要停顿的问题,省去了很多的硬件逻辑和硬件资源,节省了面积和成本,使得实现简单,也提高了实现方案的可靠性。
Description
技术领域
本发明涉及处理器领域,具体涉及一种跳转指令编码的方法和系统。
背景技术
目前,处理器性能损失的原因之一可能是循环指令的执行,一个循环体包含N条指令,它需要被重复执行多次。循环体最后一条指令可以用LOOP_END表示,当在PIPELINE(指令流水线)的译码阶段看到LOOP_END时,如果此时才从MEMORY(存储器)取LOOP_BEGIN(循环体第一条指令),PIPELINE必须停下来等待MEMORY,等待的周期取决于MEMORY的速度和架构。对于常见的处理器,循环指令的使用频率是非常频繁的,所以这样的开销带来的性能损失是非常大的。现有的解决办法有两种,第一种是添加LOOP_BUFFER(循环缓冲器),当循环体第一次执行时,把循环体的指令保存到LOOP_BUFFER,第二次执行时就不需要从MEMORY取LOOP_BEGIN,而是直接从BUFFER获取,这样PIPELINE就不需要停顿。这种实现方案需要添加BUFFER(缓冲器)以及相应的硬件逻辑,电路也非常复杂,实现的代价大。第二种是添加计数器,比如添加一条专门的LOOP_BEGIN指令,它包含循环体指令条数的信息,这样从第一条开始计数,每执行一条就减一,因而可以提前知道LOOP_END到达,提前从MEMORY取指令,其间PIPELINE不需要停顿。这种方案同样需要增加硬件逻辑,对于循环嵌套,需要的硬件资源更多,而且如果循环体指令条数小于N(N表示从MEMORY取指令需要的周数)时,这种方案不具有适应性。
发明内容
有鉴于此,本发明的主要目的在于提供一种跳转指令编码的方法和系统,以简化硬件逻辑,提高实现的可靠性和性能。
为达到上述目的,本发明的技术方案是这样实现的:
一种跳转指令编码的方法,该方法包括:
在执行循环时,相对于操作周期,提前到内存中获取循环开始指令;
当循环体最后一条指令执行完时,完成循环开始指令的获取。
所述相对于操作周期,提前到内存中获取循环开始指令的方法为:
将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;
所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
所述完成循环开始指令的获取的过程包括:
所述exe.bin指令在被执行时,硬件提前N周发现循环体最后一条指令,从而提前N周从存储器MEMORY获取该指令。
该方法进一步包括:
涉及执行循环的指令流水线PIPELINE在不需要等待的情况下继续工作。
该方法通过ASS汇编译器实现。
一种跳转指令编码的系统,该系统包括操作周期提前单元、循环开始指令获取单元;其中,
所述操作周期提前单元,用于在执行循环时,相对于操作周期,确认要提前到内存中获取循环开始指令;
所述循环开始指令获取单元,用于在循环体最后一条指令执行完时,完成循环开始指令的获取。
所述操作周期提前单元,相对于操作周期,提前到内存中获取循环开始指令时,用于:
将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;
所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
所述循环开始指令获取单元完成循环开始指令的获取时,用于:
触发所述exe.bin指令的执行,使硬件提前N周发现循环体最后一条指令,从而提前N周从MEMORY获取该指令。
该系统进一步包括涉及执行循环的PIPELINE,用于在不需要等待的情况下继续工作。
该系统设置于ASS中。
本发明跳转指令编码的方法和系统,通过ASS汇编编码的预处理,从软件的层面简化了硬件逻辑,保证不需要去添加额外的BUFFER和计数器等逻辑来解决循环折回时流水线需要停顿的问题,省去了很多的硬件逻辑和硬件资源,节省了面积和成本,使得实现简单,也提高了实现方案的可靠性。
附图说明
图1为本发明实施例的跳转指令编码流程简图;
图2为本发明实施例的跳转指令编码系统图。
具体实施方式
由于在循环折回时从MEMORY取LOOP_BEGIN的指令需要消耗N个周期,如果在等到LOOP_END指令时才开始去MEMORY取指令,那么流水线必须停顿N个周期,性能的损失很大。为了避免这种损失,可以在硬件中提前N个周期去MEMORY取指令,这样当LOOP_END执行完时,LOOP_BEGIN的指令也已经从MEMORY取回来了,使得PIPELINE不需要停顿。
上述方案可以通过汇编译器(ASS)来实现。ASS能够将程序员写的汇编指令编码成二进制或十六进制。ASS在编码时,可以将LOOP_END的标志位提前N周(该周期即LOOP_BEGIN至LOOP_END的操作周期),生成需要的执行文件exe.bin。exe.bin指令在被执行时,硬件就能提前N周看到LOOP_END,从而提前N周从MEMORY取该指令,消除PIPELINE的停顿,实现高性能。
程序员写的汇编代码指令序列可以例举为:
Inst0;
Inst1;
Inst2;LOOP_START;
Inst3;
Inst4;
Inst5;
Inst6;LOOP_END
其中,Inst2至Inst6表示循环体指令。
ASS汇编后的机器码序列可以例举为:
00000001;
10000000;
20000000;
30000000;
40000002;
50000000;
60000000;
其中,LOOP_MARKER(循环标签)占用每条指令的低2bit,1表示LOOP_BEGIN,2表示LOOP_END,0表示没有循环标签。上述表示方式只是一种编码方式之一,并不是唯一的。
可见,在编码时将LOOP_END提前了2条指令。Inst6对应LOOP_END,在机器码中被编码在了Inst4上,提前了2条指令。这个过程是编译器自动完成的,程序员写的循环体依旧是Inst2-Inst6。当机器码指令被执行时,当执行到Inst4时,就看到了LOOP_END(即机器码低2bit的值为2),这时就开始从MEMORY取Inst2指令。当执行到Inst6时,Inst2就已经从MEMORY取出来了(这里假定从MEMORY取指令需要2周),指令就又从Inst2开始顺序执行。当执行到Inst4时,又去MEMORY取Inst2,这样就形成了Inst2至Inst6的循环执行,直到循环退出。
由上述技术描述可见,本发明跳转指令编码的操作思路可以表示如图1所示的流程,该流程包括以下步骤:
步骤110:在执行循环时,相对于操作周期,提前到内存中获取循环开始指令。
步骤120:当循环体最后一条指令执行完时,完成循环开始指令的获取。
需要说明的是,所述相对于操作周期,提前到内存中获取循环开始指令的方法可以为:将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
并且,所述完成循环开始指令的获取的过程可以包括:所述exe.bin指令在被执行时,硬件提前N周发现循环体最后一条指令,从而提前N周从MEMORY获取该指令。还可以由涉及执行循环的PIPELINE在不需要等待的情况下继续工作。
另外,本发明可以通过ASS汇编译器实现。
为了保证上述技术描述以及操作思路能够顺利实现,可以进行如图2所示的设置。参见图2,图2为本发明实施例的跳转指令编码系统图,该系统包括相连的操作周期提前单元、循环开始指令获取单元。
在实际应用时,操作周期提前单元能够在执行循环时,相对于操作周期,确认要提前到内存中获取循环开始指令;循环开始指令获取单元则能够在循环体最后一条指令执行完时,完成循环开始指令的获取。
需要说明的是,所述操作周期提前单元,相对于操作周期,提前到内存中获取循环开始指令时,可以用于:将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
并且,所述循环开始指令获取单元完成循环开始指令的获取时,可以用于:触发所述exe.bin指令的执行,使硬件提前N周发现循环体最后一条指令,从而提前N周从MEMORY获取该指令。还可以进一步由涉及执行循环的PIPELINE在不需要等待的情况下继续工作。
另外,本发明所述系统可以设置于ASS中。
综上所述可见,无论是方法还是系统,本发明跳转指令编码的方法和系统,通过ASS汇编编码的预处理,从软件的层面简化了硬件逻辑,保证不需要去添加额外的BUFFER和计数器等逻辑来解决循环折回时流水线需要停顿的问题,省去了很多的硬件逻辑和硬件资源,节省了面积和成本,使得实现简单,也提高了实现方案的可靠性。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种跳转指令编码的方法,其特征在于,该方法包括:
在执行循环时,相对于操作周期,提前到内存中获取循环开始指令;
当循环体最后一条指令执行完时,完成循环开始指令的获取。
2.根据权利要求1所述的方法,其特征在于,所述相对于操作周期,提前到内存中获取循环开始指令的方法为:
将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;
所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
3.根据权利要求2所述的方法,其特征在于,所述完成循环开始指令的获取的过程包括:
所述exe.bin指令在被执行时,硬件提前N周发现循环体最后一条指令,从而提前N周从存储器MEMORY获取该指令。
4.根据权利要求1至3任一项所述的方法,其特征在于,该方法进一步包括:
涉及执行循环的指令流水线PIPELINE在不需要等待的情况下继续工作。
5.根据权利要求4所述的方法,其特征在于,该方法通过ASS汇编译器实现。
6.一种跳转指令编码的系统,其特征在于,该系统包括操作周期提前单元、循环开始指令获取单元;其中,
所述操作周期提前单元,用于在执行循环时,相对于操作周期,确认要提前到内存中获取循环开始指令;
所述循环开始指令获取单元,用于在循环体最后一条指令执行完时,完成循环开始指令的获取。
7.根据权利要求6所述的系统,其特征在于,所述操作周期提前单元,相对于操作周期,提前到内存中获取循环开始指令时,用于:
将循环体最后一条指令的标志位提前N周,并生成需要的执行文件exe.bin;
所述N周对应于循环开始指令至循环体最后一条指令的操作周期。
8.根据权利要求7所述的系统,其特征在于,所述循环开始指令获取单元完成循环开始指令的获取时,用于:
触发所述exe.bin指令的执行,使硬件提前N周发现循环体最后一条指令,从而提前N周从MEMORY获取该指令。
9.根据权利要求6至8任一项所述的系统,其特征在于,该系统进一步包括涉及执行循环的PIPELINE,用于在不需要等待的情况下继续工作。
10.根据权利要求9所述的系统,其特征在于,该系统设置于ASS中。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110081939.1A CN102736894B (zh) | 2011-04-01 | 2011-04-01 | 一种跳转指令编码的方法和系统 |
PCT/CN2011/078846 WO2012129886A1 (zh) | 2011-04-01 | 2011-08-24 | 一种跳转指令编码的方法和系统 |
EP11862348.7A EP2696279A4 (en) | 2011-04-01 | 2011-08-24 | METHOD AND SYSTEM FOR CODING JUMPING INSTRUCTIONS |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110081939.1A CN102736894B (zh) | 2011-04-01 | 2011-04-01 | 一种跳转指令编码的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102736894A true CN102736894A (zh) | 2012-10-17 |
CN102736894B CN102736894B (zh) | 2017-10-24 |
Family
ID=46929380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110081939.1A Expired - Fee Related CN102736894B (zh) | 2011-04-01 | 2011-04-01 | 一种跳转指令编码的方法和系统 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP2696279A4 (zh) |
CN (1) | CN102736894B (zh) |
WO (1) | WO2012129886A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445520A (zh) * | 2019-08-27 | 2021-03-05 | 无锡江南计算技术研究所 | 针对循环内条件转移指令的转移预测优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742804A (en) * | 1996-07-24 | 1998-04-21 | Institute For The Development Of Emerging Architectures, L.L.C. | Instruction prefetch mechanism utilizing a branch predict instruction |
CN1282024A (zh) * | 1999-07-23 | 2001-01-31 | 国际商业机器公司 | 具有静态转移预测支持的去耦取指令-执行引擎 |
US20090313456A1 (en) * | 2005-02-04 | 2009-12-17 | Sony Computer Entertainment Inc. | Methods and apparatus for dynamic prediction by software |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6321330B1 (en) * | 1999-05-28 | 2001-11-20 | Intel Corporation | Each iteration array selective loop data prefetch in multiple data width prefetch system using rotating register and parameterization to avoid redundant prefetch |
US6564313B1 (en) * | 2001-12-20 | 2003-05-13 | Lsi Logic Corporation | System and method for efficient instruction prefetching based on loop periods |
CN1928810A (zh) * | 2005-09-09 | 2007-03-14 | 上海采微电子科技有限公司 | 带有循环跳转预测单元的微处理器 |
-
2011
- 2011-04-01 CN CN201110081939.1A patent/CN102736894B/zh not_active Expired - Fee Related
- 2011-08-24 EP EP11862348.7A patent/EP2696279A4/en not_active Withdrawn
- 2011-08-24 WO PCT/CN2011/078846 patent/WO2012129886A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5742804A (en) * | 1996-07-24 | 1998-04-21 | Institute For The Development Of Emerging Architectures, L.L.C. | Instruction prefetch mechanism utilizing a branch predict instruction |
CN1282024A (zh) * | 1999-07-23 | 2001-01-31 | 国际商业机器公司 | 具有静态转移预测支持的去耦取指令-执行引擎 |
US20090313456A1 (en) * | 2005-02-04 | 2009-12-17 | Sony Computer Entertainment Inc. | Methods and apparatus for dynamic prediction by software |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112445520A (zh) * | 2019-08-27 | 2021-03-05 | 无锡江南计算技术研究所 | 针对循环内条件转移指令的转移预测优化方法 |
CN112445520B (zh) * | 2019-08-27 | 2022-11-15 | 无锡江南计算技术研究所 | 针对循环内条件转移指令的转移预测优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102736894B (zh) | 2017-10-24 |
EP2696279A1 (en) | 2014-02-12 |
EP2696279A4 (en) | 2014-03-19 |
WO2012129886A1 (zh) | 2012-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027769B (zh) | 使用寄存器访问指令发起指令块执行 | |
CN105389158B (zh) | 数据处理系统、编译器、处理器的方法和机器可读介质 | |
CN108027731B (zh) | 针对基于块的处理器的调试支持 | |
KR102335194B1 (ko) | 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩 | |
US9558000B2 (en) | Multithreading using an ordered list of hardware contexts | |
KR101748506B1 (ko) | 실시간 명령어 추적 프로세서들, 방법들 및 시스템들 | |
CN104040491A (zh) | 微处理器加速的代码优化器 | |
KR20180021812A (ko) | 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐 | |
CN104040492A (zh) | 微处理器加速的代码优化器和依赖性重排序方法 | |
US11366669B2 (en) | Apparatus for preventing rescheduling of a paused thread based on instruction classification | |
US6950926B1 (en) | Use of a neutral instruction as a dependency indicator for a set of instructions | |
Brandon et al. | Support for dynamic issue width in VLIW processors using generic binaries | |
EP2782004B1 (en) | Opportunistic multi-thread method and processor | |
US20140129805A1 (en) | Execution pipeline power reduction | |
CN100451951C (zh) | Risc cpu中的5+3级流水线设计方法 | |
CN102736894A (zh) | 一种跳转指令编码的方法和系统 | |
JP2004062909A (ja) | 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法 | |
CN101488082B (zh) | 复杂指令集微控制器的译码方法和装置 | |
CN106325820A (zh) | 一种异构处理器构架 | |
Jakimovska et al. | Modern processor architectures overview | |
CN112947999B (zh) | 一种精简指令集计算机指令功能扩展的方法及装置 | |
Koizumi et al. | Reduction of instruction increase overhead by STRAIGHT compiler | |
CN201145893Y (zh) | 复杂指令集微控制器的译码装置 | |
Roth et al. | Microarchitectural miss/execute decoupling | |
US20130298129A1 (en) | Controlling a sequence of parallel executions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171024 Termination date: 20200401 |
|
CF01 | Termination of patent right due to non-payment of annual fee |