CN105993000B - 用于浮点寄存器混叠的处理器和方法 - Google Patents
用于浮点寄存器混叠的处理器和方法 Download PDFInfo
- Publication number
- CN105993000B CN105993000B CN201480064205.4A CN201480064205A CN105993000B CN 105993000 B CN105993000 B CN 105993000B CN 201480064205 A CN201480064205 A CN 201480064205A CN 105993000 B CN105993000 B CN 105993000B
- Authority
- CN
- China
- Prior art keywords
- register
- architectural
- registers
- physical
- state
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000009471 action Effects 0.000 claims abstract description 38
- 230000015654 memory Effects 0.000 claims description 19
- 238000012856 packing Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims 1
- 238000013507 mapping Methods 0.000 description 45
- 230000008439 repair process Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 10
- 238000002347 injection Methods 0.000 description 9
- 239000007924 injection Substances 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 238000005457 optimization Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
呈现了用于访问封装寄存器的方法、设备和系统。可跟踪所述封装寄存器的状态,并且可基于所述状态确定所述寄存器是否可被直接访问。如果所述寄存器不可被直接访问,那么可执行允许所述寄存器可被直接访问的动作。所述动作可包括注入用于识别所述寄存器的所述物理存储的至少一个uop,使得其可被直接访问。所述动作可包括使所述数据与物理寄存器的最低有效位对齐或以其它方式使所述数据与所述数据路径对齐。所述动作还可包括改变所述封装寄存器的所述状态。
Description
相关申请的交叉引用
本申请要求于2013年10月27日提交的美国临时专利申请号61/896,091的权益,所述专利申请的内容据此通过引用的方式并入本文。
技术领域
本发明通常涉及电子电路,且更具体而言,涉及微处理器和微处理的方法。
发明背景
许多计算机系统包括被设计来对浮点数执行操作的硬件。这种硬件可被称为浮点单元,并且可与中央处理单元集成。浮点单元(FPU)可用于执行浮点指令,并且浮点指令可引用一组浮点架构寄存器。
诸如ARM v7的一些指令集架构(ISA)可组织浮点架构寄存器,使得它们被密集封装。例如,可以单位空间可作为为单个四精度(Q)寄存器、两个双精度(D)寄存器或四个单精度(S)寄存器引用的这样一种方式来组织架构寄存器。图1A图示以该方式组织的示例位空间。图1A的位空间可为128位空间,例如,其包括单个128位Q寄存器、两个64位D寄存器和四个32位S寄存器。
图1B图示16个这种位空间的示例集合,其包括总计16个Q寄存器(Q0–Q15)、32个D寄存器(D0–D31)和32个S寄存器(S0–S31)。应注意,在图1B的实例中,仅前8个Q寄存器(Q0–Q7)封装有S寄存器(总计80个架构寄存器),然而在概念上,全部Q寄存器封装有S寄存器。可将被封装在给定的全宽度寄存器(包括全宽度寄存器)内的架构寄存器组称为“四倍”或称为最大寄存器。
在一些应用中,可能期望使用关于浮点指令的寄存器重命名来将这种指令的架构寄存器操作数映射到物理寄存器。寄存器重命名工具可实现用于该目的。寄存器重命名可用于浮点指令的反串行化执行。通过将被两个指令(其中存在虚假依赖性)引用的相同架构寄存器映射到不同的物理寄存器(即,通过将被指令引用的架构寄存器“重命名”),例如可同时或乱序执行另外遇到引用相同架构寄存器的风险的指令执行。
发明概要
一些实施方案提供一种用于访问封装寄存器的方法。存储封装寄存器的状态。在指令访问封装寄存器的寄存器的条件上,基于所述状态确定寄存器是否可被直接访问。在寄存器不可被直接访问的条件上,执行允许寄存器可被直接访问的动作。
一些实施方案提供一种被配置来访问封装寄存器的设备。电路存储封装寄存器的状态。在指令访问封装寄存器的寄存器的条件上,电路确定寄存器是否可被直接访问。在寄存器不可被直接访问的条件上,电路执行允许寄存器可被直接访问的动作。
附图简述
可从结合附图通过实例的方式给出的以下描述获得更详细理解,其中:
图1A是示例密集封装架构寄存器的框图。
图1B是表示多个密集封装架构寄存器的框图。
图2是在其中可实现一个或多个所公开的实施方案的示例设备的框图。
图3是图示用于解码指令并处理混叠效应的示例电路的框图。
图4是图示用于解码指令并处理混叠效应的示例方法的流程图。
具体实施方式
图2是在其中可实现一个或多个所公开的实施方案的示例设备100的框图。设备100可包括例如计算机、游戏设备、手持设备、机顶盒、电视机、移动电话或平板计算机。设备100包括处理器102、存储器104、存储设备106、一个或多个输入设备108、和一个或多个输出设备110。设备100还可任选地包括输入驱动器112和输出驱动器114。应理解,设备100可包括未在图1中示出的额外组件。
处理器102可包括中央处理单元(CPU)、图形处理单元(GPU)、位于相同晶粒上的CPU和GPU、或一个或多个处理器核心,其中每个处理器核心可为CPU或GPU。存储器104可位于与处理器102相同的晶粒上,或可独立于处理器102放置。存储器104可包括易失性或非易失性存储器,例如随机存取存储器(RAM)、动态RAM、或高速缓存。应注意,可将存储器104实施为一个或多个离散单元,以及设备100可包括多个不同的存储器(未示出)。例如,设备100可包括CPU和GPU存储器(未示出)二者,如在本文中进一步讨论。
存储装置106可包括固定或可移动存储装置,例如硬盘驱动器、固态驱动器、光盘、或闪盘驱动器。输入设备108可包括键盘、按键、触摸屏、触摸板、检测器、麦克风、加速计、陀螺仪、生物识别扫描仪或网络连接(例如,用于传输和/或接收无线IEEE 802信号的无线局域网卡)。输出设备110可包括显示器、扬声器、打印机、触觉反馈设备、一个或多个灯、天线或网络连接(用于传输和/或接收无线IEEE 802信号的无线局域网卡)。
输入驱动器112与处理器102和输入设备108通信,并且允许处理器102从输入设备108接收输入。输出驱动器114与处理器102和输出设备110通信,并且允许处理器102将输出发送到输出设备110。应注意,输入驱动器112和输出驱动器114是任选组件,以及如果输入驱动器112和输出驱动器114不存在,那么设备100将以相同方式进行操作。
为了简明起见,本文并未详细描述关于集成电路设计、缓存、存储器操作、存储器控制器和系统的其它功能方面(以及系统的个别操作组件)的常规技术。此外,本文所包括的各个图式中所示的连接线旨在表示各个元件之间的示例性功能关系和/或物理耦接。应注意,许多替代或额外的功能关系或物理连接可存在于本主题的实施方案中。此外,某些技术也可在只出于参考目的而在以下描述中使用,且因此不旨在限制,且术语“第一”、“第二”和涉及结构的其它这样的数值术语并未暗指顺序或次序,除非上下文有明确指示。
以下描述是指“连接”或“耦接”在一起的元件或节点或特征。如本文所使用,除非另有明确说明,否则“连接”意指一个元件/节点/特征直接接合到另一元件/节点/特征(或直接与另一元件/节点/特征通信),且不一定是机械接合。同样地,除非另有明确说明,否则“耦接”意指一个元件/节点/特征直接或间接接合到另一元件/节点/特征(或直接或间接与另一元件/节点/特征通信),且不一定是机械接合。因此,虽然图式可描绘特征的一种示例性布置,但是额外的介入元件、设备、特征或组件可存在于所描绘的本主题的实施方案中。
虽然以下描述中呈现了至少一个示例性实施方案,但是应明白,存在大量变动。还应明白,本文描述的(若干)示例性实施方案不旨在以任何方式限制所述主题的范围、可应用性或配置。相反地,以上详述将给所属领域技术人员提供用于实施(若干)所描述的实施方案的指导。应理解,在不脱离由权利要求书界定的范围的情况下,可对元件的功能和布置作出各种改变。
将密集封装架构寄存器(诸如关于图1A和图1B图示的那些寄存器)存储在物理寄存器中可能在一些处理器架构中导致有问题的混叠效应。例如,当将具有不同大小的密集封装架构寄存器映射到全部具有相同大小的物理寄存器时,混叠效应可能引起被写入或读取的无效数据,除非采取额外措施以纠正映射,如在本文中进一步讨论。另外,处理器架构的微操作(uop)流可能要求全部架构寄存器被独立地读取并写入。例如,对于在写入S3之后读取Q0而言,可能需要返回包括写入S3的结果的值。处理器架构还可能要求任何操作的最低有效位(LSB)与数据路径的LSB对齐。因此,为了读取S3(与图1A和图1B的实例中的Q0的位96对齐),首先需要使存储在物理寄存器中的S3数据与位0对齐(如果还未如此对齐)。
为了解决这种问题,可为被封装在全宽度架构寄存器(例如,四倍)内的全部寄存器存储寄存器状态,其反映了四倍寄存器是否已被存储为完全封装寄存器(即,在单个物理寄存器内并且有序)或其是否已被分解成两个寄存器(图1A和图1B的实例中的D或64位寄存器)、四个寄存器(图1A和图1B的实例中的S或32位寄存器)或三个寄存器(例如,一个D寄存器和2个S寄存器),这些寄存器单独存储在不同物理寄存器中(或乱序地位于相同物理寄存器中或二者)。
当指令尝试访问全宽度架构寄存器或被封装在其内的架构寄存器中的一个时,可检查状态以确定是否可直接从单个物理寄存器访问期望寄存器,是否必须首先从不同物理寄存器重编数据,或是否必须重组物理寄存器,例如,通过将存储在物理寄存器中的数据的一部分写入到新的物理寄存器的不同位位置中。例如,如果指令尝试读取全宽度架构寄存器或被封装在其内的架构寄存器中的一个,那么可检查状态以确定是否可直接从单个物理寄存器读取期望寄存器,是否必须首先从不同物理寄存器重编数据,或是否必须重组物理寄存器,例如,通过将存储在物理寄存器中的数据的一部分写入到新的物理寄存器的不同位位置中。还可检查状态以用于其它类型的访问,例如,写入等。
在期望独立读取并写入密集封装寄存器的处理器架构中,在写入较大的对应封装寄存器之后,写入较小寄存器仅可使存储用于较大封装寄存器的数据的一部分失效。因此,可能需要保存剩余的数据。例如,如果写入Q0并且随后写入S0(映射到与新物理寄存器对应的新物理寄存器名称(PRN)),那么存储Q0的物理寄存器内的S1、S2和S3的数据仍然有效,并且必须被保存,即不通过覆写存储Q0的整个物理寄存器而丢弃。通过存储反映如何物理地存储封装寄存器的四倍寄存器Q0的状态,仍可访问封装寄存器中的每一个。在该实例中,封装寄存器中的一些可直接从物理寄存器访问,并且一些可能要求重组存储在物理寄存器内的位,这可通过将它们移动到新物理寄存器来完成,如在本文中进一步讨论。
为了促进重命名,可将逻辑寄存器名称(LRN)指派到每个架构寄存器。然后,可将映射存储在其被写入的物理寄存器的LRN与PRN之间。可将包含LRN与PRN之间的映射的表称为寄存器映射。
可为其每次被写入的架构寄存器分配新的物理寄存器(例如以促进重命名)。当数据不再有效时,所述物理寄存器随后可被“撤退”并返回到“自由列表”(即,可能使其不可用于读取并可用于映射到新的架构寄存器)。
表1描述在之前已写入混叠或“封装”有四倍寄存器的不同架构寄存器之后由指令读取或写入具有给定大小的给定架构寄存器的情况下可能导致的示例问题。表1是相对于封装有图2和图3的Q0的架构寄存器进行描述。所述表描述在已写入被封装在四倍寄存器内的相同或不同Q或D或S寄存器之后读取或写入被封装在四倍寄存器内的架构Q或D或S寄存器的情况下可能导致的问题。
表1
如上文讨论,为了解决这种问题,可存储每个四倍寄存器的寄存器状态。为了跟踪所述状态,每个四倍寄存器可与多个LRN对应,多个LRN各自可独立地映射到物理寄存器。可独立映射的LRN的每一个可表示封装架构寄存器中的一个或多个。在图1A和图1B的实例中,每个架构寄存器可具有四个LRN。
第一LRN可表示全Q寄存器、下部D寄存器(其与Q寄存器对齐)或最下部S寄存器(其与Q寄存器和下部D寄存器对齐)。在图1A的实例中,这些寄存器与Q0、D0和S0对应,并且可将第一LRN称为Q0/D0/S0。第二LRN可仅表示第二S寄存器。在图1A的实例中,这与S1对应,并且可将第二LRN称为S1。第三LRN可表示上部D寄存器和第三S寄存器二者。在图1A的实例中,这些与对齐的D1和S2对应,并且可将第三LRN称为D1/S2。第四LRN可仅表示第四S寄存器。在图1A的实例中,这与S3对应,并且可将第四LRN称为S3。
下文在表2中示出图1B的示例架构寄存器Q0-Q3(及其对应的封装D和S寄存器)的LRN的实例集合:
表2
每个LRN可独立地映射到PRN。下文在表3中示出图示LRN到PRN的可能映射的示例寄存器映射。
表3
必须跟踪LRN-PRN映射的状态,以处理上文讨论的混叠问题,因为另外可能不确定的是,通过访问给定LRN读取的数据将是有效的。可按四倍寄存器跟踪每个LRN-PRN映射的状态(即,状态可能与混叠或封装在一起的全部LRN有关)。可将四倍寄存器称为在其内封装有其它寄存器的Q寄存器。例如,Q0的状态可跟踪LRN Q0/D0/S0、S1、D1/S2和S3与PRN之间的LRN-PRN映射的状态。因此,如果Q0处于例如状态D0/D1(本文中进一步讨论),那么状态可表示在解码期间,从架构寄存器Q0、D0、D1、S0、S1、S2或S3的读取或对架构寄存器Q0、D0、D1、S0、S1、S2或S3的写入将需要考虑该状态,因为状态与这些架构寄存器的全部LRN有关。表4图示LRN-PRN映射的八个示例寄存器状态。
表4
为了保持跟踪映射的状态,可针对每个四倍寄存器存储位。这些状态可由处理器的解码单元(DE)或任何其它合适的单元跟踪和/或存储。例如,三位可由每个四倍寄存器的DE内的单元存储并跟踪,以跟踪八种状态。在使用八种状态的实例中,可使用表5中描述的示例位编码来跟踪状态。
表5
状态名称 | 编码 |
Quad | 001 |
D0/D1 | 010 |
S0/S1/D1 | 011 |
D0/S2/S3 | 100 |
S0/S1/S2/S3 | 101 |
Q/D1 | 110 |
D0/D1U | 111 |
应注意,表4和表5中描述的状态是示例性的。例如,Quad、D0/D1、和S0/S1/S2/S3状态对于处理混叠问题可能是必要的。然而,其它状态(即,Q/D1、D0/D1U、D0/S2/S3和S0/S1/D1)可用于性能优化目的(例如,如果跟踪这些额外状态,那么可能需要对物理寄存器中的数据进行更少操作)。应注意并将理解,例如,可通过增加状态的数量或通过使用不同的状态来进一步扩展方案以用于任何数量的优化。这种额外或不同状态可包括D0/D1/S3、Q0/S3、Q0/S1、D0/S1/D1、D0/S1/S2/S3、D0/S1/S2/S3、D0/S1/D1/S3、S0/S1U/D1、D0/S2/S3U、S0/S1U/S2/S3、S0/S1/S2/S3U、S0/S1U/S2/S3U等,如可从本文讨论的原理推导出。
如果确定在执行指令时必须操作存储于物理寄存器中的数据以维持数据的有效性(基于LRN-PRN映射状态以及到混叠寄存器的访问类型和大小),那么可通过将额外“修复(fixup)”微操作(uop)注入指令的解码uop前面的uop流或缓冲区中来操作物理寄存器内的数据(例如,从物理寄存器的一部分移动到不同物理寄存器的一部分)。处理器的DE或任何其它合适结构可确定和/或注入修复uop。在一些情况下,还可或替代地可能需要改变映射的状态,以有效地读取或写入架构寄存器,如将在本文中进一步讨论。
修复uop可被注入指令的uop中或在指令的uop前面,以将寄存器封装和/或拆封成各种配置。这些uop或其组合可包括表6中描述的示例修复uop中的一个或多个。应注意,这些uop的名称是任意的。还应注意,物理寄存器位相对于128位四倍寄存器进行描述,然而,其它位宽可适当地改变用于其它架构。
表6
为了确定是否需要注入这些修复uop中的一个或多个和/或改变四倍寄存器的状态,处理器的合适部件检测指令的操作数架构寄存器之间以及被重命名的任何其它指令之间的任何混叠(即,它们是否共享四倍寄存器),检查任何这种寄存器的状态,确定针对指令必须注入哪个(如果存在任何uop)以基于所述状态有效地读取或写入这种寄存器,并且确定必须将寄存器状态更改为哪种状态(如果存在任何状态)。这些确定可由例如从例如解码单元接收有关解码指令的操作数寄存器的信息的解码单元或混叠逻辑作出,然而应注意,这些确定可由任何合适结构作出。
表7-13图示对于基于四倍寄存器的当前状态(即,在其内封装有架构寄存器的四倍寄存器的LRN-PRN映射的状态)读取或写入架构寄存器而言是必要的示例状态转换和uop注入。状态名称使用Q0表示,但是与改变的封装架构寄存器Q0-Q15中的任何一个相关,如将在本文中进一步图示。
表7
表8
表9
表10
表11
表12
表13
为了跟踪每个四倍寄存器的状态,可维持寄存器状态表。表14图示反映封装有架构寄存器Q0-Q3的寄存器的示例状态的寄存器状态表,
表14
寄存器状态 |
Q0:Q |
Q1:Q |
Q2:Q |
Q3:Q |
... |
图3是图示如上所述用于编码指令并处理混叠效应的示例电路300的框图。电路300包括指令提取逻辑305、指令解码单元310、315、320、混叠和状态跟踪逻辑325和uop缓冲器330。电路300可为诸如处理器102(图2)的处理器的一部分。应注意,这些单元仅为示例性的,并且在一些实施方案中,可适当替换并省略。
提取逻辑305接收指令流,从所述流提取N个指令(在该实例中,为浮点指令),并且将指令加载到N个解码单元中。示出了三个解码单元310、315、320,然而应注意,解码单元和提取指令的数量可如期望那样为更多或更少。
提取逻辑305可从指令取出单元(未示出)或从任何其它合适源接收指令流。提取逻辑305可随后将提取的指令加载到解码单元310、315、320中。虽然仅示出三个解码单元用于解码三个提取指令,但是原则上,任意数量的解码单元可用于解码任意数量的提取指令。
解码单元310将指令INST1解码成一个或多个uop以供执行,并且将uop加载到uop缓冲器330。应注意,在一些实施方式(未示出)中,uop缓冲器330可被省略,并且uop仅可被下游地分发到执行单元335。解码单元310还将有关INST1的操作数寄存器的信息传输到逻辑325。解码单元315将指令INST2解码成一个或多个uop以供执行,并且将解码的uop加载到uop缓冲器330。解码单元315还将有关INST2的操作数寄存器的信息传输到逻辑325。解码单元320将指令INST3解码成一个或多个uop以供执行,并且将解码的uop加载到uop缓冲器330。解码单元320还将有关INST3的操作数寄存器的信息传输到逻辑325。应注意,解码单元315、320、325可同时解码三个指令;然而,在其它实施方式中,可以不同时解码指令。
逻辑325检查INST1的每个操作数寄存器的LRN-PRN映射的状态,以确定其是否有效。如果状态映射无效,那么逻辑325确定是否必须注入uop,并且确定是否需要改变状态。如果uop注入是必要的,那么逻辑325将适当修复uop注入在uop缓冲器330中的INST1的解码uop前面。如上讨论,应注意,在一些实施方式(未示出)中,uop缓冲器330可被省略,并且uop仅可注入在INST1的解码uop前面并且被下游地分发到执行单元335。如果需要进行状态改变,那么逻辑325更新四倍寄存器的映射的状态。逻辑325还针对INST2和INST3执行这些相同任务。
在已将INST1、INST2和INST3的全部解码op加载到缓冲器330、注入任何需要的修复op并且根据需要已更新状态之后,将uop缓冲器330中的uop的队列分发到一个或多个执行单元335以供执行。如上所述,在不使用uop缓冲器(未示出)的实施方式中,uop可能已经被下游地分发到执行单元335。
图4是图示如上所述用于解码指令的示例方法400的流程图。
在步骤405中,确定是否任何指令可用于解码。如果指令可用于解码,那么在步骤410中,可将它们解码成uop。所述确定可由解码单元作出,并且uop可被缓冲,诸如关于图3进行讨论。
在步骤415中,确定指令的操作数寄存器中的任何一个是否已被检查用于有效的LRN-PRN状态映射。如果是,那么在步骤420中,检查每个寄存器的状态。这些确定可由接收关于操作数寄存器的信息的混叠逻辑作出,诸如关于图3进行讨论。
应注意,在一些实施方案(未示出)中,可在解码uop之前或同时检查LRN-PRN状态映射的有效性。
如果寄存器状态被确定为无效,那么在步骤425中,确定是否需要注入修复uop。该确定由混叠逻辑作出。如果需要注入修复uop,那么在步骤430中,注入uop。可将修复uop注入在指令的解码uop前面的uop队列中并且可被缓冲,诸如关于图3进行讨论。
在步骤425中确定是否注入uop,在步骤435中也确定是否需要改变LRN-PRN映射的状态。如果是,那么在步骤440中,更新映射。在任何一种情况下,流程返回到步骤415。
如果不存在需要检查有效状态的其它寄存器,那么在步骤445中,解码和注入的uop可被分发用于执行。
三个浮点指令的以下示例并行解码说明了本文讨论的原理,并且可使用关于图1-4讨论的结构和方法进行执行。然而,应注意,许多修改和精化是可能的。对于该实例,每个四倍寄存器的LRN-PRN映射的初始状态(即,寄存器状态)由表15示出。应注意,在该实例中,仅使用四个四倍寄存器,并且相应地,将仅图示四种状态。
表15
寄存器状态 |
Q0:Q |
Q1:Q |
Q2:Q |
Q3:Q |
... |
初始LRN-PRN映射(即,寄存器映射)由表16示出。
表16
物理寄存器文件(PRF)的初始内容由表17示出:
表17
在该实例中将被解码的三个示例浮点指令为:
INST1:Add Q0=Q1+Q2
INST2:Sub D0=D1-D2
INST3:Mul Q3=Q0*Q1
在该实例中,指令由如图3中示出的解码单元310、315、320并行解码。然而,应注意,在其它实施方式中,可有序或无序解码指令。
解码单元310解码INST1并且将INST1的uop下游地传递到缓冲器330中以供稍后执行。解码单元310还将指示其操作数为寄存器Q0、Q1和Q2的信息传输到逻辑325。逻辑325检测到架构寄存器Q0、Q1和Q2不彼此混叠。相应地,不需要在INST1的uop前面注入任何uop,并且不需要改变寄存器状态。
解码单元315解码INST2并且将INST2的uop下游地传递到缓冲器330中以供稍后在INST1的uop之后执行。解码单元315还将指示其操作数为寄存器D0、D1和D2的信息传输到逻辑325。
逻辑325检测到寄存器D2与处于状态Q的Q1混叠。逻辑325还检测到D1的读取和D0的写入与处于状态Q的Q0的寄存器混叠。
D2可从处于状态Q的Q1读取。这是因为D2是Q1的下部双倍寄存器,并且当Q1处于状态Q时有效用于读取。相应地,逻辑325不在INST2的uop前面注入任何uop,并且不针对该混叠改变寄存器状态。
当Q0处于状态Q时,D1不适用于读取。相应地,对D1的读取需要fkregq2d D1、Q0的注入和Q0从Q到Q0/D1的状态转换。相应地,逻辑325在队列中的INST2的uop前面注入该uop,并且更新Q0的状态位以反映状态Q0/D1。这样做是因为D1是上部双倍寄存器,并且当Q0处于状态Q时,不与物理寄存器的LSB对齐。
所注入的uop fkregq2d D1、Q0将截取存储Q0(即,高64位-D1的数据)的物理寄存器的上部双倍寄存器,并且将该数据写到新物理寄存器的下部双倍寄存器。在执行该uop之后,将D1映射到该新物理寄存器,并且D1的数据将与物理寄存器的LSB对齐,且因此可有效读取。应注意,该uop将不会将PRN返回到自由列表,并且原始数据将保留在原始物理寄存器中。
在该拆封之后,Q0的状态(其表示在Q0内封装的全部架构寄存器)将被更改为Q/D1,以指示对于quad状态有效的读数仍然有效(即,该数据如先前一样保留在原始物理寄存器中),而D1的读数如今也有效,因为D1被映射到新物理寄存器。
当Q0处于状态Q/D1时,在不注入任何uop的情况下可写入D0。然而,在写入之后,将D0映射到新物理寄存器,并且D1将保留用于其它物理寄存器中的有效读取。Q0因此不再直接可读,且因此Q0的状态必须从Q/D1更新到D1/D0。相应地,逻辑325更新Q0的状态位以反映状态D1/D0。
该点处的寄存器状态由表18反映。
表18
寄存器状态 |
Q0:D0/D1 |
Q1:Q |
Q2:Q |
Q3:Q |
... |
解码单元320解码INST3并将INST3的uop下游地传递到缓冲器330中以供稍后在INST2的uop之后执行。解码单元320还将指示其操作数为Q3、Q0和Q1的信息传输到逻辑325。逻辑325检测到寄存器Q0与D0和D1混叠。
Q0处于状态D0/D1,并且Q0在该状态下无法被直接读取。这是因为将D0和D1寄存器映射到不同的物理寄存器。为了读取D0,必须通过注入uop改变状态。相应地,逻辑325在INST3的uop前面注入两个连续uop。第一uop(fkreclaimprn D1)将D1被映射回到的物理寄存器放在自由列表上,但是使其映射在寄存器映射中。这对于第二uop而言是准备步骤。第二uop(fkregd2q Q0、D0、D1)为Q0分配新的物理寄存器,将来自被映射到D0的物理寄存器的下部双倍寄存器写到新物理寄存器的下部双倍寄存器,并且将被映射到D1的物理寄存器的下部双倍寄存器写到新寄存器的上部双倍寄存器。这样“重组”新寄存器中的四倍寄存器,使其有效用于读取Q0。因此随后将被封装到Q0中的寄存器的状态更改为Q。应注意,在一些实施方式(未示出)中,fkreclaimprn D1 uop可被省略,并且可将状态更改为Q/D1,从而使D1的PRN被映射。还应注意,fkreclainprn uop可能通常与第二修复uop(在本文为fkregd2q)原子地执行,诸如例如在表6中示出。
该点处的寄存器状态由表19反映。
表19
寄存器状态 |
Q0:Q |
Q1:Q |
Q2:Q |
Q3:Q |
... |
在解码指令、注入uop和/或适当地改变寄存器状态之后,指令uop的队列为:
1)add Q0=Q1+Q2的uop
2)fkregq2d D1,Q0的uop
3)Sub D0=D1-D2的uop
4)fkreclaimprn D1的uop
5)fkregd2q Q0,D1的uop
6)mul Q3=Q0*Q1的uop
一旦已因此解码指令,已注入修复uop,以及已经适当地更新状态,则uop可由逻辑325的寄存器映射逻辑处理如下。
当关于add Q0=Q1+Q2的解码uop被寄存器映射逻辑处理时,将用于存储Q0的新PRN(PRNE)映射到封装在Q0(即Q0/D0/S0、S1、D1/S2、和S3)内的架构寄存器的LRN。还使用映射将操作转换成Add PRNE=PRNB+PRNC。在该操作后的寄存器映射的状态由表20示出。
表20
当fkregq2d D1、Q0的注入uop由寄存器映射逻辑处理时,将用于存储D1的新PRN(PRNF)映射到封装在D1(即,D1/S2和S3)内的架构寄存器的LRN。还使用映射将操作转换成fkregq2d PRNF=PRNE[127:64]。在该操作后的寄存器映射的状态由表21示出。
表21
当sub D0=D1–D2的解码uop被寄存器映射逻辑处理时,将用于存储D0的新PRN(PRNG)映射到封装在D0(即,Q0/D0/S0和S1)内的架构寄存器LRN。使用映射将操作转换成SUB PRNG=PRNF–PRNC。在该操作后的寄存器的状态由表22示出:
表22
当fkreclainprn D1的注入uop被寄存器映射逻辑处理时,寄存器映射不发生任何变化,并且使用映射将操作转换成fkrelaimprn PRNF。
当fkregd2q Q0、D1的注入uop被寄存器映射逻辑处理时,将用于存储Q0的新PRN(PRNH)映射到封装在Q0(即,Q0/D0/S0、S1、D1/S2和S3)内的架构寄存器的LRN。将操作转换成fkregd2q PRNH[127:0]=PRNF[63:0],PRNG[63:0]。在该操作后的寄存器的状态由表23示出。
表23
当Mul Q3=Q0×Q1的解码uop被寄存器映射逻辑处理时,将用于存储Q3的新PRN(PRNI)映射到封装在Q3(即,Q3/D6/S12、S13、D7/S14和S15)内的架构寄存器的LRN。使用映射将操作转换成mul PRNI=PRNH×PRNH。该操作之后的寄存器的状态由表24示出。
表24
在全部uop已被寄存器映射逻辑处理之后,它们可由执行单元335(或单元)执行,从而引起PRF的如下变化。
a.add PRNE=PRNB+PRNC(来自add Q0=Q1+Q2)。在对应的op被执行之后的PRF状态由表25示出。
表25
b.fkregq2d PRNF=PRNE[127:64](来自fkregq2d D1,Q0)。在对应的op被执行之后的PRF状态由表26示出。
表26
c.sub PRNG=PRNF-PRNB(来自sub D0=D1-D2)。在对应的op被执行之后的PRF状态由表27执行。
表27
d.fkreclaimprn PRNF(来自fkreclaimprn D1)。PRF在fkreclaimprn停止之前不发生任何变化,在这种情况下,将寄存器返回到自由列表,然而,fkreclaimprn必须在下一个uop时停止。相应地,将在与fkreclaimprn为原子性的fkregd2q之后发生PRN效应。
e.fkregd2q PRNH[127:0]=PRNF[63:0],PRNG[63:0](fkregd2q Q0,D1)。在对应op被执行之后的PRF状态由表28示出。
表28
f.mul PRNI=PRNH×PRNB(来自mul Q3=Q0×Q1)。在对应op被执行之后的PRF状态由表29示出。
表29
在一些实施方式中,可跟踪特定寄存器的封装一段时间,以优化指令的解码。这种跟踪可在混叠和状态跟踪逻辑或处理器的另一合适部件中完成,或可用于最小化对注入重新封装的uop的需要。例如,如果指令流包括以与所述寄存器的大部分使用冲突的方式访问特定寄存器的少量指令,那么处理器可改变其解码所述少量指令的方式。更具体而言,如果指令流包括使用与寄存器通常被访问的大小冲突的寄存器大小访问特定封装寄存器的少量指令,那么处理器可改变解码具有冲突大小的那些指令的方式。
这种冲突可能由于ISA的结构引起。例如,在仅包括一个设定大小的负载或存储指令(例如,64位)的ISA中,其它指令可利用那些负载的结果或存储为不同大小(例如,128位)。这种冲突还可由于在类似行为中导致的特定编码风格引起。例如,特定程序可以一个大小或一组大小加载或存储,并且甚至在ISA并未以此方式约束的情况下在所存储的数据上操作为不同大小或大小组。
为了解决这种问题,可跟踪寄存器的封装的历史记录。在一些实施方式中,可针对每个寄存器维持一个或多个计数器,以便跟踪访问的大小。饱和计数器可用于这种目的。例如,饱和计数器可被维持用于对例如Q0的访问,其中这种计数器对于每次四倍大小访问增量,并且对于每次双倍大小访问减量。可确定阈值点,因此处理器将注入2个64位负载uop或1个128位负载uop,这取决于Q0是否作为四倍寄存器或双倍寄存器被更频繁地访问。应注意,其它历史记录跟踪策略的可能的。
例如,还可或替代地跟踪修复uop注入的历史记录,并且处理器可使用该历史记录信息检测以不同的方式解码指令可产生更好性能的情况。在一些实施方式中,可使用散列算法来分析被解码的指令的地址,并且可将这种历史记录存储于每个寄存器的存储器中。为了说明,如果Q0(例如,128位)首先分两段进行加载(例如,首先加载D0并且然后加载D1),并且然后作为四倍寄存器(例如,128位)被访问,那么可在加载之前注入uop以首先拆封Q0,并且还可在访问之前注入uop以重新封装Q0。然而,如果特定指令流主要访问作为四倍寄存器的Q0(例如,128位),并且主要分两段加载寄存器(例如,首先加载D0,然后加载D1),那么处理器可通过跟踪指令流的uop的注入一段时间而检测到这种情况。一旦检测到该行为(例如,使用历史记录、饱和计数器或例如如上所述从统计的角度上)而不是发送将执行2个64位负载的uop发送到连续D寄存器,则处理器仅可向全四倍寄存器发布1个128位负载uop,从而在使用之前,消除对在加载之前拆封Q0并且在加载之后重新封装Q0的需要。这种检测可具有通过减少加载和存储所需的uop的净数量来提供性能的优点。该跟踪的各种其它置换将对本领域的技术人员显而易见。
以下示例优化可作为寄存器映射的函数被执行。如上文讨论,在一些架构中,可能仅存在一个固定支持负载大小。例如,示例矢量负载指令VLD*的唯一支持负载大小可为64位。在这种情况下,执行128位算法的指令可能需要使用之前在两个64位分块中加载的数据。
在这种情况下,目的地寄存器的当前映射连同负载的长度以及起始的目的地寄存器数量可被处理器用来确定是否作为双倍寄存器或四倍寄存器加载数据。如果指令加载偶数个寄存器,那么第一寄存器为偶数个寄存器,并且当前映射表明目的地之前被用作四倍寄存器,以及数据可被加载为四倍数据。如果指令加载奇数个寄存器,那么以奇数的寄存器开始,或当前映射表明寄存器的之前使用并非是四倍寄存器,数据可被加载为双倍数据。
类似优化可适用于存储指令。也许可能将源存储为双倍寄存器或四倍寄存器,这取决于当前映射、是否存储偶数或奇数个寄存器、以及是否所述存储开始于偶数或奇数寄存器。
一般而言,延长数据(即,对比源寄存器中的一个或多个长的架构寄存器的写入)的指令可能容易经受这种优化。这种指令的实例可具有被指定为双倍寄存器的源和被指定为四倍寄存器的目的地中的一个或二者。由于将这些指令解码成uop的方式,可在不拆封源的情况下执行这种指令(如果它们当前被封装为四倍寄存器并且如果解码器可有序地转换uop)。
例如,可将指令VADDL.S8<Qd>、<Dn>、<Dm>分解成延长Dn和Dm中的数据的两个混洗uop和第三uop以执行add。混洗uop可例如从高位或低位(64位)延长指令的寄存器。在具体实例中,fkpmovsxbw<目的地><源>可用于延长封装在源的位63:0中的数据,而fkpmovsxbwh<目的地><源>可用于延长封装在源的位127:64中的数据。例如,在指令源为当前被封装为四倍寄存器的位127:64的奇数D寄存器的情况下,可使用fkpmovsxbwh uop而不是fkpmovsxbw,并且可能不需要使用注入的uop拆封寄存器。如果基于寄存器是奇数或偶数以及寄存器是否被封装为四倍寄存器或双倍寄存器来转换前两个混洗op,那么uop可能如下(假设寄存器不被封装为单寄存器):
1)If(Dn为偶数或被封装为双倍寄存器)then(fkpmovsxbw FT0,Dn)else(fkpmovsxbwh FT0,Qx),其中x=(n-1)/2。
2)If(Dm为偶数或被封装为双倍寄存器)then(fkpmovsxbw FT1,Dm)else(fkpmovsxbwh FT1,Qy),其中y=(m-1)/2。
3)fkpaddw Qd,FT0,FT1
同样的情况也适用于扩大指令,其中源中只有一个为双倍寄存器而其它为四倍寄存器并且目的地为四倍寄存器。在这种情况下,可针对源双倍寄存器执行上文所述的op转换。
虽然已关于浮点单元和浮点寄存器描述了各种实施方案,但是应注意,这些概念也可适用于其它处理器单元和其中可发生混叠效应的封装寄存器。例如,本文中描述的概念可适用于ISA将寄存器而不是浮点寄存器组织在与图1A和图1B中示出的配置类似的密集封装配置中的情况。
本文中提供的方法或流程可在并入非临时性计算机可读存储介质的计算机程序、软件或固件中实施,以供通用计算机或处理器执行。非临时性计算机可读存储介质的实例包括只读存储器(ROM)、随机存取存储器(RAM)、寄存器、高速缓存存储器、半导体存储器设备、磁介质(诸如内置硬盘和移动硬盘)、磁光介质和光介质(诸如CD-ROM磁盘)、和数字通用磁盘(DVD)。
实施方案:
1.一种用于访问存储于物理存储器中的封装寄存器的方法,其包括:存储所述封装寄存器的状态;在指令访问所述封装寄存器的寄存器的条件上,基于所述封装寄存器的所述状态确定所述寄存器是否可被直接访问;以及在所述寄存器不可被直接访问的条件上,执行允许所述寄存器可被直接访问的动作。
2.根据实施方案1所述的方法,其中所述动作包括注入至少一个uop或改变所述状态。
3.根据任何先前实施方案中所述的方法,其中所述动作包括改变所述状态。
4.根据任何先前实施方案中所述的方法,其中所述动作包括使所述寄存器中的最低有效位(LSB)与物理寄存器的LSB对齐。
5.根据任何先前实施方案中所述的方法,其中所述访问包括读操作和写操作。
6.根据任何先前实施方案中所述的方法,其中所述访问包括写操作。
7.根据任何先前实施方案中所述的方法,其中将所述封装寄存器的位存储在所述物理存储器的至少一个物理寄存器中。
8.根据任何先前实施方案中所述的方法,其中所述物理存储器包括物理寄存器文件。
9.根据任何先前实施方案中所述的方法,其包括跟踪所述动作和后续动作、或所述寄存器的封装和所述寄存器的后续封装以创建历史记录,以及基于所述历史记录确定是否需要未来动作或需要哪种未来动作。
10.根据任何先前实施方案中所述的方法,其中所述动作包括在访问之前注入至少一个uop,所述至少一个uop将所述封装寄存器的所述位的至少一部分存储在第二物理寄存器中。
11.根据任何先前实施方案中所述的方法,其中在执行所述注入的至少一个uop之后,在所述第二物理寄存器处可直接访问所述寄存器。
12.根据任何先前实施方案中所述的方法,其中在执行所述注入的至少一个uop之后,所述寄存器的最低有效位(LSB)与所述第二物理寄存器的LSB对齐。
13.根据任何先前实施方案中所述的方法,其中所述状态指示所述封装寄存器是否存储在单个物理寄存器内或一个以上的物理寄存器内。
14.根据任何先前实施方案中所述的方法,其中所述状态指示将所述存储的封装寄存器布置在至少一个物理寄存器内的顺序。
15.根据任何先前实施方案中所述的方法,其中将所述封装寄存器各自映射到物理寄存器。
16.根据任何先前实施方案中所述的方法,其中多个逻辑寄存器名称(LRN)各自与所述封装寄存器中的一个或多个相关联,并且将每个LRN映射到与物理寄存器相关联的物理寄存器名称(PRN)。
17.根据任何先前实施方案中所述的方法,其中所述状态反映所述封装寄存器的每个LRN到PRN映射的有效性。
18.根据任何先前实施方案中所述的方法,其中如果所述寄存器的最低有效位(LSB)与物理寄存器的LSB对齐,那么所述寄存器可被直接访问。
19.根据任何先前实施方案中所述的方法,其中如果在访问所述位之前不移动存储在物理寄存器中的寄存器的位的情况下,所述寄存器可被所述指令访问,那么可直接访问所述寄存器。
20.根据任何先前实施方案中所述的方法,其中所述寄存器是浮点寄存器。
21.根据任何先前实施方案中所述的方法,其中所述指令是浮点指令。
22.根据任何先前实施方案中所述的方法,其中在所述指令的至少一个解码uop前面注入所述注入的至少一个uop,使得所述注入的至少一个uop在所述解码的至少一个uop之前被执行。
23.根据任何先前实施方案中所述的方法,其中所述注入的至少一个uop包括两个uop。
24.根据任何先前实施方案中所述的方法,其中所述两个uop被配置来原子性地执行。
25.根据任何先前实施方案中所述的方法,其中所述两个uop中的两个被配置来在更新状态之前执行。
26.根据任何先前实施方案中所述的方法,其中所述封装寄存器包括一个四精度寄存器、两个双精度寄存器、和四个单精度寄存器。
27.根据任何先前实施方案中所述的方法,其中在写入所述封装寄存器中的一个之后,所述封装寄存器中被封装在其内的较大一个是可读的。
28.根据任何先前实施方案中所述的方法,其中所述封装寄存器是架构寄存器。
29.一种被配置来访问存储在物理寄存器中的封装寄存器的设备,其包括:存储所述封装寄存器的状态的电路;在指令访问所述封装寄存器的寄存器的条件上,基于所述状态确定所述寄存器是否可被直接访问的电路;和在所述寄存器不可被直接访问的条件上,执行允许所述寄存器可被直接访问的动作的电路。
30.根据实施方案29中所述的设备,其中所述动作包括注入至少一个uop。
31.根据任何先前实施方案中所述的设备,其中所述动作包括改变所述状态。
32.根据任何先前实施方案中所述的设备,其中所述动作包括使所述寄存器的最低有效位(LSB)与物理寄存器的LSB对齐。
33.根据任何先前实施方案中所述的设备,其中所述访问是读操作。
34.根据任何先前实施方案中所述的设备,其中所述访问是写操作。
35.根据任何先前实施方案中所述的设备,其中将所述封装寄存器的位存储在所述物理存储器的至少一个物理寄存器中。
36.根据任何先前实施方案中所述的设备,其中所述物理存储器包括物理寄存器文件。
37.根据任何先前实施方案中所述的设备,其包括跟踪所述动作和后续动作、或所述寄存器的封装和所述寄存器的后续封装的电路;和基于所述历史记录确定是否需要未来动作或需要哪种未来动作的电路。
38.根据任何先前实施方案中所述的设备,其包括在访问之前注入将所述封装寄存器的所述位的至少一部分存储在第二物理寄存器中的至少一个uop的电路。
39.根据任何先前实施方案中所述的设备,其中在执行所述注入的至少一个uop之后,在所述第二物理寄存器处可直接访问所述寄存器。
40.根据任何先前实施方案中所述的设备,其中在执行所述注入的至少一个uop之后,使所述寄存器的最低有效位(LSB)与所述第二物理寄存器的LSB对齐。
41.根据任何先前实施方案中所述的设备,其中所述状态指示所述封装寄存器是否存储在单个物理寄存器内或一个以上的物理寄存器内。
42.根据任何先前实施方案中所述的设备,其中所述状态指示将所述存储的封装寄存器布置在至少一个物理寄存器内的顺序。
43.根据任何先前实施方案中所述的设备,其中将所述封装寄存器各自映射到物理寄存器。
44.根据任何先前实施方案中所述的设备,其中多个逻辑寄存器名称(LRN)各自与所述封装寄存器中的一个或多个相关联,并且将每个LRN映射到与物理寄存器相关联的物理寄存器名称(PRN)。
45.根据任何先前实施方案中所述的设备,其中所述状态反映所述封装寄存器的每个LRN到PRN映射的有效性。
46.根据任何先前实施方案中所述的设备,其中如果所述寄存器的最低有效位(LSB)与物理寄存器的LSB对齐,那么可直接访问所述寄存器。
47.根据任何先前实施方案中所述的设备,其中如果在访问所述位之前不移动存储在物理寄存器中的寄存器的位的情况下,所述寄存器可被所述指令访问,那么可直接访问所述寄存器。
48.根据任何先前实施方案中所述的设备,其中所述寄存器是浮点寄存。
49.根据任何先前实施方案中所述的设备,其中所述指令是浮点指令。
50.根据任何先前实施方案中所述的设备,其中在所述指令的至少一个解码uop前面注入所述注入的至少一个uop,使得所述注入的至少一个uop在所述解码的至少一个uop之前被执行。
51.根据任何先前实施方案中所述的设备,其中所述注入的至少一个uop包括两个uop。
52.根据任何先前实施方案中所述的设备,所述两个uop被配置来原子性地执行。
53.根据任何先前实施方案中所述的设备,其中所述两个uop中的两个被配置来在更新状态之前执行。
54.根据任何先前实施方案中所述的设备,其中所述封装寄存器包括一个四精度寄存器、两个双精度寄存器、和四个单精度寄存器。
55.根据任何先前实施方案中所述的设备,在写入所述封装寄存器中的一个之后,所述封装寄存器中被封装在其内的较大一个是可读的。
56.根据任何先前实施方案中所述的设备,其中所述封装寄存器是架构寄存器
***
Claims (15)
1.一种用于访问存储于封装在物理存储器的至少一个物理寄存器中的架构寄存器中的数据的方法,其包括:
解码指令;
将从所述指令解码的至少一个微操作(uop)存储在缓冲器中以供执行;
确定所述指令是否包括对架构寄存器的访问;
如果所述指令包括对所述架构寄存器的访问,那么基于所述架构寄存器的存储的状态确定所述架构寄存器是否封装在单个物理寄存器中;以及
响应于所述架构寄存器没有被封装在单个物理寄存器中,执行将所述架构寄存器封装在单个物理寄存器中的动作,
其中,所述动作包括在所述指令的微操作之前将至少一个uop注入所述缓冲器中以供执行,其中,注入的所述至少一个uop是基于所述架构寄存器的所述存储的状态并将所述架构寄存器的至少一些位存储在第二寄存器内;并且
其中,所述状态指示所述架构寄存器存储在一个或多个物理寄存器内的顺序。
2.根据权利要求1所述的方法,其中所述动作包括注入至少一个uop、改变所述状态、或使所述架构寄存器的最低有效位(LSB)与物理寄存器的LSB对齐中的至少一个。
3.根据权利要求1所述的方法,其中所述访问包括读操作和写操作,并且所述动作允许所述架构寄存器被从所述单个物理寄存器读取或写入。
4.根据权利要求1所述的方法,其中将所述架构寄存器的位存储在物理寄存器文件的至少一个物理寄存器中。
5.根据权利要求1所述的方法,其进一步包括:
跟踪所述动作和至少一个后续动作、所述架构寄存器的所述封装和所述架构寄存器的至少一个后续封装、或所述架构寄存器的所述状态和至少一个后续状态中的至少一个,以创建历史记录,以及基于所述历史记录确定是否需要未来动作或需要哪种未来动作。
6.根据权利要求4所述的方法,其中所述动作包括在访问之前注入至少一个uop,所述至少一个uop将所述架构寄存器的所述位的至少一部分存储在第二物理寄存器中。
7.根据权利要求1所述的方法,其中所述状态指示所述架构寄存器是否存储在单个物理寄存器内、所述架构寄存器是否存储在一个以上的物理寄存器内或所述架构寄存器布置在至少一个物理寄存器内的顺序。
8.根据权利要求1所述的方法,其中多个逻辑寄存器名称(LRN)各自与所述架构寄存器相关联,并且其中将每个LRN映射到与物理寄存器相关联的物理寄存器名称(PRN)。
9.根据权利要求1所述的方法,其中如果所述架构寄存器的最低有效位(LSB)与所述物理寄存器的LSB对齐,那么可从单个物理寄存器访问所述架构寄存器。
10.根据权利要求1所述的方法,其中如果在访问所述位之前不移动所述架构寄存器的位的情况下,所述架构寄存器可被所述指令访问,那么可从单个物理寄存器访问所述架构寄存器。
11.根据权利要求1所述的方法,其中在写入所述架构寄存器之后,封装在所述物理寄存器中的较大的架构寄存器是可读的。
12.一种用于访问存储于封装在物理存储器的至少一个物理寄存器中的架构寄存器中的数据的设备,其包括:
电路,其能用于解码指令;
电路,其能用于将从所述指令解码的至少一个微操作(uop)存储在缓冲器中以供执行;
电路,其能用于确定所述指令是否包括对架构寄存器的访问;
电路,其能用于:如果所述指令包括访问所述架构寄存器,那么基于所述架构寄存器的存储的状态确定所述架构寄存器是否封装在单个物理寄存器中;和
电路,其能用于:如果所述架构寄存器不是封装在单个物理寄存器中,那么执行将所述架构寄存器封装在单个物理寄存器中的动作,
其中,所述动作包括在从所述指令解码的微操作之前将至少一个uop注入所述缓冲器中以供执行,其中,注入的所述至少一个uop是基于所述架构寄存器的所述存储的状态并将所述架构寄存器的至少一些位存储在第二寄存器;并且
其中,所述状态指示所述架构寄存器存储在一个或多个物理寄存器内的顺序。
13.根据权利要求12所述的设备,其中所述动作包括注入至少一个uop、改变所述状态、或使所述架构寄存器的最低有效位(LSB)与物理寄存器的LSB对齐中的至少一个。
14.根据权利要求12所述的设备,其进一步包括:
电路,其跟踪所述动作和至少一个后续动作、所述架构寄存器的所述封装和所述架构寄存器的至少一个后续封装、或所述架构寄存器的所述状态和至少一个后续状态中的至少一个,以创建历史记录;和
电路,其基于所述历史记录确定是否需要未来动作或需要哪种未来动作。
15.根据权利要求12所述的设备,其中所述状态指示所述架构寄存器是否存储在单个物理寄存器内、或所述架构寄存器是否存储在一个以上的物理寄存器内。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361896091P | 2013-10-27 | 2013-10-27 | |
US61/896,091 | 2013-10-27 | ||
PCT/US2014/062195 WO2015061697A1 (en) | 2013-10-27 | 2014-10-24 | Processor and methods for floating point register aliasing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105993000A CN105993000A (zh) | 2016-10-05 |
CN105993000B true CN105993000B (zh) | 2021-05-07 |
Family
ID=52993625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480064205.4A Active CN105993000B (zh) | 2013-10-27 | 2014-10-24 | 用于浮点寄存器混叠的处理器和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20150121040A1 (zh) |
EP (1) | EP3060978B1 (zh) |
JP (1) | JP6511462B2 (zh) |
KR (1) | KR102332478B1 (zh) |
CN (1) | CN105993000B (zh) |
WO (1) | WO2015061697A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11544214B2 (en) * | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US10949202B2 (en) | 2016-04-14 | 2021-03-16 | International Business Machines Corporation | Identifying and tracking frequently accessed registers in a processor |
US10007590B2 (en) | 2016-04-14 | 2018-06-26 | International Business Machines Corporation | Identifying and tracking frequently accessed registers in a processor |
CN107291425B (zh) * | 2017-06-23 | 2020-11-24 | 上海兆芯集成电路有限公司 | 合并解决重命名尺寸问题的部分写入结果的系统和方法 |
JP7176204B2 (ja) * | 2018-03-12 | 2022-11-22 | オムロン株式会社 | 演算ユニット、および制御装置 |
JP7032647B2 (ja) * | 2018-04-17 | 2022-03-09 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US11327757B2 (en) * | 2020-05-04 | 2022-05-10 | International Business Machines Corporation | Processor providing intelligent management of values buffered in overlaid architected and non-architected register files |
US11366774B2 (en) * | 2020-09-24 | 2022-06-21 | Adesto Technologies Corporation | Memory latency reduction in XIP mode |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1264087C (zh) * | 1999-09-08 | 2006-07-12 | 关一 | 寄存器再命名方法 |
CN1318960C (zh) * | 2003-07-31 | 2007-05-30 | 英特尔公司 | 用于进行寄存器重命名的处理器的方法 |
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852726A (en) * | 1995-12-19 | 1998-12-22 | Intel Corporation | Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner |
US6122656A (en) * | 1998-07-31 | 2000-09-19 | Advanced Micro Devices, Inc. | Processor configured to map logical register numbers to physical register numbers using virtual register numbers |
US6633970B1 (en) * | 1999-12-28 | 2003-10-14 | Intel Corporation | Processor with registers storing committed/speculative data and a RAT state history recovery mechanism with retire pointer |
EP1217513A3 (en) * | 2000-12-23 | 2003-08-13 | International Business Machines Corporation | Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture |
US7162614B2 (en) * | 2003-06-30 | 2007-01-09 | Intel Corporation | Elimination of potential renaming stalls due to use of partial registers |
US20050102494A1 (en) * | 2003-11-12 | 2005-05-12 | Grochowski Edward T. | Method and apparatus for register stack implementation using micro-operations |
TWI273485B (en) * | 2004-02-04 | 2007-02-11 | Via Tech Inc | Pipeline microprocessor, apparatus, and method for generating early status flags |
US8694758B2 (en) * | 2007-12-27 | 2014-04-08 | Intel Corporation | Mixing instructions with different register sizes |
US8069339B2 (en) * | 2009-05-20 | 2011-11-29 | Via Technologies, Inc. | Microprocessor with microinstruction-specifiable non-architectural condition code flag register |
US8914617B2 (en) * | 2009-12-26 | 2014-12-16 | Intel Corporation | Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register |
US8578136B2 (en) * | 2010-06-15 | 2013-11-05 | Arm Limited | Apparatus and method for mapping architectural registers to physical registers |
US8607033B2 (en) * | 2010-09-03 | 2013-12-10 | Lsi Corporation | Sequentially packing mask selected bits from plural words in circularly coupled register pair for transferring filled register bits to memory |
US9626190B2 (en) * | 2010-10-07 | 2017-04-18 | Advanced Micro Devices, Inc. | Method and apparatus for floating point register caching |
US9158541B2 (en) * | 2010-11-03 | 2015-10-13 | Apple Inc. | Register renamer that handles multiple register sizes aliased to the same storage locations |
EP2624126B1 (en) * | 2011-04-07 | 2016-11-02 | VIA Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US9063747B2 (en) * | 2011-04-28 | 2015-06-23 | Freescale Semiconductor, Inc. | Microprocessor systems and methods for a combined register file and checkpoint repair register |
CN102184290B (zh) * | 2011-05-06 | 2013-02-06 | 天津大学 | 嵌入式微处理器的周期精确和位精确系统级模型构建方法 |
-
2014
- 2014-10-24 KR KR1020167012859A patent/KR102332478B1/ko active IP Right Grant
- 2014-10-24 CN CN201480064205.4A patent/CN105993000B/zh active Active
- 2014-10-24 US US14/523,660 patent/US20150121040A1/en not_active Abandoned
- 2014-10-24 JP JP2016550676A patent/JP6511462B2/ja active Active
- 2014-10-24 WO PCT/US2014/062195 patent/WO2015061697A1/en active Application Filing
- 2014-10-24 EP EP14855236.7A patent/EP3060978B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1264087C (zh) * | 1999-09-08 | 2006-07-12 | 关一 | 寄存器再命名方法 |
CN1318960C (zh) * | 2003-07-31 | 2007-05-30 | 英特尔公司 | 用于进行寄存器重命名的处理器的方法 |
CN101169710A (zh) * | 2006-10-26 | 2008-04-30 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
CN100524208C (zh) * | 2006-10-26 | 2009-08-05 | 中国科学院计算技术研究所 | 对状态寄存器进行重命名的方法和使用该方法的处理器 |
Also Published As
Publication number | Publication date |
---|---|
KR102332478B1 (ko) | 2021-11-30 |
EP3060978B1 (en) | 2021-08-11 |
JP6511462B2 (ja) | 2019-05-15 |
WO2015061697A1 (en) | 2015-04-30 |
EP3060978A1 (en) | 2016-08-31 |
EP3060978A4 (en) | 2017-06-28 |
JP2017502434A (ja) | 2017-01-19 |
CN105993000A (zh) | 2016-10-05 |
US20150121040A1 (en) | 2015-04-30 |
KR20160078377A (ko) | 2016-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105993000B (zh) | 用于浮点寄存器混叠的处理器和方法 | |
US20210026634A1 (en) | Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register | |
US10860326B2 (en) | Multi-threaded instruction buffer design | |
US10768930B2 (en) | Processor supporting arithmetic instructions with branch on overflow and methods | |
US9639369B2 (en) | Split register file for operands of different sizes | |
KR101581177B1 (ko) | 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공 | |
JP5341163B2 (ja) | 可変長命令の固定数を持つ命令キャッシュ | |
KR102478874B1 (ko) | 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치 | |
TWI835807B (zh) | 用於組合載入或儲存指示的方法、裝置及非暫時性電腦可讀媒體 | |
US20060179266A1 (en) | System and method for generating effective address | |
CN115640047B (zh) | 指令操作方法及装置、电子装置及存储介质 | |
US11537399B2 (en) | Compression assist instructions | |
US20180203703A1 (en) | Implementation of register renaming, call-return prediction and prefetch | |
US20190138308A1 (en) | Unaligned memory accesses | |
US20040044885A1 (en) | Performing repeat string operations | |
US20070011432A1 (en) | Address generation unit with operand recycling | |
US20220100501A1 (en) | Compressing Micro-Operations in Scheduler Entries in a Processor | |
US11500638B1 (en) | Hardware compression and decompression engine | |
WO1998002806A1 (en) | A data address prediction structure utilizing a stride prediction method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |