CN102117198A - 一种分支处理方法 - Google Patents

一种分支处理方法 Download PDF

Info

Publication number
CN102117198A
CN102117198A CN2009102480534A CN200910248053A CN102117198A CN 102117198 A CN102117198 A CN 102117198A CN 2009102480534 A CN2009102480534 A CN 2009102480534A CN 200910248053 A CN200910248053 A CN 200910248053A CN 102117198 A CN102117198 A CN 102117198A
Authority
CN
China
Prior art keywords
branch
instruction
address
target
obtains
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
Application number
CN2009102480534A
Other languages
English (en)
Other versions
CN102117198B (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.)
Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Original Assignee
Shanghai Xinhao Bravechips Micro Electronics 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 Shanghai Xinhao Bravechips Micro Electronics Co Ltd filed Critical Shanghai Xinhao Bravechips Micro Electronics Co Ltd
Priority to CN200910248053.4A priority Critical patent/CN102117198B/zh
Priority to EP10840611.7A priority patent/EP2519874B1/en
Priority to PCT/CN2010/080619 priority patent/WO2011079824A1/en
Priority to US13/056,979 priority patent/US9361110B2/en
Publication of CN102117198A publication Critical patent/CN102117198A/zh
Application granted granted Critical
Publication of CN102117198B publication Critical patent/CN102117198B/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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Abstract

一种适用于电子计算机/微处理器的分支处理方法,能根据预先计算的分支目标地址获得指令以确保分支指令之后的指令的执行结果不论分支是否成功总是有效。

Description

一种分支处理方法
技术领域
本发明涉及电子计算机和微处理器领域。
背景技术
控制相关(control hazards)也称为分支(Branch)是流水线性能损失的一大原因。当前的最优实现或者在分支成功或者在分支不成功时需要暂停流水线一个周期,为了减少由此带来的流水线成本,设计师们尝试了多种解决方案。现有的解决方案部分改善了暂停流水线的惩罚但都未从根本上解决问题。
为便于理解,以下用表格形式说明。表1中横轴由左至右为处理器时钟周期;纵轴由上而下为顺序执行的指令;指令地址是提供给指令缓存以供取指的地址;缓存的输出作为取得的指令供处理器译码。因为取指时缓存访问有时延,取得的指令滞后指令地址一个时钟周期。表1中i为分支指令,i+1为紧随分指指令的指令;目标为目标指令,目标+1为紧随目标指令的指令,余此类推。表1中流水线分段:IF(Instruction Fetch)为取指段;ID(Instruction Decode)为指令译码段;EX(Execution)为指令执行段;MEM(Memory Access)为存储器访问段;WB(Write Back)为执行结果写回段。暂停(stall)表示流水线停止。
表1
  分支指令   i   IF   ID   EX   MEM   WB
  (成功)   i+1   IF   暂停   暂停   暂停   暂停
  目标   IF   ID   EX   MEM
  目标+1   IF   ID   EX
  目标+2   IF   ID
  指令地址   i   i+1   目标   目标+1   目标+2   目标+3   目标+4
  取得的指令   i   i+1   目标   目标+1   目标+2   目标+3
  时钟周期   1   2   3   4   5   6   7
当前的最优实现为流水线暂停一个周期。其方法是在分支指令(表1中地址为i的指令)流水线的取指段(表1中时钟周期2)终了取得分支指令,在分支指令的指令译码段(表1中时钟周期3)终了时完成分支判断并计算出分支目标地址,如分支成功则将目标地址作为指令地址存放。在下一流水段(表1中时钟周期4)开始时用指令地址(分支目标地址)开始取分支目标指令,于终了时取得分支目标指令。以后程序就沿分支目标指令及其后的指令顺序执行直到下一个分支指令,此情况下分支指令后的一条指令不应执行(表1中地址为i+1,在时钟周期3取指的分支指令后一条指令),造成流水线暂停一周。
如分支不成功,则沿分支指令后的指令顺序执行,无性能损失。此时指令地址从分支指令(表2中地址为i)开始每周期作对应一条指令的增量。如表2所示,处理器将沿i、i+1、i+2、……顺序执行下去,直到下一条分支指令。
分支指令据统计约占指令总数的20%,而分支成功的概率约为70%,故上述的成功分支导致的暂停会造成约14%的额外流水线效率损失。为了减少这个损失,设计师们采取了多种静态和动态的分支预测方法,比如延迟槽,分支预测缓冲(Branch Prediction Buffer),分支目标缓冲(Branch Target buffer)和指令流缓存(Trace Cache)等。这些方法以相当的代价取得了部分成功。
表2
  分支指令  i   IF   ID   EX   MEM   WB
  (不成功)  i+1   IF   ID   EX   MEM   WB
 i+2   IF   ID   EX   MEM
 i+3   IF   ID   EX
 i+4   IF   ID
  指令地址   i   i+1   i+2   i+3   i+4   i+5   i+6
  取得的指令   i   i+1   i+2   i+3   i+4   i+5
  时钟周期   1   2   3   4   5   6   7
发明内容
本发明针对现有技术的不足,不试图从减少分支导致的暂停所造成的损失的角度做改进,而是提出了一种无分支延迟无流水线暂停的控制转移(分支)方法。
本发明提出一种分支(Branch)处理方法,其特征是基于预先计算的分支目标地址获得目标指令与用现有方法获得的顺序指令一同由分支判断选择,以确保分支指令之后的指令的执行结果不论分支是否成功总是有效。
根据本发明技术方案,分支目标指令总能通过预先计算产生的地址取得。
本发明将以条件分支处理为主进行说明,对于无条件分支,除不需要进行分支转移是否成功的判断外,其余均与条件分支的处理相同。
实现这种方法的前提是要有预先计算所得的分支目标地址或据此获取的目标指令。上海芯豪微电子有限公司于2009年12月25日向中华人民共和国知识产权局专利局提交的发明“一种低缺失率、低缺失惩罚的缓存方法和装置”即公开了所述方法。该发明中公开了用轨道表(Track table)与轨迹(Locus)结合分支判断(branch decision)来确定分支目标地址或预取分支目标指令的方法。
基于预先计算的分支目标地址获得目标指令与用现有方法获得的顺序指令一同由分支判断选择的方法根据做分支判断的时机有三种实现方法,根据分支判断在流水线中的作用点分别是:取指前、译码前及执行前。这三种方法在实现成本上是依次递增的、在分支判断关键路径的时延与实现难度上是依次递减的。
以下将对本发明所述的译码前进行分支判断的方法详细说明,再对三种方法均加以阐述。为了更简练地说明本发明技术方案,下文中的“目标地址”和“目标指令”均是指预先计算得到的地址和根据所述地址获取的指令。
本发明所述的译码前进行分支判断的方法,是在分支指令(表3中的i)译码段(表3中的时钟周期3)终了前或更早预先取得分指目标指令(表3中的目标),与分支指令后顺序执行的指令(表3中i+1)在分支指令译码段(表3中时钟周期3)终了前一同由分支条件判断来选择。如此,则不论分支成功或不成功,下一条指令(表3中的目标或表1中的i+1)都可在下一周(表3中的时钟周期4)译码。不论分支成功与否,分支指令后一条指令(表3中的目标或表3中的i+1)都是有效指令,无需停流水线。
分支判断为成功时分支判断选择目标指令为取指段(表3中的时钟周期3)取出的指令,另将目标指令后一条指令的地址(而非通常的目标地址)在时钟周期3终了时作为指令地址。如此则指令地址从分支目标指令后的第一条指令地址开始每周期作对应一条指令的增量,处理器将沿目标指令后的第一条指令、目标指令后的第二条指令……顺序执行下去,直到下一条分支指令。
表3
  分支指令   i   IF   ID   EX   MEM   WB
  (成功)   目标   IF   ID   EX   MEM   WB
  目标+1   IF   ID   EX   MEM
  目标+2   IF   ID   EX
  目标+3   IF   ID
  指令地址   i-1   i   i+1   目标+1   目标+2   目标+3   目标+4   目标+5
  第一读口   i-2   i-1   i   i+1   目标+1   目标+2   目标+3   目标+4
  第二读口   目标   目标   目标   目标   新目标   新目标   新目标   新目标
  取得的指令   i-2   i-1   i   目标   目标+1   目标+2   目标+3   目标+4
  时钟周期   1   2   3   4   5   6   7
