用于共享处理器资源的方法和设备的制作方法

文档序号:6557975阅读:128来源:国知局
专利名称:用于共享处理器资源的方法和设备的制作方法
技术领域
本发明一般地涉及处理器,并且更具体地涉及用于共享处理器资源的方法和设备。
背景技术
在传统的处理器中,不同类型的执行单元可以具有专用寄存器并且可以独立地运行。例如,整数执行单元(FXU)通常连接到一组专用通用寄存器(GPR),浮点执行单元(FPU)通常连接到一组专用浮点寄存器(FPR),向量执行单元(VMX)通常连接到一组专用向量寄存器(VPR),等等。
每组专用寄存器都包括各自的读端口和写端口。此外,通常限定每组专用寄存器的大小制作以使其适应最坏的情况。因此,在正常运行期间,根据处理器所执行的应用程序,每组专用寄存器中的许多寄存器可能一直都没有被用到。
由于需要与每组专用寄存器对应的读端口和写端口,针对最坏的情况限定每组专用寄存器的大小以及/或者采用彼此独立的执行单元,传统的处理器在硅面积的利用和功耗方面的效率很差。

发明内容
在本发明的第一方面,提供了用于共享处理器资源的第一种方法。该第一种方法包括步骤(1)将多个物理寄存器分组为至少一个阵列,其中该至少一个阵列的每一个阵列中的寄存器共享读端口和写端口,并且其中至少两种类型的执行单元连至该至少一个阵列中的每一个阵列;以及(2)在不同的时间在至少一个阵列中的至少一个寄存器中存储不同类型的数据,其中每个不同类型的数据都与至少一个不同的执行单元相关联。
在本发明的第二方面中,提供了用于共享处理器资源的第二种方法。该第二种方法包括步骤(1)将多个物理寄存器分组为第一阵列和第二阵列,其中第一阵列中的寄存器共享读端口和写端口,第二阵列中的寄存器共享读端口和写端口,并且第一阵列和第二阵列中的每一个阵列都连至不同类型执行单元的一个或多个部分;(2)允许第一阵列的寄存器在不同时间存储不同类型的数据;并且(3)允许第二阵列的寄存器在不同时间存储不同类型的数据。
在本发明的第三方面中,提供了一种处理器。该处理器包括(1)多个物理寄存器,其分组为至少一个阵列,其中该至少一个阵列的每一个阵列中的寄存器共享读端口和写端口;以及(2)至少两种类型的执行单元,其连至该至少一个阵列的每一个阵列。该处理器适合于在不同时间在该至少一个阵列的至少一个寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。
在本发明的第四方面中,提供了一种用于共享处理器资源的系统。该系统包括(1)存储器;(2)存储装置;以及(3)处理器,其连至存储器和存储装置。该处理器具有(a)多个物理寄存器,其分组为至少一个阵列,其中该至少一个阵列的每一个阵列中的寄存器共享读端口和写端口;以及(b)至少两种类型的执行单元,其连至该至少一个阵列的每一个阵列。该处理器适合于在不同时间在该至少一个阵列的至少一个寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。根据本发明的这些方面及其他方面,提供了很多其他的方面。
根据下列详细说明、所附权利要求和附图,本发明的其他特征和方面将变得更加显而易见。


