CN101201733A - 预解码用于执行的指令的方法及装置 - Google Patents

预解码用于执行的指令的方法及装置 Download PDF

Info

Publication number
CN101201733A
CN101201733A CNA2007101866393A CN200710186639A CN101201733A CN 101201733 A CN101201733 A CN 101201733A CN A2007101866393 A CNA2007101866393 A CN A2007101866393A CN 200710186639 A CN200710186639 A CN 200710186639A CN 101201733 A CN101201733 A CN 101201733A
Authority
CN
China
Prior art keywords
dos
instruction
command line
pre decoding
decoding
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
CNA2007101866393A
Other languages
English (en)
Other versions
CN100559343C (zh
Inventor
D·A·卢伊克
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.)
IBM China Co Ltd
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 CN101201733A publication Critical patent/CN101201733A/zh
Application granted granted Critical
Publication of CN100559343C publication Critical patent/CN100559343C/zh
Expired - Fee Related 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/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 or look ahead
    • G06F9/3824Operand accessing
    • 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/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels

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)

Abstract

提供了用于以流水线方式执行指令的改进的技术,这种流水线方式可减少当执行依赖性指令时产生的停止。通过使用一个具有彼此延迟的执行单元的级联的流水线排列可减少停止。这种级联延迟排列通过将依赖性指令调度至不同的流水线在不同的时间执行,而允许依赖性指令在一个共同的发送组内发送。

Description

预解码用于执行的指令的方法及装置
技术领域
本发明一般涉及流水线处理器,尤其是涉及到使用彼此延迟的执行单元的一种级联排列的处理器。
背景技术
典型地,计算机***包含几个集成电路(IC),包括一个或多个用于处理计算机***中的信息的处理器。现代的处理器经常以流水线的方式处理指令,按一系列步骤执行每条指令。典型的,每个步骤由流水线中一个不同的级(硬件电路)执行,每个流水线级在一个给定的时钟周期内按其步骤执行一条不同的指令。因而,如果一个流水线满负荷,那么每个时钟周期就要处理一条指令,从而增加了吞吐量。
来看一个简单的例子,一个流水线可包括三级:加载(从存储器读取指令),执行(执行指令),以及存储(存储结果)。在第一个时钟周期内,第一条指令进入流水线加载级。在第二个时钟周期内,该第一指令进入执行级,同时释放了加载级来加载第二条指令。在第三个时钟周期内,第一条指令的执行结果可以由存储级存储,同时执行第二条指令并加载第三条指令。
不幸的是,由于在一个典型指令流中固有的依赖性,当执行一条指令的执行单元在等待前一条指令执行产生的结果时,传统的指令流水线通常会遭受停止(stall)(此时流水线级并没有执行)。例如,一条加载指令可能依赖于前一条指令(比如,另一条加载指令,或者对基址添加偏移)来提供将被加载的数据的地址。再例如,一条乘法指令可能依赖于一条或多条先前的加载指令的执行结果来作为其操作数之一。在这两种情况下,一个传统的指令流水线都将停止至先前指令的结果可用时。停止可能持续几个时钟周期,例如,如果先前的指令(后续的指令依赖于此指令)将不存在于一级高速缓存中的数据作为目标(导致一级“高速缓存缺失”),并且必须对相对慢的二级高速缓存进行访问的话。因而,这样的停止由于流水线的未充分利用必将而导致性能大幅降低。
相应的,需要一种改进的以流水线方式处理指令的机制,优选的是减少停止的机制。
发明内容
一个实施例提供了一种在处理环境中预解码用于执行的指令的方法。该方法大体上包括:由处理器内核接收用于执行的第一指令行;对第一指令行进行预解码;以及将预解码的第一指令行存储在多级高速缓存中。
一个实施例提供了一种集成电路装置,该集成电路装置大体上包括:一个或多个处理器内核,多级高速缓存,预解码器以及高速缓存控制电路。预解码器大体上被配置为读取指令行、预解码指令行并将预解码的指令行发送至处理器内核以便执行。高速缓存控制电路大体上被配置为将预解码的指令行存储在多级高速缓存中。
一个实施例提供了一种集成电路装置,该集成电路装置大体上包括:多级高速缓存,一个或多个级联延迟执行流水线单元,以及预解码及调度电路。该一个或多个级联延迟执行流水线单元中的每一个至少具有第一和第二执行流水线,其中,被发送至执行流水线单元的一共同发送组中的指令在被执行于第二执行流水线之前在第一执行流水线中被执行,以及,转发路径,其用于将在第一执行流水线中执行第一指令产生的结果转发至第二执行流水线中以用于执行第二指令,其中至少第一及第二执行流水线之一在浮点操作数上操作。预解码及调度电路大体上被配置为接收将由流水线单元执行的指令行,预解码指令行,以及将预解码的指令行存储在多级高速缓存中。
附图说明
为了使实现本发明上述的特征、优点及目标的方式可以被详细的理解,将通过参考在附图中示出的实施例对本发明进行更加详细的描述(在上文简单描述过)。
然而,要提到的是附图表示的仅仅是本发明典型的实施例,并不是要限制其范围,本发明允许还有其他等效的实施例。
图1是示出根据本发明的一个实施例的***的框图。
图2是示出根据本发明的一个实施例的计算机处理器的框图。
图3是示出根据本发明的一个实施例的处理器内核的框图。
图4A和4B对传统流水线单元与根据本发明实施例的流水线单元的性能作了比较。
图5示出了根据本发明的实施例的示例性整数级联延迟执行流水线单元。
图6示出了根据本发明的实施例用于调度及发送指令的示例性操作的流程图。
图7A-7D示出了通过图5所示流水线单元的指令流。
图8示出了根据本发明的实施例的一个示例性浮点级联延迟执行流水线单元。
图9A-9D示出了通过图5所示的流水线单元的指令流。
图10示出了根据本发明的实施例的一个示例性向量级联延迟执行流水线单元。
图11示出了在多个处理器内核间共用的一个示例性预解码器。
图12示出了可由图11的共用预解码器执行的示例性操作。
图13示出了一个示例性共用预解码器。
图14示出了一个示例性共用预解码器流水线排列。
图15示出了在多级高速缓存中共用的预解码的指令行。
图16示出了用于处理先前预解码的指令行的示例性操作。
图17示出了用于在多级高速缓存中存储预解码指令行的高速缓存层级结构。
具体实施方式
本发明主要提供了一种以流水线的方式执行指令的改进技术,这种技术可以减少在执行依赖性指令时产生的停止。可以通过使用一个含有彼此延迟的执行单元的级联流水线排列来减少停止。通过调度依赖性指令在不同的流水线中在不同的时间执行,这种级联的延迟流水线排列允许在一个共同的发送组中发送依赖性指令。
例如,第一条指令可以被调度在第一个“较早”或“较少延迟”的流水线中执行,而第二条指令(依赖于执行第一条指令得到的结果)可以被调度在第二个“较延迟”或“较多延迟”的流水线中执行。通过调度第二条指令在一个相对第一个流水线延迟的流水线中执行,第一条指令的结果可以在刚好要执行第二条指令的时候可用。虽然第二条指令的执行仍然延迟至第一条指令的结果可用时,但是后续的发送组可以在下一个周期中进入级联流水线,从而增加了吞吐量。换言之,这样的延迟仅仅在第一个发送组中可以“看到”,并对后续的发送组“隐藏”,从而允许在每个流水线周期发送不同的发送组(即使含有依赖性指令)。
在下文中,将会参考本发明的实施例。然而,应当理解本发明并不限于特定的描述的实施例。相反,下述特征及元素的任何组合,无论是否涉及到不同的实施例,都被认为实施和实现了本发明。更进一步地,在各种实施例中,本发明提供了比原有技术更多的优点。然而,虽然本发明的实施例可以实现比其他可能的解决方案和/或现有技术更多的优点,但是一个特定优点是否由一给定的实施例实现,这并不是本发明的限制。因此,下述方面、特征、实施例及优点仅仅是说明性的,并非所附权利要求的元素或限制,除非在权利要求中明确说明。同样地,提及“本发明”时亦不应被解释为此处所公开的任何发明主题的概括且不应被认为是所附权利要求的元素或限制,除非在权利要求中明确叙述。
下文将对附图中所示的本发明的实施例进行详细描述。这些实施例是示例并且被足够详细地描述以传达本发明。然而,提供细节的数量并不是要限制实施例的预期变化;相反,意图是本发明包含了落入所附权利要求中定义的本发明的精神及范围的全部修改、等价物、以及其他选择。
本发明的实施例可以与一个***例如计算机***一起使用,并在下文中相对于该***被描述。正如在这里使用的,一个***可以包含使用一个处理器及一个高速缓冲存储器的任何***,包括个人计算机、互联网电器(internet appliance)、数字媒体设备、个人数字助理(PDA)、便携音乐/视频播放器及视频游戏控制台。虽然高速缓冲存储器可能与使用高速缓冲存储器的处理器位于同一芯片上,但是在一些情况下,处理器和高速缓冲存储器可能位于不同的芯片上(例如,在不同模块中的不同芯片上或者在单个模块中的不同芯片)。
示例性***概述
图1是示出根据本发明实施例的***100的框图。该***100可包含一个用于存储指令和数据的***存储器102,一个用于图形处理的图形处理单元104,一个用于与外部设备通信的I/O接口,一个用于长期存储指令和数据的存储设备108,一个用于处理指令和数据的处理器110。
根据本发明的一个实施例,处理器110可包含一个二级高速缓存112(和/或更高级别的高速缓存,例如三级和/或四级高速缓存)及多个一级高速缓存116,每个一级高速缓存116被多个处理器内核114中的一个使用。根据一个实施例,每个处理器内核114可采用流水线处理,其中每条指令按一系列步骤执行,每个步骤由不同的流水线级执行。
图2是示出了根据本发明的一个实施例的一个处理器110的框图。为简明起见,图2示出了处理器110一个单独的内核114。在一种实施例中,每个内核114可能是相同的(例如,包含具有同样流水线级排列的同样的流水线)。对于其他实施例,内核114可能是不同的(例如,包含具有不同流水线级排列的不同的流水线)。
在本发明的实施例中,二级高速缓存(及/或更高级别的高速缓存,比如三级和/或四级高速缓存)可以包括处理器110使用的指令及数据的一部分。在一些情况下,处理器110可能需要二级高速缓存112中不包含的指令和数据。当二级高速缓存112不包含被需要的指令和数据时,被需要的指令和数据可以被获取(或是从一个更高级别的高速缓存,或是从***存储器102)并被放置在二级高速缓存中。当处理器内核114从二级高速缓存112请求指令时,这些指令首先被一个预解码器及调度器220处理。
在本发明的一个实施例中,指令可以从二级高速缓存112中以被称为指令行(I-line)的组的形式读取。类似地,数据可以从二级高速缓存112中以被称为数据行(D-line)的组的形式读取。图1示出的一级高速缓存116可以被分为两个部分,用于存储指令行的一级指令高速缓存222(指令高速缓存222)以及用于存储数据行的一级数据高速缓存224(数据高速缓存224)。可以使用二级访问电路210从二级高速缓存112中读取指令行与数据行。
在本发明的一个实施例中,从二级高速缓存112获取的指令行可以被一个预解码器和调度器220处理,而且指令行可以被放置在指令高速缓存222中。为了进一步改进处理器性能,指令通常被预解码,例如,从二级(或更高级)高速缓存中获取指令行。这样的预解码可以包括多种功能,比如,地址生成、分支预测及调度(决定指令发送的次序),这些作为控制指令执行的分发信息(一组标志)被获取。对于一些实施例,预解码器(及调度器)220可以由多个内核114及一级高速缓存共用。
除了从发送及分发电路234接收指令,内核114可以从多个位置读取数据。当内核114需要来自一个数据寄存器的数据时,可使用寄存器文件240来获取数据。当内核114需要来自一个存储单元的数据时,可使用高速缓存加载及存储电路250从数据高速缓存224加载数据。当执行这样的加载时,可将需要数据的请求发送至数据高速缓存224。同时,可检测数据高速缓存目录225来判定需要的数据是否位于数据高速缓存224中。当数据高速缓存224包含需要的数据时,数据高速缓存目录225可显示数据高速缓存224包含需要的数据以及数据高速缓存访问可以在之后的某一时间完成。当数据高速缓存224不包含需要的数据时,数据高速缓存目录225可指示数据高速缓存224不包含需要的数据。因为数据高速缓存目录225可以比数据高速缓存224更快速地被访问,所以对所需要数据的请求可在数据高速缓存目录224被访问之后但在数据高速缓存访问完成之前被发送至二级高速缓存112(例如,使用二级高速缓存访问电路210)。
在一些情况下,数据可以在内核114中被修改。修改后的数据可以被写入寄存器文件,或者存储在存储器中。可使用回写电路238把数据回写至寄存器文件240。在一些情况下,回写电路238可以使用高速缓存加载及存储电路250把数据写回至数据高速缓存224。可选地,内核114可以直接访问高速缓存加载及存储电路250来执行存储。在一些情况下,如下所述,也可以使用回写电路238把指令回写至指令高速缓存222。
如上所述,可以使用发送及分发电路234形成指令组,并发送形成的指令组至内核114。发送及分发电路234也可包括用来循环及合并指令行中的指令的电路,从而形成一个适合的指令组。发送组的形成可考虑几种因素,比如一个指令组中指令的依赖性以及从指令排序中获得的优化(下文会更详细描述)。一旦形成一个发送组,发送组可被平行发送至处理器内核114。在一些情况下,一个指令组可以包含用于内核114中每个流水线的一条指令。可选地,指令组可以包含少量的指令。
级联延迟执行流水线
根据本发明的一个实施例,一个或多个处理器内核114可以使用一个级联的、延迟执行的流水线配置。在图3的例子中,内核114包含组成级联配置的4个流水线。可选地,在这样的配置里,可以使用较少数(2个或更多个流水线)或较多数(超过4个流水线)的流水线。更进一步地,图3示出的流水线的物理布局是示例性,而不一定暗示着级联延迟执行流水线单元的实际物理布局。
在一个实施例中,在级联延迟执行流水线配置中的每个流水线(P0,P1,P2,P3)可包含一个执行单元310。执行单元310可以包含为一个给定的流水线执行一种或多种功能的几个流水线级。例如,执行单元310可执行读取及解码一条指令的所有或部分功能。执行单元执行的解码可以与被多个内核114共用或单个内核114专用的预解码器及调度器220共同执行。执行单元也可以从一个寄存器文件读取数据,计算地址,执行整数运算功能(例如,使用一个算术逻辑单元,或ALU),执行浮点运算功能,执行指令分支,执行数据存取功能(例如,从存储器加载及存储),以及把数据写回寄存器(例如,寄存器文件240中的)。在一些情况下,内核114可使用指令读取电路236、寄存器文件240、高速缓存加载及存储电路250、回写电路、以及任何其他电路,来执行这些功能。
在一个实施例中,每个执行单元310可以执行同样的功能。可选地,每个执行单元310(或不同组的执行单元)可以执行不同组功能。而且,在一些情况下,在每个内核114中的执行单元310可能与其他内核中提供的执行单元310相同或者不同。例如,在一个内核中,执行单元3100和3102可以执行加载/存储及运算功能,而执行单元3101和3102可能仅仅执行运算功能。
在一个实施例中,正如所描述的,在执行单元310中的执行可能以比其他执行单元310有所延迟的方式进行。所示出的排列也可以被称作级联延迟配置,但是所示出的布局并不一定指示执行单元的实际物理布局。在这样的一个配置里,当一个指令组中的指令(为了方便起见,称作I0、I1、I2、I3)被平行发送至流水线P0、P1、P2、P3时,每条指令均可以以比每条其他指令延迟的方式执行。例如,指令I0可首先在流水线P0的执行单元3100中执行,接下来,指令I1可在流水线P1的执行单元3101中执行,以此类推。
在一个实施例中,一旦把发送组发送至处理器内核114,I0可在执行单元3100中立即被执行。此后,当指令I0在执行单元3100中执行完后,执行单元3101可开始执行指令I1,以此类推,从而使平行发送到内核114的指令以彼此延迟的方式执行。
在一个实施例中,一些执行单元310会彼此延迟,而其他执行单元310不彼此延迟。当第二条指令的执行依赖于第一条指令的执行时,可以使用转发路径312把第一条指令的结果转发到第二条指令。所示出的转发路径312仅仅是示例性,内核114可以包含从执行单元310中的不同点到其他执行单元310或到相同执行单元310的更多转发路径。
在一个实施例中,没有被执行单元310执行的指令(例如,被延迟的指令)可保留在一个延迟队列320或一个目标延迟队列330中。可以使用延迟队列320保留指令组中还没有被执行单元310执行的指令。例如,当指令I0在执行单元3100中被执行的时候,指令I1、I2、I3可以在延迟队列330中保留。一旦指令通过延迟队列330,指令可被发送到适合的执行单元310并被执行。目标延迟队列330可以被用来保留已经被执行单元310执行的指令的结果。在一些情况下,目标延迟队列330中的执行结果可被转发至执行单元310处理或被无效(在适当的情况下)。类似地,在一些情况下,延迟队列310中的指令可以被无效(如下所述)。
在一个实施例中,当一个指令组中的每条指令都已经通过延迟队列320、执行单元310以及目标延迟队列330之后,结果(例如,数据以及如下所述的指令)可被回写至寄存器文件或一级指令高速缓存222或数据高速缓存224。在一些情况下,可以使用回写电路238回写一个最近被修改的寄存器值(从目标延迟队列330之一接收的)并丢弃无效的结果。
级联延迟执行流水线的性能
级联延迟执行流水线的性能影响可以与传统的顺序执行流水线比较的方式示出,如图4A和4B所示。在图4A中,一个传统的“2发送”(2issue)流水线排列2802与根据本发明实施例的一个级联延迟的流水线排列2002相比较。在图4B中,一个传统的“4发送”流水线排列2804与根据本发明实施例的级联延迟的流水线排列2004相比较。
仅为了示意的目的,示出了相对简单的仅包括加载存储单元(LSU)412和运算逻辑单元(ALU)414的排列。然而,本领域的技术人员会认识到通过使用多种其他类型的执行单元的级联延迟排列可实现性能的类似改进。更进一步地,针对一个示例性指令发送组(L’-A’-L”-A”-ST-L)的执行的来考虑每种排列的性能,该指令组包括两个依赖性的加载-加法指令对(L’-A’及L”-A”),一个独立的存储指令(ST),以及一个独立的加载指令(L)。在这个例子中,不仅仅是每个加法指令依赖于先前的加载指令,而且第二个加载指令(L”)依赖于第一个加法指令(A’)的结果。
首先参考图4A示出的传统的2发送流水线排列2802,第一个加载指令(L’)在第一个周期中发出。因为第一个加法指令(A’)依赖于第一个加载指令的结果,所以第一个加法直到第一个加载指令的结果可用时才发送,在本例中为第7周期。假设第一个加法指令在第一周期中完成,依赖于此结果的第二个加载指令(L”)可在下一个周期中发送。再次地,第二个加法指令(A”)直至第二个加载指令的结果可用时才能发送,在本例中为第14周期。因为存储指令是独立的,所以其可以在相同的周期中发送。进一步地,因为第三个加载指令(L)是独立的,其可能在下一个周期中发送(第15周期),从而总共用了15个周期。
接着参考图4A示出的2发送延迟执行流水线2002,发送周期的总数会明显减少。如图所示,由于延迟排列,其中第二流水线(P1)的运算逻辑单元(ALU)412A相对于第一流水线(P0)的加载存储单元(LSU)412L位于流水线的深处,所以第一个加载和加法指令(L’-A’)可能被同时发送,无论是否独立。换言之,到指令A’到达ALU 412A时,L’的结果会可用并转发以被用于A’的执行(第7周期)。再次假设A′在一个周期中完成,L”和A”可在下个周期中发送。因为接下来的存储和加载指令是独立的,它们将在下个周期中发送。这样,即使没有增加发送的宽度,但是一个级联延迟的流水线2002还是将发送周期的总数减少到9。
接下来参考图4B示出的传统的4发送流水线排列2804,可以看到,尽管增加了发送宽度(×2),但是第一个加法指令(A’)仍然直至第一个加载指令(L’)的结果可用时才发送(在第7周期)。然而,在第二个加载指令(L”)结果可用之后,发送宽度的增加确实允许第二个加法指令(A”)以及独立的存储和加载指令(ST和L)在同一个周期中发送。然而,这仅仅带来很少的性能增加,将发送周期的总数减少为14。
接下来,参考图4B所示的4发送级联延迟执行流水线2004,当将一个较宽的发送组与一个级联延迟排列组合时,发送周期的总数将会明显减少。如图所示,由于延迟排列,其中第四流水线(P3)的第二个运算逻辑单元(ALU)412A相对于第三流水线(P2)的第二个加载存储单元(LSU)412L位于流水线的深处,两个加载及加法指令对(L’-A’和L”-A”)可能被同时发送,无论是否独立。换言之,到指令L”到达第三个流水线(P2)的412L时,A’的结果将可用,并且到指令A”到达第四流水线(P3)的ALU的412A时,A”的结果将可用。从而,后续的存储及加载指令将在下一个周期内发送,将发送周期的总数减少为2。
调度一个发送组中的指令
图5示出了调度及发送至少有一些依赖性的指令以便在级联延迟执行流水线中执行的示例性操作500。对于一些实施例,实际的调度操作可以在多个处理器内核(每个内核有一个级联延迟执行流水线单元)之间共用的一个预解码器/调度器电路中执行,而分发/发送指令可由一个处理器内核中的单独电路执行。例如,一个共用的预解码器/调度器可通过检查待发送指令的“窗口”来查看依赖性并生成控制分发电路将如何(向哪些流水线)发送一个组内的指令的一组“发送标志”,来应用一组调度规则。
在任何情况下,在步骤502,接收到一个将要发送的指令组,该组的第二条指令依赖于第一条指令。在步骤504,第一条指令被调度发送至拥有第一执行单元的第一流水线。步骤506中,第二条指令被调度发送至拥有相对第一个执行单元延迟的第二个执行单元的第二个流水线中。在步骤508中(在执行期间),第一条指令的执行结果被转发至第二个执行单元,以用于第二条指令的执行。
指令被调度至不同流水线的确切方式可以随着不同的实施例变化,并可至少部分地依赖于相应的级联延迟流水线单元的确切配置。例如,较宽的发送流水线单元可以允许更多的指令平行发送,并为调度提供更多机会,而一个更深的流水线单元可以允许更多依赖性的指令一起被发送。
当然,通过使用一个级联延迟流水线排列获得的性能的总的提高依赖于若干因素。例如,较宽发送宽度(更多流水线)的级联排列可以允许更大的发送组,而且通常更多依赖性指令可以被一起发送。然而,由于实际限制,比如电力及空间成本,可能需要将流水线单元的发送宽度限制为可管理的数量。对于一些实施例,一个4-6个流水线的级联排列可以在可接受的成本下提供好的性能。总的宽度也可能依赖于预期的指令类型,这很可能决定排列中的特定执行单元。
一个整数级联延迟执行流水线的示例性实施例
图6示出了用于执行整数指令的级联延迟执行流水线单元600的示例性排列。如图所示,该单元有四个执行单元,包括两个LSU 612L及两个ALU 614A。单元600允许在两个相邻的流水线之间直接转发。对一些实施例,可允许更复杂的转发,例如,在不相邻的流水线之间直接转发。对一些实施例,也同样允许来自目标延迟队列(TDQ)630的选择性转发。
图7A-7D示出了四条指令(L’-A’-L”-A”)的示例性发送组通过图6所示的流水线单元600的流程。如图所示,在图7A中,发送组可以进入单元600,其中第一个加载指令(L’)被调度至最少延迟的第一流水线(P0)。因此,L’将在组内的其他指令(这些其他指令可以在L’被执行时通过指令队列620前进)之前到达第一个LSU 612L,并被执行。
正如在图7B中所示,当第一个加法指令A’到达第二流水线(P1)的第一个ALU 612A时,第一个加载指令(L’)的执行结果可能可用(恰好地)。在某些情况下,例如,第二个加载指令可能依赖于第一个加法指令的结果,该加法指令可通过对一个基址(例如,第一个加法指令A’的操作数)增加一个偏移量(例如,用第一个加载指令L’加载的)来进地计算。
在任何情况下,如图7C所示,当第二个加载指令L”到达第三个流水线(P2)的第二个LSU 612L时,第一个加法指令(A’)的执行结果可能可用。最后,如图7D所示,当第二个加法指令A”到达第四个流水线(P3)的第二个ALU 612A时,第二个加载指令(L”)的执行结果可能可用。第一个组中的指令的执行结果将被用作执行后续发送组的操作数,并因此可被反馈(例如,直接反馈或通过TDQ 630)。
虽然没有示出,但应当理解在每个时钟周期,一个新的发送组可进入流水线单元600。在一些情况下,例如,由于有多重依赖性的相对稀少的指令流(L’-L”-L),因而每个新发送组可能并不包含最大数量的指令(在本例中有4个),但这里描述的级联延迟排列仍然可以通过允许无停止地在一个的共同发送组中发送依赖性的指令,而在吞吐量方面提供明显的改进。
浮点/向量级联延迟执行流水线的示例性实施例
这里提出的级联、延迟、执行流水线单元的概念能够应用于使用多种不同类型的功能单元的多种不同的配置中,在所述级联、延迟、执行流水线单元中,在一个发送组中一个或多个指令的执行比同一发送组中其他指令的执行延迟。更进一步地,对一些实施例,级联、延迟、执行流水线单元的多种不同配置可被包含在同一***和/或同一芯片中。包含特定设备或***包含的特定配置或一组配置取决于预期的用途。
上文描述的定点执行流水线单元允许包含相对简单的操作(即仅仅花费少量周期完成,例如,加载、存储以及基本的ALU操作)的发送组可以无停止地执行,无论发送组中是否有依赖性。然而,通常至少有一些执行相对复杂的操作的流水线单元,这些操作可能需要花费几个周期,比如浮点乘法/加法(MADD)指令、向量点积、向量叉积等等。
在图像代码方面,比如在商业视频游戏中常见的,倾向于高频率出现标量浮点代码,例如,当处理三维场景数据以生成像素值来创建逼真的荧幕图像时。一个指令流的示例可包括一个加载指令(L),紧随其后是以所述加载作为输入的第一个乘法/加法指令(MADD),接下来是基于第一个MADD的结果的第二个MADD指令。换言之,第一个MADD指令依赖于加载指令,而第二个MADD指令依赖于第一个MADD指令。第二个MADD指令之后可以是一个存储第二个MADD指令生成的结果的存储指令。
图8示出了将允许上文所述的指令流的示例、从而允许在单个发送组中同时发送两个依赖性的MADD指令的一个级联延迟执行流水线单元800。如图所示,该单元有四个执行单元,包括第一个加载存储单元(LSU)812、两个浮点单元FPU8141和8142,以及第二个加载存储单元LSU816。单元800允许将第一个流水线(P0)中的加载指令的结果直接转发至第二个流水线(P1)中的第一个FPU8141,以及将第一个MADD指令的结果直接转发至第二个FPU8142
图9A-9D示出了一个示例性的包含四条指令(L’-M’-M”-S’)的发送组(M’表示第一个依赖性的乘法/加法指令,M”表示依赖于第一条指令的结果的第二个乘法/加法指令)通过图8所示的流水线单元800的流程。如图所示,在图9A中,发送组可进入单元900,其中加载指令L’被调度至最少延迟的第一个流水线(P0)。因此,L’将在组内其他指令(这些其他指令可以在L’正在被执行通过指令队列620前进)之前到达第一个LSU812而被执行。
如图9B所示,当第一个MADD指令M’到达时,第一个加载指令L’执行的结果可被转发至第一个FPU8141。如图9C所示,可能刚好当第二个MADD指令(M”)到达第三个流水线(P2)的第二个FPU8142时,第一个MADD指令(M’)执行的结果可用。
第一个组中的指令的执行结果可以在执行后续发送组时被用作操作数,并因此可被反馈(例如,直接反馈或通过TDQ630),或者转发至寄存器文件回写电路。对于一些实施例,第二个MADD指令的(浮点)结果可在被存储至存储器之前被进一步处理,例如,以便为了更加有效地存储而将结果压缩(compact或compress)。
当把图8所示的浮点级联延迟执行流水线单元800与图6所示的整数级联延迟执行流水线单元600相比时,可以观察到若干相似点及不同点。例如,每种都可以使用若干指令队列620来延迟发送至“延迟”流水线的某些指令的执行,以及可以使用目标延迟队列630来保留“中间的”目标结果。
单元800的FPU814的深度可以比单元600的ALU600大很多,从而增加了单元800的整体流水线深度。对一些实施例来说,深度的这种增加可允许一些等待时间被隐藏,例如,当访问二级高速缓存的时候。例如,对一些实施例,二级高速缓存访问可以在流水线P2上被首先启动,来获取第二个MADD指令的操作数之一。可能刚好当二级高速缓存访问完成时,由第一个MADD指令生成的另一个操作数可用,这样就有效隐藏了二级高速缓存访问的等待时间。
另外,转发互连可以显著不同,部分地是由于一个加载指令可以生成一个可作为地址使用(被其他指令)的结果,而一个浮点MADD指令生成一个并不能被用作地址的浮点结果。因为FPU不能产生可以用作地址的结果,因而图8示出的流水线互连方案可能是显著简化的。
对一些实施例,为了预期目的,比如用置换指令进行向量处理(例如,其中中间结果被当作后续指令的输入),可创建多种其他流水线单元排列。图10示出了一个适用于这种向量操作的级联延迟执行流水线单元1000。
与图8所示的执行单元800类似,执行单元1000有四个执行单元,包括第一及第二加载存储单元(LSU)1012,但是有两个向量处理单元FPU10141和10142。向量处理单元可被配置为执行多种向量处理操作,而且在一些情况下,可以执行与图8中的FPU814类似的操作(乘法及加法),以及其他功能。
这种向量操作的例子可包括多重(例如,32位或更高位)乘法/加法操作,包括对结果求和,比如在点积(或叉积)中。一旦生成一个点积,另一个点积也可由此生成,而且/或者在准备存储到存储器中时结果可被压缩。对于一些实施例,所生成的点积在其被存储到存储器中或发送到其他地方以便进行其他处理时可以从浮点转换为定点,被缩放,和被压缩。这种操作例如可以在向量处理单元1014或在LSU1012中执行。
共用的支持多个处理器内核的指令预解码器的示例性实施例
如上所述,本发明不同的实施例可以使用拥有级联延迟执行流水线的多个处理器内核。对一些实施例,至少一些内核可以使用提供不同的功能的不同的级联延迟执行流水线排列。例如,如上所述,对一些实施例,单个芯片可以包含如上所述的一个或多个定点处理器内核以及一个或多个浮点和/或向量处理器内核。
为了提高处理器性能并识别可被平行发送的最优的指令发送组,例如当从二级(或更高级)高速缓存获取指令行时,指令可被预解码。这样的预解码可以包括多种功能,例如地址生成,分支预测,以及调度(决定发送指令的次序),这将作为控制指令执行的分发信息(一组标志)被获取。
在典型的应用中,经过相对少数的“训练”执行周期(例如,6-10个周期)之后,这些调度标志可能很少改变。典型地,改变最多的标志将是分支预测标志(即那些指示是否一个....的标志),这些标志可在大约3-4%的时间里的切换。因此,对使用预解码器再转换(retranslation)/再调度的要求很少。这样的效果是,在典型情况下,单个处理器或处理器内核专用的预解码器很可能将不能充分利用。
由于在稳定状态执行期间由任何给定的处理器内核施加给预解码器的负载相对较轻,而且对指令高速缓存线再翻译的需求相对不频繁,所以可在多个(N)处理器内核之间共用一个预解码器(例如,N=4,8,或12)。图11示出了这样一个共用的预解码器1100,其被用于对将要分发到N个处理器内核114执行的指令行进行预解码。N个处理器内核114可包括相同或不同类型处理器内核的任何合适的组合,如上所述,对一些实施例,这些处理器内核可能包括级联延迟执行流水线排列。换言之,共用的预解码器1100会能够预解码任何定点、浮点和/或向量指令的组合。
通过在多内核间共用预解码器1100,可以将其做得更大,从而允许更复杂逻辑的预解码以及更智能的调度,同时与单个专用的预解码器相比,仍减少了每个处理器内核的成本。更进一步的,由于额外的复杂性造成的空间损失也可相对小。例如,当一个共用的预解码器电路的整体尺寸可能增长了2倍时,如果在4-8个处理器内核间共用它,则会节省空间。对一些实施例,单个预解码器可以在处理器内核组间共用,所述处理器内核组例如共用一个共同的二级高速缓存和/或更高级别的高速缓存。
由于当从更高级别高速缓存读取指令行时产生的等待时间而有足够的周期可用于预解码以及由于共用而能够设计更大的复杂性,这样可能产生一个接近最优的调度。例如,通过在训练周期期间记录执行活动,比如导致存储器未命中的加载和/或分支比较的结果,可能产生有极少停止或没有停止的适于平行执行的指令组。
另外,对一些实施例,共用的预解码器1100能够以比处理器内核运行频率(CLKCORE)更低的频率(CKLPD)运行,这样共用的预解码器比以处理器内核频率运行的传统的(专用的)预解码器允许更加复杂的预解码(可以接受更多的逻辑门传送延迟)。更进一步,可被用于预解码的额外的“训练”周期能够被访问更高级别的高速缓存或主存储器时产生的相对大的等待时间(例如,在100-1000个周期的量级上)有效地隐藏。换言之,虽然10-20个周期可允许相对复杂的解码、调度及分发,但是当它们在加载程序时产生时,这些周期可能对整体性能只产生微不足道的影响(“在噪声中消失”)。
图12示出了可由共用预解码器1100执行的示例性操作1200的流程图。步骤1202中,操作通过读取一个指令行开始。例如,该指令行能够当从任何其他更高级高速缓存(二级、三级或四级)或主存储器加载一个程序(“cold”)至任何特定的处理器内核114的一级高速缓存时被读取。
在步骤1204,该指令行可被预解码并产生一组的调度标志。例如,预解码操作可包括目标操作数及源操作数的比较,来检测指令及操作之间的依赖性(模拟执行)从而预测分支路径。对一些实施例,出于调度的目的,可能需要读取一个或多个额外的指令行(例如,包括先前指令)。例如,对于依赖性比较或分支预测比较,可能需要检查在一个目标内核流水线中较早的指令的效果。也可实施基于可用资源的规则,例如,基于一特定内核中的特定流水线单元,限制发送至该内核的指令数量。
基于这些操作的结果,调度标志可被设置来指示指令组是什么(例如,使用停止位来界定发送组)。如果预解码器识别了一个可以平行执行的指令组(例如,4个指令),那么它就能够使用一个来自前一个组的停止位以及(在四条指令之后)另一个停止位来界定该组。
步骤1206,预解码的指令行及调度标志被分发至适合的一个内核(或多个内核)来执行。正如在下文将详细描述的,对一些实施例,调度标志可以被编码并附加到相应的指令行或者与相应的指令行一起存储。在任何情况下,调度标志能够控制目标内核处指令行中指令的执行。例如,除了识别可以平行发送的一个指令发送组之外,这些标志也可以指示该组中的特定指令应该被调度在执行内核中的哪些流水线(例如,调度一个依赖性的指令在一个比该指令所依赖的指令执行更加延迟的流水线中执行)。
图13更加详细的示出了共用预解码器1100的一个实施例。如图所示,指令行能够被读取并存储在一个指令行缓冲器1110中。来自缓冲器1110的指令行可以被传送至格式化逻辑1120。例如,以便将完整的指令行(例如,32条指令)解析为子指令行(例如,4个子指令行,每个子指令行含有8条指令)、循环、以及对准指令。接下来,子指令行可被发送至拥有适合逻辑的调度标记生成逻辑1130,以检查指令(例如,检查源操作数及目标操作数),并生成定义发送组及执行次序的调度标志。接下来,预解码的指令行与生成的调度标志可被存储在预解码指令行缓冲器1140中,从这里它们可被分发至其适合的目标内核。执行的结果可被记录,而且调度标志可被反馈至标志生成逻辑1130,(例如,通过反馈总线1142)。
正如在下文将更加详细描述的,对一些实施例,预解码的指令行(与它们的调度标志一起)可被存储在多个级别的高速缓存(例如,二级、三级及/或四级)中。在这样的实施例中,当读取指令行时,在由于高速缓存未命中读取一个指令行或者在调度标志已改变的情况下,可能仅需要产生调度标志生成器1130的额外等待时间。然而,当读取已被解码以及其调度标志未曾改变的指令行时,可例如通过绕过总线1112来绕过标志生成逻辑1130。
如上所述,在多个内核间共用一个预解码器及调度器可允许更复杂的预解码逻辑,从而得到更优化的调度。增加的复杂性可导致需要在多个时钟周期内以流水线方式执行部分解码操作,即使预解码流水线以比内核更慢的时钟频率运行。
图14示出了预解码流水线的一个实施例,其中调度标志生成逻辑1130的部分解码操作发生在不同级。如图所示,第一部分解码器1131可在第一个时钟周期内在第一组子指令行上执行第一组预解码操作(例如,资源值规则执行,和/或一些初步的重新格式化),并将部分解码后的子指令传送至缓冲器1132。部分解码后的子指令行可在第二个时钟周期中由第二个部分解码器进一步预解码(例如,进行初始加载存储依赖性检查、地址生成、和/或加载冲突检查),这些进一步解码后的子指令行可被传送至对准逻辑1134。最终的预解码逻辑1135可仍进一步在第三个时钟周期内对子指令行进行解码(例如,对形成的发送组的进行最终的依赖性检测和/或决定发送组长度)。发送组长度可被存储在表1137中,并用于设定界定发送组的结束标志。
作为预解码操作的例子,在一个或更多预解码周期中,可执行一个依赖性的检测,来总计由若干(例如,超过100个)寄存器比较识别的依赖性,以判定哪些指令是有效的,并将其分组。可以按照不同的方式进行分组(例如,基于加载-加载依赖性和/或加法-加法依赖性)。指令可以基于是否它们应被调度至一个更多延迟还是更少延迟的流水线来分组。然后可决定基于可用流水线以及目标依赖性队列的哪级(对应的流水线级深度)具有依赖性将指令(例如,四个或五个)的分组。
例如,第一个加载指令可被调度至一个无延迟的流水线,而依赖于第一个加载指令的结果的另一个加载指令可被调度至一个延迟的流水线,从而,到该指令执行时所述结果可用。在一组指令不能被调度至任何流水线而无停止的情况下,发送组可在第一条指令之后结束。另外,可设置一个停止位以不仅仅指示指令不能在一个通常的发送组中被调度,而且指示由于其停止,该组可在之后立即终止。这个停止位能够促进进一步的预解码。
预解码的指令行的持久存储
如前所述,生成于多个周期的预解码训练阶段的指令行调度标志可在训练阶段之后相对不频繁地变化。例如,在训练之后,在一个程序的稳定状态执行期间,调度标志可仅仅在很少的时间改变。对一些实施例,可利用这样的事实,并在预先花费训练周期以生成用于指令行的调度及分发信息之后,这些预解码/调度信息可被存储在更高级别的高速缓存中(例如,二级、三级和/或四级高速缓存)。因而,当在一个后续的执行周期期间读取指令行时,为了调度目的而进行预解码(再转换)可能就不必要了。
图15概念性地示出了在多级别高速缓存中持久地存储预解码的指令行的概念。示意性地,预解码的指令行及调度标志(“指令标志”)被存储在所有级别的高速缓存中。然而,对本发明的一些实施例,仅仅有指定级别的高速缓存和/或存储器可包含指令行中包含的信息(例如,数据访问历史以及数据目标地址)。
对于一些实施例,指令标志能够在预解码的指令行中被编码。所以,可提供格式化逻辑1505来对指令行进行格式化,例如,必要性当为分发至处理器内核做准备时循环及截取指令。如图所示,对于一些实施例,一组标志可被提取并反馈至读访问电路1504。例如,基于先前的执行记录,这样的标志可指示应当从二级高速缓存1502或三级高速缓存1503预先读取的一个或多个指令行或数据行,如在2006年2月3日提交的、申请号为11/347,414、代理机构卷号为ROC920050277US1、标题为“SELFPREFETCHING L2 CACHE MECHANISM FOR DATA LINES”,以及、2006年2月3日提交的、申请号为11/347,412、代理机构卷号为ROC920050278US1、标题为“SELF PREFETCHING L2 CACHEMECHANISM FOR INSTRUCTION LINES的美国专利申请人所描述的,所述专利申请作为参考被全文纳入本说明书。
图16示出了根据本发明的实施例用于分发指令行的操作,其中预解码信息被持久地存储。在步骤1602,操作开始,读取一个指令行。如果此读取行为导致了一个指令高速缓存未命中(所请求的指令行不在一级高速缓存中)或者调度标志已经作为执行的结果被改变(例如,一个分支历史标志被改变,从而指示已经采用了一条与先前不同的路径),则在步骤1606,指令行可被预解码。否则,如果此读取命中(所请求的指令行已经位于一级高速缓存中)而且调度标志没有改变,那么可以绕过预解码,至少是部分地绕过(例如,可能仍然要执行一些格式化)。在步骤1610,预解码的(或者再次预解码的)指令行被分发以便执行。
一般来说,如果在所有高速缓存中都使用了存储穿透(store-through)缓存机制,那么本领域技术人员所知的高速缓存一致性原理可被用于更新任何一级高速缓存和/或存储器中指令行的副本。更进一步地,由于仅仅是指令标志被修改(并仅仅被视作提示),因而正常的存储中(store-in)高速缓存机制(更新指令高速缓存中的高速缓存行以及将该指令行标记为已改变,从而使得当该改变的指令行被替换时,将该改变的行被写出至二级高速缓存)也正常工作,因为指令本身未被修改,并且仍然是只读的。含有陈旧(过时)指令标志的指令行的情况仍在所有情况下产生正确的执行,虽然可能会发生一些性能损失。应提到的是,在使用指令高速缓存的传统***中,典型地,指令不被修改。这样,在传统的***中,指令行通常在一段时间之后老化(age)出一级高速缓存1501,而不是被回写至二级高速缓存1502。然而,为了持久地保持预解码信息,当指令标志在执行期间被修改时,指令行(指令标志)指令可被修改,而且当被替换时,这些修改后的指令行可被逐出(east out)至更高级别的高速缓存中(例如,二级和/或三级高速缓存),从而允许保持预解码信息(指令标志)。
可以提到的是,存储的/生成的调度标志可被当作“提示”,并且只有“最新的”版本将在相应的一级指令行高速缓存中。对一些实施例,一旦执行了指令行,它可被逐出,其他处理器不能访问该指令行。因而,维持一致性(以确保多个处理器可以访问相同版本的指令行)并不是必要的。因为标志仅仅被用作提示,所以即使提示是错误的和/或指令行的最新版本被另一个处理器内核访问,也仍然可以实现正确的执行。
例如,参考图17,当指令行中的指令已经被处理器内核处理(可能引起数据目标地址及其他历史信息的更新),指令行中的指令标志1702可在一级高速缓存中被修改。一个改变标志1704可被标记以描述指令标志中的改变。如图所示,当指令行在一级高速缓存中被替换时,因为它们被标记为已改变,所以它们可被逐出至二级高速缓存。类似地,修改后的指令行可从二级高速缓存被逐出至三级高速缓存。
按这种方式存储带调度信息(指令标志)的预解码指令行可以被称作“半永久”调度。换言之,调度信息可在最初产生,例如,当加载程序而进行冷启动时。仅仅当调度标志改变(例如,当在训练或执行期间,分支模式变化)时,才需要再次预解码。所以,通过避免不必要地再次预解码周期,***性能可改进,而且,指令行可以被立即分发。另外,通过避免预解码操作(例如,几百次的依赖性检查),总的***电耗可减少。
结论
通过提供相互延迟的执行流水线的级联,一个发送组中的一组依赖性指令可被智能地调度以在不同延迟的流水线中执行,从而整个发送组可以无停止地执行。
虽然以上所述是针对本发明的实施例的,但是可以设计其他或进一步的实施例,而不偏离本发明基本范围,且本发明的范围由下面的权利要求确定。

Claims (20)

1.一种在处理环境中预解码用于执行的指令的方法,包括:
由处理器内核接收用于执行的第一指令行;
对第一指令行进行预解码;以及
将预解码的第一指令行存储在多级高速缓存中。
2.权利要求1中的方法,进一步包括:
接收先前已被预解码的一指令行。
3.权利要求2中的方法,进一步包括:
判定与先前已被预解码的该指令行相关联的一个或多个标志指示相关联的预解码信息已改变;以及
作为响应,将先前预解码的该指令行重新预解码。
4.权利要求2中的方法,进一步包括:
判定与先前已被预解码的该指令行相关联的一个或多个标志指示相关联的预解码信息没有改变;以及
作为响应,将先前预解码的该指令行发送至处理内核,而不进行进一步的预解码。
5.权利要求1中的方法,进一步包括:
改变与预解码的该指令行相关联的、并存储在第一级高速缓存中的一个或多个标志;以及
当替换第一级高速缓存中的预解码的该指令行时,将预解码的该指令行逐出至第二级高速缓存。
6.权利要求5中的方法,进一步包括:
将预解码的该指令行逐出至第三级高速缓存。
7.权利要求1中的方法,其中对指令进行预解码包括生成一组调度标志,该组调度标志控制当该行中的指令被分发到处理器内核以便执行时,所述指令将如何被执行。
8.权利要求7中的方法,进一步包括:
对预解码的该指令行中的调度标志进行编码;以及
将预解码的该指令行与编码的调度标志存储在多级高速缓存中。
9.一种集成电路装置,包括:
一个或多个处理器内核;
多级高速缓存;
预解码器,其被配置为读取指令行、预解码指令行并将预解码的指令行发送至处理器内核以便执行;以及
高速缓存控制电路,其被配置为将预解码的指令行存储在多级高速缓存中。
10.权利要求9中的装置,其中多级高速缓存包括:
与多个处理器内核中的每一个关联的第一级高速缓存;以及
在多个处理器内容间共用的第二级高速缓存。
11.权利要求9中的装置,其中至少一个处理器内核包括:
具有至少第一和第二执行流水线的级联延迟执行流水线单元,其中被发送至执行流水线单元的一共同发送组中的指令在被执行于第二执行流水线之前在第一执行流水线中被执行,而且至少第一和第二执行流水线之一在浮点操作数上操作;以及
转发路径,用于将在第一执行流水线中执行第一指令产生的结果转发至第二执行流水线中以用于执行第二指令。
12.权利要求9中的装置,其中预解码器被配置为:
读取先前预解码的指令行;以及
检查改变位来判定与先前预解码的指令行关联的一个或多个调度标志是否自先前的预解码以来已改变。
13.权利要求12中的装置,其中所述预解码器被配置为:
响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来已改变,重新预解码先前预解码的指令行。
14.权利要求12中的装置,所述预解码器被配置为:
响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来没有改变,将先前预解码的指令行转发至处理器内核以便执行,而不进行进一步的预解码。
15.权利要求12中的装置,其中所述处理器内核被配置为设置改变位,以指示与先前预解码的指令行关联的一个或多个调度标志是否已由于执行而改变。
16.一种集成电路装置,包括:
多级高速缓存;
一个或多个级联延迟执行流水线单元,每个单元至少具有第一和第二执行流水线,其中,被发送至执行流水线单元的一共同发送组中的指令在被执行于第二执行流水线之前在第一执行流水线中被执行,以及,转发路径,其用于将在第一执行流水线中执行第一指令产生的结果转发至第二执行流水线中以用于执行第二指令,其中至少第一及第二执行流水线之一在浮点操作数上操作;以及
预解码及调度电路,其被配置为接收将由流水线单元执行的指令行,预解码指令行,以及将预解码的指令行存储在多级高速缓存中。
17.权利要求16中的装置,其中预解码器被配置为:
读取先前预解码的指令行;以及
检查改变位来判定与先前预解码的指令行关联的一个或多个调度标志是否自先前的预解码以来已改变。
18.权利要求17中的装置,其中预解码器被配置为:
响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来已改变,重新预解码先前预解码的指令行。
19.权利要求17中的装置,其中预解码器被配置为:
响应于判定改变位指示与先前预解码的指令行关联的一个或多个调度标志自先前的预解码以来没有改变,将先前预解码的指令行转发至执行流水线单元以便执行,而不进一步预解码。
20.权利要求17中的装置,其中执行流水线单元被配置为设置改变位,以指示与先前预解码的指令行关联的一个或多个调度标志是否已由于执行而改变。
CNB2007101866393A 2006-12-13 2007-11-14 预解码用于执行的指令的方法及装置 Expired - Fee Related CN100559343C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/610,214 US20080148020A1 (en) 2006-12-13 2006-12-13 Low Cost Persistent Instruction Predecoded Issue and Dispatcher
US11/610,214 2006-12-13

Publications (2)

Publication Number Publication Date
CN101201733A true CN101201733A (zh) 2008-06-18
CN100559343C CN100559343C (zh) 2009-11-11

Family

ID=39516909

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101866393A Expired - Fee Related CN100559343C (zh) 2006-12-13 2007-11-14 预解码用于执行的指令的方法及装置

Country Status (2)

Country Link
US (1) US20080148020A1 (zh)
CN (1) CN100559343C (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102647589A (zh) * 2011-02-18 2012-08-22 Arm有限公司 并行视频解码
CN103279379A (zh) * 2011-12-22 2013-09-04 辉达公司 用于在没有指令解码的情况下调度指令的方法和装置
CN101676865B (zh) * 2008-09-19 2013-11-27 国际商业机器公司 处理器和计算机***
CN103997469A (zh) * 2014-05-27 2014-08-20 华为技术有限公司 一种网络处理器配置方法以及网络处理器
CN107810484A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 用于处理器的显式指令调度器状态信息
CN108427574A (zh) * 2011-11-22 2018-08-21 英特尔公司 微处理器加速的代码优化器
CN111124492A (zh) * 2019-12-16 2020-05-08 海光信息技术有限公司 指令生成方法、装置、指令执行方法、处理器及电子设备
US11048517B2 (en) 2015-06-26 2021-06-29 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
CN114116533A (zh) * 2021-11-29 2022-03-01 海光信息技术股份有限公司 利用共享存储器存储数据的方法
US11656875B2 (en) 2013-03-15 2023-05-23 Intel Corporation Method and system for instruction block to execution unit grouping

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8001361B2 (en) * 2006-12-13 2011-08-16 International Business Machines Corporation Structure for a single shared instruction predecoder for supporting multiple processors
US7945763B2 (en) 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US9170816B2 (en) * 2009-01-15 2015-10-27 Altair Semiconductor Ltd. Enhancing processing efficiency in large instruction width processors
CN104915180B (zh) * 2014-03-10 2017-12-22 华为技术有限公司 一种数据操作的方法和设备
WO2015155894A1 (ja) * 2014-04-11 2015-10-15 株式会社Murakumo プロセッサーおよび方法
DE102017208838A1 (de) * 2017-05-24 2018-11-29 Wago Verwaltungsgesellschaft Mbh Vorladen von Instruktionen

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5922065A (en) * 1997-10-13 1999-07-13 Institute For The Development Of Emerging Architectures, L.L.C. Processor utilizing a template field for encoding instruction sequences in a wide-word format
US6092182A (en) * 1998-06-24 2000-07-18 Advanced Micro Devices, Inc. Using ECC/parity bits to store predecode information
US6564298B2 (en) * 2000-12-22 2003-05-13 Intel Corporation Front end system having multiple decoding modes
US6832305B2 (en) * 2001-03-14 2004-12-14 Samsung Electronics Co., Ltd. Method and apparatus for executing coprocessor instructions
US6804799B2 (en) * 2001-06-26 2004-10-12 Advanced Micro Devices, Inc. Using type bits to track storage of ECC and predecode bits in a level two cache
US7509481B2 (en) * 2006-03-03 2009-03-24 Sun Microsystems, Inc. Patchable and/or programmable pre-decode
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US8756404B2 (en) * 2006-12-11 2014-06-17 International Business Machines Corporation Cascaded delayed float/vector execution pipeline
US7945763B2 (en) * 2006-12-13 2011-05-17 International Business Machines Corporation Single shared instruction predecoder for supporting multiple processors
US8001361B2 (en) * 2006-12-13 2011-08-16 International Business Machines Corporation Structure for a single shared instruction predecoder for supporting multiple processors

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101676865B (zh) * 2008-09-19 2013-11-27 国际商业机器公司 处理器和计算机***
CN102647589B (zh) * 2011-02-18 2016-12-28 Arm有限公司 并行视频解码
CN102647589A (zh) * 2011-02-18 2012-08-22 Arm有限公司 并行视频解码
CN108427574A (zh) * 2011-11-22 2018-08-21 英特尔公司 微处理器加速的代码优化器
CN103279379A (zh) * 2011-12-22 2013-09-04 辉达公司 用于在没有指令解码的情况下调度指令的方法和装置
US11656875B2 (en) 2013-03-15 2023-05-23 Intel Corporation Method and system for instruction block to execution unit grouping
CN103997469A (zh) * 2014-05-27 2014-08-20 华为技术有限公司 一种网络处理器配置方法以及网络处理器
CN103997469B (zh) * 2014-05-27 2017-03-08 华为技术有限公司 一种网络处理器配置方法以及网络处理器
CN107810484A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 用于处理器的显式指令调度器状态信息
CN107810484B (zh) * 2015-06-26 2021-04-16 微软技术许可有限责任公司 用于处理器的显式指令调度器状态信息
US11048517B2 (en) 2015-06-26 2021-06-29 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
CN111124492A (zh) * 2019-12-16 2020-05-08 海光信息技术有限公司 指令生成方法、装置、指令执行方法、处理器及电子设备
CN114116533A (zh) * 2021-11-29 2022-03-01 海光信息技术股份有限公司 利用共享存储器存储数据的方法

Also Published As

Publication number Publication date
CN100559343C (zh) 2009-11-11
US20080148020A1 (en) 2008-06-19

Similar Documents

Publication Publication Date Title
CN101201734B (zh) 预解码用于执行的指令的方法及装置
CN100559343C (zh) 预解码用于执行的指令的方法及装置
US8756404B2 (en) Cascaded delayed float/vector execution pipeline
US8135941B2 (en) Vector morphing mechanism for multiple processor cores
US7487340B2 (en) Local and global branch prediction information storage
CN101449237B (zh) 快速和廉价的存储-加载冲突调度和转送机制
US7870368B2 (en) System and method for prioritizing branch instructions
US20070288733A1 (en) Early Conditional Branch Resolution
US20050132138A1 (en) Memory cache bank prediction
CN108287730A (zh) 一种处理器流水线结构
US20080313438A1 (en) Unified Cascaded Delayed Execution Pipeline for Fixed and Floating Point Instructions
US8001361B2 (en) Structure for a single shared instruction predecoder for supporting multiple processors
CN101046740A (zh) 用于按需临时寄存器重命名的方法和***
US20070288730A1 (en) Predicated Issue for Conditional Branch Instructions
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US6470444B1 (en) Method and apparatus for dividing a store operation into pre-fetch and store micro-operations
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20090204791A1 (en) Compound Instruction Group Formation and Execution
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
CN112540792A (zh) 指令处理方法及装置
JP5128382B2 (ja) 複数のロード命令を実行するための方法および装置
US20080141252A1 (en) Cascaded Delayed Execution Pipeline
US20080162894A1 (en) structure for a cascaded delayed execution pipeline
US6119220A (en) Method of and apparatus for supplying multiple instruction strings whose addresses are discontinued by branch instructions
US20090204792A1 (en) Scalar Processor Instruction Level Parallelism (ILP) Coupled Pair Morph Mechanism

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
ASS Succession or assignment of patent right

Owner name: YIWU WADOU PICTURE CO., LTD.

Free format text: FORMER OWNER: WANG AIXIANG

Effective date: 20101102

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 322000 NO.398, CHOUZHOU WEST ROAD, YIWU CITY, ZHEJIANG PROVINCE TO: 322000 NO.136, QIJIGUANG, ECONOMIC DEVELOPMENT ZONE, CHOUJIANG, YIWU CITY, ZHEJIANG PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20101108

Address after: 201203 Shanghai city Pudong New Area Keyuan Road No. 399 Zhang Jiang Zhang Jiang high tech Park Innovation Park 10 Building 7 layer

Patentee after: International Business Machines (China) Co., Ltd.

Address before: American New York

Patentee before: International Business Machines Corp.

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

Granted publication date: 20091111

Termination date: 20171114