分支判断为不成功时分支判断选择分支指令后顺序执行的第一条指令(表4中的i+1)为取指段(表4中的时钟周期3)取出的指令,在时钟周期3终了时的指令地址为分支指令后顺序执行的第二条指令(表4中的i+2)。如此则指令地址从分支指令后顺序执行的第一条指令(表4中的i+1)开始每周期作对应一条指令的增量,处理器将沿分支指令后顺序执行的第一条指令、第二条指令……顺序执行下去,直到下一条分支指令。其中第一读口一直是读出分支指令前后顺序的指令。第二读口直到处理器进行分支判断的时钟周期一直在读出分支目标指令,在处理器进行分支判断的时钟周期之后转为输出下一个分支目标指令。
表4
分支指令 i IF ID EX MEM WB
(不成功) i+1 IF ID EX MEM WB
i+2 IF ID EX MEM
i+3 IF ID EX
i+4 IF ID
指令地址 i-1 i i+1 i+2 i+3 i+4 i+5 i+6
第一读口 i-2 i-1 i i+1 i+2 i+3 i+4 i+5
第二读口 目标 目标 目标 目标 新目标 新目标 新目标 新目标
取得的指令 i-2 i-1 i i+1 i+2 i+3 i+4 i+5
时钟周期 1 2 3 4 5 6 7
根据本发明所述技术方案,提出了取指前进行分支判断的方法,用分支判断结果或无条件分支指令译码结果来选择由现有方法产生的顺序地址或基于预先计算的分支目标地址作为所述分支指令的下一条指令的地址。根据所述地址从存储器中获取相应的指令供处理器执行。
具体而言,就是在分支指令尚未执行时预先产生顺序执行指令的地址和分支目标指令的地址。其中顺序执行指令的地址可以通过分支指令对应地址或所述分支指令地址加指令字长的方式得到,这也是在处理器中程序计数器(PC)中能直接得到的下一指令地址;分支目标指令的地址可以在所述分支指令被译码、执行前,由发明“一种低缺失率、低缺失惩罚的缓存方法和装置”中所述的专用逻辑将分支指令地址与所述分支指令中的转移偏移量相加得到。在取得分支指令下一条指令之前确定选择哪个指令地址并从指令缓存中取得正确的指令,可以避免因分支延迟导致的无流水线暂停。
当分支成功时,程序计数器在下一个时钟周期输出指令地址为当前指令地址加转移偏移量得到的地址。
若当前指令是无条件分支指令,则不需要做分支条件判断,直接选择所述分支目标地址作为所述无条件分支指令的下一条指令的地址。
根据本发明所述技术方案,提出了译码前进行分支判断的方法,用分支判断结果或无条件分支指令译码结果来选择由现有方法得到的顺序指令或基于根据预先计算的分支目标地址取得的分支目标指令作为所述分支指令的下一条指令。再对所述指令进行译码供后续操作的执行。
具体而言,就是在分支指令尚未执行时预先根据顺序执行指令的地址和分支目标指令的地址取得顺序执行指令和分支目标指令,再根据转移条件判断决定选择哪条指令作为实际译码、执行的指令,继续后续的指令执行操作,同样避免了因分支延迟导致的无流水线暂停。采用所述译码前进行分支判断的方法与取指前进行分支判断的方法相比,需要用到双端口存储器(2-port-ram),但供处理器进行转移条件判断的时间多了一个处理器时钟周期,因此适用范围更广。
当分支成功时,程序计数器在下一个时钟周期输出指令地址为当前指令地址加转移偏移量再加一个指令字长得到的地址。
现有的处理器在执行到分支指令时,若不执行转移,则程序计数器输出当前指令地址加上指令字长得到的地址为下一指令地址;若发生转移时,则需要暂停流水线,程序计数器在下个时钟周期输出分支目标地址作为下一指令地址。根据本发明技术方案,在不执行转移时与现有技术相同,在发生转移时,不暂停流水线,程序计数器输出分支目标地址作为下一指令地址,而在下个时钟周期输出的是由分支目标地址再加一个指令字长得到的地址。所述分支目标地址可以是当前指令地址加转移偏移量得到的地址。
若当前指令是无条件分支指令,则不需要做分支条件判断,直接选择所述分支目标指令作为所述无条件分支指令的下一条指令。
根据本发明所述技术方案,提出了执行前进行分支判断的方法,用分支判断结果或无条件分支指令译码结果来选择根据现有方法得到的顺序指令译码结果及获取的操作数或根据预先计算的分支目标地址预取的分支目标指令译码结果及获取的操作数作为所述分支指令的下一条指令对应的译码结果及操作数。再将所述译码结果及操作数送往执行单元供后续操作的执行。
具体而言,就是在分支指令尚未执行时预先根据顺序执行指令的地址和分支目标指令的地址取得顺序执行指令和分支目标指令,并分别进行了指令译码,产生各自指令译码结果并获取了各自的操作数。再根据转移条件判断决定选择哪组指令译码结果及操作数作为实际使用的指令译码结果及操作数,继续后续的指令执行操作,同样避免了因分支延迟导致的无流水线暂停。采用所述执行前进行分支判断的方法与译码前进行分支判断的方法相比,需要多一套译码器,增加了处理器的复杂性,但供处理器进行转移条件判断的时间又多了一个处理器时钟周期,因此适用范围比译码前或执行前进行分支判断的方法更广。
当分支成功时,程序计数器在下一个时钟周期输出指令地址为当前指令地址加转移偏移量再加两个指令字长得到的地址。
若当前指令是无条件分支指令,则不需要做分支条件判断,直接选择所述分支目标指令对应的译码结果及操作数作为所述无条件分支指令的下一条指令对应的译码结果及操作数。
对于采用取指前进行分支判断的方法,本发明提出在分支指令的取指段进行分支类型译码并与分支条件共同作用形成分支判断。根据得到的判断结果或无条件分支指令译码结果从由现有方法产生的顺序地址或分支目标地址中选择得到所述分支指令的下一条指令的地址。根据所述地址从存储器中获取相应的指令供处理器执行。
在具体实现中可以在分支指令从指令缓存中读出到进入段间寄存器之间增加一个简单译码逻辑,译出所述分支指令的分支类型(如:大于比较、小于等于比较等),再将所述分支类型与预先准备好的由之前指令产生的单数位(bit)或复数位分支状态位(flag)经一个简单判断逻辑运算后,确定是选择顺序地址还是选择分支目标地址。当所述分支类型为根据之前指令执行结果进行转移的分支指令,且所述执行结果表示为可以转移时,选择分支目标地址;否则选择顺序地址。由于能利用指令缓存输出指令到进入段间寄存器之间的时间空隙完成所述简单译码逻辑和简单判断逻辑,因此不会对处理器的工作频率产生不利影响。
对于采用取指前进行分支判断的方法,如果在指令进入段间寄存器前经译码译出所述指令是无条件分支指令,那么不需要另外的判断,直接选择分支目标地址作为所述无条件分支指令的下一条指令的地址。
对于采用取指前进行分支判断的方法,根据本发明技术方案,轨道表中的表项除分支类型外还应包括用于作分支判断比较的数据的寻址地址;轨迹头永远先于处理器实际的指令地址到达同一分支指令地址,存储在轨迹头指向的表项中的分支类型与所述寻址地址被读出;当读出的分支类型显示指令是条件分支指令时,若当前指令地址与轨道表的轨迹头(Head of Locus)相等,此时正在从存储器获取的指令即为条件分支指令,则在从存储器中所述当前指令地址取得所述分支指令的同时提取所述寻址地址对应的数据并用所述分支类型对所述数据进行分支判断操作,根据操作得到的判断结果从由现有方法产生的顺序地址或由轨道表提供的预测轨迹头(Predi cted Head of Locus)提供的分支目标地址中选择得到所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
对于采用取指前进行分支判断的方法,根据本发明技术方案,存储在轨迹头指向的表项中的分支类型与所述寻址地址被读出;当读出的分支类型显示指令是无条件分支指令时,若当前指令地址与轨道表的轨迹头相等,此时正在从存储器获取的指令即为无条件分支指令,则选择由轨道表提供的预测轨迹头对应的分支目标地址作为所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
根据本发明技术方案,可以根据轨道表中轨迹头的位置确定当前指令是否为分支指令,再根据分支类型产生选择信号以选择下一指令的地址。分支指令对应的分支类型和分支目标地址在执行到所述分支指令前就已经准备好了;由于轨迹头比处理器实际执行更早地指向分支指令,若处理器提供的当前指令地址与轨道表中轨迹头对应的指令地址相等,在将所述指令从存储器中取出的同时已经可以确定所述指令为分支指令,此时通过所述分支判断装置进行的分支判断是有效的;根据所述分支判断的结果,即可选择正确的下一条指令的地址。在发明“一种低缺失率、低缺失惩罚的缓存方法和装置”中所述的装置基础上增加一个分支判断装置即可实现所述功能。
对于采用译码前或执行前进行分支判断的方法,由于指令是连续取指,指令存储器的读口输出的是分支指令后顺序执行的指令,因此所述预先取得的分支目标指令需要经由第二读口获得。第二读口可以是多读取口(multi-Read Port)存储器的第二个读取口;也可以是由多体(multi-bank)存储器的与分支指令所在的存储体(bank)不同的存储体的读取口;还可以是来自上述来源的指令被临时暂存的寄存器。
在根据上述方法实现的两端口存储器中,第一读口直到处理器进行分支判断的时钟周期一直是读出分支指令前后顺序的指令,在分支指令之后转为输出目标指令之后顺序执行的指令。第二读口直到处理器进行分支判断的时钟周期一直读出所述分支指令对应的分支目标指令。在所述时钟周期之后转为输出下一个分支指令对应的分支目标指令。
根据本发明所述技术方案,处理器当前指令地址就是第一读口的读地址。
为了便于提前产生下一条指令的地址或预先取得顺序执行指令和分支目标指令,还可以利用已有的指令轨道表建立技术及用轨迹头寻找指令存储器块,结合处理器产生的块内位移确定指令地址的方法。
对应于译码前或执行前进行分支判断的方法,本发明进一步公开用上述轨道表输出的预测轨迹头作为分支目标指令地址直接寻址分支目标指令。上述预测轨迹头含有现正执行的指令的下一个分支指令地址,且先于相应的分支指令出现,所以可以在分支指令译码的同一周期或更早取得分支目标指令,供分支判断选择。上述预测轨迹头就是所述第二读口地址。
根据本发明所述技术方案,由现有方法得到的顺序指令与由轨道表提供的预测轨迹头对存储器寻址得到的分支目标指令一同供条件分支判断选择。具体而言,可以根据轨道表中轨迹头的位置确定当前指令是否为分支指令,再根据分支类型产生选择信号以选择下一指令。
根据本发明技术方案,分支目标指令预先被存放在由轨道表中轨迹头寻址的存储器中,与由现有方法得到的顺序指令一同供后续的分支判断选择。也可以将根据预测轨迹头寻址得到的分支目标指令直接存放在轨道表中,这样做可以避免使用双端口存储器,并能简化寻址,但增加了存放轨道表的存储器的容量。
根据本发明所述技术方案,可以将分支指令与非分支指令合并形成复合指令,从而在执行非分支指令的同时进行零流水线成本的分支处理。
在处理器的指令码中,往往有些位是保留的或没有被使用的。在这种情况下,可以用非分支指令中的这些位放置分支指令的转移判断条件和目标地址或转移偏移量,从而在执行非分支指令时,同步地完成对转移条件的判断并完成分支转移,实现零成本的分支处理。在通常的程序中,分支指令出现频率约占20%,减少这20%的指令将使处理器性能大为提高。有益效果:
本发明从根本上消除了控制相关导致的性能损失,节省了分支预测装置所占据的面积与消耗的功耗。
附图说明
虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。
图1是现有微处理器处理条件分支方式的实施例。
图2是本发明所述取指前进行分支判断的实施例。
图3是本发明所述译码前进行分支判断的实施例。
图4是本发明所述执行前进行分支判断的实施例。
图5是利用轨道表产生下一指令地址选择信号的实施例。
图6是利用轨道表产生下一指令选择信号的实施例。
具体实施方式
图1是现有微处理器处理条件分支方式的实施例。分支判断装置(13)根据进行判断运算给出分支判断信号(14)控制运算/程序计数装置(12)内的程序计数装置计算出下一指令地址(next instruction Address)(15)经寄存器(17)在下一时钟周期边沿经地址总线(19)送到指令存储器(10)取上述地址对应的指令。该指令经指令总线(16)送至译码器(11)做译码并取操作数以供运算/程序计数装置(12)使用。
图2是本发明所述取指前进行分支判断的实施例。此实施例中,运算/程序计数装置只负责产生循序地址(21),即根据当前指令地址产生以后顺序执行指令的地址。当分支成功转移之后,运算/程序计数装置会被填入分支目标地址加一的新地址。图中在指令总线(16)上的条件分支指令被送到分支判断装置(13)与其中预先计算好的分支状态位(flag)进行逻辑运算产生分支判断(14)。该分支判断(14)控制选择器(20)选择循序指令地址(21)和预先计算的目标地址(18)经寄存器(17)、地址总线(19)送到指令存储器(10)取上述地址对应的指令。该指令经指令总线(16)送至译码器(11)做译码并取操作数以供运算/程序计数装置(12)使用。
图3是本发明所述译码前进行分支判断的实施例。此实施例中,运算/程序计数装置(12)只负责产生循序地址(21)。当分支成功转移之后,运算/程序计数装置会被填入分支目标地址加一的新地址。图中循序地址(21)与分支目标地址(18)各自在指令存储器(22)中取得循序指令(29)与预算计算的分支目标指令(28)。分支判断装置(13)控制的选择器(26)选择上述两条指令中的一条通过指令总线(16)送至译码器(11)做译码并取操作数以供运算/程序计数装置(12)使用。
图4是本发明所述执行前进行分支判断的实施例。此实施例中,运算/程序计数装置(12)只负责产生循序地址(21)。当分支成功转移之后,运算/程序计数装置会被填入分支目标地址加一的新地址。图中循序地址(21)与预算计算的分支目标地址(18)各自在指令存储器(22)中取得循序指令(29)与分支目标指令(28)。上述两条指令通过各自的译码取操作数装置(25、26)产生各自的操作控制信号获取各自相应的操作数。分支判断装置(13)控制的选择器(33)选择一套操作控制信号与操作数送到运算/程序计数装置(12)以供使用。
图5是利用轨道表产生下一指令地址选择信号的实施例。图中低级存储器(122)指令缓存(124)和处理器核(125)为普通体系结构中都有的模块。填充生成器(123)扫描填充到指令缓存(124)中每一条指令,遇到分支指令,则记录分支类型并算出分支目标地址填充到轨道表(126)中。轨道表输出(150)是预测轨迹头,含有分支目标地址。该地址包含对应指令缓存(124)中存储单元块的块地址和在所述存储单元中的块内位移,用于读出分支目标指令。循迹器(170)输出的轨迹头指示的地址也由块地址(152)和偏移量(153)组成。用轨迹头进行指令寻址时,根据轨迹头中的块地址与处理器核(155)产生的块内位移即可在指令缓存(124)寻址获得所需指令。
此例中当前指令地址中的块地址即轨迹头中的块地址。循迹器(170)输出的轨迹头指示的地址中的偏移量(153)与处理器核(125)输出的偏移量(155)都被送到分支判断逻辑(210)进行比较。当偏移量(153)与偏移量(155)相等时,当前从指令缓存(124)中获取的指令必定是分支指令。此时,所述分支指令对应的分支类型和寻址地址(211)已经被送到分支判断逻辑(210),由分支判断逻辑(210)根据所述寻址地址获取所需的操作数进行分支条件判断,根据判断结果(212、213)从循迹器(170)输出新的轨迹头(存储器块地址),并用判断结果(212)作为选择信号选择顺序执行指令地址(块内位移)(155)或分支目标地址(块内位移)(150)。
图6是利用轨道表产生下一指令选择信号的实施例。同图5中的一样,低级存储器(122)指令缓存(124)和处理器核(125)为普通体系结构中都有的模块。填充生成器(123)扫描填充到指令缓存(124)中每一条指令,遇到分支指令,则算出分支目标地址填充到轨道表(126)中。轨道表输出(150)是预测轨迹头,含有分支目标地址。该地址包含块地址(201),块内位移(202)连接到指令缓存(124),从第二读口(128)读出分支目标指令(204)。在本实施例中,通过处理器核产生的分支判断(207)控制选择器(205),从顺序指令(203)与分支目标指令(204)中选出正确的下一条指令(206)供处理器核(125)使用。顺序指令(203)由循迹器(170)处理产生的轨迹头中的块地址和处理器核(155)产生的块内位移(155)从指令缓存(124)的第一读口(127)寻址获得。

