CN107066238A - 执行高速缓存行未对齐加载指令的系统和方法 - Google Patents
执行高速缓存行未对齐加载指令的系统和方法 Download PDFInfo
- Publication number
- CN107066238A CN107066238A CN201710252121.9A CN201710252121A CN107066238A CN 107066238 A CN107066238 A CN 107066238A CN 201710252121 A CN201710252121 A CN 201710252121A CN 107066238 A CN107066238 A CN 107066238A
- Authority
- CN
- China
- Prior art keywords
- data
- loading
- instruction
- loading instruction
- unjustified
- 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.)
- Pending
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 179
- 238000000034 method Methods 0.000 title claims description 25
- 230000015654 memory Effects 0.000 claims abstract description 63
- 238000003780 insertion Methods 0.000 claims description 11
- 230000037431 insertion Effects 0.000 claims description 11
- 230000001419 dependent effect Effects 0.000 claims description 8
- 230000008707 rearrangement Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000005267 amalgamation Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000008014 freezing Effects 0.000 description 1
- 238000007710 freezing Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0886—Variable-length word access
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- 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/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
能够执行高速缓存行未对齐加载指令的处理器包括调度器、存储器执行单元和合并单元。当存储器执行单元检测到调度器分派的指令为未对齐加载指令时,它推迟调度器并在未对齐的加载指令之后将第二加载指令插入到存储器执行单元中。未对齐加载指令的执行从第一高速缓存行返回第一部分数据,并且第二加载指令的执行从下一个顺序高速缓存行返回第二部分数据。合并单元合并部分数据以将结果数据提供给下一个流水线阶段。调度器可仅被推迟一个周期,足以插入紧跟在未对齐加载指令之后的第二加载指令。
Description
技术领域
本发明一般涉及一种执行加载指令以从处理器中的存储器加载信息的过程,更具体地涉及执行高速缓存行未对齐加载指令以加载跨越高速缓存行边界的数据的系统和方法。
背景技术
计算机程序包括用于执行程序的功能的指令,包括从存储器读取数据的加载指令。典型的计算机系统包括:用于执行指令的处理器;和耦合到处理器的外部系统存储器,用于存储计算机程序的部分和可应用的数据和信息。本文所用的术语“处理器”是指任何类型的处理单元,包括微处理器、中央处理单元(CPU)、一个或多个处理核心、微控制器等。本文所用的术语“处理器”还包括任何类型的处理器配置,例如集成在芯片或集成电路(IC)上的处理单元,包括集成在芯片上的系统(SOC)等中的处理器配置。
从系统存储器加载数据消耗宝贵的处理时间,因此处理器通常包括用于加载处理数据的较小且显著更快的高速缓冲存储器。高速缓冲存储器的至少一部分通常被并入处理器内用于更快地访问。一些高速缓冲存储器可以在外部定位,但是通常通过单独的和/或专用的高速缓存总线连接来实现更高的性能。多个数据块可以一次被复制到高速缓冲存储器中,并且当从高速缓冲存储器而不是较大和较慢的外部系统存储器操作时,处理器运行得更快、更有效。高速缓冲存储器被组织为一系列高速缓存行,其中每个高速缓存行通常具有预定长度。例如,通常一个高速缓存行尺寸是64字节,但可以考虑替代的高速缓存行尺寸。
计算机程序可以执行一个或多个加载指令以从高速缓冲存储器中的特定存储器位置加载指定量的数据。每个加载指令可以包括加载地址和数据长度。然而,软件程序中指定的加载地址可能不一定与处理器用于访问高速缓存的物理地址相同。包括基于x86指令集架构的现代处理器可以执行地址转换,包括分段和分页等,其中加载地址被转换成完全不同的物理地址以访问高速缓冲存储器。此外,一个或多个加载指令可能不直接与高速缓存行尺寸对齐。因此,存储器读取操作可能会尝试加载跨越高速缓存行边界的数据,这意味着指定的数据在一个高速缓存行上开始并且在下一个高速缓存行上结束。由于目标数据占用多个缓存行,所以这种类型的存储器读操作被称为缓存行未对齐加载。通常需要一种特殊的方法来处理缓存行未对齐的加载操作,因为不能通过单个正常加载请求撷取数据。现代处理器通常使用流行的高速缓存结构,其中对于单个加载请求,只有一条缓存行可以访问,因此高速缓存行未对齐加载操作必须以不同的方式处理,从而不利地影响性能。
用于处理高速缓存行未对齐加载操作的常规解决方案是低效的,并且已经消耗了宝贵的处理时间以最终撷取正确的数据。导致大量高速缓存行未对齐加载操作的软件程序和应用程序导致操作效率低下,性能降低。
发明内容
根据一个实施例,能够执行高速缓存行未对齐加载指令的处理器包括调度器、存储器执行单元和合并单元。调度器分派用于执行的加载指令。存储器执行单元执行加载指令,并且当加载指令被确定为高速缓存行未对齐加载指令时,存储器执行单元推迟调度器,确定递增地址到下一个顺序高速缓存行,使用递增地址在存储器执行单元的输入处插入高速缓存行未对齐加载指令的副本作为第二加载指令,并且通过执行高速缓存行未对齐加载指令从第一高速缓存行撷取第一数据。存储器执行单元执行第二加载指令以从下一个顺序高速缓存行撷取第二数据。合并单元将第一数据的第一部分数据与第二数据的第二部分数据合并,以提供结果数据。
处理器可以调整由高速缓存行未对齐加载指令指定的地址以从第一高速缓存行撷取数据。可以使用指定数据长度和下一个顺序高速缓存行的地址进行这种调整。高速缓存行未对齐加载之后插入的第二个加载指令可能包括增加的地址和指定数据长度。合并单元可以将第一数据附加到第二数据,以将第一部分数据与第二部分数据组合以隔离结果数据。
存储器执行单元可以使调度器推迟一个周期,以在存储器执行单元的输入处插入第二加载指令。第二个加载指令可以在高速缓存行未对齐的加载指令之后立即被插入。存储器执行单元可以使调度器推迟分派依赖于高速缓存行非对齐加载指令的另一个加载指令和/或任何其他指令。存储器执行单元可以在插入第二加载指令之后重新启动调度器。
根据一个实施例,能够执行高速缓存行未对齐加载指令的方法包括由调度器分派用于执行的加载指令,确定在执行期间所分派的加载指令是否为高速缓存未对齐的加载指令,以及当发送加载指令被确定为缓存未对齐加载指令时,推迟分派执行指令的调度器,插入用于执行的第二加载指令,其中第二加载指令是高速缓存未对齐加载指令的副本,其使用指向下一个顺序高速缓存行的递增地址,作为执行缓存未对齐加载指令的结果从第一高速缓存行撷取第一数据,作为执行第二加载指令的结果从下一个顺序高速缓存行撷取第二数据,以及合并部分数据的第一数据与第二数据的部分数据以提供用于缓存的结果数据用于未对齐的加载指令。
该方法可以包括基于与高速缓存未对齐加载指令和递增地址一起提供的的指定数据长度来调整高速缓存未对齐加载指令使用的地址。该方法可以包括将第一数据附加到第二数据,以及隔离并组合第一数据的第一部分数据和第二数据的第二部分数据以提供结果数据。该方法可以包括将第二加载指令作为下一个加载指令插入到高速缓存行未对齐加载指令之后。该方法可以包括推迟调度器以不分派依赖于高速缓存行非对齐加载指令的另一个加载指令和/或任何另一指令。该方法可以包括在插入第二加载指令之后重新启动调度器。该方法可以包括在合并部分数据之前存储第一和第二数据中的至少一个。
附图说明
关于以下描述和附图,将更好地理解本发明的益处,特征和优点,其中:
图1是根据本发明的一个实施例的超标量流水线处理器的简化框图,其执行高速缓存行未对齐加载指令;
图2是示出根据本发明的一个实施例的由图1的合并单元执行的合并操作的结果的简化图;和
图3是示出根据本发明的实施例的图1的用于执行高速缓存行未对齐的加载指令的处理器推迟流水线执行的流程图。
具体实施方式
发明人已经认识到与执行高速缓存行未对齐加载指令相关联的低效率和较低的性能。因此,他开发了一种推迟高速缓存行未对齐加载指令的流水线执行的系统和方法,包括立即将具有递增地址的相同加载指令插入下一个高速缓存行进入流水线,并合并结果。
图1是根据本发明的一个实施例的执行高速缓存行未对齐加载指令的超标量流水线处理器100的简化框图。处理器100的宏架构可以是x86宏架构,其中它可以正确地执行被设计为在x86处理器上执行的大多数应用程序。如果获得了预期的结果,则应用程序被正确执行。特别地,处理器100执行x86指令集的指令并且包括x86用户可见的寄存器集。然而,本发明不限于x86架构,其中处理器100可以是根据本领域普通技术人员已知的任何替代架构。
在所示实施例中,处理器100具有多阶段的流水线架构,包括发射阶段102、分派阶段104、执行阶段106和回写阶段108。这些阶段用虚线分开表示,每个通常描绘一组用于基于一个或多个时钟信号来控制定时的同步锁存器等。发射阶段102包括前端110,其通常进行操作以从位于外部系统存储器118中的应用或程序撷取高速缓存行,将所撷取的信息解码并转换为指令,并将转换的指令按照程序顺序发射到调度阶段104。前端110可以包括:例如撷取和存储包括程序指令的高速缓存行的指令高速缓存(未示出);指令解码器和转换器(未示出),其将高速缓存行从指令高速缓存转换为指令,用于执行;以及寄存器别名表(RAT)(未示出),基于其程序顺序、对其指定的操作数源以及重命名信息来生成针对每个指令的依赖性信息。
在一个实施例中,存储在系统存储器118中的应用程序或软件程序包含处理器100的宏指令集的宏指令(例如,x86指令集体系结构)。系统存储器118被组织成一定尺寸的高速缓存行,例如64字节(64B)等。系统存储器118经由高速缓存存储器116接口连接到处理器100,高速缓冲存储器116可以包括多个高速缓存级,例如级1(L1)级2(L2)高速缓存,级3(L3)高速缓存等。在一个实施例中,前端110中的指令高速缓存可以是用于从存储在系统存储器118中的程序或应用撷取高速缓存行的L1高速缓存,而高速缓存存储器116中的L1高速缓存可以存储从用于系统存储器118加载的数据或者存储用于存储到系统存储器118中的数据。高速缓存存储器116内的L2高速缓存可以是用于存储指令和数据二者的统一高速缓存。前端110将所撷取的高速缓存行解析或解码为宏指令,然后将宏指令转换成适合于由处理器100执行的微指令集的微指令。微指令在本文中通常被称为“指令”,其由处理器100执行。
前端110将转换的指令及其相关联的依赖性信息发射到调度阶段104的调度器112。调度器112包括一个或多个队列,以保持从RAT(在前端110,未示出)接收的指令和依赖性信息。当准备执行时,调度器112将指令分派到执行阶段106。当其所有依赖关系被解析并且执行单元可用于执行指令时,就准备好可以执行指令。诸如浮点指令(例如,媒体类型指令等)或整数指令等的功能指令被分派到功能执行单元(未示出)。包括加载和存储指令的存储器指令被分派到存储器顺序缓冲器(MOB)114。MOB 114包括一个或多个加载和存储流水线或组合的加载/存储流水线。MOB 114访问高速缓冲存储器116,其存储从系统存储器118加载的数据和信息,或以其他方式最终存储到系统存储器118中。术语“MOB”是执行存储器类型指令的存储器执行单元的常见专有词汇,包括加载和存储指令。
结合发出指令,RAT(在前端110,未示出)中还为重新排序缓冲器(ROB)120中的指令分配条目,该重新排序缓冲器(ROB)120被示出位于写回阶段108中。因此,指令以程序顺序分配到ROB 120中,ROB 120可以被配置为循环队列,以确保指令以程序顺序回退(retire)。在某些配置中,ROB 120内的分配的条目还可以包括用于存储一旦执行的指令的结果的诸如寄存器等的存储器空间。或者,处理器100包括单独的物理寄存器文件(PRF),其中所分配的条目可以包括指向PRF内的分配的寄存器的指针,用于存储结果信息。例如,加载指令从高速缓存存储器116撷取数据,并将数据临时存储到PRF中的分配的寄存器中。
MOB 114接收加载指令并且确定加载是高速缓存行对齐还是未对齐。每个加载指令都包含指定的地址和指定的数据长度。MOB 114将加载指令的地址转换为虚拟地址,虚拟地址最终被转换为用于直接访问高速缓存存储器116的物理地址。注意,虚拟地址可能足以进行对齐确定(高速缓存行对齐或未对齐),因为虚拟地址的可用的较低位与物理地址相同(两者都参考存储器内的相同尺寸的页面)。在一个实施例中,例如,使用4K字节的页面,其中虚拟地址和物理地址的低12位是相同的。一旦知道了虚拟地址,并给出了由加载指令本身指定的数据长度,MOB 114就可以确定加载指令是对齐还是未对齐。时间点是在加载指令从调度器112分派到MOB 114之后的时刻,例如在加载指令分派之后的下一个时钟周期内,并且比MOB 114获得实际物理地址进行对齐或未对齐的判断的时间点要提早许多。
如果加载不是高速缓存行未对齐的加载指令,则最终确定用于虚拟地址的对应物理地址,诸如从转换后备缓冲器(translation look-aside buffer TLB)撷取或作为表行走处理过程的结果等,并且MOB 114使用物理地址从存储在高速缓存存储器116中的高速缓存行(其最终可以从系统存储器118撷取)访问数据。结果沿着路径122提供结果到ROB 120,用于存储到ROB 120中或分配的PRF和/或前递(forwarding)到另一个执行单元以供另一个指令等使用。
如果相反,加载是高速缓存行未对齐的加载指令,则MOB 114以类似的方式开始处理加载,其中一旦确定了该加载就使用该物理地址来从存储在高速缓冲存储器116中的第一高速缓存行访问数据的一部分。然而,可以基于指定的数据长度来调整指定的地址。指定的地址指向当前高速缓存行内的某个位置,否则数据长度超出当前高速缓存行到下一个连续高速缓存行。因此,当前高速缓存行仅包括目标数据的一部分,使得高速缓存行未对齐加载指令仅返回部分结果。如下面进一步描述的,可以通过下一个顺序高速缓存行的地址与前述指定数据长度之间的差来调整地址。
MOB 114包括重新加载电路124,其在加载是高速缓存行未对齐加载指令的情况下执行附加功能;重新加载电路124可以被认为是MOB 114的一部分,或者可以单独提供重新加载电路124。尽管MOB 114处理具有调整后地址的高速缓存行未对齐加载指令,但是重新加载电路124可以向调度器112发出推迟(STALL)信号,以推迟或冻结调度程序112不对至少一个周期的任何相关指令进行调度。在一个实施例中,所述相关指令包括将由调度器112在该未对齐加载指令之后从调度器112中的加载队列(未示出)分派的另一加载指令,并且相关指令还可以包括依赖于未对齐加载指令的任何其他指令。也就是说,在一些实施例中,唤醒(wake up)/广播(broadcast)窗口也被推迟至少一个周期,以防止分派的未对齐加载指令唤醒依赖于未对齐加载指令的指令。同时,重新加载电路124将指定的加载地址“递增”到下一个连续高速缓存行的开头,并且将沿着路径126的具有增加的地址的加载指令“重新加载”或者重新分派到MOB 114的前面。这里使用的术语“增加”及其变体应用于递增地址并不意味着增加一个或任何预定量(例如,字节,高速缓存行等),而是意在表示地址增加到下一个顺序高速缓存行的开头。在一个实施例中,调度器112暂时推迟一个周期,并且将具有递增地址和相同数据长度的相同加载指令作为正好在原始高速缓存行未对齐加载指令之后的下一条指令进行分派。
在重新加载电路124在MOB 114的输入端插入具有递增地址的加载指令之后,它将否定STALL信号以重新启动调度程序112以恢复分派操作。值得注意的是,该推迟包括冻结寄存器和加载分派后的任何相关路径。在一个实施例中,这可以通过临时设置时钟使能来禁用以保持相关寄存器和相关流水线级的当前状态来实现,这意味着将不再分派更多的加载指令。在一些实施例中,未对齐加载指令的回写和前递也被推迟一个周期,以进一步防止未对齐的加载指令将其结果写回PRF或将其结果前递到依赖于未对齐加载指令的指令的源(source)。
同时,当由原始高速缓存行未对齐加载指令撷取数据,而不是经由路径122将结果提供给ROB 120时,MOB 114将结果存储到存储器128中。以这种方式,存储器128存储来自第一高速缓存行的数据,如LD1所示,其是部分数据,因为它仅包括原始加载指令所预期的原始目标数据的一部分。同时,MOB 114以与递增地址以外的第一加载指令相同的递增地址和指定数据长度来处理第二加载指令,以从下一个连续高速缓存行的开始撷取数据。当从第二加载指令撷取数据时,MOB 114将数据的其余部分(如LD2所示)从第二高速缓存行存储到存储器128中。LD2也是部分数据,因为仅包括原始目标数据的剩余部分。MOB 114(或重新加载电路124等)然后指令执行阶段106内的合并单元130将LD1和LD2合并成结果数据。MOB114或合并单元130然后通过路径122提供合并的结果数据,以便存储在ROB 120中或在分配的PRF的寄存器中(并前递,如果适用的话)。注意,重新加载电路124、存储器128和合并单元130可以全部并入MOB 114中,并且可以被认为是MOB 114的一部分。在这样的实施例中,MOB114在其确定加载为高速缓存行未对齐加载指令之后其自身立即同时执行STALL(推迟)和RELOAD(重新加载)操作。
图2是示出根据本发明的一个实施例的由合并单元130执行的合并操作的结果的简化图。该图示出了一种类型的“字节顺序”(例如,大端或小端),其中应当理解,字节的相反排序是同样的。在该示例中,高速缓存存储器116的高速缓存行长度为64字节(64B),未对齐加载指令指定数据的16字节(16B)的数据长度(DL)。缓存行未对齐的加载指令的原始地址(如ULA所示)出现在第一高速缓存行CL1内,其中CL1仅包括高速缓存行末尾的所请求数据的前5个字节(5B)。根据高速缓存行操作,整个高速缓存行CL1(地址CL1A)被从本地L1高速缓存访问或以其他方式加载到本地L1高速缓存中以访问所请求的数据。所请求数据的剩余11B发生在下一个高速缓存行CL2的开头。
由于原始加载指令的指定数据长度DL为16字节,所以可以由MOB 114将未对齐加载指令地址ULA转换为调整的加载地址ALA,以从第一高速缓存行CL1加载16个字节,包括目标数据的5字节部分。在一个实施例中,通过基于下一个连续高速缓存行的起始地址和指定数据长度之间的差来替换指定的地址ULA来确定经调整的加载地址ALA。如图所示,例如,指定数据长度为DL,下一个顺序高速缓存行CL2的地址被示为CL2A(与第一高速缓存行CL1的结尾相同),使得ALA=CL2A-DL。具有调整地址的高速缓存行未对齐的加载指令的执行结果是LD1,其包括原始加载请求的第一部分数据。
由重新加载电路124(或MOB 114)确定的递增加载地址是下一个高速缓存行CL2或CL2A的开始。第二加载指令包括地址CL2A和原始指定的为16字节的数据长度DL,因此它将加载目标数据剩余的11个字节部分以及在末尾附加的附加5B。执行具有递增地址的第二加载指令的结果是LD2,其包括原始加载请求的第二部分数据或剩余部分。
作为如本文所述执行高速缓存行未对齐加载指令和第二加载指令的结果,如202所示的第一高速缓存行CL1的16个字节作为LD1存储在存储器128中,并且第二高速缓存行CL2(如204所示)的16字节作为LD2存储在存储器128中。将结果附加在一起以将第一部分数据与第二部分数据组合,并且所请求的16字节结果部分被隔离并作为结果数据可加载到结果寄存器206。可以采用各种方法来附加两个加载指令的结果,并将结果合并或将结果隔离到适用的目的地寄存器206中,包括加载、移位、掩蔽、反转等,或其任何组合。注意,LD1和LD2中的第一个返回的一个可以被存储到存储器128中,其中合并单元130在LD1和LD2中的第二个返回时合并结果,而不必存储到存储器128中。
图3是示出根据本发明的实施例的处理器100推迟用于执行高速缓存行未对齐加载指令的流水线执行的流程图。在块302,将加载指令从调度器112分派到作为所示实施例中的MOB 114的存储器执行单元。当然,调度器112在处理器100的操作期间在连续或周期性的基础上分派其他指令类型。在块304,MOB 114确定加载指令是否是未对齐的加载。如果不是,则操作进行到块306,其中MOB 114以正常方式执行加载指令,并将获取的数据提供给ROB 120。对齐的加载指令的操作完成。
如果在块304,MOB 114确定加载指令是未对齐的加载,则操作进行到块308,在块308中,MOB 114调整由MOB 114执行的高速缓存行未对齐加载指令的地址。地址可以根据加载指令的指定数据长度以及下一个连续高速缓存行的起始地址进行调整。在下一个块310,MOB114使调度器112推迟至少一个时钟周期。同时,在块314,MOB 114确定递增地址,诸如下一个顺序高速缓存行的起始地址,并且使用递增地址在MOB 114的输入处插入第二加载指令。应注意的是,块310和314可以同时执行,也就是说,在所示实施例中的STALL和RELOAD可以在相同的时钟周期中执行,以确保在第一次加载指令在块304被确定为未对齐的加载时紧接在加载指令之后插入第二加载指令。此外,块308可以与块310的步骤同时执行,或者甚至在块314之后执行,以确保块310和314的步骤的执行的优先级,以插入第二次加载指令。在下一个块316,MOB 114重新启动调度器112以恢复分派操作。还应注意,在一些实施例中,如果在下一个时钟周期中等待分派的调度器112中没有其他指令,则甚至不需要执行块310来推迟调度器112。在这种情况下,整条流水线(pipeline)根本没有延迟。
最后,在下一个块318,作为执行高速缓存行未对齐加载指令的结果,从第一高速缓存行撷取第一数据,并且作为执行第二次加载指令的结果从下一个顺序高速缓存行撷取第二数据。第一和第二数据中的至少一个或两者可以存储在诸如存储器128的存储器中。在下一个块320,来自第一数据的部分数据和来自第二数据的部分数据被合并在一起以提供原始目标数据作为提供给ROB 120的结果数据。
已经做出了前述描述,以使本领域普通技术人员能够在特定应用及其要求的背景下提供和使用本发明。虽然已经参考其某些优选的形式相当详细地描述了本发明,但是其他的形式和变化是可能的和预期的。对优选实施例的各种修改对于本领域技术人员将是显而易见的,并且本文定义的一般原理可以应用于其他实施例。例如,本文描述的电路可以以包括逻辑期间或电路等的任何合适的方式来实现。
本领域技术人员应当理解,在不脱离本发明的精神和范围的情况下,他们可以容易地使用所公开的概念和具体实施例作为设计或修改用于实施本发明的相同目的的其它结构的基础。因此,本发明不旨在限于本文所示和所描述的具体实施例,而是符合与本文公开的原理和新颖特征一致的最广范围。
Claims (20)
1.一种能够执行高速缓存行未对齐加载指令的处理器,包括:
调度器,分派用于执行的加载指令;
存储器执行单元,执行所述加载指令,其中当所述加载指令被确定为高速缓存行未对齐加载指令时,所述存储器执行单元推迟所述调度器,确定递增地址到下一个顺序高速缓存行,使用所述递增地址在所述存储器执行单元的输入处插入所述高速缓存行未对齐加载指令的副本作为第二加载指令,并且通过执行所述高速缓存行非对齐加载指令从第一高速缓存行撷取第一数据;
其中所述存储器执行单元执行所述第二加载指令以从所述下一个顺序高速缓存行撷取第二数据;以及
合并单元,其将所述第一数据的第一部分数据与所述第二数据的第二部分数据合并,以提供用于所述高速缓存行未对齐加载指令的结果数据。
2.根据权利要求1所述的处理器,其中所述存储器执行单元包括重新加载电路,其使所述调度器推迟,确定所述递增地址,并插入所述第二加载指令。
3.根据权利要求1所述的处理器,其中当执行所述高速缓存行未对齐加载指令时,所述存储器执行单元使用指定数据长度调整指定的地址。
4.根据权利要求3所述的处理器,其中所述存储器执行单元通过所述递增地址和所述指定数据长度之间的差来调整所述指定地址,并且通过所述第二加载指令提供所述指定数据长度。
5.根据权利要求1所述的处理器,其中所述合并单元将所述第一数据附加到所述第二数据,以将所述第一部分数据与所述第二部分数据组合成目标数据,并隔离所述目标数据以提供所述结果数据。
6.根据权利要求1所述的处理器,其中:
当所述存储器执行单元在所述加载指令不是所述高速缓存行未对齐加载指令时将所述撷取的数据提供给重新排序缓冲器;和
其中当所述加载指令是高速缓存行未对齐加载指令时,来自所述合并单元的所述结果数据被提供给所述重新排序缓冲器。
7.根据权利要求1所述的处理器,其中所述存储器执行单元使所述调度器推迟一个周期,以在所述存储器执行单元的所述输入处插入所述第二加载指令。
8.根据权利要求1所述的处理器,其中所述第二加载指令在所述高速缓存行未对齐加载指令之后立即插入所述存储器执行单元。
9.根据权利要求1所述的处理器,其中所述存储器执行单元使所述调度器推迟分派依赖于所述高速缓存行未对齐加载指令的另一个加载指令和/或任何其他指令。
10.根据权利要求1所述的处理器,其中所述存储器执行单元在插入所述第二加载指令之后重新启动所述调度器。
11.一种能够执行高速缓存行未对齐加载指令的方法,包括:
通过调度器分派用于执行的加载指令;
在执行期间确定分派的加载指令是否为高速缓存未对齐的加载指令;和
当所述分派的加载指令被确定为缓存未对齐的加载指令时:
推迟分派执行指令的调度器;
插入用于执行的第二加载指令,其中所述第二加载指令包括所述高速缓存未对齐加载指令的副本,其使用指向下一个顺序高速缓存行的递增地址;
作为执行所述高速缓存未对齐加载指令的结果,从第一高速缓存行撷取第一数据;
作为执行所述第二加载指令的结果,从所述下一个顺序高速缓存行撷取第二数据;以及
将所述第一数据的部分数据与所述第二数据的部分数据合并,
以提供用于所述高速缓存未对齐加载指令的结果数据。
12.根据权利要求11所述的方法,还包括基于与所述高速缓存未对齐加载指令和所述递增地址一起提供的指定数据长度来调整所述高速缓存未对齐加载指令使用的地址。
13.根据权利要求11所述的方法,其中,所述确定所分派的加载指令是否是高速缓存未对齐的加载指令包括使用所述分派的加载指令的虚拟地址。
14.根据权利要求11所述的方法,其中所述合并包括:
将所述第一数据附加到所述第二数据;和
隔离并组合所述第一数据的所述第一部分数据和所述第二数据的所述第二部分数据,以提供所述结果数据。
15.根据权利要求11所述的方法,还包括:
当所述分派的加载指令不是所述高速缓存未对齐的加载指令时,将撷取的数据提供给重新排序缓冲器;和
当所述分派的加载指令是所述高速缓存未对齐的加载指令时,将所述结果数据提供给所述重新排序缓冲器。
16.根据权利要求11所述的方法,其中所述插入所述第二加载指令包括插入所述第二加载指令作为所述高速缓存行未对齐加载指令之后的下一加载指令。
17.根据权利要求11所述的方法,其中所述推迟所述调度器包括推迟所述调度器以不分派依赖于所述高速缓存行未对齐加载指令的另一加载指令和/或任何另一指令。
18.根据权利要求11所述的方法,还包括在所述插入第二加载指令之后重新启动所述调度器。
19.根据权利要求11所述的方法,还包括在所述合并所述部分数据之前存储所述第一和第二数据中的至少一个。
20.根据权利要求11所述的方法,还包括:
在从所述第一高速缓存行撷取所述第一数据之后存储所述第一数据;和
在从所述下一个顺序高速缓存行撷取所述第二数据之后存储所述第二数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710252121.9A CN107066238A (zh) | 2017-04-18 | 2017-04-18 | 执行高速缓存行未对齐加载指令的系统和方法 |
US15/810,798 US20180300134A1 (en) | 2017-04-18 | 2017-11-13 | System and method of executing cache line unaligned load instructions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710252121.9A CN107066238A (zh) | 2017-04-18 | 2017-04-18 | 执行高速缓存行未对齐加载指令的系统和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107066238A true CN107066238A (zh) | 2017-08-18 |
Family
ID=59600285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710252121.9A Pending CN107066238A (zh) | 2017-04-18 | 2017-04-18 | 执行高速缓存行未对齐加载指令的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20180300134A1 (zh) |
CN (1) | CN107066238A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279928A (zh) * | 2018-01-30 | 2018-07-13 | 上海兆芯集成电路有限公司 | 微指令调度方法及使用此方法的装置 |
CN108920191A (zh) * | 2018-06-05 | 2018-11-30 | 上海兆芯集成电路有限公司 | 处理器电路及其操作方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11755324B2 (en) * | 2021-08-31 | 2023-09-12 | International Business Machines Corporation | Gather buffer management for unaligned and gather load operations |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4833599A (en) * | 1987-04-20 | 1989-05-23 | Multiflow Computer, Inc. | Hierarchical priority branch handling for parallel execution in a parallel processor |
US5577200A (en) * | 1994-02-28 | 1996-11-19 | Intel Corporation | Method and apparatus for loading and storing misaligned data on an out-of-order execution computer system |
CN1226700A (zh) * | 1998-02-10 | 1999-08-25 | 国际商业机器公司 | 高性能推测性未对齐加载操作 |
US6405305B1 (en) * | 1999-09-10 | 2002-06-11 | Advanced Micro Devices, Inc. | Rapid execution of floating point load control word instructions |
US20020108027A1 (en) * | 2001-02-02 | 2002-08-08 | Kabushiki Kaisha Toshiba | Microprocessor and method of processing unaligned data in microprocessor |
US20040064663A1 (en) * | 2002-10-01 | 2004-04-01 | Grisenthwaite Richard Roy | Memory access prediction in a data processing apparatus |
US20060259746A1 (en) * | 2005-05-10 | 2006-11-16 | Nec Electronics Corporation | Microprocessor and control method thereof |
US8086801B2 (en) * | 2009-04-08 | 2011-12-27 | International Business Machines Corporation | Loading data to vector renamed register from across multiple cache lines |
US20130013862A1 (en) * | 2011-07-06 | 2013-01-10 | Kannan Hari S | Efficient handling of misaligned loads and stores |
CN105446773A (zh) * | 2015-11-18 | 2016-03-30 | 上海兆芯集成电路有限公司 | 高速缓存行的非对齐加载指令的推测并行执行系统和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802556A (en) * | 1996-07-16 | 1998-09-01 | International Business Machines Corporation | Method and apparatus for correcting misaligned instruction data |
US6820195B1 (en) * | 1999-10-01 | 2004-11-16 | Hitachi, Ltd. | Aligning load/store data with big/little endian determined rotation distance control |
US6721866B2 (en) * | 2001-12-21 | 2004-04-13 | Intel Corporation | Unaligned memory operands |
-
2017
- 2017-04-18 CN CN201710252121.9A patent/CN107066238A/zh active Pending
- 2017-11-13 US US15/810,798 patent/US20180300134A1/en not_active Abandoned
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4833599A (en) * | 1987-04-20 | 1989-05-23 | Multiflow Computer, Inc. | Hierarchical priority branch handling for parallel execution in a parallel processor |
US5577200A (en) * | 1994-02-28 | 1996-11-19 | Intel Corporation | Method and apparatus for loading and storing misaligned data on an out-of-order execution computer system |
CN1226700A (zh) * | 1998-02-10 | 1999-08-25 | 国际商业机器公司 | 高性能推测性未对齐加载操作 |
US6405305B1 (en) * | 1999-09-10 | 2002-06-11 | Advanced Micro Devices, Inc. | Rapid execution of floating point load control word instructions |
US20020108027A1 (en) * | 2001-02-02 | 2002-08-08 | Kabushiki Kaisha Toshiba | Microprocessor and method of processing unaligned data in microprocessor |
US20040064663A1 (en) * | 2002-10-01 | 2004-04-01 | Grisenthwaite Richard Roy | Memory access prediction in a data processing apparatus |
US20060259746A1 (en) * | 2005-05-10 | 2006-11-16 | Nec Electronics Corporation | Microprocessor and control method thereof |
US8086801B2 (en) * | 2009-04-08 | 2011-12-27 | International Business Machines Corporation | Loading data to vector renamed register from across multiple cache lines |
US20130013862A1 (en) * | 2011-07-06 | 2013-01-10 | Kannan Hari S | Efficient handling of misaligned loads and stores |
CN105446773A (zh) * | 2015-11-18 | 2016-03-30 | 上海兆芯集成电路有限公司 | 高速缓存行的非对齐加载指令的推测并行执行系统和方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108279928A (zh) * | 2018-01-30 | 2018-07-13 | 上海兆芯集成电路有限公司 | 微指令调度方法及使用此方法的装置 |
CN108920191A (zh) * | 2018-06-05 | 2018-11-30 | 上海兆芯集成电路有限公司 | 处理器电路及其操作方法 |
CN108920191B (zh) * | 2018-06-05 | 2020-11-20 | 上海兆芯集成电路有限公司 | 处理器电路及其操作方法 |
Also Published As
Publication number | Publication date |
---|---|
US20180300134A1 (en) | 2018-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7302527B2 (en) | Systems and methods for executing load instructions that avoid order violations | |
US6266744B1 (en) | Store to load forwarding using a dependency link file | |
US9524164B2 (en) | Specialized memory disambiguation mechanisms for different memory read access types | |
US7809926B2 (en) | Systems and methods for reconfiguring on-chip multiprocessors | |
US12073251B2 (en) | Offloading computations from a processor to remote execution logic | |
US20030005266A1 (en) | Multithreaded processor capable of implicit multithreaded execution of a single-thread program | |
US10067875B2 (en) | Processor with instruction cache that performs zero clock retires | |
US11836498B1 (en) | Single cycle predictor | |
JP2003514274A (ja) | 接近して結合される多重プロセッサのための高速マルチスレッディング | |
US11816489B1 (en) | Microprocessor with prediction unit pipeline that provides a next fetch address at a rate of one per clock cycle | |
US20240045610A1 (en) | Prediction unit with first predictor that provides a hashed fetch address of a current fetch block to its own input and to a second predictor that uses it to predict the fetch address of a next fetch block | |
US20090164758A1 (en) | System and Method for Performing Locked Operations | |
US12014180B2 (en) | Dynamically foldable and unfoldable instruction fetch pipeline | |
US7730290B2 (en) | Systems for executing load instructions that achieve sequential load consistency | |
KR20230116063A (ko) | 고정 기능 동작들을 사용하는 오프로딩된 명령어들의프로세서-안내된 실행 | |
US12008375B2 (en) | Branch target buffer that stores predicted set index and predicted way number of instruction cache | |
US12014178B2 (en) | Folded instruction fetch pipeline | |
JP2009099097A (ja) | データ処理装置 | |
CN107066238A (zh) | 执行高速缓存行未对齐加载指令的系统和方法 | |
CN106951215A (zh) | 减少由加载队列满载引起的流水线推迟的处理器和方法 | |
US7293160B2 (en) | Mechanism for eliminating the restart penalty when reissuing deferred instructions | |
US10901747B2 (en) | Unified store buffer | |
US11327759B2 (en) | Managing low-level instructions and core interactions in multi-core processors | |
US10078581B2 (en) | Processor with instruction cache that performs zero clock retires | |
Tamura et al. | High performance memory architectures with dynamic locking cache for real-time systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170818 |