发明内容
示例实施例包括用于处理聚集和分散指令的系统。该系统可以实现前端子系统和/或后端子系统。前端子系统可以包括预测单元,该预测单元被配置为确定指令所需的合并的存储器访问操作的预测量,该指令是分散指令或聚集指令。解码单元可以被配置为1)基于预测量将指令转换为多个访问操作,以及2)向发布队列传输多个访问操作和预测量的指示。
系统还可以包括加载—存储单元,其被配置为1)确定指令所需的合并存储器访问的实际量,以及2)向预测单元提供实际量的指示。预测单元可以基于预测量和实际量来更新表。预测单元可以更新表的条目,该条目对应于指令并且包括指示预测量的字段和指示预测量的估计准确度的置信度得分。预测单元可以基于实际量来更新预测量和置信度得分中的至少一个。
加载-存储单元还可以确定可以被合并的多个访问操作的子集,并且从该子集形成合并存储器访问操作。加载-存储单元可以分析多个访问操作的部分,以确定可以被合并的多个访问操作的子集。加载-存储单元还可以1)将合并的存储器访问操作分配给至少一个寄存器条目,以及2)经由加载-存储单元管线来执行合并的存储器访问操作。加载—存储单元还可以基于预测量和实际量的比较来确定预测单元的误预测。
多个访问操作的可以具有等于预测量的量。预测单元可以进一步被配置为通过基于指令的程序计数器定位表的条目来确定预测量,预测量对应于条目的字段。预测单元可以进一步被配置为基于误预测的指示来更新字段,并且如果预测量超过由指令所需的合并存储器访问的实际量,则制止更新表。响应于误预测,解码单元可以被配置为,利用指令所需的合并存储器访问的实际量的指示来重新传输多个访问操作。
在进一步的实施例中,后端子系统可以包括加载-存储单元和队列,例如加载重排序队列(LRQ)和/或存储重排序队列(SRQ)。加载-存储单元可以被配置为:1)接收对应于指令的多个访问操作,该指令是分散指令和聚集指令中的一个指令,2)确定可以合并的多个访问操作的子集,以及3)从该子集形成合并的存储器访问操作。队列可以被配置为存储针对给定加载-存储条目的多个存储器地址,其中加载-存储单元可以被配置为将对应于合并的存储器访问操作的条目加载到队列条目加载到队列,条目指示子集中的每个的地址。
加载存储单元可以进一步被配置为,基于多个访问操作来确定指令所需的高速缓存访问的最小量,并且可以保留对应于高速缓存访问的最小量的多个操作周期。加载-存储单元还可以经由存储器访问通道在多个操作周期上执行合并存储器访问操作。
该子系统还可以包括解码单元,该解码单元被配置为1)将指令转换为多个访问操作,以及2)向加载-存储单元传输多个访问操作。解码单元还可以向加载—存储单元传输指令所需的合并的存储器访问操作的预测量的指示,并且加载-存储单元可以确定指令所需的合并存储器访问的实际量,并且向预测单元提供实际量的指示。预测单元还可以基于预测量和实际量来更新表。加载存储单元可以基于指令所需的合并存储器访问操作的预测量与实际量的比较来确定误预测。
加载-存储单元还可以分析多个访问操作的部分,以确定可以合并多个访问操作的子集。加载-存储单元还可以被配置为将合并存储器访问操作分配给至少一个存储器访问通道,并且经由存储器访问通道执行来合并的存储器访问操作。
具体实施方式
示例实施例的描述如下。
聚集/分散指令是访问多个存储器位置的向量加载/存储指令。聚集执行加载的指令,分散执行存储的指令。历史上,聚集/分散指令已经在向量超级计算机的上下文中得到支持,但是直到最近通用指令集架构还没有得到支持。最近,对这些指令的支持已经出现在通用指令集中,诸如x86和ARM。
支持访问多个不相交(非邻接)存储器位置的指令代表了对现代通用核心微架构的新挑战。这种微架构通常包括一个或多个加载/存储单元,其中每个单元能够在每个周期从单个地址读取或写入到单个地址。修改此类管线以支持对多个存储器位置的访问可能过于昂贵。
通用核心微架构中的聚集/分散指令的一个实现涉及将单个聚集/分散指令解码成一系列微操作(μop),每个微操作负责执行单个存储器位置的加载或存储。这样的实现在硬件成本方面是简单的,但是与传统的(非聚集/分散)加载/存储指令相比可以提供很少的性能益处。对于具有聚集或分散指令的显著使用的工作负载,此类型的实施方案可能导致处理增加数目的μop的显著瓶颈。
本文描述的示例实施例提供了用于优化CPU核心中的聚集/分散指令的性能的微架构支持。这些优化包括基于推测性预测的机制,其允许μop在核心的前端管线中融合,以及对核心的后端管线中的结构的增强、集中于加载重新排序队列、存储重新排序队列、重新排序缓冲器和调度器。在一个示例中,来自聚集/分散指令的多个μop可以被融合成较少数目的宏μop,并且每个得到的融合宏μop对应于原始μop序列中的一个或多个μop。用于确定融合在一起的μop集合的规则可以基于那些μop所接触的地址(例如,μop集合是否连续,或者它们是否引用单个高速缓存行)。
在示例实施例中,聚集/分散操作的融合方法可以利用对前端管线和后端管线的增强的组合。推测性的基于预测的解决方案允许μop在核心的前端管线中融合,并且其它增强可以拓宽核心的后端管线中的结构,包括加载重新排序队列、存储重新排序队列、重新排序缓冲器和调度器。前端和后端的融合都可以提供显著的性能增益。
前端中的融合可以利用基于历史的融合预测器来确定应传递到核心的后端的融合μop(也称为宏μop或融合μop)的数目。在所测试的一个示例性实施例中,使用最近观察到的聚集/分散实例的最大值的512-条目表可以实现接近100%的准确度和实质覆盖。在后端结构中实现合并μop的另一实施例也示出了性能增益。在组合中,来自后端和前端融合的增益在许多实施例中可以是加性的。还存在可以从前端方法或后端方法中受益更多的应用。
图1是其中可以实现示例实施例的存储器访问系统100的框图。前端模块110与发出诸如分散和聚集指令的存储器访问请求的一个或多个处理器核心105通信。前端模块110可以从核心105获取那些请求,并且在每个请求完成时,向核心105提供确认或请求的数据。前端模块110可以包括组成前端管线的组件,其包括下文进一步详细描述的预测单元120和解码单元130。对于给定的聚集/分散指令,前端模块110可以生成被转发到发布队列150的多个μop,发布队列150将μop分配给一个或多个加载/存储单元160A至160B。加载/存储单元160A至160B转而可以根据所分配的μop来执行加载或存储操作。这样做时,加载/存储单元160A至160B可以访问L1数据高速缓存180、L2高速缓存182和其它存储器设备(例如,L3高速缓存或DRAM,未示出)中的一个或多个,以将数据加载到这些设备和/或从这些设备存储数据。然后,加载存储单元160A至160B可以向前端模块110返回确认和/或所请求的数据,前端模块110转而向核心105提供确认和/或所请求的数据。
发布队列150和加载/存储单元(LSU)160A至160B可以是后端管线的组件。为了实现访问请求的乱序处理,后端管线可以进一步包括乱序资源170。资源可以包括重新排序缓冲器(ROB)172,其被配置为按顺序维护和收回μop,并且可以维护访问请求的有序列表。加载重新排序队列(LRQ)174和存储重新排序队列(SRQ)各自分别维护未决加载和存储请求的队列。后端管线可以进一步包括用于通用寄存器、浮点寄存器和/或断言(“predicate”)寄存器的物理寄存器堆PRN 178。每个通用和/或浮点寄存器堆条目可以被分段为通道,通道由聚集指令写入并且由分散指令读取。断言寄存器堆PRN 178可以存储每通道具有一位的断言寄存器堆条目。这些位可以控制特定通道上的操作是由聚集指令还是分散指令来执行。算术逻辑单元(ALU)162A至162D(以及可选地,FPU或SIMD单元)可以对存储器访问的主题数据执行各种操作,和/或可以对乱序资源170或LSU160执行处理。
系统100可以实现本文描述的一个或多个特征,以优化由核心105发出的聚集/分散指令的处理。这些特征包括在前端管线处实施的特征以及在后端管线中实施的特征,并且那些特征可独立地或彼此组合地实施。
在前端管线处,前端模块110可以实现预测单元120,其使模块110能够在发送到后端管线之前合并多个存储器访问。基于历史表122处所维持的先前历史,预测单元120可以预测将由给定聚集/分散指令进行的合并的访问的数目,并且基于此预测,解码单元120可以解码聚集/分散指令并且创建与所预测一样多的μop,而非针对每个通道(例如,向量寄存器通道或可缩放向量扩展(SVE)通道)创建一个μop。为预测单元120返回预测的聚集/分散指令创建的μop可以称为合并的μop(或合并的存储器访问操作)。
在没有合并的情况下,每个聚集/分散μop将仅负责一个通道。相反,每个合并的聚集/分散μop(使用来自预测单元120的预测创建的聚集/分散μop)可以负责多于一个通道。合并的μop可以具有更宽的访问,以确保即使创建了更少的μop,仍将访问假设要由聚集/分散指令访问的所有字节。因为直到指令执行才知道由聚集/分散指令访问的存储器位置,所以直到稍后在管线中(例如当在后端管线处执行合并的μop时)才可以确定由合并的μop访问的存储器位置。由预测单元120维持的历史表122可以包括用来自聚集/分散指令的程序计数器(PC)的位标记的条目,以用于跟踪每个聚集/分散指令的历史并且进行预测。PC位也可以用于对历史表122进行索引。
图2更详细地示出了历史表格122。历史表122可存储对应于先前由后端管线(例如,LSU)处理的聚集/分散指令的多个条目,并且表的每个条目可以包含多个字段,包含事务标识符(TID)字段205、标签字段210、μop计数字段215、使用计数字段220及预测阈值字段225中的一个或多个。TID字段205(例如,2位)可以包含拥有该条目的线程的线程标识符。标签字段205(例如,62位)可以包括多个PC位,并且可以用于将一个PC的历史信息与另一区分开。μop计数字段215(例如,5位)可以指示聚集/分散指令在对同一高速缓冲存储器线的存储器访问被合并时将需要的访问的预测数目;因此,它指示由指令所需的合并的μop的数目。使用计数字段220(例如,3位)可以是测量条目已被访问/更新的次数的饱和计数器,并且可以用作μop计数字段215中的值的置信度的指示符。预测单元120可以被配置为在条目使用计数高于所配置的预测阈值时使用该条目进行预测。当PC在历史表122中不具有条目时或如果表中的PC的使用计数不高于预测阈值,则解码单元130可以创建与聚集/分散指令的通道(例如,SVE通道)的数目一样多的μop。历史表122可以包括多行,每行中具有多个条目。在行中具有多个条目可以减少由于多个PC映射到相同表行而引起的冲突。虽然历史表122的每个字段被示出具有示例位长度,但是在进一步的实施例中,这些字段可以具有不同的或可变的长度。
图3是示出在一个实施例中在历史表122处构建历史并且经由预测单元120进行预测的过程300的流程图。参考图1和2,在系统100初始化或复位时,历史表122可以不包含条目。历史表122还可以在操作期间被周期性地清除(部分地或全部地)以移除过时的或未使用的条目。历史表122的条目可以如下构建(305)。当聚集/分散指令引退时,后端管线的组件(例如,LSU 160A至160B)可以确定指令所需的合并访问/μop的数目。然后,LSU 160A至160B(或其它元素)可以将包含线程ID、PC和指令所需的合并μop数的元组发送到预测单元120。在接收到元组时,预测单元120可以将非零PC位(即,除位-0和位-1之外的位)折叠一次,并且可以对折叠的位和其余非零位执行异或(XOR)操作以产生访问历史表122的索引。备选地,可以实现其他索引过程。折叠的位数目可以等于索引宽度(例如,log2)(预测器表长度)。可以访问历史表122,并且如果找到匹配条目(例如,TID 203和μop计数215在元组中,从元组计算的标签匹配TID 205,并且μop计数和标签210在表条目中),则可以递增条目的使用计数字段220。如果TID 205和标签210匹配,但是μop计数220不匹配,则使用计数220可以递减2。如果没有TID 205和标签210匹配并且空闲条目可用(例如,条目使用计数为0),则可以用来自元组的数据初始化新条目,并且可以将新条目的使用计数220设置为1。在没有TID 205和标签210匹配并且没有空闲条目可用的情况下,该行中所有条目的使用计数可以递减1。或者,可以实现其它替换策略。
当更新历史表122以包括与新接收的聚集/分散指令相关的条目时,预测单元120可以如下对指令进行预测。当获取聚集/分散指令时(310),预测单元120可以使用可以与上文所述用于产生历史表的条目的计算(例如,XOR计算)相比的计算来查找具有从聚集/分散指令的PC生成的索引的历史表122(315)。如果找到匹配条目并且条目的使用计数220高于预测阈值225,那么预测单元120可以预测聚集/分散指令的所有访问可以用减少数目的μop来完成。预测单元120可以基于匹配条目的μop计数字段215来确定合并的存储器访问操作的预测量(例如,合并的μop),并且接着可将此预测量传递到解码器130(320)。然后,当对指令进行解码时,解码器130可以基于预测量来生成多个访问操作(μop)(325)。例如,解码器130可以生成等于预测量的多个访问操作的数目。或者,为了增加准确预测的可能性,解码器130可以生成大于预测量的μop的数目。通过在历史表122的μop计数字段215中建立容差可以实现类似的结果。
解码器单元130接着可以向发布队列150传输访问操作和预测量的指示,以供后端管线(例如,LSU 160A至160B)执行(330)。发布队列150可以将访问操作分配给相应地执行访问操作的LSU 160A至160B中的一个或多个LSU(例如,从/向L1D高速缓存180、L2高速缓存182和/或其它高速缓存/存储器单元加载/存储)。下面进一步详细描述LSU 160A至160B的操作。LSU 160A至160B还可以提供指示预测量的准确性的反馈,其中反馈可以指示指令所需的合并的访问操作的实际量、预测准确的确认、或预测不正确的指示(例如,指令需要比预测更多量的合并的访问操作)。响应于该反馈,预测单元120可以相应地更新历史表122(330)。例如,在精确预测之后,预测单元120可以递增对应条目的使用计数220。在不准确的预测之后,预测单元可以更新条目的μop计数220以匹配或超过由LSU 160A至160B报告的合并的访问操作的实际量。在不准确的预测之后,前端模块110还可以执行管线刷新并且重复操作310至330,其中解码器130可以传输与合并的访问操作的实际量相对应的多个访问操作。
图4示出了一个实施例中的包括预测和访问操作的过程400。在此实例中,聚集/分散指令可以包含8个访问操作(μop)405,其中每个μop可以占据如通道0至7所示的单独通道。访问操作405中的每个访问操作在图4中由操作要访问的存储器中的起始地址表示。在预测单元120对指令所需的三个合并的存储器访问操作进行预测之后,解码器单元130可以向发布队列150传输访问操作和预测量的指示。作为预测量的结果,指令被分配三个合并的存储器访问操作(合并的μop)410。然后,LSU 160A至160B中的一个或多个LSU 160A至160B可以基于目标地址和/或其他属性来确定访问操作405中的哪些操作可以被合并,如下面进一步详细描述的。基于该确定,LSU 160A至160B然后可以将访问操作405合并成三个合并的存储器访问415。三个合并的存储器访问415在图2中由针对包含正在被合并的所有存储器访问的存储器访问的序列的起始地址表示。例如,合并的存储器访问access-0由地址0xfca740表示,地址0xfca740对应于由组成access-0的三个访问操作要访问的三个相邻地址中的第一个地址。一旦被合并,LSU 160A至160B可以将每个合并的存储器访问415分配给可用的合并的存储器访问操作410,然后相应地执行每个合并的存储器访问操作。
图5说明当合并的存储器访问操作的预测量小于给定指令所需的数目时包括预测和访问操作的过程500。在此实例中,除预测单元120预测两个合并的存储器访问操作510以外,过程500可与图4的过程400相比,然而指令仍需要三个访问操作505,如三个合并的存储器访问515所指示。结果,如果存储器访问515中的两个被分配给相应的访问操作510,则不能分配第三存储器访问(“访问-2”),因此不能由LSU 160A至160B执行。作为响应,LSU 160A至160B或另一组件可以发出不正确预测的指示,并且发出管线刷新(530)。还可以将该指示(或关于所需的合并的存储器访问操作的数目的其他通知)传输到预测单元120,以如上所述更新历史表122。在管线刷新之后,如上面参考图3和图4所述,可以使用与合并存储器访问的所需数目相匹配的访问操作的数目来重复过程500。
图6示出了当合并的存储器访问操作的预测量超过给定指令所需的数目时包括预测和访问操作的过程600。在此实例中,除预测单元120预测四个合并的存储器访问操作610以外,过程600可与图4的过程400相比,然而指令仍需要三个访问操作605,如三个合并存储器访问615所指示。因此,在将存储器访问615中的所有三个存储器访问分配给相应的访问操作610之后,第四存储器访问(访问-3)保持未分配并且可以视为“非操作(no-op)”。然而,与图5的过程500相反,管线刷新是不必要的,因为合并的存储器访问615中的每个存储器访问可以由所分配的存储器访问操作610执行。即使如此,LSU 160A至160B或其他组件也可以向预测单元120发出通知以更新历史表122(630),从而使用相应的表条目来提高未来预测的准确度。
返回到图1,系统100的各个方面,特别是LSU 160A至160B,可以被配置有多个特征以与前端模块110一起操作并且执行合并的访问操作。下面描述这种特征和配置的示例。首先转到解码器130,当使用来自预测单元120的预测在前端中解码聚集/分散指令时,由解码器130产生的每个合并的μop可以被分配范围从0到n-1的序列号,其中n是针对聚集/分散指令产生的μop的数目。
转向LSU 160A至160B,在向LSU 160A至160B发出合并的存储器访问之后,加载/存储μop可以在执行转换后备缓冲器(TLB)中的查找并且访问数据高速缓存之前经历寄存器读取(REG)和地址生成(AGEN)阶段。在REG阶段中,LSU 160A至160B可以读取源寄存器。在聚集/分散μop的情况下,源寄存器可以是通用寄存器、向量寄存器和断言寄存器。在没有合并的情况下,每个聚集/分散μop仅需要对应于其通道的信息。然而,合并的聚集/分散μop可以被配置为完全读取所有输入寄存器,因为其可以访问用于聚集/分散指令的多个通道的存储器。
在合并的μop的AGEN阶段中,LSU 160A至160B可以为所有活动通道生成地址,然后确定合并访问的数目以及它们的地址和宽度。可以设置访问宽度,以便覆盖映射到高速缓存行的所有访问。可以使用给定标准来排序合并的地址的列表,使得系统100在计算地址时能够以与所有其它合并的μop相同的顺序来访问合并的地址,并且只有一个合并的μop负责合并的访问。从合并的地址列表中,合并的μop可以负责与其序列号相同索引的地址。合并的μop将访问的地址可以在AGEN阶段的末端处已知,使得LSU 160A至160B可以在下一周期中查找TLB。可以延迟对其它信息(例如针对访问启用的字节和针对个体通道的数据偏移)的确定,直到需要将其进一步沿管线向下。当合并的μop具有高速缓存命中时,针对个体通道的数据偏移可以用于返回针对每个通道的正确字节。为了在合并的μop具有高速缓存未命中时返回正确数据,可扩充未命中状态保持寄存器(MSHR)以保持针对个体通道的数据偏移。
当为聚集/分散指令创建的合并的μop的数目小于指令所需的合并的访问的数目时,例如在上述过程500中,已发生误预测,因为针对聚集/分散指令中的一些活动通道的存储器访问将不被完成。在误预测的情况下,可以刷新管线,并且可从不正确地预测合并的访问的数目的聚集/分散指令开始重新获取指令。在刷新之后,预测单元120可以制止执行预测以避免刷新状况的再次发生。为了处理刷新,可以使用本领域已知的用于刷新存储器排序违例的各种机制。为了检测误预测,针对聚集/分散指令的活动通道和针对存储器将由合并的μop访问的活动通道可以由LSU 160A至160B或另一组件跟踪。当合并的μop连同其访问的地址一起到达LSU 160A至160B处的AGEN阶段时,LSU 160A至160B还可确定针对其将访问存储器的通道,并且接着可以更新跟踪将针对每个聚集/分散指令而被处理的通道的掩码的表。该表可以被存储在与该指令相关联的重新排序缓冲器172的条目中。重新排序缓冲器172可以被配置为验证读/写通道的数目与期望的读/写的通道的数目相匹配。或者,该表可以驻留在ISSQ150、LRQ 174、和/或SRQ 176中。当合并的μop是到达AGEN阶段的最后μop时,LSU 160A至160B可以将经处理通道的掩码与活动通道的掩码进行比较。当两者不相等时,其可以确定已发生误预测,并且接着可以刷新管线。
当针对聚集/分散指令而被创建的合并μop的数目大于指令所需的合并的访问的数目时,例如在上述过程600中,可以完成针对所有活动通道的访问,并且因此,过度预测合并的访问的数目可以不被视为不正确预测。然而,因为创建了比所需更多的μop,所以确保在系统100中不进行不正确的架构改变可能是有益的。当合并的μop到达AGEN阶段时,LSU160A至160B可确定针对指令的合并的访问的数目,并且如果其序列号大于或等于合并的访问的数目,那么可将μop视为“无操作”(nop)并且可以将其标记为已完成。
转向预测单元120,当针对静态聚集/分散指令的μop计数不稳定时,单元120可以经历较低精确度。为了在这种情况下改进预测单元120的性能,预测单元可以被配置为跟踪观察到的合并的访问的最大数目,而不是跟踪观察到的合并的访问的确切数目。在这种配置中,针对历史表122的给定条目,可以在对历史表122的每次更新时递增使用计数220,并且可以在使用计数220高于预测阈值时进行预测。跟踪合并的访问的最大数目的预测器配置可以被称为“最大”配置,而跟踪合并的访问的确切数目的预测器配置可以被称为“基本”配置。在最大配置中,当针对聚集/分散指令进行预测时,预测单元120可以预测与过去所需的聚集/分散指令的合并的访问的最大数目相对应的量,并且此量通常大于指令所需的合并的访问的数目。额外分配的μop可以消耗管线资源,诸如重新排序缓冲器172、加载重新排序队列174、以及存储重新排序队列176的条目。然而,此配置还可以受益于减少的不正确预测的数目和在那些不正确预测之后所需的管线刷新。
如上所述,示例性实施例可以通过减少聚集/分散μop的数目来改进存储器访问系统100。除前述特征外,系统100的后端管线还可以被配置为在处理聚集/分散指令时提供改进的性能。例如,可以解码单个μop并且将其递送到系统100的后端(例如,LSU 160A至160B),而不是将聚集/分散指令解码为μop的序列(例如,每通道一个),系统100的后端可以被配置为本地处理聚集/分散指令。在这种配置中,乱序资源170中的一些或全部资源可以被配置有支持聚集/分散指令的每个通道的字段。具体地,参考图1,LRQ 174和SRQ 176可以被配置为具有用于每个条目的一个或多个字段,其存储用于给定加载-存储条目的多个存储器地址,从而使得LRQ 174和SRQ 176的每个条目能够跟踪用于每个聚集/分散通道的地址。LSU 160A至160B可以被配置为使得相应的加载-存储管线经扩展以接受全宽度聚集/分散指令,并且在地址产生期间,可确定高速缓存访问的所需数目。在后周期中,此聚集/分散指令可以使LSU 160A至160B阻断其它指令对加载/存储管线的分派,从而使指令能够在内部被重新插入到加载/存储管线达多个周期(例如,每所需数据TLB/高速缓存查找一个周期)。
图7是示出在一个实施例中可由包括一个或多个LSU以执行聚集和分散指令的后端管线执行的过程700的流程图。参考图1,LSU 160A可以接收对应于聚集/分散指令的多个访问操作(705),并且确定可以被合并的多个访问操作的子集(710)。LSU 160A然后可以从子集形成合并的存储器访问操作(715)。队列,诸如LRQ 174(用于聚集操作)或SRQ 176(用于分散操作)可以被配置为存储针对给定加载-存储条目的多个存储器地址,并且LSU 160A可以将对应于合并的存储器访问操作的条目加载到队列,其中条目指示子集的每个访问操作的地址(720)。
LSU 160A可以基于多个访问操作来确定针对指令所需的高速缓存访问的最小量,并且可以保留对应于高速缓存访问的最小量的多个操作周期。LSU 160A然后可以经由存储器访问通道在多个操作周期上执行合并的存储器访问操作(725)。
LSU 160A还可以与前端模块110通信,其中解码单元130将指令转换为多个访问操作并且向LSU 160A传输多个访问操作。解码单元130还可以向LSU 160A传输指令所需的合并的存储器访问操作的预测量的指示,并且LSU 160A可以确定指令所需的合并的存储器访问的实际量并且向预测单元120提供实际量的指示。预测单元120还可以基于预测量和实际量来更新表122。LSU 160A可以基于指令所需的合并的存储器访问操作的预测量与实际量的比较来确定误预测。
LSU 160A还可以分析多个访问操作的部分,以确定可以合并的多个访问操作的子集。LSU 160A还可以被配置为将合并的存储器访问操作分配给至少一个存储器访问通道,并且经由存储器访问通道执行合并的存储器访问操作(725)。
除了上述核心微架构之外,可以在图形处理单元(GPU)中实现上述示例实施例。CPU合并和在GPU中被执行的合并之间的一个差异可以在执行模型中找到。在GPU中,如果warp中的任何线程经历延迟(例如,由于L1高速缓存未命中),那么该warp可以上下文切换到可以准备执行的另一warp。换言之,可以通过在大量线程之间的上下文切换来隐藏等待时间。因此,在GPU执行模型中,GPU执行聚集对跨步-1(stride-1)加载的方式可能不存在实质性差异(尽管聚集可以启动多个存储器访问)。另一方面,在CPU执行模型中,等待时间隐藏的目的在于处理器提取指令级并行性(ILP)的能力,这需要诸如加载重新排序队列(LRQ)和重新排序缓冲器(ROB)的处理器资源。在此方面,GPU资源可以根据需要而被扩展以处理聚集操作,而跨步-1加载可以用较少资源来处理。
虽然已经具体示出和描述了示例性实施例,但是本领域技术人员应当理解,在不脱离由所附权利要求所涵盖的实施例的范围的情况下,可以在形式和细节上进行各种改变。