CN101036119B - 为处理器中的指令提供源操作数的方法和装置 - Google Patents

为处理器中的指令提供源操作数的方法和装置 Download PDF

Info

Publication number
CN101036119B
CN101036119B CN2005800334355A CN200580033435A CN101036119B CN 101036119 B CN101036119 B CN 101036119B CN 2005800334355 A CN2005800334355 A CN 2005800334355A CN 200580033435 A CN200580033435 A CN 200580033435A CN 101036119 B CN101036119 B CN 101036119B
Authority
CN
China
Prior art keywords
register
instruction
scheduler
read
processor
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
CN2005800334355A
Other languages
English (en)
Other versions
CN101036119A (zh
Inventor
G·哈蒙德
C·斯卡费迪
J·克劳福德
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
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN101036119A publication Critical patent/CN101036119A/zh
Application granted granted Critical
Publication of CN101036119B publication Critical patent/CN101036119B/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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register 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/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/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 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

用于向要在处理器执行的指令提供源操作数的方法和装置。一些实施例可包括具有寄存器的寄存器文件单元和用于调度指令的调度器。在一些实施例中,调度器要异步地接收指令和该指令的源操作数,源操作数是从寄存器文件单元中接收的。

Description

为处理器中的指令提供源操作数的方法和装置
技术领域
本发明的实施例总体上涉及计算机处理器中的指令流水线。
背景技术
计算机***中的处理器一般以一系列的阶段来执行指令,这一系列阶段可称作流水线。这些阶段的每一阶段可以由处理器的不同部分执行。例如,指令可以由解码器解码,随后,经解码的指令由一个功能单元执行。在“无序的”体系结构中,指令可以由执行单元按照与从中得到这些指令的程序所规定的顺序不同的顺序执行。在这样的情况下,指令可以被派发器(dispatcher)派发到调度器(scheduler),调度器可决定向执行指令的功能单元发送指令的顺序。
处理器执行的指令一般用寄存器来存储数据。指令可以有一个或多个源操作数,它们可以存储在寄存器中;指令可以产生一个结果,它也可以存储在寄存器中。如果指令的源操作数被存储在一个寄存器中(即从寄存器读出),或者一个结果被存储在那个寄存器中(即向寄存器写入),则可以说指令使用该寄存器。例如,对于一个给定的指令来说,处理器可以从寄存器R0读出一个数据操作数,从寄存器R3读出一个数据操作数,将这些数据操作数相加,然后将结果存回到寄存器R4中。有些现有技术的体系结构可以有一个寄存器高速缓存,在这样的体系结构中,可以从寄存器高速缓存中获得源操作数,或者,如果高速缓存失误,则从寄存器文件单元获得源操作数。在现有的体系结构中,流水线中的每个指令必须流经寄存器文件单元(或相关联的寄存器高速缓存)。例如,有些现有技术的无序体系结构是在主流水线中调度器之后具有寄存器文件单元(在这种情况下,可以在指令被调度器调出并发往功能单元时访问寄存器文件单元);或者是在主流水线中调度器之前具有寄存器文件单元(在这种情况下,可以在指令进入调度器时,访问寄存器文件单元)。
发明内容
按照本发明实施例的第一方面,提供一种处理器,包括:含有多个寄存器的寄存器文件单元;功能单元;旁路网络,它具有与寄存器文件单元耦合的输入端口并且具有与功能单元耦合的输出端口;耦合到所述旁路网络的调度器,所述调度器用于调度指令,其中调度器接收要被调度的指令,其中调度器要从寄存器文件单元和功能单元的其中之一接收用于所接收的要被调度的指令的源操作数,并且其中调度器要异步地接收指令和源操作数,以及用于表明寄存器文件单元中的寄存器是否要被在运行中指令使用的元件,其中在被派发到调度器之后并且直到被功能单元执行,指令在运行中。
按照本发明实施例的第二方面,提供一种处理器,包含:用于调度指令的调度器;包含多个寄存器的寄存器文件单元;存储数组的存储器,其中数组中的一个项为寄存器文件单元中的寄存器表明是否有运行中指令要使用该寄存器,其中在被派发到调度器之后并且直到被功能单元执行,指令在运行中;以及耦合到存储器的派发器,该派发器用于向调度器派发用于指定要从多个寄存器之一中读取的源操作数的新指令,其中如果要被新指令读取的寄存器也要被在先的运行中指令使用,则派发器派发该新指令而不用生成要为该新指令从该寄存器中读取该源操作数的请求。
按照本发明实施例的第三方面,提供一种***,包含:包含多个寄存器的寄存器文件单元;功能单元;旁路网络,它具有与寄存器文件单元耦合的输入端口并且具有与功能单元耦合的输出端口;用于调度指令的调度器,所述调度器耦合到所述旁路网络,以便从所述寄存器文件单元和所述功能单元的其中之一接收源操作数;派发器,用于向调度器派发具有要从多个寄存器之一中读取的源操作数的指令;和用于向派发器表明是否可以从在先的指令获得源操作数的元件。
按照本发明实施例的第四方面,提供一种方法,包含:确定新指令具有要从寄存器读取的源操作数;确定运行中指令是否要使用与该新指令要读取的相同的寄存器,其中在被派发到调度器之后并且直到被功能单元执行指令在运行中,以及由耦合到派发器的存储器单元维持运行状态;和如果运行中指令要使用与该新指令要读取的同一个寄存器,则将新指令派发到调度器中而不用向寄存器发送要读取源操作数的请求。
按照本发明实施例的第五方面,提供一种方法,包含:确定新指令具有要从寄存器读取的源操作数;将新指令派发到调度器;和与向调度器派发新指令异步地向调度器提供源操作数,经由耦合到寄存器和功能单元的旁通网络向所述调度器提供所述源操作数。
附图说明
图1是按照本发明实施例向调度器提供源操作数的处理器的简化框图;
图2是按照本发明实施例把指令派发到调度器中和请求读寄存器的方法的简化流程图;
图3是表示按照本发明另一个实施例的具有寄存器文件单元和与调度器耦合的功能单元的处理器的细节的简化框图;
图4是表示按照本发明另一个实施例的具有与调度器耦合的寄存器文件单元和功能单元的处理器的细节的简化框图。
具体实施方式
本发明的实施例涉及用于为处理器流水线中的指令提供源操作数的方法和装置。在有些实施例中,处理器具有一个与功能单元并行地实现的寄存器文件单元,用于为调度器中的指令提供数据操作数,并可被看作如同是功能单元那样提供数据操作数。在有些实施例中,可以派发一个具有要从寄存器读出的源操作数的指令而不用向该寄存器发送一个读请求——如果该源操作数有一个产生器指令正在运行中(in-flight)的话,并且,即使没有,也可以在向该寄存器的读请求得到结果之前派发该指令。按照有些实施例,多个指令对同一个物理寄存器的多个读出可以被压缩成一个单一的寄存器文件读出,这样,该单一的寄存器文件读出可以将其数据汇集到1到n个在调度器内的等待指令。在有些实施例中,可以将处理器设计得能容忍具有不同延迟的寄存器文件的访问。应当理解,本文所述的例子的各种修改和变体可由下文提供的教导所覆盖并且处在后附的权利要求的范围内。
图1是按照本发明实施例向调度器提供源操作数的处理器的简化框图。图1显示的处理器100包括退役顺序(retirement order)缓冲器110、派发器120、运行中的存储器125、调度器130、读队列140、寄存器文件单元150和功能单元160。处理器100可以是用于计算机***的任何类型的处理器,诸如位于美国加州Santa Clara的英特尔公司的奔腾
Figure GSB00000193579400031
类微处理器。图1中所示的各单元,可以例如以硬件、固件或者硬件与固件的某种组合的形式实现。尽管图1显示了处理器100的一个指令流水线,在其它实施例中指令流水线可含有更多的单元、不同的单元和/或额外的单元。
如图1中所示,退役顺序缓冲器110存储多条指令,诸如指令15-17。这些指令,例如可以是要由处理器100例如按照已知指令处理技术执行的一组程序指令的经解码的微指令。这些指令也可以是宏指令,微指令和宏指令的某种组合,等等。例如,指令15可以是一个执行“ADD R0=R3,R4”的指令,该指令要求把寄存器0中存储的数据操作数与寄存器3中存储的数据操作数相加,将其结果存入寄存器4。当然,退役顺序缓冲器110可以存储多于三条的要被执行的指令。在所示实施例中,指令并非是与指令要使用的数据操作数一起存储在退役顺序缓冲器110中的,数据是由流水线中更远的单元提供的。
退役顺序缓冲器110与派发器120耦合,可以向派发器120提供指令。本文中,如果两个物体直接或者间接地相连,则可将他们称作是“耦合的”。在有些实施例中,如图1中所示,派发器120与读队列140耦合,后者又与寄存器文件单元150耦合。在图1所示的实施例中,寄存器文件单元150含有第一寄存器组151和第二寄存器组152,读队列140对应地含有第一存储单元组141和第二存储单元组142。例如,可以将队列分组(banked)成偶数的和奇数的组。在其它实施例中,寄存器文件单元150和读队列140可以不分组,或者可以含有不同数目的组。在有些实施例中,处理器可包括一个2组寄存器文件单元,每个组有两个读端口,用简单SRAM单元实现,这样每个周期总共多达4个读结果。在所示实施例中,派发器120可以向读队列140发送一个请求,要求读寄存器文件单元150中的一个寄存器以便提供一个要被某指令使用的数据操作数,读队列140可以缓存这样的请求,并将其传递到寄存器文件单元150中适当的寄存器。例如,如果派发器120正在派发一条要从寄存器R3中读一个数据操作数的指令13,则派发器120可以向读队列140发送一个请求读取寄存器R3的请求121。在有些实施例中,如果没有正在等待的请求,则可以绕过读队列。读队列140可以是实现队列的任何类型的存储器器件。可以将读队列设计得例如吸收最坏情况的读请求速率,并且可以以寄存器文件单元的读路径(portage)所支持的速率(例如通过在对应的组中可用的寄存器读端口)被排出。在有些实施例中,寄存器读队列可以把寄存器读请求的流速率平滑到稳定的状态水平。
寄存器文件单元150含有一组寄存器R0到Rn,如众所周知的那样,可以用来存储由处理器100执行的指令所用的数据操作数。寄存器文件单元150可以是任何类型的存储器单元,诸如一组静态随机存取存储器(SRAM)单元,一组动态随机存取存储器(DRAM)单元,或者是传统的寄存器单元。寄存器文件单元150可以含任何数量的寄存器,例如512个82位寄存器。在有些实施例中,可以用例如高密度、低功率的SRAM单元实现海量物理寄存器(例如在数据高速缓存中)。结构性和推测性的寄存器状态可以混合在同一个物理寄存器文件中。在这样的实施例中,结构性和推测性寄存器重命名可以随着指令的退出而重命名指针,以保留正确的结构性状态。在有些实施例中,寄存器文件单元中的寄存器有少量的端口。例如在一个实施例中,利用4位宽的派发机(4-wide dispatch machine)上的2个读和1个写SRAM高速缓存单元,可以将寄存器实现为一个具有总共4个读端口和总共2个写端口的、划分为两个组的寄存器文件单元。例如,寄存器文件单元可以有512个寄存器和4个输出端口。
派发器120与调度器130耦合,后者又与功能单元160耦合。在其它实施例中,处理器可以有多个调度器,例如每个功能单元有一个调度器,或者一个功能单元簇有一个调度器。派发器120可以将指令例如指令13派发到调度器130中。调度器130可以存储若干条正在等待调度、供功能单元之一执行的指令,诸如指令11-12。调度器130可以存储一个指令而不存储要由该指令使用的操作数(如调度器130中所示的空列所表示的那样)。在有些实施例中,指令一旦被派发到调度器130中,就可开始有一个“运行中”的状态,并且可继续处于运行中的状态,直到数据结果被(例如由寄存器文件单元或功能单元-如下文所讨论的那样)传递给该寄存器并且不再是可获得的(例如从功能单元或旁路网络)。功能单元160可以是一个或多个执行指令的单元,诸如算术逻辑单元、浮点执行单元、整数执行单元、分支执行单元等等。当要执行一个指令时,它被传递到功能单元160中一个适当的功能单元,该功能单元执行该指令。调度器130可以是一个无序调度器,因为指令可以按与它们出现的顺序不同的顺序执行。例如,指令12可以在指令11之前执行,尽管指令11是在指令12之前向调度器130派发的。调度器130可以通过执行任何调度算法来调度指令。
如图1中所示,寄存器文件单元150的输出端口(这里是通过一个多路转接器)耦合到调度器130的输入端口。此外,功能单元160也有与调度器130的输入端口耦合的输出端口。按照有些实施例,可以将指定要从寄存器中读取数据操作数的指令在操作数可得到之前派发到调度器而不带所指定的源操作数。在有些实施例中,调度器130存储具有用以指定寄存器的源操作数的指令,并根据该指令的源操作数到达调度器而调度该存储的指令。在有些实施例中,将一条指令的源操作数提供到调度器,这与向调度器派发新指令是异步的,这意味着,在把指令派发到调度器与源操作数到达调度器的时间之间没有相关性。因此,指令到达调度器与该指令的数据操作数到达调度器这两者可以是去耦的。如下文参照图2将要更详细说明的那样,在调度器中等待的指令要用的源操作数可以从寄存器文件150或功能单元160提供给调度器。例如,假设指令12是一个要使用要从某个寄存器中读取的源操作数153的指令,而且该指令12是在该源操作数可用之前被派发到调度器130的,则可以或者从寄存器文件150或者从功能单元将源操作数153提供给调度器130,供由等待的指令12使用。
图1也显示一个与派发器120耦合的运行中存储器125。如图所示,运行中存储器125含有多个1比特的存储器位置,为了说明,这些位置在图1中被标记为项(entry)1到n。在所示实施例中,运行存储器125存储一个数组或表,用于表明寄存器文件单元中的一个寄存器是否要被一个运行中指令使用。在其余实施例中,可以采用其它元素/机制来表明寄存器文件单元中的一个寄存器是否要被一个运行中指令使用,诸如内容可寻址的存储器、各种比较器等等。在图1所示的例子中,运行存储器125中的0号项含有值“1”,这可以表明寄存器0要被一个运行中指令使用,1号项含有值“0”,这可以表明没有运行中指令要使用寄存器1。在有些实施例中,可以对这样一个运行表进行更新,以反映已经被派发到调度器的所有产生器指令。在有些实施例中,也可以为寄存器读请求设置运行中状态,因为寄存器文件单元是物理寄存器的产生器。如下文所讨论的那样,派发器120可以用存储在运行中存储器125中的信息来确定是否要向读队列140生成一个请求,以要求派发一条指令(即,要求生成一个要从被指定为该指令的源操作数的位置的寄存器读数据的请求)。如果生成了这样一个请求,派发器120可以在读请求完成之前把指令派发到调度器130。在有些实施例中,运行中存储器125中的各单元可以是完全连接端口的(ported)或者部分连接端口的。
图2是按照本发明实施例把指令派发到调度器中和请求读寄存器的方法的简化流程图。这个方法将参照图1中所示的装置加以讨论,但是该方法也可以用任何其他合适的装置来执行。指令可以流过诸如处理器100的处理器的流水线,并且例如可以被存储在退役顺序缓冲器110中。可以检查新的指令,并可以确定该指令是否有一个要从寄存器读取的源操作数(201)。例如,派发器120可以从退役顺序缓冲器获得一个指令,并且确定该指令是“ADD R0=R3,R4”指令,在这种情况下必须从寄存器0和寄存器3读取源操作数。在另一个例子中,如果新指令没有从寄存器读取的源操作数,则可以只是把新指令传递到调度器中用于调度,这是熟悉本技术领域的人员都明白的。
如果新指令真的有从寄存器读取的源操作数,则按照所示的实施例,就要确定是否有任何运行中指令使用与该新指令所要读取的相同的寄存器(202)。在有些实施例中,如果某运行中指令读取与被新指令所读取的同一个寄存器或者写入该同一个寄存器,则认为该运行中指令使用与被新指令所读取的同一个寄存器。在有些实施例中,对运行中指令使用与被新指令所读取的相同的寄存器的确定,包含检查存储器中的一个数组,以确定是否有任何运行中指令要被从与新指令相同的寄存器读取或者写到该相同的寄存器。例如,如果派发器120收到的指令14是一个要读取寄存器0和寄存器3的“ADD R0=R3,R4”指令,派发器120可以检查运行中存储器125,看看是否有任何运行中指令要使用寄存器0和寄存器3。在图1中所示的例子中,运行中存储器125中的项0(它对应于寄存器0)含有值“1”,这可能表明有一个运行中指令(例如指令11)要使用寄存器0。
如果一个运行中指令使用与该新指令所要读取的同一个寄存器,则可以将该新指令派发到调度器中,而不向该寄存器发送一个要求读取源操作数的请求(203)。在这种情况下,可以将来自该运行中指令的结果操作数提供到调度器,以供新指令作为源操作数使用(204)。在上面讨论的例子中,如果指令14要使用一个存储在寄存器0中的源操作数,但是指令11是在运行中并且要对寄存器读或写,则可以将指令14派发到调度器130,而不向寄存器文件单元150发送一个要求读寄存器0的读请求。如果指令11只是读取寄存器0,从寄存器读得的操作数(诸如图1中的操作数153)可以从寄存器的输出端口提供给调度器130的输入,此时,可以将操作数存储在调度器130,供将来要执行指令14时由该指令使用。如果指令11改变了寄存器0的值(例如写一个结果到寄存器0),则功能单元160在执行指令11时所产生的结果(诸如图1中的操作数153)可以从功能单元的输出端口提供到调度器130的输入,如刚刚讨论的那样,供将来由指令14使用。当然,这假设了将不会安排新指令在与其相关的运行中指令之前执行。因此,按照有些实施例,在产生器指令可能是被功能单元或者寄存器文件单元执行的产生指令的情况下,如果产生器指令是运行中的,则不生成读请求。
如果没有运行中指令使用与该新指令所要读取的相同的寄存器,则可以生成一个请求以便从含有新指令用的源操作数的寄存器中读出(205)。在上面的例子中,如果运行中存储器125表明没有使用寄存器0的运行中指令,则派发器120可以生成一个读寄存器0的请求121。在有些实施例中,生成读寄存器的请求包含向该寄存器的一个读队列(例如读队列140)发送以一个要从该寄存器读取源操作数的请求。因此,按照有些实施例,即使寄存器文件中没有足够的端口可用来接收读请求,派发器也可以继续将指令派发到指令调度器中。在图2所示的实施例中,在接收到所生成的读请求的结果之前就将新指令派发到调度器中(206)。在上面的例子中,即使尚未响应读请求121而读取寄存器0,也可以将指令14派发到调度器130中。如图2中所示,在读请求完成时,可以把新指令用的源操作数从寄存器提供到调度器,供新指令使用(207)。例如,指令12可在调度器130中等待着操作数153响应于读请求121而从寄存器0被提供到调度器130。
在有些实施例中,可以用内容可寻址的存储器(CAM)将寄存器文件结果装载到调度器中,这样可以被处理器功能单元使用。在有些实施例中,可以或者从寄存器的输出端口或者从功能单元的输出端口将新指令的源操作数提供到调度器的输入端口,其中寄存器文件单元与功能单元共享调度器的输入端口。在有些实施例中,在调度器中等待的指令可能对寄存器文件数据值何时到达是不敏感的。因此,调度器可在功能单元和寄存器文件单元产生它们的结果时捕获源操作数数据。当调度器有了用于特定指令的所要求的所有源操作数数据时,调度器可以把该指令发布到正确的功能单元。在有些实施例中,不需要寄存器读出数值的那些后继指令可以立即进入调度器,以便在那些需要寄存器读出数值的指令周围被调度。因此,可以与新指令向调度器的派发异步地向调度器提供源操作数,调度器可以在调度新指令供执行之前,等待源操作数被提供到调度器。
图3是表示按照本发明另一个实施例的具有与调度器耦合的寄存器文件单元和功能单元的一个处理器的细节的简化框图。图3表示的处理器100包含图1中所示一些部件。特别地,图3显示有图1的调度器130、寄存器文件单元150和功能单元160。在图3所示的实施例中,处理器也有一个耦合到调度器130的旁路网络310、寄存器文件单元150和功能单元160。特别地,旁路网络310的输出端口耦合到调度器130的输入端口,并且(这里是通过一个多路转接器)耦合到功能单元160的输入端口。此外,寄存器文件单元150和功能单元160的输出端口还耦合到旁路网络310的输入端口。在有些实施例中,可以将来自寄存器文件单元150或功能单元160的输出数据转发到调度器130或功能单元160,供将来的指令使用。在有些实施例中,旁路网络310可以含有缓冲器,用于暂时存储数据操作数。当然,旁路网络310的输出端口可以(通过寄存器文件单元端口)耦合到寄存器文件单元150中的每一个寄存器,以及耦合到功能单元160中的一组功能单元。在有些实施例中,旁路网络可以含有在结果已经被产生后暂时存储结果的排队或缓冲,并且在有些实施例中,只要这样一个指令所产生的结果在旁路网络中仍然是可用的,则可认为该指令有一个在运行中的状态。在有些实施例中,使用这样的缓冲器可导致较少的来自寄存器文件单元的读通信量(traffic)。
在图3所示的实施例中,处理器100也有一个写队列320耦合到寄存器文件单元150、功能单元160和旁路网络310。特别地,写队列320可有一个与寄存器文件单元150的输入端口耦合的输出端口,一个通过旁路网络315耦合到旁路网络310的输出端口,以及一个耦合到寄存器文件单元150和功能单元160的输出端口的输入端口。按照有些实施例,寄存器写入可以在写队列320中被缓冲,并在后台运行时被写入寄存器文件单元。在有些实施例中,如果某指令要读取寄存器,而在写队列320中该寄存器的一个写操作尚在等待,则可以通过旁路网络315将数据从写队列提供到调度器130。与寄存器文件单元150一样,在有些实施例中,写队列320可以有多个组。当然,写队列320的输出端口可以耦合到寄存器文件单元150中的每一个寄存器。在有些实施例中,如果有寄存器文件写-读冲突,可以将尚未写入的寄存器值从写队列旁路到寄存器读数据路径中。
图4是表示按照本发明另一个实施例的具有与调度器耦合的寄存器文件单元和功能单元的一个处理器的细节的简化框图。在有些实施例中,可以用总线和旁路多路转接器将寄存器数据传递到功能单元/调度器/旁路网络。按照上述的处理器的实施例,可以用额外的到执行单元调度器的CAM端口来方便从寄存器文件单元向调度器提供数据。在有些实施例中,并且如图4中所示,功能单元结果总线和选定数量的执行单元的CAM端口可以被过载/与寄存器文件读结果总线共享。
图4显示具有图1中所示的一些部件的处理器100。特别地,图4显示有图1的调度器130、寄存器文件单元150和功能单元160。在图4中所示的实施例中,寄存器文件单元150包含四个读端口RP0至RP3,功能单元160包含两个存储器功能单元(M0和M1)和两个整数功能单元(I0和I1)。当然,在其它实施例中,寄存器文件单元可以含有更多或更少的读端口,并且可以有更多、更少、以及/或者不同的功能单元。如图4中所示,调度器130有多个输入端口。如图所示,寄存器文件单元读端口RP0可以通过总线RB0耦合到调度器130的一个输入端口。此外,从寄存器文件单元来的寄存器文件单元读端口RP1和功能单元M0的输出端口二者都可以通过一个共享总线(图4中标记为A)耦合到调度器130中的第二(共享)输入端口。寄存器文件单元读端口RP2可以通过总线RB2耦合到调度器130的第三输入端口。寄存器文件单元读端口RP3和功能单元M1的输出端口二者都可以通过一个共享总线(图4中标记为B)耦合到调度器130中的第四(共享)输入端口。最后,整数功能单元0的输出端口可以通过总线C耦合到调度器130中的第五输入端口,整数功能单元1的输出端口可以通过总线D耦合到调度器130中的第六输入端口。
因此,在有些实施例中,一个与调度器耦合的总线可以被功能单元和寄存器共享,并且/或者调度器的一个CAM输入端口可以被功能单元和寄存器共享。在有些实施例中,在功能单元与寄存器文件单元之间过载结果总线可以使寄存器文件单元对旁路网络和调度器的影响最小化。如图4中所示,来自寄存器文件单元和功能单元的总线的每个都可以向调度器130提供一个操作数,如操作数153,例如如上文参照图1-3所述的那样。
在有些实施例中,功能单元结果和寄存器文件结果的高峰载荷时间可能是正交的。例如,在平稳状态的执行期间,功能单元可能正在提供新结果,大多数指令可能从运行中指令(例如通过旁路网络)获得它们所需要的源操作数结果。在这种情况下,所需的寄存器文件读出可能不频繁。相反,在重启动之后,功能单元可能进入空闲状态,不在结果总线上放置数据,而寄存器文件读则可能处于高峰,以便为进入机器的新指令服务。在共享结果总线和CAM端口时可以考虑这种正交性。
下表表示在与图4中所示的处理器类似的一个示例处理器中的所有执行单元的结果总线。尽管图4中的处理器有两个存储器执行单元(M0和M1)和两个整数执行单元(I0和I1),下表中的处理器还有一个第三整数执行单元(I2)、浮点执行单元(F)和分支执行单元(Br)。在下表中,最左边的列中列出作为结果产生器的这些单元,顶部的行中列出要把结果送往的消费器。在该表中,这些结果总线,从结果总线‘A’上的存储器端口0到结果总线‘F’上的浮点端口都已被任意地命名,这与图4中所示的类似。在这个实施例中,可以为这个配置假设某些宏指令的分解(decomposition)。这样,在本例中,可以把由存储器单元0和由读端口1产生的结果通过总线A提供到功能单元的每一个(和调度器)。类似地,由存储器单元1和由读端口2产生的结果可以通过总线C被提供到功能单元的每一个(和调度器)。注意有一些功能单元可能不消费来自任何产生器(诸如分支单元)的数据或者仅仅消费来自产生器的一个子集的数据。
Figure GSB00000193579400121
上表中列出了读端口0到读端口3。读端口0和1可共享组0。读端口1和2可共享组1。在一个实施例中,带下划线的表项表示为支持这个寄存器文件配置而增加的CAM端口。在该表所描述的处理器例子中,通过增加两个全CAM端口来支持寄存器文件读端口,以及通过与存储器结果总线共享其余两个寄存器文件读端口,可以使对性能的影响最小化。这在表中表示,其中读端口1共享结果总线A(存储器端口0),读端口3共享结果总线B(存储器端口1)。可以这样来选择读端口1和3,以使得两个读出同时在相同的寄存器组上激活的这种较不通常的情况中只需要一个执行结果总线。在其它实施例中,并且根据性能要求,所有的或部分的总线可能会过载或者根本不过载任何总线。
在上表所示的例子中,是存储器端口而不是整数端口被过载,因为整数指令可能更常用,并且因为存储器端口有更长的延迟。在有些实施例中,一个与寄存器文件共享其结果总线的执行单元将在一个有效指令将要产生结果的时候发信号通知寄存器文件。在这样的实施例中,执行单元应当有足够的延迟,以便能够足够早地发出这个通知,以阻止一个寄存器读出被发布到寄存器文件查找表以及与执行结果冲突。如果一个寄存器读出被延迟,操作数可以等待从寄存器文件单元读队列发出,直到例如下一个时钟周期。如果延迟太短,读请求可能会被从读队列中取出并***到寄存器文件查找流水线,这可能导致可能的结果总线冲突。因为上面所讨论的处理器的实施例可以容忍不同的延迟,可以延迟寄存器文件读出的发布,而不抑制被派发到调度器中的或者被发布到功能单元中的指令。
在有些实施例中,如果浮点端口到达不了足够的端口(与读端口相比,读端口可到达所有的执行端口)并且如果可能有浮点基准性能的考虑,则可以在选择要被过载的端口时忽略浮点端口,如上表所示的例子一样。在有些实施例中,可以将存储器端口扩展以便到达分支端口,从而支持与寄存器读端口的共享。
以上详细讨论了某些实施例。当然权利要求的范围要覆盖上述的实施例和它们等同物以外的实施例。例如,所讨论的指令格式和寄存器名称仅仅是示意性的,在其它情况中可以使用任何指令格式和/或寄存器。类似地,另外一个例子是,处理器可以不使用读队列。

Claims (37)

1.一种处理器,包括:
含有多个寄存器的寄存器文件单元;
功能单元;
旁路网络,它具有与寄存器文件单元耦合的输入端口并且具有与功能单元耦合的输出端口;
耦合到所述旁路网络的调度器,所述调度器用于调度指令,其中调度器接收要被调度的指令,其中调度器要从寄存器文件单元和功能单元的其中之一接收用于所接收的要被调度的指令的源操作数,并且其中调度器要异步地接收指令和源操作数,以及
用于表明寄存器文件单元中的寄存器是否要被在运行中指令使用的元件,其中在指令被派发到调度器之后并且直到被功能单元执行,指令在运行中。
2.根据权利要求1的处理器,其中该元件包含存储器或者多个比较器这两者其中之一。
3.根据权利要求1的处理器,其中该处理器进一步包含用于向调度器派发指令的派发器,其中,派发器要根据该元件确定是否生成要从被指定为要被派发的指令的源操作数的位置的寄存器中读取数据的请求,并且,如果生成了这样的请求,则在该读请求完成之前派发该指令。
4.根据权利要求1的处理器,进一步包含读队列,以便对从寄存器文件单元的寄存器中读取数据的读请求进行缓存。
5.根据权利要求4的处理器,其中读队列包含多组存储器单元。
6.根据权利要求5的处理器,其中寄存器文件单元包含多个静态随机存取存储器单元。
7.根据权利要求1的处理器,其中寄存器文件单元中的多个寄存器被安排成多个组。
8.根据权利要求7的处理器,其中处理器进一步包含与寄存器文件单元耦合的写队列,用于对寄存器文件单元的写入进行排队,并且其中写队列包含多个组。
9.根据权利要求1的处理器,其中寄存器文件单元进一步包含四个端口。
10.根据权利要求1的处理器,其中处理器进一步包含总线,其中总线耦合到调度器的输入端口、功能单元的输出端口、以及多个寄存器的第一寄存器的输出端口,并且其中总线由功能单元和第一寄存器共享。
11.根据权利要求10的处理器,其中调度器的输入端口由功能单元和多个寄存器的其中一个寄存器共享。
12.根据权利要求1的处理器,其中在指令在旁路网络中可得到该指令的源操作数时,该指令具有运行中的状态。
13.一种处理器,包含:
功能单元;
用于调度指令的调度器;
包含多个寄存器的寄存器文件单元;
存储数组的存储器,其中数组中的一个项为寄存器文件单元中的寄存器表明是否有运行中指令要使用该寄存器,其中在被派发到调度器之后并且直到被功能单元执行,指令在运行中;以及
耦合到存储器的派发器,该派发器用于向调度器派发用于指定要从多个寄存器之一中读取的源操作数的新指令,其中如果要被新指令读取的寄存器也要被在先的运行中指令使用,则派发器派发该新指令而不用生成要为该新指令从该寄存器中读取该源操作数的请求。
14.根据权利要求13的处理器,其中,如果要被新指令读取的寄存器也要被在先的运行中指令使用,则调度器要为新指令接收作为该在先指令的结果的源操作数。
15.根据权利要求14的处理器,其中,新指令的源操作数被从旁路网络提供到调度器。
16.根据权利要求13的处理器,进一步包含读队列以便对从寄存器文件单元的寄存器中读取数据的请求进行缓存。
17.根据权利要求16的处理器,其中读队列包含多组存储器单元。
18.根据权利要求13的处理器,其中寄存器文件单元中的多个寄存器被安排成多个组。
19.根据权利要求13的处理器,其中处理器进一步包含与寄存器文件单元耦合的写队列,用于对寄存器文件单元的写入进行排队,并且其中写队列包含多个组。
20.根据权利要求13的处理器,其中包含在处理器中的所述功能单元具有与调度器的输入端口耦合的输出端口,并且其中寄存器文件单元中的一个寄存器的输出端口像该功能单元那样耦合到调度器的同一个输入端口。
21.根据权利要求20的处理器,其中处理器进一步包含用于耦合功能单元的输出端口与调度器的输入端口的共享总线,其中共享总线也耦合所述的一个寄存器的输出端口与调度器的输入端。
22.一种为处理器中的指令提供源操作数的***,包含:
包含多个寄存器的寄存器文件单元;
功能单元;
旁路网络,它具有与寄存器文件单元耦合的输入端口并且具有与功能单元耦合的输出端口;
用于调度指令的调度器,所述调度器耦合到所述旁路网络,以便从所述寄存器文件单元和所述功能单元的其中之一接收源操作数;
派发器,用于向调度器派发具有要从多个寄存器之一中读取的源操作数的指令;和
用于向派发器表明是否可以从在先的指令获得源操作数的元件。
23.根据权利要求22的***,其中,寄存器文件单元与调度器耦合,以向调度器提供在调度器中等待的指令的源操作数。
24.根据权利要求22的***,进一步包含总线,其中总线耦合到调度器的输入端口、功能单元的输出端口、以及寄存器文件单元的第一寄存器的输出端口,并且其中总线由功能单元和第一寄存器共享。
25.根据权利要求24的***,其中调度器的输入端口由功能单元和第一寄存器共享。
26.根据权利要求22的***,进一步包含读队列,以便对从寄存器文件单元的寄存器中读取数据的请求进行缓存。
27.根据权利要求26的***,其中读队列包含多组静态随机存取存储器单元。
28.一种为处理器中的指令提供源操作数的方法,包含:
确定新指令具有要从寄存器读取的源操作数;
确定运行中指令是否要使用与该新指令要读取的相同的寄存器,其中在指令被派发到调度器之后并且直到被功能单元执行,指令在运行中,以及由耦合到派发器的存储器单元维持运行状态;和
如果运行中指令要使用与该新指令要读取的同一个寄存器,则将新指令派发到调度器中而不用向寄存器发送要读取源操作数的请求。
29.根据权利要求28的方法,其中该方法进一步包含使用被在先的指令从寄存器读取的结果向调度器提供源操作数,以供新指令使用。
30.根据权利要求28的方法,其中,如果运行中指令读取与新指令所读取的相同寄存器或者写入该相同的寄存器,则认为该运行中指令要使用与新指令所读取的相同的寄存器。
31.根据权利要求28的方法,其中,所述确定运行中指令是否要使用与新指令要读取的相同的寄存器包含检查存储器中的数组,以确定是否有任何运行中指令要从与新指令相同的寄存器读取或者写入到该相同的寄存器。
32.根据权利要求28的方法,该方法进一步包含:
确定没有运行中指令要使用与源指令所要读取的相同的寄存器;
生成读取该相同寄存器的请求;和
在接收到所生成的读取该相同的寄存器的请求的结果之前,将新指令派发到调度器中。
33.根据权利要求32的方法,其中生成读取该寄存器的请求包含向该寄存器的读队列发送从该寄存器读取源操作数的请求。
34.根据权利要求28的方法,该方法进一步包含:或者从寄存器的输出端口或者从功能单元的输出端口向调度器的输入端口为新指令提供源操作数,其中寄存器和功能单元共享调度器输入端口。
35.一种为处理器中的指令提供源操作数的方法,包含:
确定新指令具有要从寄存器读取的源操作数;
将新指令派发到调度器;和
与向调度器派发新指令异步地向调度器提供源操作数,经由耦合到寄存器和功能单元的旁通网络向所述调度器提供所述源操作数,
其中如果要被新指令读取的寄存器也要被在先的运行中指令使用,则派发器派发该新指令而不用生成从该寄存器中读取该源操作数的请求。
36.根据权利要求35的方法,其中该方法进一步包含调度新指令以供执行之用,其中调度器在调度新指令以供执行之前等待源操作数被提供到调度器。
37.根据权利要求35的方法,其中该方法进一步包含使用由在先的指令从寄存器读取的结果来向调度器提供源操作数以供新指令使用。
CN2005800334355A 2004-09-30 2005-09-30 为处理器中的指令提供源操作数的方法和装置 Expired - Fee Related CN101036119B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/953,760 2004-09-30
US10/953,760 US7395415B2 (en) 2004-09-30 2004-09-30 Method and apparatus to provide a source operand for an instruction in a processor
PCT/US2005/035406 WO2006039613A1 (en) 2004-09-30 2005-09-30 Method and apparatus to provide a source operand for an instruction in a processor

Publications (2)

Publication Number Publication Date
CN101036119A CN101036119A (zh) 2007-09-12
CN101036119B true CN101036119B (zh) 2011-10-05

Family

ID=35677609

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005800334355A Expired - Fee Related CN101036119B (zh) 2004-09-30 2005-09-30 为处理器中的指令提供源操作数的方法和装置

Country Status (6)

Country Link
US (1) US7395415B2 (zh)
JP (1) JP4699468B2 (zh)
CN (1) CN101036119B (zh)
DE (1) DE112005002432B4 (zh)
TW (1) TWI334099B (zh)
WO (1) WO2006039613A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7650483B2 (en) * 2006-11-03 2010-01-19 Arm Limited Execution of instructions within a data processing apparatus having a plurality of processing units
JP5111020B2 (ja) * 2007-08-29 2012-12-26 キヤノン株式会社 画像処理装置及びその制御方法
US8130501B2 (en) * 2009-06-30 2012-03-06 Teco-Westinghouse Motor Company Pluggable power cell for an inverter
WO2013077845A1 (en) * 2011-11-21 2013-05-30 Intel Corporation Reducing power consumption in a fused multiply-add (fma) unit of a processor
US9330432B2 (en) * 2013-08-19 2016-05-03 Apple Inc. Queuing system for register file access
US9632783B2 (en) * 2014-10-03 2017-04-25 Qualcomm Incorporated Operand conflict resolution for reduced port general purpose register
CN108196849A (zh) * 2018-01-12 2018-06-22 江苏华存电子科技有限公司 一种低延迟指令调度器
US11614942B2 (en) * 2020-10-20 2023-03-28 Micron Technology, Inc. Reuse in-flight register data in a processor
CN112463217B (zh) * 2020-11-18 2022-07-12 海光信息技术股份有限公司 超标量处理器中寄存器堆共享读端口的***、方法和介质
CN113703841B (zh) * 2021-09-10 2023-09-26 中国人民解放军国防科技大学 一种寄存器数据读取的优化方法、装置及介质
CN115640047B (zh) * 2022-09-08 2024-01-19 海光信息技术股份有限公司 指令操作方法及装置、电子装置及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5555432A (en) * 1994-08-19 1996-09-10 Intel Corporation Circuit and method for scheduling instructions by predicting future availability of resources required for execution

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5761476A (en) * 1993-12-30 1998-06-02 Intel Corporation Non-clocked early read for back-to-back scheduling of instructions
US6826704B1 (en) * 2001-03-08 2004-11-30 Advanced Micro Devices, Inc. Microprocessor employing a performance throttling mechanism for power management
JP3576148B2 (ja) * 2002-04-19 2004-10-13 株式会社半導体理工学研究センター 並列プロセッサ

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5555432A (en) * 1994-08-19 1996-09-10 Intel Corporation Circuit and method for scheduling instructions by predicting future availability of resources required for execution

Also Published As

Publication number Publication date
JP4699468B2 (ja) 2011-06-08
TW200622877A (en) 2006-07-01
US7395415B2 (en) 2008-07-01
US20060095728A1 (en) 2006-05-04
WO2006039613A1 (en) 2006-04-13
JP2008515117A (ja) 2008-05-08
DE112005002432B4 (de) 2009-05-14
DE112005002432T5 (de) 2007-08-16
CN101036119A (zh) 2007-09-12
TWI334099B (en) 2010-12-01

Similar Documents

Publication Publication Date Title
CN101036119B (zh) 为处理器中的指令提供源操作数的方法和装置
US8516280B2 (en) Parallel processing computer systems with reduced power consumption and methods for providing the same
CN100557570C (zh) 多处理器***
JP2908598B2 (ja) 情報処理装置
US5185868A (en) Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5784630A (en) Method and apparatus for processing data in multiple modes in accordance with parallelism of program by using cache memory
US6163838A (en) Computer processor with a replay system
US6442674B1 (en) Method and system for bypassing a fill buffer located along a first instruction path
US9886278B2 (en) Computing architecture and method for processing data
WO2000041070A1 (en) A computer processor having a replay unit
US20110283089A1 (en) modularized micro processor design
US20080320240A1 (en) Method and arrangements for memory access
EP2221718B1 (en) Distributed dispatch with concurrent, out-of-order dispatch
TW449720B (en) Routing dependent instructions to clustered execution units
US7315935B1 (en) Apparatus and method for port arbitration in a register file on the basis of functional unit issue slots
US20040117597A1 (en) Method and apparatus for providing fast remote register access in a clustered VLIW processor using partitioned register files
US20040064679A1 (en) Hierarchical scheduling windows
US20040064678A1 (en) Hierarchical scheduling windows
JP2001142700A (ja) パイプラインプロセッサにおける電力有効処理メカニズム
CN113703841B (zh) 一种寄存器数据读取的优化方法、装置及介质
CN117435551A (zh) 计算装置、存内处理存储装置及操作方法
US20080162870A1 (en) Virtual Cluster Architecture And Method
Abeledo Implementation of Nexus: Dynamic Hardware Management Support for Multicore Platforms

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111005

Termination date: 20180930

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