图1是根据本发明实施例的包括第一示例性处理器的系统的框图。
图2是根据本发明实施例的在不支持同时运行多个线程的模式下运行时处理器所用的可用寄存器队列的框图。
图3是根据本发明实施例的在支持同时运行多个线程的模式下运行时处理器所用的可用寄存器队列的框图。
图4是根据本发明实施例的第二示例性处理器的框图。
图5示出了根据本发明实施例的一种共享处理器资源的方法。
具体实施例方式
本发明提供了一种方法和设备,用于共享诸如寄存器之类的处理器资源,以便减小处理器所需的硅面积和/或处理器所消耗的功率。更特别的是,本发明用统一的寄存器栈取代了传统处理器的专用寄存器,该寄存器栈可以包括共同分组为一个或多个阵列的多个寄存器(例如,GPR(通用寄存器,诸如整数寄存器),FPR(浮点寄存器),以及/或者VPR(向量处理器寄存器))。每个阵列都包括各自的读端口和写端口。与传统处理器相比,不同类型的执行单元可以连至统一的寄存器堆栈,从而共享寄存器和这些寄存器的读端口和/或写端口,这就减小了处理器所需的硅面积并进而减小了所消耗的功率。因此,统一的寄存器栈中的寄存器可以被指定为存储整数数据、浮点数据或向量数据。在一个实施例中,可以从统一的寄存器栈中构造一个或多个可用寄存器队列。当需要寄存器存储例如整数数据、浮点数据或向量数据时,处理器可以从一个队列的开始处分配寄存器来存储这些数据。处理器可以采用寄存器重命名(register renaming)来将这些寄存器的物理地址映射到架构的(architected)寄存器地址。一旦不再需要这些寄存器存储数据,就可以从寄存器中释放(unassigned)该架构的寄存器地址,并且可以将寄存器放在队列的末端。此后,可以采用该寄存器来存储任意类型的数据(例如,不同类型的数据)。
通过允许统一的寄存器栈中的寄存器在不同的时间存储不同类型的数据,统一的寄存器栈中的所有寄存器都可用于存储整数数据、浮点数据或向量数据。因此,例如,如果整数执行单元和浮点执行单元同时发生最坏的情况(例如,需要统一的寄存器栈中的所有寄存器的运算)时,可以根据需要将先前有可能已经分配为存储向量的未使用的寄存器分配为存储整数数据和/或浮点数据。由于所有类型的执行单元不太可能同时发生最坏的情况,所以包括在统一寄存器栈中的寄存器的总数不必考虑所有类型的执行单元都发生最坏情况的情形。因此,与传统的处理器相比,处理器所需的寄存器总数可以减少。此外,由于不同的执行单元可以共享读端口和/或写端口,因此这些端口的总数也可以减少。以这种方式,减小了处理器所需的硅面积并进而减小了功耗。作为替代或作为选择,连至一个或多个寄存器阵列的执行单元也可以共享逻辑,进一步减小了处理器所需的硅面积以及处理器所消耗的功率。
图1是根据本发明实施例的包括第一示例性处理器的系统的框图。参照图1,系统100可以是个人计算机、服务器或类似的装置,并且可以包括连至用于存储数据的存储器104的第一示例性处理器102和/或诸如硬盘驱动器或类似装置的存储装置106。第一示例性处理器102可以包括分组为一个或多个阵列110(仅示出了一个)的多个物理寄存器108(例如,GPR、FPR和/或VPR)。一个或多个阵列110中的每一个阵列中的寄存器108都共享读端口112和/或写端口114。多种类型的执行单元可以连至一个或多个阵列110中的每一个阵列。例如,两个或多个整数执行单元(FXU)116-118、浮点单元(FPU)120-122和/或向量执行单元(VMX)124-126,可以连至一个或多个阵列110中的每一个阵列的端口112、114。虽然处理器102包括了两个FXU116-118、两个FPU120-122和两个VMX124-126,但是还可以采用更多或更少的FXU、FPU和/或VMX。以这种方式,分组为一个或多个阵列110的多个物理寄存器108可以用作统一的寄存器栈。该统一的寄存器栈可以创建用于在GPR、FPR和/或VPR之间移动数据的自然通道(natural path)。此外,不需要特定的通道用于在移动执行单元之间移动数据,从而便于在不同执行单元之间移动数据。
FXU116-118、FPU120-122和/或VMX124-126可以包括逻辑、寄存器、存储器或类似装置的任意合适的组合,并且在至少一个实施例中可以包括专用集成电路(ASIC)或作为专用集成电路的一部分。在一些实施例中,两个或多个执行单元116-126可以共享逻辑。例如,适合于执行复杂计算的向量执行单元124可以与一个或多个FPU120-122共享逻辑,而适合于执行简单计算的向量执行单元126可以与一个或多个FXU116-118共享逻辑(尽管执行单元逻辑可以被不同地共享)。通过在两个或多个执行单元116-126之间共享逻辑,第一示例性处理器102总共可以需要很少的逻辑,从而减小了处理器102所消耗的功率和/或其所需的硅面积。
作为替代或作为选择,一个或多个阵列110中的每一个阵列中的寄存器108都可以共享读端口112和/或写端口114。通过在每一个阵列110的寄存器108之间共享读端口112和/或写端口114,可以减少第一示例性处理器102所需的读端口112和/或写端口114的总数。因此,可以减少这些读端口112和写端口114所需逻辑的总量,从而减小了处理器102所消耗的功率和/或所需的硅面积。
包括在阵列110中的寄存器108可以具有一种或多种大小。例如,寄存器108可以是64位宽或128位宽(尽管可以采用不同的寄存器大小)。此外,处理器102可以适合于以第一模式或第二模式运行,其中第一模式支持同时运行多个线程(例如,两个线程),第二模式不支持这种处理。该处理器运行模式可以基于配置期间所提供的参数。以这种方式,阵列110可以包括存储整数数据的32个64位寄存器(例如,通用寄存器(GPR)),存储浮点数据的32个64位寄存器(例如,浮点寄存器(FPR)),以及存储对应于第一线程的向量数据的32个128位寄存器(例如,VPR)。类似地,阵列110可以包括存储整数数据的32个64位寄存器(例如,GPR),存储浮点数据的32个64位寄存器(例如,FPR),以及存储对应于第二线程的向量数据的32个128位寄存器(例如,VPR)。
然而,阵列110中的寄存器108还可以用来根据需要以不同的方式存储数据。例如,可以使用更多或更少的寄存器(例如,GPR、FPR和/或VPR)来存储整数数据、浮点数据和/或向量数据。更具体而言,先前用于一种类型的数据的寄存器108可以在稍后用来(例如,分配为)存储另一类型的数据。处理器102可以包括诸如分配逻辑(dispatchlogic)128之类的适合于根据需要来分配寄存器的逻辑。下面将参照图2和图3,分别描述运行在支持同时运行两个线程的模式下时和运行在不支持这种处理的模式下运行时处理器102对一个或多个阵列110中的寄存器108的分配。
通过以这种方式共享资源,与传统处理器相比,处理器102提供了更大的灵活性。例如,寄存器的分配可以根据应用程序的需要而进行动态调整。更具体而言,如上所述,由于阵列110中的寄存器108可以用来在不同时间存储不同类型的数据,所以如果整数执行单元和浮点执行单元同时发生最坏的情况以至于需要统一的寄存器栈中所有的寄存器都存储这些数据时,可以根据需要将先前有可能已经分配为存储向量的未使用的寄存器分配为存储整数数据和/或浮点数据。由于所有执行单元不太可能同时发生最坏的情况,所以包括在阵列110中的寄存器总数不必考虑全部三种类型的数据都发生最坏情况的情形。因此,与传统的处理器相比,可以减少处理器102所需的寄存器108的总数,进而减小了处理器102所消耗的功率和/或其所需的硅面积。
在运行期间,一个或多个阵列110可以包括可用来存储任意类型的数据的多个寄存器108或一个寄存器池108(例如,整数数据、浮点数据或向量)。如果寄存器108当前没有存储数据,则该寄存器108可用来存储数据。在一些实施例中,所有寄存器(例如,GPR、FPR和VPR)最初都可以在可用寄存器池中。处理器102可以管理可用寄存器池,以便分配逻辑128能够根据需要分配可用寄存器来存储任意类型的数据。以这种方式,可以在所有类型的执行单元之间共享这些可用寄存器池。更具体而言,图2是根据本发明实施例的在不支持同时运行多个线程的模式下运行时处理器102所用的可用寄存器队列的框图。参考图2,当运行在不支持同时运行多个线程的模式下时,处理器102可以将可用(或空闲)寄存器池108排列为队列200。队列200可以包括在可用寄存器队列200中指向下一个可用寄存器204的头指针202。下一个可用寄存器204的一部分可以存储在队列200中指向下一个可用寄存器204之后的可用寄存器206的指针。以这种方式,寄存器206的一部分可以存储在队列200中指向下一个寄存器(未示出)的指针,等等,直到到达队列中的最后一个寄存器208。队列200可以包括尾指针,其在可用寄存器队列200中指向最后一个可用寄存器208。
分配单元128可以从队列200中去掉可用寄存器(其可以是诸如GPR,FPR或VPR之类的任意类型的寄存器)并将这些寄存器分配为用于挂起的指令。例如,分配单元128可以从队列200中去掉第一寄存器204并将这些寄存器分配为用于挂起的指令。在从队列200中去掉第一寄存器204时,头指针202可以被更新为在队列200中指向下一个寄存器206。用寄存器204中的指针来更新头指针202(例如,指向寄存器206)。以这种方式,这种下一个寄存器206就成了队列200中的第一寄存器。在将寄存器分配为用于挂起的指令时(或在对应于挂起的指令的数据已经被存储在寄存器中之后),处理器1 02可以采用(例如,动态地)寄存器重命名,其中将物理寄存器的地址映射到架构的(或可编程-可编址的)寄存器地址。物理寄存器地址可以表示寄存器的硬件地址,而架构的寄存器地址可以表示计算机程序作者和/或编译器软件已知的地址,并且因此这种地址可以被编码为由处理器102执行的指令。因此,队列200中的可用寄存器204-208可以用作可以被重命名的寄存器(例如,重命名寄存器),并且因此队列200用作重命名队列。
此外,当不再需要先前分配为存储数据的寄存器存储数据时,这些寄存器可以被放置到可用寄存器队列200中。更具体而言,可以解除物理寄存器地址到架构的地址的映射,并且寄存器可以被放置到队列200中。例如,这些寄存器可以被放置到队列200的末端。可以对队列200中先前的最后一个寄存器中的指针存储为指向添加到队列200中的寄存器(例如,寄存器208)。此外,尾指针202还可以被更新为指向添加到队列200末端的寄存器(例如,寄存器208)。
以这种方式,当处理器102运行一个单独的线程时,可以根据需要从队列200中分配一个或多个阵列110中的物理寄存器108来在不同时间存储不同类型的数据(例如,整数数据、浮点数据或向量)。虽然寄存器204-208从队列200的开始处进行分配(例如,去掉)并被放置到队列200的末端,但是,在一些实施例中,寄存器还可以以不同的方式在队列200上进行分配和/或放置。此外,虽然处理器102将阵列110中的可用寄存器108组织为队列200或链接列表,但是处理器102还可以采用不同类型的结构来组织寄存器108。
以这种方式,处理器102可以管理可用寄存器池。在一些实施例中,大多数或全部的可用寄存器(例如,GPR、FPR和/或VPR)最初都被放置在重命名寄存器队列200中。不同的执行单元类型(例如,FXU116-118、FPU120-122和/或VMX124-126)可以从队列中请求寄存器,并且作为响应,处理器102可以根据需要从队列中分配寄存器。
当任意类型的指令完成时,将正在运行的目标寄存器声明为当前的架构的寄存器。如果先前已经将一些其他的物理寄存器分配为同一架构的寄存器,那么这些物理寄存器可以被返回到重命名寄存器队列200中。在传统的处理器中,每个执行单元类型从可用于该类型执行单元的寄存器的独立队列中请求并接收寄存器,与传统的处理器相比,本发明使得不同类型的执行单元可以共享来自公用存储池(例如,队列200)中的寄存器(例如,GPR、FPR和/或VPR)。因此,在第一时间期间,特定的物理寄存器可以被重命名为GPR并分配为存储整数数据。然而,在第一时间之后的第二时间期间,该物理寄存器可以被重命名为FPR并分配为存储浮点数据。以这种方式,可以提高和/或优化诸如可用寄存器之类的处理器资源的使用效率,以便不会因缺少可用寄存器而限制运行。
相反,图3是根据本发明实施例的运行在支持同时运行多个线程的模式下时处理器所使用的可用寄存器队列的框图。参考图3,当运行在支持同时运行多个线程的模式下时,处理器102可以将可用(或空闲)寄存器池108排列为第一可用寄存器队列300和第二可用寄存器队列302。第一可用寄存器队列300和第二可用寄存器队列302中的每一个阵列的通用结构和操作类似于图2的队列200,因此在此不再详细描述。处理器102可以从第一队列300中分配寄存器304-308用于对应于第一线程的指令。更具体而言,分配单元128可以从第一队列300中去掉可用寄存器(例如,寄存器304),并将这些寄存器分配用于挂起的整数或浮点(例如,非向量)指令。类似地,处理器102可以从第二队列302中分配寄存器310-314用于对应于第二线程(例如,假定处理器102同时运行两个线程)的指令。更具体而言,分配单元128可以从第二队列302中去掉可用寄存器(例如,寄存器310),并将这些寄存器分配用于挂起的整数或浮点(例如,非向量)指令。如图2所示,当运行在不支持同时运行多个线程的模式下时,可以从队列200中分配寄存器用于挂起的向量指令。然而,相反,当运行在支持同时运行多个线程的模式下时,处理器102就从第一队列300和第二队列302中分配用于寄存器304-308、310-314向量指令。
虽然处理器102在支持同时运行多个线程的模式下运行,但是有时处理器102可以仍运行一个单独的线程。在这种时候,处理器102可以从第一队列300中分配寄存器304-308用于挂起的整数或浮点(例如,非向量)指令,从第一队列300和第二队列302中分配寄存器304-308、310-314用于挂起的向量指令。
虽然第一示例性处理器102包括分组为一个阵列110的多个物理寄存器108,但是在一些实施例中,多个寄存器108可以分组为多个阵列。图4是根据本发明实施例的第二示例性处理器的框图。例如,参考图4,第二处理器400可以包括用于存储多个寄存器108的第一部分的第一阵列402和用于存储多个寄存器108的第二部分的第二阵列404。第一阵列402的寄存器108可以共享读端口和/或写端口。在一些实施例中,第一阵列402的寄存器108共享6个读端口406-416和6个写端口418-428(尽管可以使用更多或更少的读端口和/或写端口)。类似地,第二阵列404的寄存器108可以共享读端口和/或写端口。在一些实施例中,第二阵列404的寄存器108共享6个读端口430-440和6个写端口442-452(尽管可以使用更多或更少的读端口和/或写端口)。
第一阵列402和第二阵列404可以连至分配逻辑128。此外,第一阵列402和第二阵列404中的每一个阵列都可以连至不同类型的执行单元的一个或多个部分。此外,可以在不同类型的执行单元之间共享诸如算术逻辑单元(ALU)之类的逻辑和硬件乘法器。例如,第一阵列402可以通过一些读端口(例如,第一读端口406至第三读端口410)连至被第一阵列406的寄存器108共享的第一FXU454。第一FXU454的输出端可以连至第一阵列402的第一写端口418和第二阵列404的第一写端口442。此外,第一FXU454的输出端口可以连至第一存储乘法器458的第一输入端456。
类似地,第一阵列402可以通过被第一阵列406的寄存器108共享的一些读端口(例如,第四读端口412至第六读端口416)连至第一FPU460。第一FPU460的输出端可以连至第一阵列402的第二写端口420和第二阵列404的第二写端口444。此外,第一FPU460的输出端可以连至第一存储乘法器458的第二输入端462。第一存储乘法器458的输出端464可以连至高速缓存存储器466(例如,处理器400的L1数据缓存)。第一存储乘法器458适合于选择性地将第一输入端456或第二输入端462收到的数据输出到高速缓存存储器466。高速缓存存储器466的第一输出端可以连至第一阵列402的第三写端口422和第二阵列404的第三写端口446。
第二阵列404经由被第二阵列404的寄存器108共享的一些读端口(例如,第一读端口430至第三读端口434)连至第二FXU468。第二FXU468的输出端可以连至第二阵列404的第四写端口448以及第一阵列402的第四写端口424。此外,第二FXU 468的输出端可以连至第二存储乘法器472的第一输入端470。
类似地,第二阵列404可以经由一些被第二阵列404的寄存器108共享的读端口(例如,第四读端口436至第六读端口440)连至第二FPU474。第二FPU474的输出端可以连至第二阵列404的第五写端口450以及第一阵列402的第五写端口426。此外,第二FPU474的输出端可以连至第二存储乘法器472的第二输入端476。第二存储乘法器472的输出端478可以连至高速缓存存储器466。第二存储乘法器472适合于选择性地将第一输入端470或第二输入端476收到的数据输出到高速缓存存储器466。高速缓存存储器466的第二输出端可以连至第二阵列404的第六写端口452以及第一阵列402的第六写端口428。
将经由写端口(例如,第一写端口418至第三写端口422)输入到第一阵列402的GPR和/或FPR的数据经由写端口(例如,第一写端口442至第三写端口446)复制到第二阵列404的GPR和/或FPR以及/或者将经由写端口(例如,第四写端口448至第六写端口452)输入到第二阵列404的GPR和/或FPR的数据经由写端口(例如,第四写端口424至第六写端口428)复制到第一阵列402的GPR和/或FPR使得处理器400的执行单元能够被更有效地利用。下面将参照图5来描述这种有效的利用。
此外,第二示例性处理器400可以包括第一VMX480(例如,用于执行简单操作的VMX),该第一VMX480连至第一阵列402的一些读端口(例如,第一读端口406至第三读端口410)和第二阵列404的一些读端口(例如,第一读端口430至第三读端口434)。如图所示,第一VMX480可以与第一FXU454和/或第二FXU468共享逻辑。例如,第一VMX480可以包括第一FXU454和/或第二FXU468。
此外,第二示例性处理器400可以包括第二VMX482(例如,用于执行复杂操作的VMX),该第二VMX482连至第一阵列402的一些读端口(例如,第四读端口412到第六读端口416)和第二阵列404的一些读端口(例如,第四读端口436到第六读端口440)。如图所示,第二VMX482可以与第一FPU460和/或第二FPU474共享逻辑。例如,第二VMX482可以包括第一FPU460和/或第二FPU474。
通过在第一阵列402的寄存器108之间共享读端口406-416和/或写端口418-428,以及通过在第二阵列404的寄存器108之间共享读端口430-440和/或写端口442-452,处理器400总共需要更少的读端口和/或写端口,从而总共需要更少的逻辑。因此,减小了处理器400所消耗的功率和/或其所需的硅面积。作为替代或作为选择,通过在不同类型的执行单元之间(或之中)共享逻辑,处理器400可以总共需要更少的逻辑,从而减小了处理器400所消耗的功率和/或其所需的硅面积。
虽然在上面描述了包括分组为多个阵列的寄存器的第二示例性处理器400的组件的互连性的细节,但是,应当理解,第一示例性处理器102的组件也可以以类似方式连接。
现在将参考图1-图4以及图5来描述用于共享处理器资源的装置的操作,其中图5示出了根据本发明实施例的用于共享处理器资源的一种方法。参考图5,在步骤502中,方法500开始。在步骤504中,多个物理寄存器被分组为至少一个阵列,其中该至少一个阵列中的每一个阵列中的寄存器共享读端口和/或写端口,并且其中至少两种类型的执行单元连至该至少一个阵列。更具体而言,可以如第一处理器102的阵列110所示地对多个物理寄存器108进行共同分组。以这种方式,阵列110中的物理寄存器108可以共享读端口112和/或写端口114,并利用这些端口112、114连至两种或更多种类型的执行单元,诸如整数执行单元(FXU)116-118、浮点执行单元(FPU)120-122和向量执行单元(VMX)124-126。如上所述,在一些实施例中,可以在两种或多种类型的执行单元116-126之间共享逻辑。
将包括在第一示例性处理器102中的多个寄存器108分组为阵列110是示例性的,并且因此可以采用不同的排列来实现上述优点。例如,在一些实施例中,多个物理寄存器108可以被分组为多个阵列。更具体而言,物理寄存器108可以被分组为第一阵列402和第二阵列404,其中第一阵列402中的寄存器108共享读端口和写端口,第二阵列404中的寄存器共享读端口和写端口,并且第一阵列402和第二阵列404中的每一个阵列都连至不同类型的执行单元的一个或多个部分。更具体而言,可以如图4的第一阵列402和第二阵列404所示地对多个物理寄存器进行共同分组。以这种方式,第一阵列402中的物理寄存器108可以共享连至第一阵列402的读端口406-416和/或写端口418-428,并连至诸如FXU454、FPU460和VMX480、482之类的不同类型的执行单元的一个或多个部分。类似地,第二阵列404中的物理寄存器108可以共享连至第二阵列404的读端口430-440和/或写端口442-452,并连至诸如FXU468、FPU474和VMX480、482之类的不同类型的执行单元的一个或多个部分。
在步骤506中,在不同时间在至少一个阵列中的至少一个寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。如上所述,根据运行模式,处理器102可以根据需要构造一个或多个可用寄存器队列,可以从该队列中为指令分配寄存器。例如,当运行在不支持同时运行多个线程的第一模式下时,处理器102可以构造一个单独的队列200,可以从该队列中分配寄存器。以这种方式,处理器102(例如,处理器102的分配逻辑128)可以根据需要从队列200中分配(例如,动态地)物理寄存器108,并将物理寄存器108的地址映射到架构的寄存器。以这种方式,例如,在第一时间期间,处理器102可以从队列200中分配第一物理寄存器108以存储整数数据、浮点数据和向量中的一种数据,并且可以将这些数据存储到所分配的寄存器中。作为替代,在一些实施例中,可以在将数据存储到所分配的寄存器中之后再映射到架构的寄存器地址。
一旦不再需要存储这些寄存器108中所存储的数据,处理器102就会解除物理寄存器地址到架构的寄存器地址的映射。此后,处理器102可以将这种寄存器108(例如,最新的可用物理寄存器)放置到可用寄存器108的队列200中。例如,处理器102可以将最新的可用物理寄存器108放置到队列200的末尾,以便其他物理寄存器在该最新的可用物理寄存器之前。在从队列200中分配最新的可用寄存器之前的其他物理寄存器来存储数据之后,在第二时间期间(例如,与第一时间不同的),处理器102可以再次分配最新的可用物理寄存器来存储数据。与处理器102分配寄存器108来存储整数数据、浮点数据和向量中的一种数据的第一时间相比,在第二时间期间,处理器102可以分配寄存器108来存储整数数据、浮点数据和向量中的其余数据。以这种方式,这种物理寄存器108可以在不同时间被用来存储不同类型的数据。如上所述,利用物理寄存器108在不同时间存储不同类型的数据的这种灵活性使处理器102能够减少存储不同类型的数据所需的寄存器总数。
作为替代,当在支持同时运行多个(例如,两个)线程的第二模式下运行时,处理器102可以构造第一队列300,从该队列300中可以分配寄存器用于对应于第一线程(例如,线程0)的指令,还可以构造第二队列302,从该队列302中可以分配寄存器用于对应于第二线程(例如,线程1)的指令。为了支持同时运行两个线程,可以以类似于上面针对在不支持同时运行多个线程的模式下运行时处理器102所构造的队列200而描述的方式,从每个相应的队列300、302中分配寄存器用于整数指令或浮点指令。然而,与第一模式相比,当处理器102在第二模式下运行时,为需要较大寄存器的向量指令分配寄存器时,处理器102可以从第一队列300和第二队列302中的每一个阵列中分配寄存器以满足这种需求。以这种方式,处理器102可以根据第一线程的需要从第一队列300中分配第一寄存器,并根据第二线程的需要从第二队列302中分配第一寄存器。如上所述,处理器400可以在执行单元之间共享逻辑。因此,向量指令可以请求第一FXU 454和第二FXU 468完成简单的向量运算,或请求第一FPU 460和第二FPU474完成复杂的向量运算。因此,每个FXU454、468和/或FPU460、474都有可能需要将计算分割为较小的片段(slice)以支持对各向量元素的运算。可以通过在每个执行单元中分解进位传播(进位传播)来分割计算。此外,在一些实施例中,适合于对向量元素进行重新排序的重排序的置换单元(未示出)可以与FXU454、468连至相同的端口,并从而与FXU454、468共享这些端口。
当不再需要从第一队列300和/或第二队列302中所分配的寄存器存储这些数据时,所分配的寄存器可以被返回到它们各自的队列300、302。此后,这些寄存器可以被分配为存储与这些寄存器先前所存储的数据的类型不同的相应类型的数据。
作为替代,虽然处理器102在第二模式下运行,但是处理器102可以运行一个单独的线程。当运行一个单独的线程时,例如,处理器102可以以类似于上面针对在不支持同时运行多个线程的模式下运行时处理器102所构造的队列200而描述的方式从第一队列300中分配寄存器用于整数指令或浮点指令。然而,相反,当在第二模式下运行一个单独的线程时,写入到从第一队列分配的寄存器中的数据可以被写入到(例如,复制到)从第二队列中分配的寄存器中,并且反之亦然。如上所述,阵列110中的寄存器的写端口114可以被共享,其中该阵列110的一些寄存器包括在第一队列300中并且该阵列110的一些寄存器包括在第二队列302中,因此,写入到从第一队列300中分配的寄存器的数据可以被复制到从第二队列302中分配的寄存器中。更具体而言,在这种模式下,两个寄存器阵列都具有复制内容。处理器102、400可以成对地分配寄存器(例如,当分配GPRn时,就在两个阵列中都分配该寄存器)。以这种方式,当在第二模式下运行一个单独的线程时,使附加寄存器端口112、114成为线程可用的端口,并且因此连至第一阵列402或第二阵列404的寄存器的执行单元116-126可以用来支持来自单线程应用程序的指令,从而有效地使用处理器102的执行单元116-126。因此,处理器400在第二模式下同时运行两个线程时看上去是每线程双发射(dual-issue)的设备变成了处理器400在第二模式下运行一个单独的线程时的四发射(four-issue)设备。以这种方式,处理器400可以有效地使用逻辑以便单线程应用程序和多线程应用程序可以增加和/或最大化处理器资源的利用率。
当在第二模式下运行一个单独的线程时,在不再需要从第一队列300和/或第二队列302中分配的寄存器存储这些数据时,所分配的寄存器可以被返回到其各自的队列300、302中。此后,这些寄存器可以被分配为存储与这些寄存器先前所存储的数据的类型不同的相应类型的数据。
此后,执行步骤508。在步骤508中,方法500结束。虽然上面参考将多个寄存器示出为分组为阵列110的第一示例性处理器102而描述了方法500,但是应当理解该方法也可以被诸如图4的第二示例性处理器400之类的将物理寄存器分组为多个阵列的其他处理器使用。
在任一情况下,处理器102、400可以在上述第一模式和第二模式下运行并以上述方式构造一个或多个可用物理寄存器队列。例如,第二示例性处理器400的第一阵列402可以用来支持第一线程(例如,线程0)而第二示例性处理器400的第二阵列404可以用来支持第二线程(例如,线程1)。这就导致了一个FXU和一个FPU相对于每个线程的亲缘性(affinity)。例如,第一FXU454和第一FPU460通常可以运行对应于第一线程的指令,并且第二FXU468和第二FPU474通常可以运行对应于第二线程的指令。以这种方式,第一寄存器阵列402和第二寄存器阵列404可以具有不同的内容。可以根据需要将每个阵列402、404中的可用寄存器独立地分配给各自所支持的线程。然而,对于向量指令来说,处理器400可以一前一后地访问第一寄存器阵列402和第二寄存器阵列404以支持向量指令所需的寄存器宽度(例如,128位)。每个阵列中的附加寄存器可以支持第二线程。更具体而言,对用于向量运算的可用寄存器的请求可以被提交(presented)给第一队列300和第二队列302。只要将从每个阵列中所选的物理寄存器映射到合适的架构的寄存器,就不必分配每个阵列中的同一物理寄存器。然后,随后对这些由所选的寄存器构成的VPR的访问可以请求对两个寄存器阵列进行独立的地址控制。
通过采用方法500,处理器102、400可以共享资源从而减小处理器102、400所消耗的功率和/或其所需的硅面积。更具体而言,该方法和设备可以使对各种资源的硬件的重复使用最大化,以便减少处理器所需的全部逻辑。例如,可以减少处理器所需的寄存器、读端口和/或写端口以及/或者执行单元逻辑的总数。服务器可以采用本发明的方法和设备从而改善商业性应用程序,并且/或者个人计算机可以采用本发明的方法和设备从而改善客户应用程序。
前面的描述仅仅公开了本发明的示例性实施例。在不偏离本发明范围的情况下对以上所公开的设备和方法进行修改对于本领域的普通技术人员来说将是显而易见的。例如,在一些实施例中,如果不需要支持计算操作,则FXU454、468或FPU460、474中的任意单元都可以重新用来支持载入操作和存储操作。以这种方式,可以减少寄存器阵列402、404所需的读端口406-416、430-440的数量。此外,处理器400可以通过重新使用用于地址计算的算术构造模块而有效地使用逻辑。此外,在一些实施例中,包括在统一的寄存器栈中的多个寄存器可以调整为支持用于对各种架构的寄存器进行重命名的附加寄存器。
由于寄存器(例如,GPR、FPR和VPR)可以共享公用阵列,因此本方法和设备可以实现寄存器的重命名。例如,如果不是正在使用特定的执行单元类型,则利用寄存器重命名,可以使该执行单元类型的所有寄存器可以被当前的执行单元使用。因此,对于有可能没有被向量化的应用程序来说,利用寄存器重命名,可以使VPR可以被执行整数运算和/或浮点运算的执行单元使用。对于仅仅需要整数运算的应用程序来说,可以使FPR可以被执行整数运算和/或向量运算的执行单元使用。对于需要在某种程度上使用(不频繁地使用)寄存器类型的应用程序来说,该类型的未使用的寄存器可以重新分配为重命名寄存器(例如,可以作为不同类型的寄存器而使用)。此外,对于单线程应用程序来说,利用寄存器重命名,可以对分配给第二线程的VPR寄存器进行重新分配(如果未被使用的话)。
此外,在一些实施例中,处理器可以包括表示32位寄存器×8字节×2线程=512字节的GPR,表示32位寄存器×8字节×2线程=512字节的FRP,以及表示32位寄存器×16字节×2线程=1024字节的VPR。因此,总共2048字节可以包括在一个单独的阵列中,这2048个字节可以被分成2×64位的片段。这些阵列可以包括总共12个读端口和/或12个写端口。在第二模式下,每个线程都可以具有一个FXU和一个FPU的亲缘性,从而不再需要另一1024字节。此外,当在第二模式下运行一个单独的线程时,存储在对应于第一线程的GPR和/或FPR中的内容可以被复制到对应于第二线程的GPR和/或FPR中。利用寄存器重命名,先前用来存储第一类型的数据的未使用的寄存器可以被分配为存储第二类型的数据。以这种方式,用于重命名的每线程32个寄存器可用于纯整数应用程序。应该注意到,VMX单元可能需要寄存器对。此外,用于重命名的32个寄存器可以用于单线程应用程序,64个寄存器可以用于纯整数应用程序,用于重命名的每线程64个寄存器可以用于不使用VMX的应用程序。
当运行同步线程时,本方法和设备的处理器可以在每周期每线程上运行一个浮点运算、一个整数运算以及一个分支运算。载入或存储操作可以替代浮点运算和/或整数运算。该处理器可以执行最多每线程一个存储操作,以及最多两个线程两个总载入操作。当运行一个单独的线程时,本方法和设备的处理器可以在每个周期运行两个浮点运算、两个整数运算和一个分支运算。载入存储操作可以替代浮点运算和/或整数运算。处理器可以执行最多两个载入操作和两个存储操作。虽然在上面描述了对包括在一些实施例中的处理的设计,但是在其他实施例中,可以对处理器进行不同的配置。例如,一个或多个上述参数可以是不同的。
如上所述,在一些实施例中,处理器可以包括第一向量执行单元480,其可以采用第一整数执行单元454和第二整数执行单元468来执行简单的指令或置换指令。该处理器可以包括第二向量执行单元482,其可以使用第一浮点单元460和第二浮点单元474来执行复杂的指令。载入和存储操作可以由第一执行单元454和第二执行单元468执行。
以这种方式,本方法和设备可以提供的优点(例如,与传统的处理器相比)诸如显著地减小所需的硅面积和所消耗的功率,将寄存器资源合并为一个或多个阵列,从而使所需的读端口和写端口的总数最小,以及/或者不需要附加寄存器就可以采用寄存器重命名。此外,通过允许将未被第一执行单元使用的寄存器分配为用于第二更活跃的执行单元的重命名寄存器,重新将分配给空闲线程的寄存器分配为用于活跃的线程的重命名寄存器,本方法和设备可以提高资源的利用率和/或使资源的利用率最大。以这种方式,可以根据多执行单元之间的工作负载需求来对全局重命名寄存器池进行重新分配。因此,可以不需要附加寄存器就实现寄存器重命名,并且可以根据需要来应用重命名寄存器,使得更多可用寄存器可应用于重要的代码。本方法和设备可以支持向量应用程序,而不会对有可能不使用向量的应用程序形成严重的负面影响,并且可以支持多线程应用程序,而不会对非多线程应用程序形成严重的负面影响。
因此,尽管已经结合本发明的示例性实施例对本发明进行了公开,但是应当理解,在所附权利要求所限定的本发明的本质和范围内可以包括其他的实施例。
权利要求
1.一种共享处理器资源的方法,包括将多个物理寄存器分组为至少一个阵列,其中所述至少一个阵列的每一个阵列中的寄存器共享读端口和写端口,并且其中至少两种类型的执行单元连至所述至少一个阵列的每一个阵列;以及在不同时间在所述至少一个阵列的至少一个所述寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。
2.根据权利要求1所述的方法,其中在不同时间在所述至少一个阵列的至少一个寄存器中存储不同类型的数据包括从所述至少一个阵列中构造至少一个可用物理寄存器队列;以及在第一时间期间,从所述至少一个可用寄存器队列中的一个队列中分配第一物理寄存器来存储第一种类型的数据。
3.根据权利要求2所述的方法,其中从所述至少一个可用寄存器队列中的一个队列中分配第一物理寄存器来存储第一种类型的数据包括将所述第一物理寄存器的地址映射到架构的寄存器地址;以及还包括在所述第一物理寄存器中存储所述第一种类型的数据。
4.根据权利要求3所述的方法,还包括当不再需要存储所述第一物理寄存器中所存储的所述第一种类型的数据时,解除所述第一物理寄存器的地址到所述架构的寄存器地址的映射;将所述第一物理寄存器放置到所述至少一个可用寄存器队列中的一个队列中;以及在不同于所述第一时间的第二时间期间,分配所述第一物理寄存器来存储第二种类型的数据;其中分配所述第一物理寄存器来存储第二种类型的数据包括将所述第一物理寄存器的地址映射到架构的寄存器地址。
5.根据权利要求2所述的方法,其中从所述至少一个阵列中构造至少一个可用物理寄存器队列包括从适合于存储对应于第一线程的数据的至少一个阵列中构造第一可用物理寄存器队列;以及从适合于存储对应于第二线程的数据的至少一个阵列中构造第二可用物理寄存器队列;以及从所述至少一个可用寄存器队列中的一个队列中分配第一物理寄存器来存储第一种类型的数据包括从所述第一可用物理寄存器队列中分配第一物理寄存器来存储数据;以及从所述第二可用物理寄存器队列中分配第一物理寄存器来存储相同的第一种类型的数据。
6.根据权利要求1所述的方法,还包括在连至所述至少一个阵列中的一个阵列的所述不同类型执行单元之间共享逻辑。
7.一种处理器,包括多个物理寄存器,其分组为至少一个阵列,其中所述至少一个阵列的每一个阵列中的寄存器共享读端口和写端口;以及至少两种类型的执行单元,其连至所述至少一个阵列的每一个阵列;所述处理器适合于在不同时间在所述至少一个阵列的至少一个所述寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。
8.根据权利要求7所述的处理器,其中所述处理器还适合于从所述至少一个阵列中构造至少一个可用物理寄存器队列;以及在第一时间期间,从所述至少一个可用寄存器队列中的一个队列中分配第一物理寄存器来存储第一种类型的数据。
9.根据权利要求8所述的处理器,其中所述处理器还适合于将所述第一物理寄存器的地址映射到架构的寄存器地址;以及在所述第一物理寄存器中存储所述第一种类型的数据。
10.根据权利要求9所述的处理器,其中所述处理器还适合于当不再需要存储所述第一物理寄存器中所存储的所述第一种类型的数据时,解除所述第一物理寄存器的地址到所述架构的寄存器地址的映射;将所述第一物理寄存器放置到所述至少一个可用寄存器队列中的一个队列中;在不同于所述第一时间的第二时间期间,分配所述第一物理寄存器来存储第二种类型的数据;以及将所述第一物理寄存器的地址映射到架构的寄存器地址。
11.根据权利要求8所述的处理器,其中所述处理器还适合于从适合于存储对应于第一线程的数据的至少一个阵列中构造第一可用物理寄存器队列;从适合于存储对应于第二线程的数据的至少一个阵列中构造第二可用物理寄存器队列;从所述第一可用物理寄存器队列中分配第一物理寄存器来存储第一种类型的数据;以及从所述第二可用物理寄存器队列中分配第一物理寄存器来存储相同的数据。
12.根据权利要求7所述的处理器,其中所述处理器还适合于在连至所述至少一个阵列中的一个阵列的所述不同类型执行单元之间共享逻辑。
13.一种系统,包括存储器;存储装置;以及处理器,其连至所述存储器和所述存储装置,所述处理器具有多个物理寄存器,其分组为至少一个阵列,其中所述至少一个阵列的每一个阵列中的寄存器共享读端口和写端口;以及至少两种类型的执行单元,其连至所述至少一个阵列的每一个阵列;所述处理器适合于在不同时间在所述至少一个阵列的至少一个所述寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。
14.根据权利要求13所述的系统,其中所述处理器还适合于从所述至少一个阵列中构造至少一个可用物理寄存器队列;以及在第一时间期间,从所述至少一个可用寄存器队列中的一个队列中分配第一物理寄存器来存储第一种类型的数据。
15.根据权利要求14所述的系统,其中所述处理器还适合于将所述第一物理寄存器的地址映射到架构的寄存器地址;以及在所述第一物理寄存器中存储所述第一种类型的数据。
16.根据权利要求15所述的系统,其中所述处理器还适合于当不再需要存储所述第一物理寄存器中所存储的所述第一种类型的数据时,解除所述第一物理寄存器的地址到所述架构的寄存器地址的映射;将所述第一物理寄存器放置到所述至少一个可用寄存器队列中的一个队列中;在不同于所述第一时间的第二时间期间,分配所述第一物理寄存器来存储第二种类型的数据;以及将所述第一物理寄存器的地址映射到架构的寄存器地址。
17.根据权利要求14所述的系统,其中所述处理器还适合于从适合于存储对应于第一线程的数据的至少一个阵列中构造第一可用物理寄存器队列;从适合于存储对应于第二线程的数据的至少一个阵列中构造第二可用物理寄存器队列;从所述第一可用物理寄存器队列中分配第一物理寄存器来存储第一种类型的数据;以及从所述第二可用物理寄存器队列中分配第一物理寄存器来存储相同的数据。
18.根据权利要求13所述的系统,其中所述系统还适合于在连至所述至少一个阵列中的一个阵列的所述不同类型执行单元之间共享逻辑。
19.一种共享处理器资源的方法,包括将多个物理寄存器分组为第一阵列和第二阵列,其中所述第一阵列中的寄存器共享读端口和写端口,所述第二阵列中的寄存器共享读端口和写端口,并且所述第一阵列和所述第二阵列中的每一个阵列都连至不同类型的执行单元的一个或多个部分;允许所述第一阵列的寄存器在不同时间存储不同类型的数据;以及允许所述第二阵列的寄存器在不同时间存储不同类型的数据。
20.根据权利要求19所述的方法,其中允许所述第一阵列的寄存器在不同时间存储不同类型的数据包括构造所述第一阵列的可用物理寄存器队列;以及在第一时间期间,从所述第一阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据;允许所述第二阵列中的寄存器在不同时间存储不同类型的数据包括;从所述第二阵列中构造可用物理寄存器队列;以及在第一时间期间,从所述第二阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据;从所述第一阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据包括从所述第一阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中对应于处理器运行的第一线程的一种类型的数据;以及从所述第二阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据包括从所述第二阵列的所述可用寄存器队列中分配第一物理寄存器存储多种数据类型中对应于处理器运行的第二线程的一种类型的数据。
21.根据权利要求20所述的方法,其中从所述第一阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据包括将所述第一物理寄存器地址映射到架构的寄存器地址;并且从所述第二阵列的所述可用寄存器队列中分配第一物理寄存器来存储多种数据类型中的一种类型的数据包括将所述第一物理寄存器地址映射到架构的寄存器地址;并且所述方法还包括在所述第一阵列的所述可用寄存器队列的所述第一物理寄存器中存储数据;以及在所述第二阵列的所述可用寄存器队列的所述第一物理寄存器中存储数据。
22.根据权利要求21所述的方法,包括当不再需要存储在所述第一阵列的所述可用寄存器队列中的所述第一物理寄存器中的数据时,解除所述第一物理寄存器地址到所述架构的寄存器地址的映射;将所述第一物理寄存器放置到所述第一阵列的所述可用寄存器队列中;以及在所述第一时间之后的第二时间期间,从所述第一阵列的所述可用寄存器队列中分配所述第一物理寄存器来存储所述多种数据类型中其余的一种类型的数据;其中分配所述第一物理寄存器来存储所述多种数据类型中的其余的一种类型的数据包括将所述第一阵列的所述可用寄存器队列中的所述第一物理寄存器的地址映射到架构的寄存器地址。
23.根据权利要求21所述的方法,包括当不再需要存储在所述第二阵列的可用寄存器队列中的所述第一物理寄存器中的数据时,解除所述第一物理寄存器地址到所述架构的寄存器地址的映射;将所述第一物理寄存器放置到所述第二阵列的所述可用寄存器队列中;以及在所述第一时间之后的第二时间期间,从所述第二阵列的所述可用寄存器队列中分配所述第一物理寄存器来存储所述多种数据类型中其余的一种类型的数据;其中分配所述第一物理寄存器来存储所述多种数据类型中其余的一种类型的数据包括将所述第二阵列的所述可用寄存器队列中的所述第一物理寄存器的地址映射到架构的寄存器地址。
24.根据权利要求21所述的方法,其中在所述第二阵列的所述可用寄存器队列中的所述第一物理寄存器中存储数据包括将存储于所述第一阵列的所述可用寄存器队列中的所述第一物理寄存器中的所述数据写入到所述第二阵列的所述可用寄存器队列中的所述第一物理寄存器。
25.根据权利要求19所述的方法,还包括在连至所述第一阵列和所述第二阵列的所述不同类型的执行单元之间共享逻辑。
全文摘要
在第一方面,本发明提供了用于共享处理器资源的第一种方法。该第一种方法包括步骤(1)将多个物理寄存器分组为至少一个阵列,其中该至少一个阵列的每一个阵列中的寄存器共享读端口和写端口,并且其中至少两种类型的执行单元连至该至少一个阵列的每一个阵列;以及(2)在不同时间在该至少一个阵列的至少一个寄存器中存储不同类型的数据,其中每种不同类型的数据都与至少一个不同的执行单元相关联。本发明还提供了很多的其他方面。
文档编号G06F15/78GK1866237SQ20061007273
公开日2006年11月22日 申请日期2006年4月6日 优先权日2005年5月19日
发明者戈登·T·戴维斯, 杰弗里·H·德比 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1