Claims (10)

1.一种分支(Branch)处理方法,其特征是基于预先计算的分支目标地址获得指令以确保分支指令之后的指令的执行结果不论分支是否成功总是有效。
2.根据权利要求1所述的分支处理方法,其特征在于用分支判断结果或无条件分支指令译码结果来选择由现有方法产生的顺序地址或基于预先计算的分支目标地址作为所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
3.根据权利要求1所述的分支处理方法,其特征在于用分支判断结果或无条件分支指令译码结果来选择由现有方法得到的顺序指令或基于根据预先计算的分支目标地址取得的分支目标指令作为所述分支指令的下一条指令;再对所述指令进行译码供后续操作的执行。
4.根据权利要求1所述的分支处理方法,其特征在于用分支判断结果或无条件分支指令译码结果来选择根据由现有方法得到的顺序指令译码结果及获取的操作数或根据预先计算的分支目标地址预取的分支目标指令译码结果及获取的操作数作为所述分支指令的下一条指令对应的译码结果及操作数;再将所述译码结果及操作数送往执行单元供后续操作的执行。
5.根据权利要求2所述的分支处理方法,其特征在于在分支指令的取指段进行分支类型译码并与分支条件共同作用形成分支判断;根据得到的判断结果或无条件分支指令译码结果从由现有方法产生的顺序地址或分支目标地址中选择得到所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
6.根据权利要求2所述的分支处理方法,其特征在于轨道表中的表项除分支类型外还应包括用于作分支判断比较的数据的寻址地址;存储在轨迹头指向的表项中的分支类型与所述寻址地址被读出;当读出的分支类型显示指令是条件分支指令时,若当前指令地址与轨道表的轨迹头(Head of Locus)相等,则在从存储器中所述当前指令地址取得所述分支指令的同时提取所述寻址地址对应的数据并用所述分支类型对所述数据进行分支判断操作,根据操作得到的判断结果从由现有方法产生的顺序地址或由轨道表提供的预测轨迹头(PredictedHead of Locus)提供的分支目标地址中选择得到所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
7.根据权利要求2所述的分支处理方法,其特征在于存储在轨迹头指向的表项中的分支类型与所述寻址地址被读出;当读出的分支类型显示指令是无条件分支指令时,若当前指令地址与轨道表的轨迹头相等,则选择由轨道表提供的预测轨迹头对应的分支目标地址作为所述分支指令的下一条指令的地址;根据所述地址从存储器中获取相应的指令供处理器执行。
8.根据权利要求3、4所述的分支处理方法,其特征在于用轨道表输出的预测轨迹头作为分支目标指令地址直接寻址分支目标指令;由现有方法得到的顺序指令与由轨道表提供的预测轨迹头对存储器寻址(index)得到的分支目标指令一同供后续的分支判断选择。
9.根据权利要求3、4所述的分支处理方法,其特征在于分支目标指令预先被存放在由轨道表中轨迹头寻址的存储器中,与由现有方法得到的顺序指令一同供后续的分支判断选择。
10.根据权利要求1所述的分支处理方法,其特征在于可以将分支指令与非分支指令合并形成复合指令,从而在执行非分支指令的同时进行零流水线成本的分支处理。
CN200910248053.4A 2009-12-25 2009-12-31 一种分支处理方法 Active CN102117198B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN200910248053.4A CN102117198B (zh) 2009-12-31 2009-12-31 一种分支处理方法
EP10840611.7A EP2519874B1 (en) 2009-12-31 2010-12-31 Branching processing method and system
PCT/CN2010/080619 WO2011079824A1 (en) 2009-12-31 2010-12-31 Branching processing method and system
US13/056,979 US9361110B2 (en) 2009-12-25 2010-12-31 Cache-based pipline control method and system with non-prediction branch processing using a track table containing program information from both paths of a branch instruction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910248053.4A CN102117198B (zh) 2009-12-31 2009-12-31 一种分支处理方法

Publications (2)

Publication Number Publication Date
CN102117198A true CN102117198A (zh) 2011-07-06
CN102117198B CN102117198B (zh) 2015-07-15

Family

ID=44215981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910248053.4A Active CN102117198B (zh) 2009-12-25 2009-12-31 一种分支处理方法

Country Status (4)

Country Link
US (1) US9361110B2 (zh)
EP (1) EP2519874B1 (zh)
CN (1) CN102117198B (zh)
WO (1) WO2011079824A1 (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014079389A1 (en) * 2012-11-26 2014-05-30 Shanghai Xinhao Microelectronics Co. Ltd. Branch processing method and system
WO2015024452A1 (zh) * 2013-08-21 2015-02-26 华为技术有限公司 一种分支预测方法及相关装置
CN105975252A (zh) * 2016-04-29 2016-09-28 龙芯中科技术有限公司 一种处理指令的流水线的实现方法、装置及处理器
CN107810482A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 指令块到处理器指令窗口的批量分配
WO2018188657A1 (zh) * 2017-04-13 2018-10-18 上海芯豪微电子有限公司 一种分支处理方法与系统
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN109947564A (zh) * 2019-03-07 2019-06-28 阿里巴巴集团控股有限公司 业务处理方法、装置、设备及存储介质
US11048517B2 (en) 2015-06-26 2021-06-29 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
CN113076136A (zh) * 2021-04-23 2021-07-06 中国人民解放军国防科技大学 一种面向安全防护的分支指令执行方法和电子装置

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990942A (zh) * 2011-06-29 2017-07-28 上海芯豪微电子有限公司 分支处理方法与系统
CN103176914B (zh) * 2011-11-18 2016-12-21 上海芯豪微电子有限公司 一种低缺失率、低缺失惩罚的缓存方法和装置
CN103513957B (zh) * 2012-06-27 2017-07-11 上海芯豪微电子有限公司 高性能缓存方法
CN103984523B (zh) * 2013-02-08 2017-06-09 上海芯豪微电子有限公司 多发射指令处理系统及方法
CN103984525B (zh) * 2013-02-08 2017-10-20 上海芯豪微电子有限公司 指令处理系统及方法
US10055585B2 (en) * 2013-08-28 2018-08-21 Mcafee, Llc Hardware and software execution profiling
CN104978282B (zh) * 2014-04-04 2019-10-01 上海芯豪微电子有限公司 一种缓存系统和方法
GB2535514B (en) * 2015-02-19 2021-09-22 Advanced Risc Mach Ltd Processor exception handling
US9996358B2 (en) * 2015-09-30 2018-06-12 Ecole Polytechnique Federale De Lausanne Unified prefetching into instruction cache and branch target buffer
US10423777B2 (en) 2016-04-14 2019-09-24 Endgame, Inc. Preventing execution of malicious instructions based on address specified in a branch instruction
US10747540B2 (en) * 2016-11-01 2020-08-18 Oracle International Corporation Hybrid lookahead branch target cache
US10706180B2 (en) 2017-07-07 2020-07-07 Endgame, Inc. System and method for enabling a malware prevention module in response to a context switch within a certain process being executed by a processor
US10901743B2 (en) * 2018-07-19 2021-01-26 International Business Machines Corporation Speculative execution of both paths of a weakly predicted branch instruction
US11182166B2 (en) 2019-05-23 2021-11-23 Samsung Electronics Co., Ltd. Branch prediction throughput by skipping over cachelines without branches

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4777587A (en) * 1985-08-30 1988-10-11 Advanced Micro Devices, Inc. System for processing single-cycle branch instruction in a pipeline having relative, absolute, indirect and trap addresses
US5784711A (en) 1990-05-18 1998-07-21 Philips Electronics North America Corporation Data cache prefetching under control of instruction cache
US5226138A (en) * 1990-11-27 1993-07-06 Sun Microsystems, Inc. Method for selectively transferring data instructions to a cache memory
US5353419A (en) 1992-01-09 1994-10-04 Trustees Of The University Of Pennsylvania Memory-side driven anticipatory instruction transfer interface with processor-side instruction selection
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5542109A (en) * 1994-08-31 1996-07-30 Exponential Technology, Inc. Address tracking and branch resolution in a processor with multiple execution pipelines and instruction stream discontinuities
SE509499C2 (sv) * 1996-05-03 1999-02-01 Ericsson Telefon Ab L M Metod och anordning för hantering av villkorliga hopp vid instruktionsbehandling i en pipeline-arkitektur
US5860017A (en) * 1996-06-28 1999-01-12 Intel Corporation Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
US5954816A (en) * 1996-11-19 1999-09-21 Advanced Micro Devices, Inc. Branch selector prediction
US5983321A (en) * 1997-03-12 1999-11-09 Advanced Micro Devices, Inc. Cache holding register for receiving instruction packets and for providing the instruction packets to a predecode unit and instruction cache
US6134649A (en) * 1997-11-17 2000-10-17 Advanced Micro Devices, Inc. Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction
US6012134A (en) * 1998-04-09 2000-01-04 Institute For The Development Of Emerging Architectures, L.L.C. High-performance processor with streaming buffer that facilitates prefetching of instructions
US6263427B1 (en) * 1998-09-04 2001-07-17 Rise Technology Company Branch prediction mechanism
US7134004B1 (en) * 1999-09-29 2006-11-07 Fujitsu Limited Processing device for buffering sequential and target sequences and target address information for multiple branch instructions
US6647489B1 (en) * 2000-06-08 2003-11-11 Ip-First, Llc Compare branch instruction pairing within a single integer pipeline
US6704860B1 (en) * 2000-07-26 2004-03-09 International Business Machines Corporation Data processing system and method for fetching instruction blocks in response to a detected block sequence
US6681318B2 (en) 2000-09-08 2004-01-20 Sun Microsystems, Inc. Method and apparatus for using an assist processor to prefetch instructions for a primary processor
US7010675B2 (en) * 2001-07-27 2006-03-07 Stmicroelectronics, Inc. Fetch branch architecture for reducing branch penalty without branch prediction
CN1142485C (zh) * 2001-11-28 2004-03-17 中国人民解放军国防科学技术大学 流水线控制相关延迟消除方法
US7234046B2 (en) * 2004-12-01 2007-06-19 Faraday Technology Corp. Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping
TWI328771B (en) * 2005-07-15 2010-08-11 Nvidia Corp Pipelined central processing unit structure and method of processing a sequence of instructions
US20070288732A1 (en) 2006-06-08 2007-12-13 Luick David A Hybrid Branch Prediction Scheme
US8301871B2 (en) 2006-06-08 2012-10-30 International Business Machines Corporation Predicated issue for conditional branch instructions
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US20070288734A1 (en) 2006-06-08 2007-12-13 Luick David A Double-Width Instruction Queue for Instruction Execution
US20070288731A1 (en) 2006-06-08 2007-12-13 Bradford Jeffrey P Dual Path Issue for Conditional Branch Instructions
US20070288733A1 (en) 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
JP2009163624A (ja) * 2008-01-09 2009-07-23 Nec Electronics Corp プロセッサ装置及び条件分岐処理方法

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103838550A (zh) * 2012-11-26 2014-06-04 上海芯豪微电子有限公司 一种分支处理系统和方法
WO2014079389A1 (en) * 2012-11-26 2014-05-30 Shanghai Xinhao Microelectronics Co. Ltd. Branch processing method and system
US9529595B2 (en) 2012-11-26 2016-12-27 Shanghai Xinhao Microelectronics Co. Ltd. Branch processing method and system
CN103838550B (zh) * 2012-11-26 2018-01-02 上海芯豪微电子有限公司 一种分支处理系统和方法
WO2015024452A1 (zh) * 2013-08-21 2015-02-26 华为技术有限公司 一种分支预测方法及相关装置
CN104423929A (zh) * 2013-08-21 2015-03-18 华为技术有限公司 一种分支预测方法及相关装置
CN104423929B (zh) * 2013-08-21 2017-07-14 华为技术有限公司 一种分支预测方法及相关装置
US11048517B2 (en) 2015-06-26 2021-06-29 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
CN107810482A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 指令块到处理器指令窗口的批量分配
CN107810482B (zh) * 2015-06-26 2021-10-22 微软技术许可有限责任公司 指令块到处理器指令窗口的批量分配
CN105975252A (zh) * 2016-04-29 2016-09-28 龙芯中科技术有限公司 一种处理指令的流水线的实现方法、装置及处理器
CN105975252B (zh) * 2016-04-29 2018-10-09 龙芯中科技术有限公司 一种处理指令的流水线的实现方法、装置及处理器
WO2018188657A1 (zh) * 2017-04-13 2018-10-18 上海芯豪微电子有限公司 一种分支处理方法与系统
CN109783143A (zh) * 2019-01-25 2019-05-21 贵州华芯通半导体技术有限公司 用于流水线指令流的控制方法和控制设备
CN109947564A (zh) * 2019-03-07 2019-06-28 阿里巴巴集团控股有限公司 业务处理方法、装置、设备及存储介质
CN109947564B (zh) * 2019-03-07 2023-04-11 蚂蚁金服(杭州)网络技术有限公司 业务处理方法、装置、设备及存储介质
CN113076136A (zh) * 2021-04-23 2021-07-06 中国人民解放军国防科技大学 一种面向安全防护的分支指令执行方法和电子装置

Also Published As

Publication number Publication date
EP2519874B1 (en) 2018-02-21
EP2519874A1 (en) 2012-11-07
CN102117198B (zh) 2015-07-15
US9361110B2 (en) 2016-06-07
EP2519874A4 (en) 2015-08-12
US20110264894A1 (en) 2011-10-27
WO2011079824A1 (en) 2011-07-07

Similar Documents

Publication Publication Date Title
CN102117198A (zh) 一种分支处理方法
CN100480994C (zh) 分支目标缓冲器及其使用方法
CN100361073C (zh) 多线程流水线指令解码器的方法和设备
CN103838550B (zh) 一种分支处理系统和方法
CN104679481B (zh) 一种指令集转换系统和方法
CN104424129A (zh) 基于指令读缓冲的缓存系统和方法
CN104731719B (zh) 一种缓存系统和方法
CN101156132B (zh) 用于预测不对准存储器存取的方法和设备
CN101627366B (zh) 预加载指令的方法及装置
US7478228B2 (en) Apparatus for generating return address predictions for implicit and explicit subroutine calls
CN102855121B (zh) 分支处理方法与系统
CN105511838A (zh) 处理器及其执行方法
CN102662640B (zh) 双重分支目标缓冲器和分支目标处理系统及处理方法
CN107992331A (zh) 处理器及操作处理器的方法
CN112230992A (zh) 一种包含分支预测循环的指令处理装置、处理器及其处理方法
CN101477455B (zh) 无预测延时的分支预测控制方法
CN104424128A (zh) 变长指令字处理器系统和方法
CN109101276A (zh) 在cpu中执行指令的方法
CN106843816B (zh) 一种分支预测控制方法及装置
CN101189574A (zh) 指令存储器单元和操作方法
KR101545701B1 (ko) 프로세서 및 그 명령어 번들 복원 방법
CN103984525B (zh) 指令处理系统及方法
CN100520710C (zh) 复杂指令系统中tlbr内部例外的处理方法和处理器
CN111158753A (zh) 具有数据预取功能的Flash控制器结构及其实现方法
US9448805B2 (en) Software controlled data prefetch buffering

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant