CN1191524C - 预取指令的执行方法和设备 - Google Patents

预取指令的执行方法和设备 Download PDF

Info

Publication number
CN1191524C
CN1191524C CNB001352830A CN00135283A CN1191524C CN 1191524 C CN1191524 C CN 1191524C CN B001352830 A CNB001352830 A CN B001352830A CN 00135283 A CN00135283 A CN 00135283A CN 1191524 C CN1191524 C CN 1191524C
Authority
CN
China
Prior art keywords
branch
instruction
prediction
branch history
information
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.)
Expired - Fee Related
Application number
CNB001352830A
Other languages
English (en)
Other versions
CN1300006A (zh
Inventor
托马斯·R·普扎克
艾伦·M.·哈特斯坦
马克·查尼
丹尼尔·A·普雷纳
彼得·H.·奥登
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.)
Intel Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1300006A publication Critical patent/CN1300006A/zh
Application granted granted Critical
Publication of CN1191524C publication Critical patent/CN1191524C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

说明一种在指令译码周期期间预测预取指令的有用性的机制。预测为有用(预取有用数据)的预取指令被发送到处理器的某执行单元供执行,并废弃预测为无用的预取指令。利用包含在分支历史机制中的分支预测表征码,进行关于预取指令的有用性的预测。把该表征码和预取指令中包含的记录着在该预取指令与数据的实际使用之间的分支路径的信息进行比较。利用该机制可预取指令和数据二者。

Description

预取指令的执行方法和设备
技术领域
本发明涉及数据处理领域,尤其涉及预取指令的生成方法、执行设备、和执行方法。
背景技术
高速缓存是小的高速的存储器缓冲器,逻辑上放在处理器和主存储器之间,并用来保持主存储器中最近要引用的部分。由于处理器的速度远远快于它的主存储器,当今的处理器需要高速缓存。逻辑上位于处理器和主存储器之间的高速缓存系统在特性上可能是层次的,即具有多层高速缓存。高速缓存系统中可找到的存储器请求是快速满足的,通常为一个或二个周期,而未命中高速缓存并且从存储器满足的请求可能要数个周期。对于从存储器满足的请求,通常比从高速缓存满足的请求时间多20到30个周期。每个未命中高速缓存并在存储器找到的请求通常使处理器延迟一个该未命中的时间长度。
预取是一种经常使用的用来减少因高速缓存未命中造成的延迟的技术。预取机制试图预测存储器的哪些区段将由程序使用并且在处理器通常要请求它们之前把它们取到高速缓存中。典型地,存储器的各个区段称为行并且其尺寸在128到256个字节的范围内。若预取机制是成功的,则在时间上充分早地把存储器的某行传送到高速缓存中,以避免由于高速缓存未命中造成的任何处理拖延。
通常采用的预取技术涉及把预取指令插入到程序中。例如,Chllahan等人的论文“Software Prefetch”(Proceedings of the fourthInternational Conference on Architectural Support ForProgramming Languages and Operating Syetem,1991年4月)说明把执行预取的新指令添加到指令集中。而且,IBM RS/6000和Power PC处理器具有Data-Cache-Block-Touch(dcbt)指令,把其中存储器中一行预取到高速缓存中。编译程序(它可能采用静态和/或动态编译技术)或程序员可在实际使用信息之前把预取指令(下面称为接触指令)插入程序中,以尝试确保在执行程序中的下一条指令时存储器的该行会处在高速缓存中。可利用接触指令预取指令和数据。例如,可在程序中的即将到来的分支之前插入一条接触指令以预取位于该分支的目标处的指令组。类似地,可在送数(load)指令之前放上接触指令以把数据预取到高速缓存中。
我们通过下面的程序例子开始说明我们的专利申请。图1示出一个含有三个分支和四条接触指令的程序。这三个分支把该程序分成七个程序段。分别把三个分支编号为B1、B2和B3:以标识分支BC,EQ,转移1;BC EQ,转移2;和BC EQ,转移3。在下图中用于这七个程序段的编号方式将会变清楚。这四个接触指令可预取数据项A、B、C和D。存在四个送数指令以把数据项A、B、C和D取到寄存器5中。图2表示同一程序的树图。这三个分支把该程序分成七个程序段。对每个程序段编号并把号码放在圆圈内。每个分支的未取路径示成树叉的左边缘,而被取路径是右边缘。这四个送数指令位于该树的四个叶段中,即分别在程序段4、5、6和7中。这四个接触指令即预取位置A、B、C和D也分别位于程序段4、5、6和7中,但出现在它们的送数指令配对之前。
为了增加在把存储器的块预取到高速缓存和另一条指令对它的后继使用之间的时间间隔,编译程序试图在程序中把接触指令向前移动。但是,把预取指令从原始程序段移到较前面的程序段并不总是改善性能,并且甚至可以因造成出现不必要的或不使用的预取而降低性能。
例如,研究图2中示出的程序控制流程图。若编程程序把程序段4中找到的用于数据A的接触指令移到段2中(以增加在预取数据和后继使用之间的时间间隔),则它实质上试图预测分支B2(BC EQ,转移2)被取或不被取的结局。在该情况下编译程序必须假定不取分支B2。若该程序的实际执行流程是从段2到段5,则因为取了该分支,数据项A被预取并且未使用。
类似地,编译程序可以把用于数据项A和B的二条接触指令移到程序段2中。现在,段2会预取A和B二者。然而,取决于该分支的结局,只会使用一个预取。若不取该分支,则对A的预取是正确的并不使用对B的预取。若取该分支,则使用B但不使用A。
存在几个为什么要避免不准确或不成功预取的理由。第一,每个不使用的预取以无用信息污染高速缓存并且浪费宝贵的高速缓存空间。
第二,当做出不成功以预取时,替换算法必须选择目前高速缓存中的要废弃的一行。此时,若在另一次未命中出现之前引用该废弃行,则出现一次附加的(并且不必要的)未命中。
第三,当向高速缓存传送预取行时,可能阻止处理器在该行传送周期期间引用高速缓存。设想若高速缓存行是128字节并且若传送总线是8字节宽,则需要16个周期以把该行拷贝到高速缓存中。
第四,每次不使用的预取把宝贵的总线周期浪费于向高速缓存传送存储器的行。若该期间出现真实的(必然)高速缓存未命中,则总线会忙于传送无用的预取并且该真实的高速缓存被延迟。
存在一些涉及预取机制的专利,它们各具有一定的优点和缺点。
例如,几份专利说明在程序的循环内预取数据。
授予Santhanam的美国专利5,704,053说明一种把预取指令添加到程序循环中的机理。该技术利用来自其以前的应用运行的执行概要确定在循环的何处理插入预取指令。
授予Hsu的美国专利5,843,934确定循环内的程序的存储器存取模式。在循环体上均匀地安排预取。这避免预取的聚集,尤其当因置换以前更新过的高速缓存行预取而造成排空或回写时。根据循环迭代的数量和每次循环迭代上要进行的预取数量编排预取。
授予Widigen等的美国专利5,919,256描述一种从代替引用存储器的操作数高速缓存中预取数据的机制。然后利用来自该操作数高速缓存的数据值推测地执行指令。若从操作数高速缓存检索的数据值等于实际的操作数值,则完成该推测执行。若二个值不相等,则废弃所有推测执行。
授予Mirza的美国专利5,357,618确定跨距1或N或该跨距值的一种组合的行组的预取长度。利用跨距寄存器计算程序的引用模式并且利用专用指令在通用寄存器和跨距寄存器之间传送该值。编译程序利用这些新指令控制循环内的预取。
更通用的预取技术包括:
授予Wilson的美国专利5,896,517利用后台存储器移动(BMM)机制改进程序的性能。BMM机制并行于常规处理器操作在存储器层次的不同层之间执行后台存储器移动操作。
授予Emberson的美国专利,5,838,945说明一种把长度可变的行取到高速缓存中的预取机制。利用一种专利指令指示要预取的高速缓存行的长度、预装入预取数据的高速缓存集合定位以及预取类型(指令或数据)。
授予Goodnow等人的美国专利5,918,246说明一种利用编译程序生成的程序图的预取方法。接着利用程序图把适当的指令和数据信息预取到高速缓存中。程序图包含分支的地址单元和分支目标以及程序使用的各数据单元。
授予Berenbaum等人的美国专利5,778,435说明一种基于历史的预取机制,其在缓冲器中保存高速缓存未命中地址。通过前N个周期发布的指令地址对该缓冲器编索引。然后利用缓冲器值作为预取地址以试图避免高速缓存未命中。
授予Howry的美国专利5,732,242说明一种预取指令含有“提示”位组的机理。这些提示位组指示要进行哪一种预取操作,即预取是排它的或只读的;并且指示装入哪个设置该行的高速缓存(最近最少使用或最近最多使用)。
授予Palmer的美国专利5,305,389说明一种在模式存储器中存储存取模式的预取机制。通过把当前的一组对象(存取)和该模式存储器中保持的对象(存取)比较,得到预取候选。对于生成预取候选,不要求模式匹配显示出对模式存储器中保存的对象的完全匹配。对每个匹配模式的剩余对象尝试预取。
在IBM技术公报第36卷第10期第69-70页(1993年10月)中的Kaeli等人的“数据预取对分支预测的连接”中,说明一种数据预取和分支预测的耦合。该机制在分支历史表中保存以前的操作数未命中的地址。每当查阅分支历史表以预测分支动作,或取用或不取用时,若找到匹配,则尝试操作数预取。只为分支历史表中保存的以前的未命中尝试预取。
共同转让给本发明的受让人的并因此本文对其全文引用的授予Dubey的美国专利5,774,685使用一种预取指令,其对在预取指令和使用该数据的指令之间的分支路径(它由编译程序确定)编码,其中该分支路径代表插入分支的动作(被取用或不取用)。利用预取指令中包含的推测分支路径信息标志各个预取行。存在专用硬件以比较预取行的标志信息和处理器执行的实际分支动作。每当该标志信息不同于实际分支动作时,就较早地废弃该预取行,同时在高速缓存中较长期地保持其标志和实际分支动作相等的各预取行。
类似地,授予Yeh等人的美国专利5,742,804说明一种只预取指令的机制。在程序中即将到来的分支的前面插入分支预测指令。每条分支预测指令充当一条预取指令,并包含一个预测即将到来的分支的方向(取或不取)的猜测字段、预取地址、要预取的字节数的以及一个指示通往该即将到来的分支的分支路径的跟踪向量。通过比较即将到来的分支的动作和由跟踪向量预测的动作,利用跟踪向量取消已发出的预取。不存在预取数据的机制。
此外,共同转让给本发明的受让人的并因此本文对其全文引用的Puzak的美国专利(申请号08/599,833)说明一种条件执行预取指令的方法。其利用历史表,该表记录以前执行的预取指令取出的信息实际上是否由处理器使用。该表被称为接触历史表。利用该表中包含的信息只执行那些取出有用数据的预取指令,并废戏(不执行)取出不使用数据的预取指令。
利用编译程序在程序中放置接触指令是一种周知的预取技术。例如,William Y.chen、Scottt Mahlke、Pahua Chang和Wen-mei w.Hwu在“DataAccess Microarchitectures For Superscalar Processors WithCompiler-Assisted Data Prefetching”(in 24th Annual InternationalSymposium on Microarchitecture,pages 69-73,Nov 1991)中,以及ToddC.Mowry在“Tolerating Latency Through Software-Controlled DataPrefetching”(Ph.D Thesis,Computer Syseems Laboratory,StanfordUniversity,CA 9305,March 1994)中,说明一些在程序中放置接触指令以把数据预取到高速缓存中作为减少高速缓存的等待时间的方法。
发明内容
本发明的主题是允许编译程序把所有四条接触指令(A、B、C和D)都移到程序段1中(如图3中所示)并且具有只执行那些产生有用预取的预取指令的高准确性。在该例子中看出在每次执行程序段1时会执行所有四条接触指令,然而只有一次预取会产生有用的预取。取决于分支B1、B2和B3的分支动作(被取和不被取),只会到达程序树的叶节点中的一个节点。另外三个叶节点代表不执行代码。我们的预取机制依赖于各分支的验证的可预测性以允许分支预测机制捕获穿过程序的执行路径的重复特性,该分支预测机制保持有关程序的执行路径的信息并向处理器提供该信息。然后处理器判定要执行哪些接触指令并且废弃那些沿着程序的不被取路径的接触指令。并且,通过选择性地执行接触指令,编译程序可以在程序中自由地放置并且进取性地“上移”各预取指令以增大在预取指令和由另一条指令对它的实际使用之间的距离,并且由此增加通过预取获得的性能。
例如,技术上已经知道可高准确性地预测各分支。典型地,各分支周期性地被取用或不取用并且常常利用分支的先前动作来预测该分支的下次(或未来)动作。通过使用现代分支预测算法,分支预测机制常常可达到90%或更高的预测准确性。分支的验证的可预测性代表程序行为的基础规律,其允许分支预测机制记录并预测哪些接触指令会产生有用的预取以及废弃(不执行)产生不必预取的接触指令。
由于穿过程序的执行流程是重复的并且分支动作是重复的,从而我们的预取机制行之有效。利用图3,若程序的流程是从程序段1到程序段3再到段6,则取用分支B1和不取分支B3。由于分支动作是高重复性的,当重复执行程序时程序的执行流程再次从程序段1至3再到6的概率是高的。
此外,我们的预取机制远在指令执行周期之前的处理器译码周期期间废弃不准确的预取指令。这简化了处理器的设计并改进总性能,还避免了与废除(取消)无用预取或者在发出预取以后浪费宝贵高速缓存空间或总线周期相关联的不必要复杂性。
根据本发明的一个方面,提供了一种用于执行存储在一个存储器中的指令流的方法,该方法被应用在包含逻辑上置于所述存储器和至少一个处理器单元之间的一个高速缓冲器的一个系统中,该指令流由一系列指令组成,该一系列指令包括至少一个把信息从该存储器预取到该高速缓冲器的预取指令,该方法包括步骤:生成分支历史表征码,其中该分支历史表征码表示从该预取指令到使用由该预取指令所预取的信息的一个指令的路径;生成分支历史信息,其中该分支历史信息表示一条预测执行路径;把分支历史表征码与分支历史信息进行比较,以当所述分支历史表征码与所述分支历史信息相匹配时执行该预取指令,其中所述分支历史表征码是通过将所述预取指令插入到被编译的程序中并根据编译的结果修改预取指令中的路径表征码而导出的,其中分支历史信息包括预测分支历史信息表征码。
根据本发明的另一个方面,提供了用于在一个系统中执行一种指令预取机制的设备,该系统包含在逻辑上被置于一个存储器和至少一个处理器单元之间的高速缓冲器,该设备包括:指令取单元,用于从高速缓冲器取指令;译码单元,用于对指令进行译码;执行单元;分支历史队列保持单元,用于临时记录所述执行单元所执行的每个分支之后所执行的各分支的取用/不取用;分支预测装置,用于记录以前执行过的分支的分支动作信息,对指令取单元进行引导,并接收来自所述执行单元和分支历史队列保持单元的信息以对所述分运动更新;待决分支预测单元,用于保持描述多个分支的动作的预测信息,判别来自所述译码单元的指令是分支还是接触指令,把判别的分支和接触指令送到所述执行单元,并对照分支的实际执行结果而检查分支预测信息且在检查出预测错误时清洗所保持的预测信息。
附图说明
图1是一个带有四条送数指令和四条预取指令的程序的图示表示;
图2是该程序的控制流程图;
图3是该程序把各接触指令移到第一程序段下的控制流程图;
图4示出接触指令的格式;
图5是依据本发明的包含着预取预测控制的处理器的功能方块图;
图6是依据本发明的图5的待决分支预测逻辑的功能方块图;
图7是依据本发明的图5的分支历史队列的功能方块图;
图8是依据本发明的图6的待决分支预测队列的功能方块图;
图9是依据本发明的图6的分支预测机制命中逻辑的功能方块图;
图10是依据本发明的图6的分支译码逻辑的功能方块图;
图11是依据本发明的图6的接触指令译码逻辑的功能方块图;
图12是一个表,其说明用于比较分支历史表征码和接触指令中的分支表征码的表征码比较逻辑;
图13表示接触指令信息块的格式;
图14是依据本发明的图6的分支执行逻辑的功能方块图;
图15是依据本发明的图5的接触指令执行单元的功能方块图。
具体实施方式
现一般地说明本预取机制的操作并在后面作更详细的说明。请注意,本文中的设计说明是为解释的简洁性而不是为设计的最优性选择的。例如,假定所有指令是按顺序执行的,但是所呈现的说明不排斥无序设计。
每条接触指令具有一个分支表征码字段(包含在指令中),该字段说明在该接触指令和由其预取的数据的实际使用之间的路径上的一系列分支的分支取向(取用或不取用)。该分支表征码字段指示穿越程序的从该接触指令到引用所预取的数据项的指令的路径。分支表征码字段是由编译程序在程序的代码生成期间设置的。通过对每条接触指令关联在该接触指令和存储器引用之间的各个分支的分支取向的指示,利用运行期分支预测机制来判定是否要执行接触指令。从而,在一条接触指令被译码后,仅当它的分支表征码字段可被验证成或确认成对应于分支预测符期待的路径后才执行它。若它的分支表征码字段不和分支预测机制所选择的期待分支路径匹配,则废弃该接触指令。
例如,利用图3,当第一次进入段1时,并行地出现二个事件。第一,译码所有四条接触指令并发送到执行单元。第二,查阅分支预测机制并判定不存在用于指令分支B1的分支历史。
在不存在任何分支历史信息下,不执行程序段1中的任何接触指令(注意,这种决策是任意的并且是一种有些保守的预取策略。从该策略到一处更为进取的策略的范围中的替代办法是当不能得到任何分支预测历史时执行所有四条接触指令。)
随着执行各个程序段,该分支预测机制确定取分支B1并且不取分支B2。分支预测机制记录该信息并且该信息和分支B1相关联。在第二次执行段1时,再次并行地出现二个事件。译码这四条接触指令并发送到执行单元,并且分支预测机制再次搜索以确定和B1关联的分支历史。这一次,B1的分支历史预测下二个分支的结局是先取用然后不取用。把该信息和该接触指令中含有的分支表征码字段比较。
例如,接触指令A的表征码是二个不取用的分支。接触指令B的表征码是一个不取用的分支然后跟着一个取用的分支。接触指令C具有的表征码是先取用然后不取用,而接触指令D的表征码是二个取用的分支。
只有那些和分支预测机制中包含的分支历史信息匹配的接触指令才会得到执行。在该例子中指令执行接触指令C。其它接触指令会被废弃,因为它们的分支表征码信息不和从分支推测机制得到的信息匹配。
预取块C并且用作从段1到3再到6的程序的执行流程。只要代表程序执行流程的分支动作保持不变,该预取策略就是正确的。
图4示出接触指令50的格式。该指令包含下列字段:
操作码51,该字段表示该指令使用的操作码。分支表征码52,该字段指示在该接触指令与由该接触指令所预取的数据引用之间遇到的后N个唯一(无循环的)的分支的所需结局或方向。(注意,该决策是随意的并且它可能考虑所有分支顺序,在构建分支表征码时带有循环或不带有循环。)例如,从图3,当编译程序把用于数据C的接触指令移入段1时,它越过该程序的执行路径中的二个分支。为到达数据C的原始引用所需的每个分支结局是由单个子字段代表的,其中每个子字段可具有三个值中的一个值:
T,取用该分支。
N,不取用该分支。
D,可以取用或不取用该分支。在该情况下分支方向是“不在意”。(注意每个子字段可取三个不同的值,从而一个具有五个子字段的分支表征码字段具有取、不取、不在意值的35=243种不同的可能组合。这可用8位的二进制编码表示,28=256。)
接触地址53,该字段指示要预取的高速缓存块的地址。该字段的格式可代表一个基址寄存器和位移值或一个从该接触指令地址相对偏离的值。若选择基址和位移表示,则预取地址是基址寄存器中包含的值和位移值的和。若通过相以对偏离规定预取地址,则该值可表示相对于(加或减)接触指令地址的字节、字或甚至高速缓存行的数量。
下面的例子可代表图3中列出的四条接触指令。
“接触”           NN,A
“接触”           NT,B
“接触”           TN,C
“接触”            TT,D
这里每个接触指令在程序中向上移动二个分支。若分支表征码字段为四目长(允许每条接触指令越过四个分支),则最后二个分支的结局应由“不在意”状况表示或用D表示。例如,来自段1的预取项C的四个位置分支表征码应是“接触”TNDD,C。分支表征码全为D的接触指令表示“全预取”状态。利用这种表征码,总是出现预取而与由分支预测机制找到(或未找到)的任何分支历史信息无关。
利用该预取指令可以预取指令和数据二者。例如,为了预取指令,通过确定从程序中的当前位置到新段的相对距离(按字节数、字数或高速缓存行数),编译程序可计算出未来要执行的某程序段的地址。接触指令然后会利用该相对地址规定预取地址。类似地,可以通过相对偏离(当知道时)或在设置基址寄存器下通过使用基址和位移地址规范,确定预取数据。
在本发明的优选实施例中,可扩大编译程序以生成用于一个按如下所述实现条件预取机制的机器的代码。上面说明的接触指令在一类专用寄存器(接触寄存器)中产生(技术)结果,并且除定址和页面故障中断不起作用之处,使相同的目标地址具有送数指令的执行时间和存储器特性。它是编译程序惯例的人工制品并且用来表示在接触指令和对其预取的数据的引用之间的显式相关性。
编译期间,在编译程序第一次通过指含令编排之前,在紧靠着每个存储器引用(装入或存储或程序段)之前插入一条接触指令,并按一个对源(subject)存储器引用的操作数包括接触寄存器结果。
该操作数仅用于向编译程序表示在该接触指令上的存储器引用的技术相关性。此外,每个为其已生成一个接触指令的存储器引用被标记成具有大为减少的等待时间,通常只为一个周期。现在,在传送指令编排时,已经被建立的情况将造成编译程序试图重新定位各接触指令,以使它们的所有或部分期望等待时间复盖它们的相关的存储器引用。请回忆这相关性是由存储器引用的附加接触寄存器操作数表示的。
通常,条件分支的出现可能限制编译程序为复盖其等待时间而对接触指令“上移”的距离。为了检测该情况,在传送指令编排后,进行一次扫描以确定位于各基本块的前部的接触指令。对于每条这样的指令,若编译程序判定尚未全部复盖它的所有使用和等待时间,则采用一次特别的变换以沿分支向上移动该接触指令。并在此刻修改该接触指令的表征码字段以指示从其上移动该指令的分支的方向。实际上,把该表征码字段向右移位一个子字段位置(假定分支表征码排列成子字段1在左侧),并对它添加前缀:取用/不取用/不在意指示符。在该变换后,若存在任何改变。则再一次传送编排,并且其可能造成接触指令的进一步移动。重复这种场面,直至所得到的改善不值得编译程序再次传送编排为止。在该变换之后,表征码字段编码出从预取指令到使用由该预取指令取出的信息的指令的路径。
为消除重复应进行代码的最后一次通过。这种最简单的重复是发生在相同高速缓存行中相同基本块地址上有二条接触指令时(但请注意可能需要复杂的别名分析以检测许多这种类型的重复,并且事实上不是所有这样的重复都能在编译时间时检测出的)。此类重复的一种可检测情况可能是在编译程序把接触把令向上游移动到会合点造成该指令的一个或多个拷贝时引入的。若检测出此时间,则可通过适当地修改表征码字段消除该重复,即,一旦表征码字段是二个子字段不同,就把子字段设定为不在意。当一条接触指令统治另一条,二条都定址相同高速缓存行中项时,出现略为复杂的重复。在要消除检测出的这次重复时必须施以判断。若许多指令位于出现重复接触指令的之间,并且若在其中存在相关联的存储器引用,则后一条接触指令可能仍然是需要的,因为在遇到后一条接触指令时它引用的高速缓存行可能已从高速缓存排出。这种判断会收录在考虑目标处理器的期望高速缓存几何的编译程序直观判断中。
业内人士容易理解,可以利用替代的编译技术来生成接触指令和对应的分支表征码并放置在指令流中供条件执行,并且还理解本发明可使用任何替代的编译技术。
图5示出支持该预取机制所需要的计算机系统的主要要素。该图示出下述组件:
存储器5:存储处理器上执行的指令和操作数。存储器的最近使用部分被传送到高速缓存。
高速缓存10:其中保存指令和数据的高速存储器。向指令缓冲器提供指令并且向执行单元提供操作数。还从执行单元接收更新(存储)和预取请求。(注意,本设计说明中呈现一个公共的或统一的高速缓存,但该说明可容易地修改成拆开或分离指令高速缓存和数据高速缓存)。
指令缓冲器15:保存已由指令取逻辑20取的指令。
译码器25:检查指令缓冲器并译码指令。典型地,存在含有正被译码的指令的地址的程序计数器(PC)寄存器。指令译码后接着把它送到适当的执行单元。接触指令以及分支还由作进一步处理的待决分支预测逻辑进行处理。
执行单元组,执行指令。典型地,一个处理器会具有多个执行单元以改进性能并提高并行性。在本说明中,把所有接触指令分配给接触执行单元200和把分支发送到分支执行单元300。所有其它指令到通过用执行单元250。出于简单化并呈现清晰设计,选择这样的配置。很清楚,许多其它执行单元配置可以和本机制一起使用。每个执行单元关联着一个执行队列(未示出)。执行队列保持等待执行的已译码指令。
分支预测机制30:记录以前执行过的分支的分支动作信息(被取或不被取)。还通过取和不取分支顺序引导指令取机制并接收来自分支执行单元和分支历史队列的更新。典型地,分支预测逻辑和指令取逻辑,在指令取之前通过预测即将到来的分支所进行的分支预测,携手工作。指令取机制会使用分支预测信息,以便若不取某分支则取后继指令,或者若某分支预测为要取则转移到一个新的指令取地址。当工作正常时分支预测机制可在时间上足够早地检测(预测)被取分支,从而指令取机制可在流水线中出现任何拖延之前取分支目标。
分支预测机制操作上类似于美国专利4,679,141中说明的分支历史表(分支历史表),但对该表中的每条项包含附加信息(被取分支和不取分支)。这附加信息说明处理器以前遇到过的下N个分支的预测分支动作。把该信息移到待决分支预测逻辑100。在那里把它和接触指令中包含的分支表征码进行比较。后面会说明这些机制的操作。
待决分支预测逻辑100:图6示出待决分支预测逻辑的操作的总概要,后面将给出更详细的说明。待决分支预测逻辑包括五个子单元:待决分支预测队列(待决分支预测队列)125,分支译码逻辑101,接触指令译码逻辑150,分支执行逻辑175以及分支预测命中逻辑190。待决分支预测队列保持说明N个分支(其中每个分支被分支预测机制30(图5)检测(预测))的动作的预测信息。该信息会被待决分支预测逻辑中的另外四个子单元使用或修改。译码器通过路径901把指令译码信息发送到指令选择控制102。若正在译码某分支,则控制流进入分支译码逻辑101,或者若译码某接触指令,则进入接触指令译码逻辑150。分支译码逻辑向分支执行单元提供分支预测信息(通过路径975),并且在译码分支后用地址排序信息复位译码器(通过路径965),和指令取逻辑(通过路径970)。接触指令译码逻辑150比较每条接触指令中包含的分支表征码和J待决分支预测队列中保存的分支历史信息。只把那些带有匹配的分支表征码的接触指令发送到接触执行单元。分支执行逻辑175对照分支的实际执行结果,检查分支预测信息。当检测出预测错误时,清洗待决分支预测队列,并且重新启动指令取单元和译码器。分支预测命中逻辑190把分支预测信息保存到待决分支预测队列中。待决分支预测逻辑中的其它子单元使用该信息。后面将更详细地说明这四个子单元的操作。
请注意,实际上应把在待决分支预测逻辑中说明的许多功能集成到译码器、分支预测机制或处理器的执行单元上。典型地,周期时间限制会要求把该逻辑的某些部分放到这些单元内。然而,出于揭示的简明性,后面分离地说明它们。
分支历史队列(分支历史队列)400:对处理器执行的每个分支,暂时性地记录在该分支之后执行的分支的取/不取动作序列。分支历史队列的功能是为分支历史表中的每项形成分支历史表征码。接着把该表征码和正在译码的接触指令的分支表征码进行比较。图7示出分支历史队列的基本特征。该图示分支历史队列是按由分支地址信息字段410和分支历史表征码字段420组成的项目数组排列的。N个分支地址项411包含在分支地址信息字段中。每个分支地址项411和一个N位的分支历史表征码相关联。该N个位中的每一位代表处理器遇到的N个分支的动作(被取或不被取)并且对应于接触指令的分支表征码中的N个子字段。
分支历史队列可按先进先出(FIFO)队列实现,其中把处理器遇到的每个新分支放在该队列上。当处理器执行一个分支时,发生四个动作。第一,所有现有的队列地址项以及它们的对应分支表征码信息在队例中向下推一个位置。这使队列的第一个位置空出来以用于新的分支地址项。第二,所有分支历史表征码向左移一位,以对刚进入队列的新分支的分支动作提供空间。第三,把该分支的地址放在分支历史队列的分支地址1中并清除分支历史表征码。通过路径950设定分支地址。第四,接着把新分支动作作为最右的一位而添加到分支历史队列中的所有分支历史表征码上。以这种方式构建的分支历史表征码装定每个分支动作字段,以和接触指令中找到的分支表征码的N个子字段相匹配。
例如,该图示出只填入分支历史队列的第一项的最右一位。这里,Xn代表该分支的动作。事实上,每个分支历史表征码的第n位代表在分支历史队列的第一位置中找到的分支的动作。该队列的第二项(分支地址2)只填入最右侧的二项。其中Xn-1代表在它的分支地址字段中标识的分支的动作,而Xn代表接着执行的分支的动作。注意,这是分支历史队列的第一位置上的分支。分支历史队列的第三项中的分支历史表征码只填入三个最右侧的分支动作。其中Xn-2代表在它的分支地址字段中标识的会支的动作,Xn-1代表在该分支之后执行的分支(分支历史队列的第二位置上的分支)的动作,而Xn代表在该分支后第二个执行的分支(它是分支历史队列的第一位置上的分支)的动作。最后,分支历史队列的最后一项示出一个N位宽和完整填入的分支历史表征码。这些位编号为X1,X2,…Xn-2,Xn-1,Xn。其中,X1说明由该分支地址段标识的分支的动作。它的值可以是1或0中之一,1代表该分支被取而0意味着该分支不被取。位X2说明在由分支地址字段标识的分支之后执行的分支的动作。而X3(图中未示出)说明在由分支地址字段标识的分支之后第二个执行的分支的动作并依次类推,并且最后三个执行的分支的动作标记为Xn-2,Xn-1和Xn。它们分别标识分支历史队列的第三、第二和第一位置上的分支的动作。
对于进入分支历史队列的每个新分支,必须有一个分支离开(被推出)分支历史队列(不考虑启动状态)。当一个分支离开分支历史队列时,它的分支表征码是完整的,接着在分支历史表中保存该分支表征码供未来引用。该处理涉及用离开分支历史队列的分支的地址搜索分支历史表。若找到匹配,则用匹配的分支历史表项保存该分支表征码。该分支表征码代表处理器执行的下N个分支的程序路径。若未在分支历史表中找到分支,则建立一个新项。
指令取逻辑20,其中从高速缓存取指令并放到指令缓冲器15中。指令取控制器必须和分支预测机制30通信以确定何时指令取应该沿着程序的某顺序路径继续或何时由于某预测分支而应转移到新的指令地址。典型地,分支预测机制远远早于指令取控制(在时间和分支预测二方面上),从而指令取可以无缝地把指令取到拭旨令缓冲器中并不会因取分支出现流水浅而拖延。
我们现在可以完整地说明本发明的动作。把该机制考虑成是三个独立但同步的三个进程是方便的,即指令取(包括分支预测)、译码和执行。
指令取进程沿着程序的各预测路径把指令取到指令缓冲器中。这些路径基于分支预测机制做出的预测。当分支预测机制检测出一个分支时,在待决分支预测队列中建立一个项。这包括在待决分支预测队列中保存分支地址、预测目标地址和分支历史表征码。图8给出对待决分支预测队列的更详细说明。待决分支预测队列排列成一个具有分支地址信息字段126、目标地址信息字段128、分支历史表征码字段130和有效位字段132的各项的数组。分支地址信息字段含有各自的分支地址项140,其中分支地址项标识其方向已由分支预测机制预测的一个分支的地址。请注意分支地址字段中保存的每个地址可以是短缩的或截短的。有可能只在每个待决分支预测队列项中保存构成完整分支地址的位组的子集。待决分支预测队列中和各个分支地址项相关联的是一个分支目标项142、一个分支历史表征码144项和一个有效位146。分支目标字段标识和分支地址字段标识的分支对应的预测目标地址。
分支历史表征码包含N位,其中每位表示处理器遇到的下N个分支的预测动作(被取或不被取),并对应于接触指令的分支表征码中的N个子字段。例如,分支历史表征码的第一位代表对应的分支地址字段中标识的分支的预测动作。第二位代表处理机在该对应的分支地址字段中找到分支后要执行的下一个分支的预测动作。接着,第三位代表在该分支地址字段标识的分支后第二个要执行的分支的预测动作。最后,第n位代表在该分支地址字段上找到的分支后第n-1个要执行的分支的预测动作。和每个分支地址字段相关的有效位表示该分支地址项是否有效。零(0)表示无效而1表示有效。
把待决分支预测队列想象成是一个其第一项(或头)为最老的项的队列是方便的。新项添加到队列中从头项开始向尾项搜索的第一可使用的空项上。从该队列的头部去掉一些项并把所有有效的子项向上推一个位置。
图9更详细地示出分支预测机制命中逻辑190的操作。该图示出由分支预测机制提供的分支预测项195。每个分支预测项具有一个分支地址、一个预测目标地址和一个被预测分支历史表征码。回想在分支历史队列中构建分支历史表征码并在完成时发送到分支预测机制。有效检测逻辑191判定待决分支预测队列的第一个位置是否有效。若第一个位置有效则向选择逻辑192发送一个有效信号,选择逻辑192找到待决分支预测队列中的第一个可用位置。此时,更新待决分支预测队列、保存分支预测项并把有效指示符146置成1。若待决分支预测队列的第一个位置是无效的,则使能选择逻辑194并在待决分支预测队列的第一位置中在把有效位146置成1情况下保存分支预测信息。
指令取机制由待决分支预测队列中找到的预测分支地址信息引导。取出指令块组和放在指令缓冲器中,并且取出每个新指令块含有顺序上跟着先前取出的块的新指令组。典型地,每个块在四字或双四字(16或32字节界限)上装定。但是,指定流中的分支造成指令顺序取上的断裂,从而必须由指令取机制检测或预测。待决分支预测队列提供必要信息,以沿着程序的顺序路径或者跨过程序中由分支造成的转移来引导指令取控制。
通过比较指令取地址和待决分支预测队列中含有的被预测分支地址,检测指令流中的转移。若找到匹配并且该分支预测为被取,则下个指令取地址将是在待决分支预测队列中找到的被预测目标地址。若未找到匹配或者该分支预测成不被取,则下个指令取将是顺序上靠着前一次被取块的下个指令块。
若指令缓冲器队列已满,则指令取进程必须等待,直至某存储槽变为可使用。当块中的包含的所有指令都被译码后,存储槽变为可使用。分支预测进程,在待决分支预测队列中无自由的存储槽时,必须等待。
当分支被译码时,存储槽变成可使用。注意,当执行分支时执行单元会检查分支预测。预测信息将包含在译码器发送到执行单元的译码信息中。若在执行进程中检查出分支预测误差,则废弃跟随该预测错的分支取得指令缓冲器的所有批令和待决分支预测队列中的所有的项。
译码进程从指令缓冲器取出指令并把它们发送到适当的执行单元。并行译码进程还把所有的接触指令和分支指令发送到待决分支预测机制以供处理。回忆在图6中在和译码周期并行下,所有分支指令发送到分支译码逻辑,并且所有接触指令发送到接触指令译码逻辑。
图10更详细地示出待决分支预测机制内的分支译码逻辑101的操作。每当译码分支时,把它的地址和待决分支预测队列125中最老的分支地址进行比较。待决分支预测队列中的第一项将永远对应于最老的项。选择逻辑103确定该第一项是否有效。若该第一项有效,则使能门104和105,而若该第一项无效,则激励门108。若使能门104和105,则把被译码的分支的地址和待决分支预测队列125中最老的项的分支地址字段140比较。若出现匹配,则被预测的程序路径准确地遵循程序的实际路径。通过路径905向分支预测选择逻辑116发送一个匹配信号。在其中检查分支历史表征码144的第一个分支预测位,以确定该分支的方向是被取还是不被取。若该分支预测为被取,则把译码器的程序计数器置成该分支指令的预测目标地址。若该分支预测为不被取,则把译码器的程序计数器置为该分支指令之后的地址。然后通过路径975把该分支猜测信息发送到分支执行单元300(图5中示出)。这包括分支预测(取或不取)以及预测目标地址。最后,利用逻辑124去掉待决分支预测队列中的第一项并把所有其它项上推一个位置。这释放待决分支预测队列中的一个位置。接着把该自由位置标志成无效。
回到地址比较逻辑106,若正被译码的分支的地址不和待决分支预测队列中找到的被预测分支的地址匹配,则出现分支预测错误。程序不遵循分支预测机制预测的路戏。当此出现时,利用分支预测出错逻辑107通过路径906向待决分支预测队列发送一个清除信号。另外,当出现分支预测错误时,必须重新启动指令取逻辑。利用逻辑111和路径970清除指令缓冲器并且从该刚译码分支之后的地址重新开始取指令。
回到有效选择逻辑103,若待决分支预测队列的第一(最老)项是无效的,则分支预测机制尚未预测过分支。典型地,该事件出现于处理器正在第一次或者在现有分支信息老化离开分支预测机制中的分支历史表后处理某程序时。当此出现时,分支预测机制没有任何分支信息并且不能提供有关任何即将到来的分支的信息。然而,分支译码逻辑仍然必须向分支执行逻辑提供分支预测信息和向译码器提供要继续译码的下一条指令的地址。门108检查某无效的待决分支预测队列项并把条件代码和分支地址信息送到选择逻辑109。在其中确定该分支的条件代码。若该发支是无条件分支(总是取),则利用逻辑112把译码器的程序计数器置为该分支的目标地址。若该分支是有条件的,则假定不取该分支并且译码器将继续译码该分支之后的指令。注意,出于简单,选择该策略。很清楚,可以设计更精巧的策略以在待决分支预测队列没有任何预测信息时预测分支的方向。例如,可以在各个操作码的基础上确定条件代码从而选择不同的取/不取决策。最后,利用逻辑114和路径975把分支预测信息发送到分支执行单元。
译码器还对每个分支指令分配一个唯一的指令标识符(IID)。该IID用于控制接触执行单元中每条接触指令的执行次序。例如,译码器中一个指定寄存器用于分配分支IID值。典型地,每当译码一个分支时,该寄存器递增1。然后把分支IID置为等于该寄存器的值。
图11示出接触指令译码逻辑150的结构和操作。回想图6中,每当译码接触指令时,就调用接触指令译码逻辑。选择逻辑151判定待决分支预测队列的第一项是否有效。若它有效,则使能门152和154。这些门允许把正被译码的接触指令的分支表征码(通过路径910发送)和待决分支预测队列中的第一项的分支历史表征码(通过路径912)传送到表征码比较逻辑156。
图12示出一个概括表征码比较逻辑156的表。分支历史信息和该接触指令的分支表征码比较。即,接触指令的分支表征码的每个子字段和分支历史表征码的对应位比较。若分支历史表征码的第n位为1(用于被取用的分支),则为了匹配,该接触指令的分支表征码的第n个子字段必须规定被取或“T”。类似地,若分支历史表征码的第n位是0(用于不被取的分支),则为了匹配,分支历史的第n个子字段必须规定不被取或“N”。然而,若接触指令的分支表征码的第n个子字段为用于不在意的“D”,则不论分支历史字段的第n位是0或是1都出现匹配。然后对所有比较结果一起进行“与”运算以产生最终相等/不相等结果。对于代表“匹配”的最终结果,所有子字段比较结果都必须等于“匹配”。若任何子字段产生“不匹配”状态,则最终结果会是“不匹配”。只把那些带有匹配分支表征码的接触指令发送到接触指令执行单元供执行。
回到图11,若表征码比较逻辑确定分支表征码不相等,则利用逻辑162废弃该指令。然而,若表征码是相等的,则利用逻辑160装配一个接触指令信息块。把该接触指令和接触指令信息块一起发送到接触指令执行单元。在那里执行各个接触指令。
图13示出接触指令信息块170的格式。每条项具有下述字段。
分支表征码171:说明在该接触指令和该接触指令预取的数据的引用之间出现多至N个分支的动作的程序路径。该信息包含在该接触指令中并在图4中说明。
分支IID172:在该接触指令之前译码的分支指令的指令标识符。该标识符将用于对带有紧靠着该分支之后的接触指令的分支指令的执行的排序。对每条译码的接触指令分配最近译码的分支的IDD。
分支表征码有效位(BMVB)173:该位指示是否可以执行该接触指令。若该接触指令的分支表征码成功地和待决分支预测队列中找到的分支历史表征码匹配,则把该位置成1。这表示可以执行该接触指令。若该位为零,则该分支表征码不和(尚未和)某被预测分支的分支历史表征码匹配。接触指令执行单元只执行那些带着BMVB置为1的接触指令。
执行信息174:为执行指令所需的控制信号和信息。例如,对于指令执行,需要接触指令预取(接触)项的地址。该值可能已经通过列出指定寄存器、位移值和寄存器值,计算出或被规定。
利用逻辑160构建接触信息块的分支表征码171、分支IID172和执行信息174。接着把该信息发送到接触指令执行单元。
回到有效选择逻辑151,若待决分支预测队列的第一项是无效的,则不存在和某接触指令的分支表征码进行比较的有效分支历史表征码。当此出现时利用逻辑161废弃该接触指令。
典型地,在译码接触指令时,分支预测机制会足够远的在译码器的前面并且会已经预测了下个即将到来的分支的结局。事实上很明显分支预测机制可在译码器的前面保持对分支进行的预测。即,通常分支预测机制在译码器的前面足够远以在译码某分支时已对下个即将到来的分支作出预测。如下面所说明,分支预测机制唯一一次未作出预测应发生在处理器第一次执行某程序时,当出现该事件时,本文所说明的预取机制偏移到回避预测。只把那些它们的分支表征码和分支预测机制的预测路径匹配的接触指令发送到执行单元供执行。
执行进程从执行队列取指令并予以执行。当执行分支时检验它的预测。分支执行逻辑检验分支预测。图14示出分支执行逻辑175的操作。该图示出分支执行单元向分支执行逻辑回送下述信息:
分支猜测,由分支译码逻辑做出的分支预测(取或不取)。
分支动作,分支的实际动作(取或不取)。
预测目标地址,分支译码逻辑得出的预测目标地址。
实际分支目标,分支的实际目标地址。该地址在译码周期期间被计算。注意,典型地,译码器包括一个用于引用存储器的指令的地址生成机制。
通过路径950传送该信息。利用分支动作比较逻辑177比较分支猜测和分支实际方向,并且利用分支地址比较逻辑179比较预测分支地址和真实分支地址。分支动作比较逻辑177具有三种输出。若预测动作和分支实际动作都是不取,则在路径925上发出信号并不需要动作(逻辑180)。若预测动作和实际动作都是取(路径929),则检验分支地址比较逻辑179的结果。若分支预测地址不和分支实际地址匹配(路径913),则激励“与”检测逻辑182并利用逻辑184清除待决分支预测队列。另外,利用逻辑185和186通知指令取逻辑和译码器开始跟随该分支后的指令。若预测分支地址和实际分支地址相等,则使能路径933并不需要动作(逻辑188)。来自分支动作比较逻辑的第三种输出(路径927)检查预测分以方向何时不和实际分支方向匹配。这里该分支或者预测为取但执行时为不取,或者预测为不取但实际上被取。当发生此时,预测是错误的并且必须重新启动流水线。利用逻辑184清除待决分支预测队列,并且利用逻辑185和186在跟随该分支下重新启动指令取逻辑和译码器。
图15示出接触指令单元200的操作。若正确预测分支,则把该分支的IID发送到接触指令执行单元。该图示出通过路径995提供分支的IID。在接触指令执行队列262中保持译过码的接触指令。比较逻辑205检查接触指令队列中保持的每条接触指令的分支IID,并把它和由分支执行提供的分支IID比较。把具有匹配的分支IID的接触指令发送到选择逻辑210。在其中检查BMVB。若BMVB为1(有效),则利用逻辑215执行该接触指令。在执行接触指令时向高速缓存发送预取请求。若预取请示所标识的高速缓存行不在高速缓存中(高速缓存未命中),则从存储器取该行并放在高速缓存中。若BMVB为0(无效),则废弃该指令。从而只执行那些具有匹配的分支IID的,并且分支表征码有效位为1的接触指令。当执行该接触指令时向高速缓存发送它的预取请求。
请注意,可对高速缓存10增加一个预取缓冲器。预取缓冲器保持那些作为预取请求(例如起源于接触指令的请求)的结果而不是作为常规高速缓存示命中的结果而从存储器传送的存储器行。注意,当高速缓存设计提供预取时,可能出现二各类型的未命中:预取未命中和请示或常规)未命中。预取未命中是产生高速缓存示命中的预取请求。在这种情况下,从存储器回送的行发送到预取缓冲器并当由处理器使用时传送到高速缓存。另一方向,常规未命中(或请求未命中)是非高速缓存预取的高速缓存未命中。在这样的情况下,未命中后回送的存储器行直接发送到高速缓存而不写入预取缓冲器。请求未命中是常规指令取的结果,操作数请示来自译码器或地址生成机制并且从通过用执行单元向高速缓存发送存储。
预取缓冲器在技术上是周知的。例如,IBM技术公开兰皮书论文:“一种允许再装入序列期间进行指令高速缓存存取的方法”,1992年10月342期;“早预期缓冲器”,1992年3月卷341第106期第63-64页;“新语境位”,1987年7月第510页;它们说明未命中或预取缓冲器,其中在把存储器行装入高速缓存之前先把它传送到预取缓冲器中,这些论文都作为参考引用。
上面说明的是一种用于预测由编译程序或程序员放到程序中的预取指令的成功或失败的机制。在处理器的译码周期期间发生预测。该机制是一种优选预测机制,但它并不表示替代方法效率会较差。下面给出替代的设计。
分支预测机制发送的分支历史表征码不必必须表示该被预测分支后面的各分支的确切的取和不取的方式。例如,分支预测机制可以从分支历史表中用于各分支的历史位的集合导出分支历史表征码。然后可以利用各个分支的动作的集合历史构建分支历史表征码。
在一种备择实施例中,可动态地从待决分支预测队列上已存在的预测过的分支构建分支历史表征码。例如,若译码某接触指令时待决分支预测队列上存在四个预测过的分支,则可以动态地构建分支历史表征码并设置成等于它们各自的取/不取预取序列。若接触指令中规定的分支表征码长于动态构建的分支历史表征码,则可对该分支历史表征码加上若干不在意状态。
在研究本文中公开的本发明的说明和实现中,本发明的其它实施例对业内人士是明显的。所考虑到的说明以及各例子的用意只是示例性的,且本发明的确切范围由权利要求书指明。

Claims (20)

1.一种用于执行存储在一个存储器中的指令流的方法,该方法被应用在包含逻辑上置于所述存储器和至少一个处理器单元之间的一个高速缓冲器的一个系统中,该指令流由一系列指令组成,该一系列指令包括至少一个把信息从该存储器预取到该高速缓冲器的预取指令,该方法包括步骤:
生成分支历史表征码,其中该分支历史表征码表示从该预取指令到使用由该预取指令所预取的信息的一个指令的路径;
生成分支历史信息,其中该分支历史信息表示一条预测执行路径;
把分支历史表征码与分支历史信息进行比较,以当所述分支历史表征码与所述分支历史信息相匹配时执行该预取指令,
其中所述分支历史表征码是通过将所述预取指令插入到被编译的程序中并根据编译的结果修改预取指令中的路径表征码而导出的,
其中分支历史信息包括预测分支历史信息表征码。
2.权利要求1的方法,其中当判定分支历史表征码符合分支历史信息时把该预取指令加到该指令流中供该至少一个的处理器单元执行。
3.权利要求1的方法,还包括步骤:
在确定分支历史表征码不符合分支历史信息时,从由该至少一个处理器单元执行的指令流中去掉该预取指令。
4.权利要求1的方法,其中分支历史信息关联着一个或多个分支指令,并且其中分支历史信息包括一个表示沿着各相关分支指令的预测执行路线的表征码。
5.权利要求4的方法,其中分支历史表征码包括一个表示从该预取指令到使用由该预取指令预取的信息的指令的执行路径的表征码。
6.权利要求5的方法,其中分支历史信息基于与分支指令相关联的预测的累积。
7.权利要求6的方法,其中分支历史信息是从基于指令流的先前的执行所作出的预测而得出的。
8.权利要求1的方法,其中预取指令包括一个标识从存储器预取到高速缓冲器的指令的字段。
9.权利要求1的方法,其中预取指令包括一个标识从存储器预取到高速缓冲器的数据的字段,其中该数据由该指令流中的至少一条指令操作。
10.用于在一个系统中执行一种指令预取机制的设备,该系统包含在逻辑上被置于一个存储器和至少一个处理器单元之间的高速缓冲器,该设备包括:
指令取单元(20),用于从高速缓冲器取指令;
译码单元(25),用于对指令进行译码;
执行单元(200,250,300);
分支历史队列保持单元(400),用于临时记录所述执行单元所执行的每个分支之后所执行的各分支的取用/不取用;
分支预测装置(30),用于记录以前执行过的分支的分支动作信息,对指令取单元(20)进行引导,并接收来自所述执行单元和分支历史队列保持单元的信息以对所述分运动更新;
待决分支预测单元(100),用于保持描述多个分支的动作的预测信息,判别来自所述译码单元的指令是分支还是接触指令,把判别的分支和接触指令送到所述执行单元,并对照分支的实际执行结果而检查分支预测信息且在检查出预测错误时清洗所保持的预测信息。
11.权利要求10的设备,其中所述分支历史表征码是通过把所述预取指令插入到被编译的程序中并根据编译的结果修改预取指令中的路径表征码而导出的。
12.权利要求10的设备,其中表征分支历史信息包括预测分支历史信息表征码。
13.权利要求10的设备,其中当判定分支历史表征码符合分支历史信息时,该执行逻辑电路就执行该预取指令。
14.权利要求10的设备,其中当确定第一路径不符合分支历史信息时,该执行逻辑电路就略去该预取指令的执行。
15.权利要求10的设备,其中分支历史信息关联着一个或多个分支指令,并且其中分支历史信息包括一个表示沿着各相关分支指令的预测执行路线的表征码。
16.权利要求15的设备,其中分支历史表征码包括一个表示从该预取指令到使用由该预取指令预取的信息的指令的执行路径的表征码。
17.权利要求16的设备,还包括用于生成和分支指令相关联的预测的分支预测逻辑电路,以及用于累积由该分支预测逻辑电路生成的预测的分支历史队列电路,其中由该路径预测逻辑电路生成的分支历史信息基于该分支历史队列电路中累积的各预测。
18.权利要求17的设备,其中各预测基于该指令流以前的执行。
19.权利要求10的设备,其中预取指令包括一个标识从存储器预取到高速缓冲器的指令的字段。
20.权利要求10的设备,其中预取指令包括一个标识从存储器预取到高速缓冲器的数据的字段,其中该数据由该指令流中的至少一条指令操作。
CNB001352830A 1999-12-10 2000-12-08 预取指令的执行方法和设备 Expired - Fee Related CN1191524C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/458,883 1999-12-10
US09/458,883 US7441110B1 (en) 1999-12-10 1999-12-10 Prefetching using future branch path information derived from branch prediction

Publications (2)

Publication Number Publication Date
CN1300006A CN1300006A (zh) 2001-06-20
CN1191524C true CN1191524C (zh) 2005-03-02

Family

ID=23822471

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB001352830A Expired - Fee Related CN1191524C (zh) 1999-12-10 2000-12-08 预取指令的执行方法和设备

Country Status (3)

Country Link
US (1) US7441110B1 (zh)
CN (1) CN1191524C (zh)
HK (1) HK1035243A1 (zh)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030204675A1 (en) * 2002-04-29 2003-10-30 Dover Lance W. Method and system to retrieve information from a storage device
US7099999B2 (en) * 2003-09-30 2006-08-29 International Business Machines Corporation Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US7617499B2 (en) 2003-12-18 2009-11-10 International Business Machines Corporation Context switch instruction prefetching in multithreaded computer
US7493621B2 (en) 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
US7254693B2 (en) * 2004-12-02 2007-08-07 International Business Machines Corporation Selectively prohibiting speculative execution of conditional branch type based on instruction bit
US20060179277A1 (en) * 2005-02-04 2006-08-10 Flachs Brian K System and method for instruction line buffer holding a branch target buffer
US8327115B2 (en) 2006-04-12 2012-12-04 Soft Machines, Inc. Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode
US20080088619A1 (en) * 2006-10-17 2008-04-17 Robert Allen Shearer Branch Prediction for Acceleration Data Structure Traversal
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7783869B2 (en) * 2006-12-19 2010-08-24 Arm Limited Accessing branch predictions ahead of instruction fetching
US8266381B2 (en) 2008-02-01 2012-09-11 International Business Machines Corporation Varying an amount of data retrieved from memory based upon an instruction hint
US8250307B2 (en) 2008-02-01 2012-08-21 International Business Machines Corporation Sourcing differing amounts of prefetch data in response to data prefetch requests
US8443176B2 (en) * 2008-02-25 2013-05-14 International Business Machines Corporation Method, system, and computer program product for reducing cache memory pollution
US8131982B2 (en) * 2008-06-13 2012-03-06 International Business Machines Corporation Branch prediction instructions having mask values involving unloading and loading branch history data
US20100017244A1 (en) * 2008-07-16 2010-01-21 International Business Machines Corporation Method for organizing processes
US7873816B2 (en) 2008-11-20 2011-01-18 International Business Machines Corporation Pre-loading context states by inactive hardware thread in advance of context switch
US8176254B2 (en) * 2009-04-16 2012-05-08 International Business Machines Corporation Specifying an access hint for prefetching limited use data in a cache hierarchy
US10338923B2 (en) * 2009-05-05 2019-07-02 International Business Machines Corporation Branch prediction path wrong guess instruction
US8904156B2 (en) * 2009-10-14 2014-12-02 Oracle America, Inc. Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor
EP2517100B1 (en) * 2009-12-25 2018-09-26 Shanghai Xinhao Micro-Electronics Co. Ltd. High-performance cache system and method
US8521999B2 (en) * 2010-03-11 2013-08-27 International Business Machines Corporation Executing touchBHT instruction to pre-fetch information to prediction mechanism for branch with taken history
CN101882155B (zh) * 2010-06-22 2012-07-25 北京北大众志微系统科技有限责任公司 一种文件预测准确度的统计方法及装置
KR101685247B1 (ko) * 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
US8949579B2 (en) 2010-10-04 2015-02-03 International Business Machines Corporation Ineffective prefetch determination and latency optimization
KR20120036210A (ko) * 2010-10-07 2012-04-17 삼성전자주식회사 파이프라인 제어 위험 감소를 위한 처리장치 및 컴파일 장치와, 파이프라인 제어 위험 감소를 위한 동적 조건 분기 처리 방법
US8869113B2 (en) * 2011-01-20 2014-10-21 Fujitsu Limited Software architecture for validating C++ programs using symbolic execution
CN103547993B (zh) 2011-03-25 2018-06-26 英特尔公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
US8850266B2 (en) 2011-06-14 2014-09-30 International Business Machines Corporation Effective validation of execution units within a processor
CN102841865B (zh) * 2011-06-24 2016-02-10 上海芯豪微电子有限公司 高性能缓存系统和方法
TWI636362B (zh) * 2011-06-24 2018-09-21 林正浩 高性能快取方法和裝置
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
EP2783280B1 (en) 2011-11-22 2019-09-11 Intel Corporation An accelerated code optimizer for a multiengine microprocessor
WO2013101121A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Managed instruction cache prefetching
US9146739B2 (en) * 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
US9104532B2 (en) * 2012-12-14 2015-08-11 International Business Machines Corporation Sequential location accesses in an active memory device
US8930760B2 (en) 2012-12-17 2015-01-06 International Business Machines Corporation Validating cache coherency protocol within a processor
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
CN104050092B (zh) * 2013-03-15 2018-05-01 上海芯豪微电子有限公司 一种数据缓存系统及方法
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
KR102126671B1 (ko) * 2014-03-13 2020-06-25 현대모비스 주식회사 히스토리 큐를 이용한 통신 에러 복구 장치 및 그 방법
US10209992B2 (en) * 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
JP6457836B2 (ja) * 2015-02-26 2019-01-23 ルネサスエレクトロニクス株式会社 プロセッサおよび命令コード生成装置
US20160283243A1 (en) * 2015-03-28 2016-09-29 Yong-Kyu Jung Branch look-ahead instruction disassembling, assembling, and delivering system apparatus and method for microprocessor system
US10223090B2 (en) * 2015-10-23 2019-03-05 Yong-Kyu Jung Branch look-ahead system apparatus and method for branch look-ahead microprocessors
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
US10908902B2 (en) * 2016-05-26 2021-02-02 International Business Machines Corporation Distance based branch prediction and detection of potential call and potential return instructions
CN110022158B (zh) * 2018-01-09 2021-04-09 华为技术有限公司 一种译码方法及装置
US11106466B2 (en) 2018-06-18 2021-08-31 International Business Machines Corporation Decoupling of conditional branches
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
FR3098622A1 (fr) * 2019-07-12 2021-01-15 Stmicroelectronics (Grenoble 2) Sas Procede de gestion d’instructions d’un programme contenues dans une memoire programme et circuit integre correspondant
CN114116016B (zh) * 2022-01-27 2022-04-22 广东省新一代通信与网络创新研究院 基于处理器的指令预取方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5854934A (en) 1996-08-23 1998-12-29 Hewlett-Packard Company Optimizing compiler having data cache prefetch spreading
US6212603B1 (en) * 1998-04-09 2001-04-03 Institute For The Development Of Emerging Architectures, L.L.C. Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory

Also Published As

Publication number Publication date
CN1300006A (zh) 2001-06-20
US7441110B1 (en) 2008-10-21
HK1035243A1 (en) 2001-11-16

Similar Documents

Publication Publication Date Title
CN1191524C (zh) 预取指令的执行方法和设备
CN1123826C (zh) 预取由转移历史引导的指令/数据的方法和装置
US6697932B1 (en) System and method for early resolution of low confidence branches and safe data cache accesses
EP2204741B1 (en) Processor and method for using an instruction hint to prevent hardware prefetch from using certain memory accesses in prefetch calculations
US9875106B2 (en) Computer processor employing instruction block exit prediction
CN1308826C (zh) 用于smt处理器上的cpi调度的系统和方法
CN1308825C (zh) 用于在smt处理器中进行cpi负载平衡的系统和方法
US20180165206A1 (en) Methods, systems and apparatus for predicting the way of a set associative cache
US6611910B2 (en) Method for processing branch operations
CN101937331B (zh) 用于自适应处理远程原子执行的方法、设备和系统
CN1147794C (zh) 具有静态转移预测支持的去耦取指令-执行引擎
US6269438B1 (en) Method for identifying hard-to-predict branches to enhance processor performance
CN1287311A (zh) 一种用组预测来降低在组相关高速缓存器中的执行时间的方法及设备
KR101804908B1 (ko) 캐시 점유도 결정 및 명령어 스케줄링을 위한 방법 및 장치
US7707391B2 (en) Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7035997B1 (en) Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
EP0927394B1 (en) A cache line branch prediction scheme that shares among sets of a set associative cache
US7243219B2 (en) Predicting instruction branches with a plurality of global predictors using varying amounts of history instruction
JP2000215056A (ja) 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理
CN1625733A (zh) 将装载操作的猜测结果与寄存器值相连接的系统与方法
CN1846200A (zh) 在处理器中用于减少功耗的微变换检测缓冲器及微标记符
JP2008530712A (ja) 復帰スタックを管理する方法および装置
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
Dubey et al. Branch strategies: Modeling and optimization
US20060200615A1 (en) Systems and methods for adaptively mapping an instruction cache

Legal Events

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

Owner name: INTEL CORP .

Free format text: FORMER OWNER: INTERNATIONAL BUSINESS MACHINES CORPORATION

Effective date: 20140522

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20140522

Address after: American California

Patentee after: Intel Corporation

Address before: American New York

Patentee before: International Business Machines Corp.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20050302

Termination date: 20141208

EXPY Termination of patent right or utility model