CN112639727A - 组合加载指令或存储指令 - Google Patents
组合加载指令或存储指令 Download PDFInfo
- Publication number
- CN112639727A CN112639727A CN201980055599.XA CN201980055599A CN112639727A CN 112639727 A CN112639727 A CN 112639727A CN 201980055599 A CN201980055599 A CN 201980055599A CN 112639727 A CN112639727 A CN 112639727A
- Authority
- CN
- China
- Prior art keywords
- memory access
- instructions
- memory
- access instructions
- instruction
- 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
- 230000015654 memory Effects 0.000 claims abstract description 378
- 230000004044 response Effects 0.000 claims abstract description 16
- 238000000034 method Methods 0.000 claims description 28
- 230000008685 targeting Effects 0.000 claims description 14
- 238000012432 intermediate storage Methods 0.000 claims 3
- 238000012545 processing Methods 0.000 abstract description 14
- 238000001514 detection method Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000003909 pattern recognition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/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
- 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
-
- 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
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- 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, look ahead
- G06F9/3824—Operand accessing
-
- 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, look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
Abstract
本文中公开的各个方面涉及在处理计算机处理器中的指令时,组合用以从存储器加载数据或将数据存储在存储器中的指令。更具体地,参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式可以在处理器流水线中被标识。响应于确定多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标,多个存储器访问指令可以在处理器流水线内被替换为一个等效存储器访问指令,该等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的可用总线宽度。
Description
优先权要求
本专利申请要求于2018年6月29日提交的标题为“COMBINING LOAD OR STOREINSTRUCTIONS”的美国非临时专利申请No.16/024,725的优先权,该美国非临时专利申请被转让给本文的受让人并且据此以其整体通过引用明确地并入本文。
技术领域
本文中描述的各个方面和实施例总体上涉及计算机处理器,并且更特别地涉及在处理计算机处理器中的指令时,对从存储器中加载数据或将数据存储在存储器中的指令进行组合。
背景技术
在计算机处理中,流水线是串联连接的一组数据处理元件,其中来自该系列中的一个元件的输出是该系列中的下一元件的输入。指令通常按次序被取回并且放置到流水线中。以这种方式,多个指令可以在任何特定时间作为指令流存在于流水线中,并且多个指令可以全部同时被处理。
一般地,处理器可以支持各种加载和存储指令类型。然而,这些指令中的一些指令可能未充分利用处理器与相关联的缓存或存储器之间的接口的带宽。例如,特定处理器架构可能具有以单个32位字为目标的加载(例如,取回)指令和存储指令,而其他处理器架构可能供应通向64或128位的缓存的数据路径。也就是说,程序的经编译的机器代码可能包括从缓存或其他存储器加载单个32位数据字的指令,而处理器与缓存之间的接口(例如,总线)可能是128位宽,由此该宽度中的96位在这些加载指令中的每个加载指令的执行期间未被使用。类似地,经编译的机器代码可能包括将单个32位数据字存储在缓存或其他存储器中的指令,在该情况下,该宽度中的96位类似地在这些存储指令的执行期间未被使用。
因此,基于前述,存在对于如下机制的需要,这些机制可以更好地利用去往和来自缓存和存储器的可用带宽。
发明内容
下文呈现与本文中公开的一个或多个方面和/或实施例有关的简化概述。这样,以下概述不应当被认为是与所有被考虑到的方面和/或实施例有关的广泛概览,以下概述也不应当被认为标识与所有被考虑到的方面和/或实施例有关的关键或重要元素,或界定与任何特定方面和/或实施例相关联的范围。因此,以下概述具有的唯一目的是,先于下文呈现的详细描述,以简化的形式呈现关于与本文中公开的机制相关的一个或多个方面和/或实施例的某些概念。
根据各个方面,一种用于组合加载指令或存储指令的方法可以包括:在处理器流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;确定多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及在处理器流水线内,将多个存储器访问指令替换为一个等效存储器访问指令,该等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的可用总线宽度。
根据各个方面,一种装置可以包括处理器,处理器被配置为:在与处理器相关联的流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;确定多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及在与处理器相关联的流水线内,将多个存储器访问指令替换为一个等效存储器访问指令,该等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的可用总线宽度。
根据各个方面,一种装置可以包括:用于在处理器流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式的部件;用于确定多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标的部件;以及用于在处理器流水线内,将多个存储器访问指令替换为一个等效存储器访问指令的部件,该等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的可用总线宽度。
根据各个方面,一种计算机可读存储介质可以具有记录在其上的计算机可执行指令,其中计算机可执行指令可以被配置为使处理器:在与处理器相关联的流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;确定多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及在与处理器相关联的流水线内,将多个存储器访问指令替换为一个等效存储器访问指令,该等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的可用总线宽度。
基于附图和详细描述,与本文中公开的各方面和实施例相关联的其他目的和优点对本领域的技术人员将是明显的。
附图说明
对本文中描述的各个方面和实施例及其许多附带优点的更完整的理解将容易被获得,因为其在关于附图被考虑时通过参考以下详细描述变得更好地被理解,这些附图被呈现仅用于说明而不是限制,并且在附图中:
图1图示了根据各个方面的示例性处理器,该示例性处理器被配置为识别多个存储器访问指令的某些模式,并且将其替换为更加带宽高效的存储器访问指令。
图2图示了根据各个方面的示例性方法,该示例性方法用于识别多个存储器访问指令的某些模式,并且将其替换为更加带宽高效的存储器访问指令。
图3图示了根据各个方面的示例性处理器流水线。
图4图示了根据各个方面的可以用于跟踪与近期指令相关联的信息的示例性存储指令表(SIT)。
图5图示了根据各个方面的另一示例性方法,该另一示例性方法用于识别多个存储器访问指令的某些模式,并且将其替换为更加带宽高效的存储器访问指令。
图6图示了可以有利地实现本文中描述的各个方面和实施例的示例性计算设备。
具体实施方式
各个方面和实施例在以下描述和相关附图中被公开,以示出与示例性方面和实施例有关的具体示例。替代的方面和实施例对相关领域的技术人员经过阅读本公开将是明显的,并且可以被构造和实践而不偏离本公开的范围或精神。另外,公知的元素将不详细描述或可以省略,以免使本文中公开的各方面和实施例的相关细节模糊不清。
词语“示例性”在本文中用来意指“用作示例、实例或说明”。本文中被描述为“示例性”的任何实施例不是必然被解释为比其他实施例优选或有利。同样地,术语“实施例”不要求所有实施例都包括所论述的特征、优点、或操作模式。
本文中使用的术语仅描述特定实施例,并且不应当解释为限制本文中公开的任何实施例。如本文中使用的,单数形式“一个”、“一种”和“该”也意图包括复数形式,除非上下文另外清楚指出。本领域的技术人员将进一步理解,如本文中使用的,术语“包括”、“包括有”、“包括了”和/或“包括着”指定所陈述的特征、整体、步骤、操作、元素和/或组件的存在,但是不排除一个或多个其他特征、整体、步骤、操作、元素、组件和/或它们的群组的存在或添加。
此外,各个方面和/或实施例可以按照例如将由计算设备的元件执行的动作序列来描述。本领域的技术人员将认识到,本文中描述的各种动作可以通过特定电路(例如,专用集成电路(ASIC)),通过由一个或多个处理器执行的程序指令,或者通过这两者的组合来执行。另外,本文中描述的这些动作序列可以被认为是完全体现在任何形式的非瞬态计算机可读介质内,其上存储有对应的计算机指令集合,计算机指令集合在执行时将使相关联的处理器执行本文中描述的功能。因此,本文中描述的各个方面可以按照多种不同的形式来体现,所有这些形式都被认为在所要求保护的主题的范围内。另外,对于本文中描述的方面中的每个方面,任何这样的方面的对应形式可以在本文中被描述为,例如“被配置为执行所描述的动作的逻辑”和/或被配置为执行所描述的动作的其他结构组件。
如本文中使用的,术语“电子设备”、“用户设备”、“用户装备”(或“UE”)、“用户终端”、“客户端设备”、“通信设备”、“无线设备”、“无线通信设备”、“手持设备”、“移动设备”、“移动终端”、“移动台”、“手机”、“接入终端”、“订户设备”、“订户终端”、“订户站”、“终端”及其变体可以互换地指代任何合适的移动或固定设备。因此,上文提到的术语可以适当地指代以下任何一者或全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理、膝上型计算机、个人计算机、平板计算机、智能书、掌上型计算机、无线电子邮件接收器、多媒体支持互联网的蜂窝电话、无线游戏控制器、以及具有可编程处理器、存储器和电路系统的类似设备,这对本领域的普通技术人员将是明显的。
本文中公开的各个方面提供了识别某些模式(或风格)的机制,其中多个“窄”存储器访问指令可以被组合成单个“更宽”存储器访问指令,该多个“窄”存储器访问指令未完全利用处理器与缓存和/或存储器之间的数据路径中的所有可用带宽,单个“更宽”存储器访问指令利用可用带宽的更大部分。例如,许多编译器可能生成具有多个加载指令(加载)或存储指令(存储)的代码,这些指令将相邻存储器或可能在同一缓存行上的存储器作为目标。一般地,这些加载/存储指令通常是从一(1)到八(8)个字节中的任何字节,但是现代处理器通常至少具有去往和来自相关联的缓存和存储器的128位数据路径。这样,因为硬件一般不能在同一周期中执行多个存储器访问,所以可用的存储器带宽的至少一部分可能未被利用或未被充分利用。如果将相邻存储器或可能在同一缓存行上的存储器作为目标的多个指令的模式可以恰当地被检测到,则多个指令可以潜在地被组合到流水线中更早的单个“宽”加载/存储指令中,并且由此提高利用率。例如,将多个窄加载/存储指令替换为单个宽加载/存储指令可以留下空缺,该空缺可以在处理器流水线的“前端”处被填充,而导致处理器流水线的“后端”处的更多吞吐量。在另一示例中,将“较新”加载指令与已经通过一个或多个流水线级的“较旧”加载指令组合,可以允许较新加载指令的消费者更快地接收到适当的数据。
这样,在高层级,本文中描述的各个方面和实施例可以被配置为识别、检测或以其他方式标识某些模式,由此指令流水线包括可以适当地被组合成一个等效指令的多个加载指令和/或存储指令,因为多个加载和/或存储指令未完全利用去往/来自缓存和存储器的可用数据路径,并且多个加载和/或存储指令以相邻或邻接的存储器或可能在同一缓存行上的存储器为目标。特别地,数据路径可以包括总线,并且数据路径带宽可以是总线在一个操作(或周期)中能够传送的最大数目的比特。在该上下文中,以下示例(利用汇编代码来说明)示出了一种模式,在该模式中,多个“较小”或“窄”的加载指令可以被组合成“较大”或“宽”的加载指令。
LDR X0,[SP,#8];在SP+8处从存储器中加载X0
LDR X1,[SP,#16];在SP+16处从存储器中加载X1
上面提供的两个加载(LDR)指令可以被识别为可以替换为更加带宽高效的命令或命令序列的模式,因为每个LDR指令使用64位的带宽(例如,64位的位宽),从而存储器被访问两次(一次在从栈指针(SP)的正偏移8处从存储器中加载X0,并且第二次在从SP的正偏移16处从存储器中加载X1)。在该示例中,假定去往/来自缓存和存储器的数据路径至少为128位,则两个LDR指令可以被替换为等效(但更加带宽高效)的双加载指令,其在一次访问存储器时使用128位的带宽(例如,128位的位宽),如下:
LDRD X0,X1,[SP,#8];在SP+8处从存储器中加载X0和X1
因此,将多个“窄”指令替换为“宽”指令可以允许对缓存或存储器的更高吞吐量并且减少总的指令计数。本文中描述的各个方面和实施例因此可以包括一种处理系统,处理系统包括至少一个处理器(例如,中央处理单元(CPU)),至少一个处理器被配置为将存储器访问指令(例如,加载和/或存储)的某些模式识别为可替换的,并且将每个这样的指令模式替换为利用更大可用带宽的等效存储器访问指令。在这点上,可替换的存储器访问指令的每个模式当每次该模式在指令流水线中被遇到时,可以在处理系统中即时被变换。因此,实现本文中描述的各个方面和实施例可以被完成,而基本上没有对已有软件的改变。也就是说,在不包括根据本文中描述的各方面和实施例进行操作的处理系统的设备上可以运行的软件,可以在包括这样的处理系统的设备上被运行而没有对软件的改变。通过在指令流水线内在执行期间组合至少一些加载指令和存储指令,相对于不根据本文中描述的各方面和实施例进行操作的设备,包括根据本文中描述的各方面和实施例进行操作的处理系统的设备可以按照更加带宽高效的方式执行加载指令和存储操作。
更具体地,根据各个方面,图1图示了示例性处理器101,示例性处理器101被配置为识别多个存储器访问指令的某些模式,并且将其替换为更加带宽高效的存储器访问指令。一般地,处理器101可以被使用在任何合适的计算设备中,不带限制地包括,台式计算机、膝上型计算机、平板计算机、智能电话、物联网(IoT)设备、可穿戴设备、汽车设备或远程信息处理设备、机器人设备、或者被配置为从存储器132读取数据或向存储器132写入数据的任何其他已有的或将来开发的设备。一般地,处理器101可以包括许多变化,并且图1中示出的处理器101用于说明性目的且不应当被认为是限制性的。例如,处理器101可以是中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)、或另一合适的处理器。
在各种实施例中,处理器101可以被设置在包括指令执行流水线112和存储指令表(SIT)111的集成电路上。一般地,处理器101可以根据控制逻辑114来执行指令执行流水线112中的指令。在各种实施例中,指令执行流水线112可以是超标量设计,超标量设计具有多个并行流水线,不带限制地包括,并行指令执行流水线112a和112b。指令执行流水线112a、112b可以包括按照管道级被组织的各种非架构化的寄存器(或锁存器)116和一个或多个算术逻辑单元(ALU)118。指令执行流水线112可以耦合到具有各种架构化的寄存器121的物理寄存器文件(PRF)120。
指令执行流水线112a、112b可以从指令缓存(I缓存)122取回指令,而指令侧转换旁视缓冲器(ITLB)124可以管理存储器寻址和许可。数据可以从数据缓存(D缓存)126被访问,而主转换旁视缓冲器(TLB)128可以管理存储器寻址和许可。在各种实施例中,ITLB 124可以是TLB 128的一部分的副本。在其他实施例中,ITLB 124和TLB 128可以被集成。类似地,在各种实施例中,I缓存122和D缓存126可以被集成或成一体。在I缓存122和/或D缓存126中的未命中可以引起对更高层级的缓存(诸如L2或L3缓存)或主(片外)存储器132的访问,这在存储器接口130的控制之下。处理器101可以包括输入/输出接口(I/O IF)134,输入/输出接口134可以控制对各种外围设备136的访问。
如图1中示出的,处理器101还可以包括模式检测电路(PDC)140。如本文中使用的,模式检测电路140可以包括任何合适的电路系统(例如,逻辑门),该电路系统被配置为识别被配置为从缓存和/或存储器中读取或加载数据的多个指令的某些模式、以及被配置为在缓存和/或存储器中写入或存储数据的指令的模式。例如,与指令执行流水线112(或指令执行流水线112a、112b)相关联的是SIT 111,SIT 111可以被用于维持或以其他方式跟踪与通过指令执行流水线112a、112b的加载、存储和/或其他指令相关联的各种属性,从而模式可以基于在SIT 111中被跟踪的指令属性来识别。响应于识别出这样的指令模式,组成该模式的多个指令可以被替换为等效指令,等效指令比被替换的指令更加带宽高效。
此外,在各种实施例中,数据缓存126可以按照这样的方式被组织:基于针对两个或更多加载/存储指令的不同大小和/或基址偏移来返回数据,该两个或更多加载/存储指令被组合或以其他方式被替换为等效指令,等效指令比被替换的指令更加带宽高效。例如,在各种实施例中,数据缓存126可以被组织以使得缓存行的各个位具有物理上独立的位线,这可以提供如下的能力:将所选择的缓存行的所有位读取到物理上独立的位线上而没有任何字/字节冲突。类似地,该组织可以允许来自位线的数据被写入到存储器132中而没有任何冲突,并且允许缓存行的某些字节/字被读取而同时写入同一缓存行的重叠或非重叠字节。在各种实施例中,数据缓存126可以进一步被组织以使得与不同数据字相关联的位线被物理地交错。例如,缓存行的所有数据字的“比特0”可以被保持为在物理上相邻,其中使用读取列复用器来读取数据字中的所选择的一个数据字,来自各个数据字的物理上相邻的位线可以被复用在一起。以类似的方式,两个这样的读取复用器可以被实现为同时读取两个数据字,这两个数据字与被组合成单个更宽加载指令的两个加载指令相关联。类似地,写入列解复用器可以被实现以将与存储指令相关联的数据写入到所选择的数据字中的一个数据字的位线。两个这样的写入列解复用器也可以被实现以同时写入与两个存储指令相关联的数据,这两个存储指令被组合成更宽存储指令。当两个被组合的操作在缓存行的相同字节上操作时,可能发生碰撞。特别地,两次读取之间的碰撞可能引起位线上的过度加载,并且在这样的情况下,仅一个读取列复用器被使能,并且来自所选择的读取列复用器的读取数据随后被旁路到另一读取列复用器的输出。在两次写入之间,碰撞可能引起高电流条件,并且在这样的情况下,仅一个所选择的写入列复用器被使能。
根据各个方面,图2图示了示例性方法200,示例性方法200可以由合适的处理器执行以识别多个存储器访问指令的某些模式,并且将其替换为更加带宽高效的存储器访问指令。在至少一个实施例中,图1中图示的PDC 140和SIT 111可以在执行图2中图示的方法200时被使用。一般地,方法200描绘了一方面,在该方面中,如上文提到的并且在下文更详细描述的,处理器检测访问相邻存储器或可能在同一缓存行上的存储器的多个指令,并且基于多个指令利用小于处理器可用的所有存储器带宽,将多个指令替换为更加带宽高效的指令。
在框210处,方法200开始于处理器(例如,PDC 140)检测使用可用总线宽度的第一部分来访问存储器的多个流水线型指令的模式。如下文更详细描述的,处理器可以检测如下的模式,在这些模式中,多个流水线型指令是连续的、不连续的或交错的加载/存储指令,这些加载/存储指令将相邻(或邻接)的存储器和/或可能在同一缓存行上的存储器作为目标。也如下文更详细描述的,处理器可以检测如下的模式,在该模式中,多个指令使用具有不同偏移的相同基址寄存器,使用相对于程序计数器(其随着指令执行而增加)的地址,或者使用相对于栈指针的地址。
根据各种实施例,在框220处,处理器可以响应于检测到模式而组合多个流水线型指令,其中多个流水线型指令可以被组合成单个指令,该单个指令使用比第一部分宽的可用总线宽度的第二部分来访问存储器。在将单个指令和可能的其他(例如,未改变的)指令从流水线中的解码级传递到执行级之前,处理器可以将多个流水线型指令的模式替换为单个指令。
上文关于图2中图示的方法200而描述的各种操作可以使用具有执行对应功能的能力的任何合适的部件来执行,诸如处理器或处理系统的电路系统和/或(多个)模块。例如,用于检测使用可用总线宽度的第一部分来访问存储器的流水线型指令的模式的部件可以结合图1中示出的SIT 111被实现在图1中示出的模式检测电路140中。此外,用于将流水线型指令组合成使用比第一部分宽的可用总线宽度的第二部分来访问存储器的单个指令的部件,可以被实现在图1中示出的处理器101的任何合适的电路中,包括模式检测电路140、(多个)流水线112内的电路、控制逻辑114等。
根据各个方面,处理器(例如,图1中的处理器101)可以将连续(例如,背对背)的加载(例如,从一个位置加载数据的指令)或存储(例如,将数据存储到一个位置的指令)识别为以邻接的正偏移将存储器作为目标的指令模式。例如:
STR W4,[X0];32b W4在X0+0处去往存储器
STR W5,[X0,#4];32b W5在X0+4处去往存储器
STRB W1,[SP,#-5];8b W1在SP-5处去往存储器
STRB W2,[SP,#-4];8b W2在SP-4处去往存储器
LDR D2,[X8,#8];64b D2在X8+8处来自存储器
LDR D7,[X8,#16];64b D7在X8+16处来自存储器
在第一对存储寄存器(STR)指令中,来自寄存器W4的32位值被写入到位于X0寄存器中存储的值处的存储器位置,并且然后来自寄存器W5的32位值被写入到比X0寄存器中存储的值高四个地址(32位)的存储器位置。在第二对存储寄存器字节(STRB)指令中,来自寄存器W1的八位值被写入到位于比栈指针(SP)中存储的值低五个地址的存储器位置,并且然后来自寄存器W2的八位值被写入到位于比SP中存储的值低4个地址(也即,比写入W1的位置高一个地址或八位)的存储器位置。在第三对加载寄存器(LDR)指令中,从位于比寄存器X8中存储的值高八个地址的存储器位置,64位值被读取到寄存器D2中,并且然后从位于比寄存器X8中存储的值高十六个地址(也即,比第一LDR指令中从其读取的位置高八个地址或64位)的存储器位置,64位值被读取到寄存器D7中。根据本文中描述的各个方面进行操作的处理器,可以将以邻接的正偏移(诸如上述那些)来访问存储器的连续指令识别为可以利用更加带宽高效的指令来替换的模式。处理器然后可以如上文参考图2所描述的,将连续指令替换为更加带宽高效的指令。例如,第一对STR指令可以被替换为等效的存储寄存器双字(STRD)指令,该STRD指令将来自寄存器W4和W5的32位值写入到位于X0寄存器中存储的值处的存储器位置。类似地,第二对STRB指令可以被替换为等效的存储寄存器半字(STRH)指令,并且第三对LDR指令可以被替换为等效的加载寄存器双字(LDRD)指令。如对本领域的技术人员将明显的是,在64位指令集合架构中,整数LDR或等效指令可以取决于目的地寄存器来加载/存储64位或32位(例如,当目的地寄存器为X寄存器时的64位,或者当目的地寄存器为W寄存器时的32位),而加载寄存器半字(LDRH)指令加载16位并且加载寄存器字节(LDRB)指令加载8位。本领域的技术人员将进一步明白,本文中提供的存储指令和示例一般可以遵循该标记法。
根据各个方面,处理器还可以将不同大小的连续加载/存储指令识别为以邻接的正或负偏移将存储器作为目标的指令模式。例如,以下指令模式说明了以邻接的正偏移将存储器作为目标的不同大小的连续存储指令和连续加载指令的情况:
STR X4,[X0];64b X4在X0+0处去往存储器
STR W5,[X0,#8];32b W5在X0+8处去往存储器
LDRB W1,[X0];8b W1在X0处来自存储器
LDRH W2,[X0,#1];16b W2在X0+1处来自存储器
在第一对STR指令中,来自寄存器X4的64位值被写入到位于X0寄存器中存储的值处的存储器位置,并且然后来自寄存器W5的32位值被写入到比X0寄存器中存储的值高八个地址(64位)的存储器位置。在第二对指令中,第一加载寄存器字节(LDRB)指令从位于寄存器X0中存储的值处的存储器位置将8位值读取到寄存器W1中,并且然后加载寄存器半字(LDRH)指令从位于比寄存器X0中存储的值高一个地址(8位)的存储器位置将16位值读取到寄存器W2中。根据本文中描述的各个方面进行操作的处理器可以将这样的连续指令识别为以邻接的正偏移访问不同大小的存储器,其可以被替换为等效的更加带宽高效的指令。此外,如上文关于图1更详细地描述的,数据缓存(例如,数据缓存126)可以按照这样的方式被组织:处置与被组合成等效的带宽高效指令的加载/存储指令相关联的不同大小。
根据各个方面,处理器还可以把以邻接的负偏移将存储器作为目标的连续加载/存储指令识别为可以利用等效的更加带宽高效的指令来替换的模式。例如:
STR W6,[X0,#4];32b W6在X0+4处去往存储器
STR W7,[X0];32b W7在X0+0处去往存储器
在上述STR指令对中,来自寄存器W6的32位值被写入到比X0寄存器中存储的值高四个地址(32位)的存储器位置,并且然后来自寄存器W7的32位值被写入到位于X0寄存器中存储的值处的存储器位置。按照如上文描述的类似方式,根据本文中描述的各个方面进行操作的处理器可以将这样的连续指令识别为以邻接的负偏移访问存储器,其可以被替换为等效的更加带宽高效的指令。例如,这两个STR指令可以被替换为等效指令,该等效指令将包括来自寄存器W7的32位值和来自寄存器W6的32位值的64位值写入到从X0寄存器中存储的值处开始的存储器位置。
根据各个方面,处理器还可以将具有基址更新的连续加载/存储指令识别为可以利用等效的更加带宽高效的指令来替换的模式。如本文中使用的,术语“基址更新”可以一般地指代如下的指令,该指令更改指令模式中使用的包含地址的寄存器的值。当指令中的基址更新被考虑时,处理器可以识别出指令模式以相邻存储器为目标。例如,在下面的LDR指令对中,归因于第一LDR指令中的基址更新,数据从相邻存储器位置被读取:
LDR X7,[X0],#8;64b在X0处来自存储器;X0=X0+8
LDR X3,[X0];64b在X0处来自存储器
根据本文中描述的各个方面进行操作的处理器,可以将具有基址更新(诸如上述那些)的连续加载/存储指令识别为可以利用更加带宽高效的加载/存储指令来替换的模式,并且然后如上文参考图2描述的那样替换这些指令。
根据各个方面,处理器还可以将连续的程序计数器相对(PC相对)加载/存储指令识别为可以利用等效的更加带宽高效的指令来替换的模式。例如,当对程序计数器(PC)的改变被考虑时,处理器可以识别出加载/存储指令的模式以相邻存储器为目标。例如,在下面的指令对中,归因于在第一指令被执行之后的PC变化,数据从相邻存储器位置被读取:
LDR R1,[PC,#20];PC=X,在X+20+8处从存储器加载
LDR R2,[PC,#20];在X+4+20+8处从存储器加载
在上述指令对中,32位值从位于比PC的第一值(X)高28个位置(224位)的存储器位置被读取,PC前进四个位置,并且然后另一32位值从位于比PC的第一值(X)高32个位置(256位)的存储器位置被读取。因此,上述指令对可以被替换为以下等效指令:
LDRD R1,R2,[PC,#20]
根据各个方面,处理器还可以将如下的连续加载/存储指令识别为可替换模式,这些连续加载/存储指令将可能在同一缓存行上的具有负偏移的非邻接存储器作为目标。例如:
LDR X1,[SP,#32];64b X1在SP+32处来自存储器
LDR X2,[SP,#8];64b X2在SP+8处来自存储器
在上述LDR指令对中,64位值从比栈指针中存储的值高32个地址的存储器位置被读取到寄存器X1中,并且然后64位值从比栈指针中存储的值高8个地址的存储器位置被读取到寄存器X2中。换言之,第二LDR指令跨越从SP+8到SP+16以存储器为目标,并且第一LDR指令跨越从SP+32到SP+40以存储器为目标,由此在两个LDR指令中被作为目标的存储器是不邻接的。然而,跨越从SP+8到SP+40的存储器的整个范围是32个地址或256位。因此,假定缓存行的大小是256位或更大的配置,则这两个指令可以被组合以从单个缓存行中读取相关数据。本领域的技术人员将明白,情况经常将是这样,因为现代处理器具有通常为64字节(512位)或128字节(1024位)的缓存行。
根据各个方面,处理器还可以将如下的具有基址更新的连续加载/存储指令识别为可替换模式,这些连续加载/存储指令将可能在同一缓存行上的具有正偏移的非邻接存储器作为目标。例如:
LDR X3,[X10,#16];64b X3在X10处来自存储器;X10=X10+16
LDR X4,[X10,#8];64b X4在X10+8处来自存储器
在上述LDR指令对中,64位值从位于寄存器X10中存储的值处的存储器位置被读取到寄存器X3中,并且寄存器X10中存储的值然后被递增16个地址(或128位)。第二LDR指令然后从比寄存器X10中存储的已更新值高八个地址(64位)的存储器位置将64位值读取到寄存器X4中。因此,在两个LDR指令中被作为目标的整个存储器范围再次跨越32个地址或256位,由此,假定缓存行在大小上为256位或更大,则两个LDR指令可以被组合以从单个缓存行读取相关数据。
根据各个方面,处理器还可以将多个非连续(例如,非背对背)加载/存储指令识别为如下的模式,该模式归因于将相邻存储器或可能在同一缓存行上的存储器作为目标,而可以被适当地替换为更加带宽高效的指令。特别地,如果不存在如下的中间指令,这些中间指令将会更改多个加载/存储指令中引用的地址寄存器,该多个加载/存储指令将相邻存储器或可能在同一缓存行上的存储器作为目标,那么加载/存储指令可以按照如下的方式被组合并且替换为更加带宽高效的指令,该方式大体上类似于将相邻存储器或可能在同一缓存行上的存储器作为目标的连续加载/存储指令。例如,在下面的指令集合中,数据从非连续LDR指令中的相邻存储器位置中被读取,并且两个中间指令未更改非连续LDR指令正在读取的存储器位置。
LDR X1,[X0];64b X1在X0处来自存储器
MOV X2,#42;未更改地址寄存器(X0)
ADD X3,X2,#20;未更改地址寄存器(X0)
LDR X4,[X0,#8];64b X4在X0+8处来自存储器
在上述指令集合中,第一和第四指令可以被替换为如下的单个LDRD指令,该单个LDRD指令将由X0寄存器中的值指定的位置处开始的十六个相邻存储器位置作为目标,因为第二和第三指令未更改这十六个相邻存储器位置中的任何存储器位置。因此,上面示出的四个指令可以被替换为以下等效指令集合:
LDRD X1,X4,[X0]
MOV X2,#42
ADD X3,X2,#20
虽然替换LDRD指令(针对原始的第一和第四指令)在上面的列表中被示出为发生在插入MOV指令和ADD指令之前,但是该顺序仅是为了方便,而非旨在限制指令在它们被传递到流水线的执行级的顺序。特别地,替换LDRD指令可以在中间指令之前、之间或之后被传递到流水线的执行级,因为LDRD指令本质上独立于中间的MOV指令和ADD指令。
上文描述的模式可以按照非连续(例如,非背对背)变化而出现。因此,根据本公开进行操作的处理器可以识别具有中间指令的先前描述的模式中的任何模式,这些中间指令不更改被作为目标的存储器位置中的任何存储器位置,并且处理器可以将所识别的模式替换为更加带宽高效的等效指令。
例如,在下面的指令集合中的每个指令集合中,非连续指令从相邻存储器位置和/或可能在同一缓存行的存储器中读取数据或将数据存储在其中,并且中间指令不更改可替换的非连续指令中访问的存储器位置中的任何存储器位置。
LDR R0,[SP,#8];在SP+8处从存储器中加载R0
MOV R3,#60;不在SP+8或SP+12处更改存储器
LDR R1,[SP,#12];在SP+12处从存储器中加载R1
STR R4,[R0] ;32b R4在R0+0处去往存储器
MOV R2,#21 ;不在R0或R0+4处更改存储器
STR R5,[R0,#4] ;32b R5在R0+4处去往存储器
STRB R1,[SP,#-5];8b R1在SP-5处去往存储器
MOV R2,#42;不在SP-5或SP-4处更改存储器
STRB R2,[SP,#-4];8b R2在SP-4处去往存储器
VLDR D2,[R8,#8];64b D2在R8+8处来自存储器
ADD R1,R2;不在R8+8或R8+16处更改存储器
VLDR D7,[R8,#16];64b D2在R8+16处来自存储器
在上述指令集合中的每个指令集合中,在相邻位置的存储器和/或可能在同一缓存行上的存储器被执行类似操作的指令作为目标,并且中间指令不更改存储器位置。根据本文中描述的各个方面进行操作的处理器可以将非连续指令(诸如上述那些)识别为可以利用更加带宽高效的指令来替换的模式,并且然后如上文所描述的那样替换这些指令而留下中间指令不变。
在另一示例中,具有基址更新的非连续加载或存储可以被识别为可以利用更加带宽高效的指令来替换的模式。例如,在下面的指令集合中,归因于第一指令中的基址更新,数据从相邻存储器位置被读取:
LDR R7,[R0],#4;32b在R0处来自存储器;R0=R0+4
ADD R1,R2;不在R0或R0+4处更改存储器
LDR R3,[R0];32b在R0处来自存储器
因此,LDR指令可以被替换为LDRD指令,如下:
LDRD R7,R3,[R0],#4
ADD R1,R2
在又另一示例中,非连续PC相对加载指令或存储指令可以被识别为可以利用更加带宽高效的指令来替换的模式。例如,在下面的指令集合中,归因于在第一LDR指令之后的PC变化,数据从相邻存储器位置被读取:
LDR R1,[PC,#20];PC=X,在X+20+8处从存储器中加载
MOV R2,#42;不在X+28或X+32处更改存储器
LDR R3,[PC,#16];在X+8+16+8处从存储器中加载
因此,LDR指令可以被替换为LDRD指令,如下:
LDRD R1,R3,[PC,#20]
MOV R2,#42
根据各个方面,适用于非连续变化的特殊模式可以是有机会组合同一加载指令或存储指令的多个动态实例的情况。例如,在以下指令集合中,后向分支可能导致以相邻存储器为目标的多个加载,由此对寄存器X5的加载的两个动态实例可以被组合成一个:
loop:LDR X5,[X2],#8;64b X5在X2处来自存储器;X2=X2+8
CMP X5,X0;比较X5和X0中的值
B.NEloop;如果X5不等于X0,则分支回到加载
在另一示例中,在以下指令集合中,第一和最后指令是同一加载指令的多个实例,并且四个中间指令不更改与两个加载指令相关联的基址寄存器,两个加载指令因此可以适当地被组合成单个加载指令:
LDRB W3,[X1],#1
SUBS WZR,W2,#0x1
CCMP W2,W3,#0,CS
B.EQ{pc}-0x10;0x3ffb7ff6548
LDRB W2,[X0],#1
LDRB W3,[X1],#1
根据各个方面,根据本公开进行操作的处理器还可以识别与一个或多个其他模式交错的先前描述的模式中的任何模式,从而加载/存储的两个或更多模式可以合格用于组合成更加带宽高效的等效指令。也就是说,在一组指令中,多个加载或多个存储的两个或更多模式可以是合格的以被替换为更加带宽高效的加载/存储指令。例如,在下面的指令集合中,数据通过第一对指令从相邻存储器位置被读取,并且通过第二对指令从相邻存储器位置的不同集合被读取。
A:LDR R1,[R0],#4;32b在R0处来自存储器;R0=R0+4
B:LDR R7,[SP];32b在SP处来自存储器
C:LDR R4,[R0];32b在R0处来自存储器(与A配对)
D:LDR R5,[SP,#4];32b在SP+4处来自存储器(与B配对)
根据本文中描述的各个方面进行操作的处理器可以识别可以利用更加带宽高效的指令来替换的指令的交错模式。因此,当根据本文中描述的各个方面进行操作的处理器遇到上述示例性模式时,第一和第三指令可以被替换为更加带宽高效的指令(例如,第一LDRD指令),并且第二和第四指令可以被替换为另一更加带宽高效的指令(例如,第二LDRD指令)。
根据各个方面,先前描述的模式中的任何模式可以由处理器检查指令的给定宽度的指令集合窗口中的指令集合来检测。也就是说,根据本文中描述的各个方面进行操作的处理器,可以检查指令集合窗口中的一定数目的指令以检测指令的如下的模式,这些模式访问相邻存储器位置并且可以被替换为更加带宽高效的指令。例如,先前描述的指令的模式中的任何模式可以被检测到,并且在执行期间被替换为更加带宽高效(例如,“更宽”)的指令。在一些情况下,模式识别和指令替换可以在处理器的流水线(诸如图1中示出的流水线112)中被执行。
根据各个方面,图3图示了可以被包括在根据本文中描述的各个方面进行操作的处理器中的示例性基本三级处理器流水线300。示例性处理器流水线300的三个级是取回级302、解码级304和执行级306。在处理器(例如,图1中的处理器101)对程序的执行期间,指令由取回级302从存储器和/或缓存中取回,被传递到解码级304且被解码,并且然后被传递到执行级306且被执行。在所图示的示例中,处理器流水线300是三宽的,因为每个级可以包含多达三个指令。然而,本公开不如此被限制,而是适用于具有其他宽度和/或级(例如,如在精简指令集合计算机(RISC)流水线中的存储器访问级和寄存器写回级)的流水线。
如图3中图示的,取回级302中图出的指令组被传递到解码级304,在解码级304中,指令经由“xform”逻辑310被变换。在变换之后,指令被流水线化到执行级306中。“xform”逻辑310可以识别出加载指令320、322可以被替换为更加带宽高效的指令,在这种情况下是单个LDRD指令330。如所图示的,两个原始加载指令320、322未被传递到执行级。替代地,替换两个原始LRD指令320、322的替换LDRD指令330以斜体文本图示出。未被更改的另一指令340也被示出。根据各个方面,在本文中称为存储指令表(SIT)308的表可以与解码级304相关联,并且用于维持经过解码级304的加载/存储的某些属性,从而“xform”逻辑310可以基于移动经过解码级304的指令,和/或基于已经通过解码级304的较旧组中的指令,来识别指令的可替换模式。
根据各个方面,图4图示了可以用于跟踪与近期指令相关联的信息的示例性存储指令表(SIT)400。在图4中,SIT 400被图示为它将在指令到达解码级304时被填充用于图3中示出的指令组。与通过解码级304的每个指令有关的信息可以被存储在SIT 400的一行中,SIT 400在所图示的示例中包括四列。特别地,索引列402可以标识相对于当前在SIT400中的其他指令的指令位置,并且类型列404可以标识指令的类型(例如,“加载”、“存储”或“其他”,“其他”用于既不从存储器或缓存中读取也不写入存储器或缓存的任何指令)。此外,基址寄存器列406可以指示在对应的加载指令或存储指令中用作基址的寄存器,并且偏移列408可以存储在指令被执行时添加到基址寄存器的立即值。此外,尽管SIT 400在图4中被图示为仅包含与来自解码级304的指令有关的信息,但是本领域的技术人员将明白,本公开不如此被限制,因为SIT 400可以包含与其他合适级中的指令有关的信息。例如,在具有更长流水线的处理器中,SIT 400可以具有与已经通过解码级304的指令有关的信息。
根据各个方面,根据本文中描述的各个方面进行操作的处理器可以应用逻辑来识别可以利用单个指令替换的多个指令的一个或多个模式,其中这些模式可以包括但不限于上文所描述的那些。如果可以被替换的指令的模式被识别,则当这些指令流向执行级306时,处理器可以将这些指令变换为另一等效指令。
根据各个方面,为了如本文所描述的那样来检测模式并且合并指令,作用于SIT400和处理器流水线300上的模式检测电路可以识别先前描述的加载指令或存储指令的模式,这些模式访问相邻存储器或可能在同一缓存行上的存储器。特别地,模式检测电路可以将类型“加载”的每个指令的基址寄存器和偏移与类型“加载”的每个其他指令的基址寄存器和偏移进行比较,并且确定任何两个“加载”指令是否具有相同的基址寄存器和如下的偏移,这些偏移使两个“加载”指令访问相邻存储器位置或可能在同一缓存行上的非邻接存储器。模式检测电路还可以确定在所比较的“加载”指令之间发生的对基址寄存器的改变是否使两个指令访问相邻存储器或可能在同一缓存行上的非邻接存储器。当模式检测电路确定两个“加载”指令访问相邻存储器或可能在同一缓存行上的存储器时,则模式检测电路将这两个“加载”指令替换为等效的更加带宽高效的替换加载指令。模式检测电路然后将替换指令传递到执行级306。模式检测电路还可以针对类型“存储”的指令执行类似的比较和替换。模式检测电路还可以确定PC值,PC值将被用于影响到PC相对存储器位置的“加载”指令,并且模式检测电路然后使用所确定的PC值(以及指令中包括的任何偏移)来确定任何两个“加载”指令是否访问相邻存储器或可能在同一缓存行上的存储器。模式检测电路可以针对影响PC相对存储器位置的“存储”指令执行类似的PC值确定,并且使用所确定的PC值来确定任何两个“存储”指令是否访问相邻存储器或可能在同一缓存行上的存储器。
根据各个方面,图5图示了另一示例性方法500,示例性方法500用于如上文中进一步详细描述的,识别多个存储器访问指令的某些模式并且将其替换为更加带宽高效的存储器访问指令。更特别地,在框510处,具有相同类型并且使用相同基址寄存器的多个“窄”指令可以被标识,其中如本文中使用的术语“窄”被考虑为意指:对应指令使用小于去往/来自存储器和/或缓存的数据路径中的全部可用带宽来访问存储器或缓存(例如,在具有去往/来自存储器和/或缓存的128位数据路径的系统中的32位或64位加载/存储)。在各种实施例中,在框520处,多个存储器访问指令(例如,多个加载或多个存储)可以被确定为将邻接存储器或可能在同一缓存行上的存储器作为目标,这可以指示多个存储器访问指令潜在地是可组合的。例如,在指令连续地出现在流水线中的场合,或者在指令非连续地出现在流水线中并且任何中间指令没有写入到与潜在可组合指令相同的基址寄存器(也即,中间指令不创建存储器冒险)的场合,多个存储器访问指令可以是可组合的。这样,响应于在框530处确定多个指令连续地出现在流水线中,多个指令可以在框550处被替换为单个“更宽”指令,该单个“更宽”指令执行与被组合的指令的等效功能,同时还利用去往/来自存储器和/或缓存的数据路径中的更大可用带宽。
替代地,响应于在框530处确定多个指令没有连续地出现在流水线中,多个指令响应于框540导致确定中间指令未创建存储器冒险而仍然可以在框550处被替换。例如,如果中间指令不包括任何存储指令,则中间指令不创建存储器冒险,并且在框550处,多个加载/存储指令可以适当地被替换为等效的更宽的指令。然而,如果中间指令包括一个或多个存储指令,则中间指令可以被确定为创建存储器冒险,从而多个加载/存储指令不被组合或以其他方式被替换为等效的更宽的指令,除非某些条件被满足。更具体地,如果(多个)中间存储指令使用与被组合的多个加载/存储指令相同的基址寄存器,并且(多个)中间存储指令与被组合的加载/存储指令之间没有重叠字节,则没有存储器冒险存在并且在框550处,多个加载/存储指令可以适当地被替换为等效的更宽的指令。否则,当中间指令包括使用与被组合的多个加载/存储指令不同的基址寄存器的一个或多个存储指令,或者在(多个)中间存储指令与被组合的加载/存储指令之间存在一个或多个重叠字节时,则潜在的存储器冒险可能存在并且这些指令可能没有被组合,在该情况下,方法500可以直接进行到框570。
在各种实施例中,当多个窄加载/存储指令被确定为可组合成等效的更宽的加载/存储指令时,服务于被组合的指令的存储器访问可以在单个周期中完成,而不是在如果指令没有被组合,将否则被要求的多个周期中完成。此外,将多个窄加载/存储指令组合成一个等效的宽指令可以在处理器流水线的后端中留下空缺。因此,在各种实施例中,在框560处,处理器流水线中的一个或多个较早级可以填充空缺,这可以有利地提高后端处的处理器吞吐量。在各种实施例中,在框570处,存储指令表可以被更新以跟踪近期指令,包括被组合成更宽指令的任何指令和未被组合成更加带宽高效指令的指令,从而通过流水线的所有指令可以被评估用于潜在组合/替换为可以通过流水线的一个或多个后续指令。
图6图示了可以有利地实现本文中描述的各个方面和实施例的示例性计算设备601。特别地,如图6中示出的,计算设备601可以集成处理器101,处理器101被配置为检测使用小于所有可用带宽(例如,总线宽度)来访问存储器的多个“窄”指令的模式,并且将这些模式替换为使用可用带宽的更大部分的“更宽”指令。图1至图5中描绘的所有装置和方法可以被包括在计算设备601中或由计算设备601执行。计算设备601还可以经由网络630连接到其他计算设备。一般地,网络630可以是电信网络和/或广域网(WAN)。在特定方面,网络630是互联网。一般地,计算设备601可以是包括处理器的任何合适的设备,该处理器被配置为实现本文中描述的技术,以将未完全利用去往和来自一个或多个缓存和/或存储器的路径中的可用带宽的某些存储器访问指令(例如,加载和/或存储指令),替换为利用可用带宽的更大部分的等效指令(合适的设备例如是,台式计算机、服务器、膝上型计算机、平板计算机、智能电话、物联网(IoT)设备、可穿戴设备、汽车设备或远程信息处理设备、机器人设备、或被配置为从存储器读取数据和将数据写入到存储器的任何其他已有的或将来开发的设备)。
计算设备601一般包括经由总线620连接到存储器608的处理器101、网络接口设备618、存储装置609、输入设备622和输出设备624。计算设备601一般使用合适的操作系统(图6中未明确示出)进行操作。支持本文中公开的功能的任何操作系统可以被使用。处理器101被包括以表示单个处理器、多个处理器、具有多个处理核的单个处理器等。网络接口设备618可以是允许计算设备601经由网络630与其他计算设备通信的任何类型的网络通信设备。
在各种实施例中,存储装置609可以是持久性存储设备。尽管存储装置609在图6中被示出为单个单元,但是本领域的技术人员将明白,存储装置609可以是固定和/或可移除存储设备的组合,诸如固定盘驱动器、固态驱动器、存储区域网络(SAN)存储装置、网络附接存储装置(NAS)、可移除存储器卡、光学存储装置等。存储器608和存储装置609可以是跨越多个主存储设备和/或辅存储设备的一个虚拟地址空间的一部分。
在各种实施例中,输入设备622可以是可操作为使得用户能够向计算设备601提供输入的任何合适设备。例如,输入设备622可以是键盘和/或鼠标。输出设备624可以是可操作为向计算设备601的用户提供输出的任何合适设备。例如,输出设备624可以是任何常规的显示屏和/或扬声器组。尽管与输入设备622分开示出,但是本领域的技术人员将明白,输出设备624和输入设备622可以适当地被组合。例如,具有集成触摸屏的显示屏可以是组合的输入设备622和输出设备624。
本领域的技术人员将明白,信息和信号可以使用各种不同技艺和技术中的任何一种来表示。例如,贯穿上述描述可能引用的数据、指令、命令、信息、信号、位、符号和码片可以由电压、电流、电磁波、磁场或粒子、光场或粒子、或其任何组合来表示。
此外,本领域的技术人员将明白,关于本文中公开的各方面所描述的各种说明性的逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件、或两者的组合。为了清楚地说明硬件和软件的这种可互换性,各种说明性的组件、块、模块、电路和步骤已经一般地按照它们的功能在上文被描述。这样的功能被实现为硬件还是软件取决于特定应用和施加在整个系统上的设计约束。技术人员可以针对每个特定应用以不同方式来实现所描述的功能,但是这样的实现决定不应当被解释为偏离本文中描述的各个方面和实施例的范围。
关于本文中公开的各方面所描述的各种说明性逻辑块、模块和电路可以利用被设计为执行本文中描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件、或其任何组合来实现或执行。通用处理器可以是微处理器,但是在替代方式中,处理器可以是任何常规处理器、控制器、微控制器、或状态机。处理器也可以被实现为计算设备的组合(例如,DSP和微处理器的组合、多个微处理器、与DSP核心相结合的一个或多个微处理器、或其他这样的配置)。
关于本文中公开的各方面所描述的方法、序列和/或算法可以直接体现在硬件中、在由处理器执行的软件模块中、或在两者的组合中。软件模块可以驻留在RAM、闪存、ROM、EPROM、EEPROM、寄存器、硬盘、可移除盘、CD-ROM、或本领域已知的任何其他形式的非瞬态计算机可读介质中。示例性的非瞬态计算机可读介质可以耦合到处理器,以使得处理器可以从非瞬态计算机可读介质中读取信息,并且向非瞬态计算机可读介质中写入信息。在替代方式中,非瞬态计算机可读介质可以与处理器成一体。处理器和非瞬态计算机可读介质可以驻留在ASIC中。ASIC可以驻留在IoT设备中。在替代方式中,处理器和非瞬态计算机可读介质可以是用户终端中的分立组件。
在一个或多个示例性方面,本文中描述的功能可以被实现在硬件、软件、固件、或其任何组合中。如果被实现在软件中,则功能可以作为一个或多个指令或代码存储在非瞬态计算机可读介质上或通过其传输。计算机可读介质可以包括存储介质和/或通信介质,通信介质包括可以促进将计算机程序从一个地方传送到另一地方的任何非瞬态介质。存储介质可以是计算机可以访问的任何可用介质。通过示例而非限制的方式,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储装置、磁盘存储装置或其他磁性存储设备、或者可以用于以指令或数据结构的形式承载或存储所需要的程序代码并且可以由计算机访问的任何其他介质。此外,任何连接都恰当地被称为计算机可读介质。例如,如果软件使用同轴电缆、光纤电缆、双绞线、DSL、或无线技术(诸如红外、无线电和微波)从网站、服务器或其他远程源被传输,则同轴电缆、光纤电缆、双绞线、DSL、或无线技术(诸如红外、无线电和微波)被包括在介质的定义中。在本文中可以互换使用的术语盘和碟包括CD、激光碟、光碟、DVD、软盘和蓝光碟,它们通常磁性地和/或利用激光光学地复制数据。上述各项的组合也应当被包括在计算机可读介质的范围内。
尽管前述公开示出了说明性的各方面和实施例,但是本领域的技术人员将明白,各种改变和修改可以在本文中作出,而不偏离由所附权利要求限定的本公开的范围。此外,根据本文中描述的各种说明性方面和实施例,本领域的技术人员将明白,上文描述的任何方法中的和/或在附加于此的任何方法权利要求中记载的功能、步骤和/或动作不需要以任何特定顺序被执行。更进一步地,在任何元素以单数形式在上文被描述或被记载在所附权利要求中的范围内,本领域的技术人员将明白,(多个)单数形式也考虑到复数,除非明确陈述限于(多个)单数形式。
Claims (40)
1.一种用于组合加载指令或存储指令的方法,包括:
在处理器流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;
确定所述多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及
在所述处理器流水线内,将所述多个存储器访问指令替换为一个等效存储器访问指令,所述一个等效存储器访问指令比被替换的所述存储器访问指令中的任何存储器访问指令利用更大的所述可用总线宽度。
2.根据权利要求1所述的方法,其中响应于确定所述多个存储器访问指令连续地出现在所述处理器流水线中并且以邻接的偏移将所述相邻存储器作为目标,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
3.根据权利要求2所述的方法,其中所述多个存储器访问指令以邻接的正偏移将所述相邻存储器作为目标。
4.根据权利要求2所述的方法,其中所述多个存储器访问指令以邻接的负偏移将所述相邻存储器作为目标。
5.根据权利要求1所述的方法,其中所述多个存储器访问指令利用所述可用总线宽度的不同部分。
6.根据权利要求1所述的方法,还包括:响应于所述多个存储器访问指令包括第一存储器访问指令和第二存储器访问,而确定所述多个存储器访问指令将所述相邻存储器作为目标,所述第一存储器访问指令更改所述共同基址寄存器中存储的值,所述第二存储器访问在与所述共同基址寄存器中存储的已更改的所述值相邻的位置处访问存储器。
7.根据权利要求1所述的方法,还包括:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,其中响应于确定没有中间存储指令出现在非连续的所述存储器访问指令之间,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
8.根据权利要求1所述的方法,还包括:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,其中响应于确定出现在非连续的所述存储器访问指令之间的一个或多个中间存储指令使用在所述多个存储器访问指令中参考的所述共同基址寄存器,并且确定非连续的所述存储器访问指令与所述一个或多个中间存储指令之间没有重叠字节,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
9.根据权利要求1所述的方法,其中所述多个存储器访问指令包括相同存储器访问指令的多个动态实例。
10.根据权利要求1所述的方法,其中所述多个存储器访问指令包括多个加载指令或多个存储指令。
11.一种装置,包括:
处理器,被配置为:在与所述处理器相关联的流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;确定所述多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及在与所述处理器相关联的所述流水线内,将所述多个存储器访问指令替换为一个等效存储器访问指令,所述一个等效存储器访问指令比被替换的所述存储器访问指令中的任何存储器访问指令利用更大的所述可用总线宽度。
12.根据权利要求11所述的装置,其中响应于所述多个存储器访问指令连续地出现在所述流水线中并且以邻接的偏移将所述相邻存储器作为目标,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
13.根据权利要求12所述的装置,其中所述多个存储器访问指令以邻接的正偏移将所述相邻存储器作为目标。
14.根据权利要求12所述的装置,其中所述多个存储器访问指令以邻接的负偏移将所述相邻存储器作为目标。
15.根据权利要求11所述的装置,其中所述多个存储器访问指令利用所述可用总线宽度的不同部分。
16.根据权利要求11所述的装置,其中所述处理器还被配置为:响应于所述多个存储器访问指令包括第一存储器访问指令和第二存储器访问,而确定所述多个存储器访问指令将所述相邻存储器作为目标,所述第一存储器访问指令更改所述共同基址寄存器中存储的值,所述第二存储器访问在与所述共同基址寄存器中存储的已更改的所述值相邻的位置处访问存储器。
17.根据权利要求11所述的装置,其中所述处理器还被配置为:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,并且所述处理器还被配置为:如果没有中间存储指令出现在非连续的所述存储器访问指令之间,则将所述多个存储器访问指令替换为所述一个等效存储器访问指令。
18.根据权利要求11所述的装置,其中所述处理器还被配置为:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,并且所述处理器还被配置为:如果出现在非连续的所述存储器访问指令之间的一个或多个中间存储指令使用在所述多个存储器访问指令中参考的所述共同基址寄存器,并且非连续的所述存储器访问指令与所述一个或多个中间存储指令之间没有重叠字节,则将所述多个存储器访问指令替换为所述一个等效存储器访问指令。
19.根据权利要求11所述的装置,其中所述多个存储器访问指令包括相同存储器访问指令的多个动态实例。
20.根据权利要求11所述的装置,其中所述多个存储器访问指令包括多个加载指令或多个存储指令。
21.一种装置,包括:
用于在处理器流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式的部件;
用于确定所述多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标的部件;以及
用于在所述处理器流水线内,将所述多个存储器访问指令替换为一个等效存储器访问指令的部件,所述一个等效存储器访问指令比被替换的所述存储器访问指令中的任何存储器访问指令利用更大的所述可用总线宽度。
22.根据权利要求21所述的装置,其中响应于所述多个存储器访问指令连续地出现在所述处理器流水线中并且以邻接的偏移将所述相邻存储器作为目标,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
23.根据权利要求22所述的装置,其中所述多个存储器访问指令以邻接的正偏移将所述相邻存储器作为目标。
24.根据权利要求22所述的装置,其中所述多个存储器访问指令以邻接的负偏移将所述相邻存储器作为目标。
25.根据权利要求21所述的装置,其中所述多个存储器访问指令利用所述可用总线宽度的不同部分。
26.根据权利要求21所述的装置,还包括:用于响应于所述多个存储器访问指令包括第一存储器访问指令和第二存储器访问,而确定所述多个存储器访问指令将所述相邻存储器作为目标的部件,所述第一存储器访问指令更改所述共同基址寄存器中存储的值,所述第二存储器访问在与所述共同基址寄存器中存储的已更改的所述值相邻的位置处访问存储器。
27.根据权利要求21所述的装置,还包括:用于确定所述多个存储器访问指令非连续地出现在所述处理器流水线中的部件,其中如果没有中间存储指令出现在非连续的所述存储器访问指令之间,则所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
28.根据权利要求21所述的装置,还包括:用于确定所述多个存储器访问指令非连续地出现在所述处理器流水线中的部件,其中如果出现在非连续的所述存储器访问指令之间的一个或多个中间存储指令使用在所述多个存储器访问指令中参考的所述共同基址寄存器,并且非连续的所述存储器访问指令与所述一个或多个中间存储指令之间没有重叠字节,则所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
29.根据权利要求21所述的装置,其中所述多个存储器访问指令包括相同存储器访问指令的多个动态实例。
30.根据权利要求21所述的装置,其中所述多个存储器访问指令包括多个加载指令或多个存储指令。
31.一种计算机可读介质,具有记录在其上的计算机可执行指令,所述计算机可执行指令被配置为使处理器:
在与所述处理器相关联的流水线中,标识参考共同基址寄存器并且未充分利用可用总线宽度的多个存储器访问指令的至少一个模式;
确定所述多个存储器访问指令将相邻存储器或能够适合在单个缓存行上的非邻接存储器作为目标;以及
在与所述处理器相关联的所述流水线内,将所述多个存储器访问指令替换为一个等效存储器访问指令,所述一个等效存储器访问指令比被替换的存储器访问指令中的任何存储器访问指令利用更大的所述可用总线宽度。
32.根据权利要求31所述的计算机可读介质,其中响应于所述多个存储器访问指令连续地出现在所述流水线中并且以邻接的偏移将所述相邻存储器作为目标,所述多个存储器访问指令被替换为所述一个等效存储器访问指令。
33.根据权利要求32所述的计算机可读介质,其中所述多个存储器访问指令以邻接的正偏移将所述相邻存储器作为目标。
34.根据权利要求32所述的计算机可读介质,其中所述多个存储器访问指令以邻接的负偏移将所述相邻存储器作为目标。
35.根据权利要求31所述的计算机可读介质,其中所述多个存储器访问指令利用所述可用总线宽度的不同部分。
36.根据权利要求31所述的计算机可读介质,其中所述计算机可执行指令还被配置为使所述处理器:响应于所述多个存储器访问指令包括第一存储器访问指令和第二存储器访问,而确定所述多个存储器访问指令将所述相邻存储器作为目标,所述第一存储器访问指令更改所述共同基址寄存器中存储的值,所述第二存储器访问在与所述共同基址寄存器中存储的已更改的所述值相邻的位置处访问存储器。
37.根据权利要求31所述的计算机可读介质,其中所述计算机可执行指令还被配置为使所述处理器:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,并且如果没有中间存储指令出现在非连续的所述存储器访问指令之间,则将所述多个存储器访问指令替换为所述一个等效存储器访问指令。
38.根据权利要求31所述的计算机可读介质,其中所述计算机可执行指令还被配置为使所述处理器:确定所述多个存储器访问指令非连续地出现在所述处理器流水线中,并且如果出现在非连续的所述存储器访问指令之间的一个或多个中间存储指令使用在所述多个存储器访问指令中参考的所述共同基址寄存器,并且非连续的所述存储器访问指令与所述一个或多个中间存储指令之间没有重叠字节,则将所述多个存储器访问指令替换为所述一个等效存储器访问指令。
39.根据权利要求31所述的计算机可读介质,其中所述多个存储器访问指令包括相同存储器访问指令的多个动态实例。
40.根据权利要求31所述的计算机可读介质,其中所述多个存储器访问指令包括多个加载指令或多个存储指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/024,725 | 2018-06-29 | ||
US16/024,725 US11593117B2 (en) | 2018-06-29 | 2018-06-29 | Combining load or store instructions |
PCT/US2019/037509 WO2020005614A1 (en) | 2018-06-29 | 2019-06-17 | Combining load or store instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112639727A true CN112639727A (zh) | 2021-04-09 |
Family
ID=67138128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980055599.XA Pending CN112639727A (zh) | 2018-06-29 | 2019-06-17 | 组合加载指令或存储指令 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11593117B2 (zh) |
EP (1) | EP3814892A1 (zh) |
CN (1) | CN112639727A (zh) |
WO (1) | WO2020005614A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114489851A (zh) * | 2022-01-20 | 2022-05-13 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN114579198A (zh) * | 2022-01-20 | 2022-06-03 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN115905038A (zh) * | 2022-12-01 | 2023-04-04 | 格兰菲智能科技有限公司 | 缓存数据读取方法、装置、计算机设备和存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10901745B2 (en) * | 2018-07-10 | 2021-01-26 | International Business Machines Corporation | Method and apparatus for processing storage instructions |
US11210100B2 (en) | 2019-01-08 | 2021-12-28 | Apple Inc. | Coprocessor operation bundling |
US11392378B2 (en) * | 2019-07-25 | 2022-07-19 | Arm Limited | Executing a set of load operations for a gather-load instruction and controlling handling of another instruction that depends on completion of the gather-load instruction |
US20220019436A1 (en) * | 2020-07-20 | 2022-01-20 | International Business Machines Corporation | Fusion of microprocessor store instructions |
US11922207B2 (en) * | 2020-08-13 | 2024-03-05 | Advanced Micro Devices, Inc | Network command coalescing on GPUs |
US11249757B1 (en) * | 2020-08-14 | 2022-02-15 | International Business Machines Corporation | Handling and fusing load instructions in a processor |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130339671A1 (en) * | 2012-06-14 | 2013-12-19 | Gerard R. Williams, III | Zero cycle load |
US20140052961A1 (en) * | 2011-02-17 | 2014-02-20 | Martin Vorbach | Parallel memory systems |
CN105247477A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和系统 |
US20170153825A1 (en) * | 2015-11-27 | 2017-06-01 | Samsung Electronics Co., Ltd. | Access methods of memory device using relative addressing |
US20170249144A1 (en) * | 2016-02-26 | 2017-08-31 | Qualcomm Incorporated | Combining loads or stores in computer processing |
CN108139907A (zh) * | 2015-10-14 | 2018-06-08 | Arm有限公司 | 向量数据传送指令 |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1995022102A1 (en) | 1994-02-08 | 1995-08-17 | Meridian Semiconductor, Inc. | Method and apparatus for simultaneously executing instructions in a pipelined microprocessor |
US6260137B1 (en) | 1997-09-12 | 2001-07-10 | Siemens Aktiengesellschaft | Data processing unit with digital signal processing capabilities |
US5913047A (en) | 1997-10-29 | 1999-06-15 | Advanced Micro Devices, Inc. | Pairing floating point exchange instruction with another floating point instruction to reduce dispatch latency |
US6349383B1 (en) | 1998-09-10 | 2002-02-19 | Ip-First, L.L.C. | System for combining adjacent push/pop stack program instructions into single double push/pop stack microinstuction for execution |
US8065504B2 (en) | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US6189088B1 (en) | 1999-02-03 | 2001-02-13 | International Business Machines Corporation | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
US6397324B1 (en) * | 1999-06-18 | 2002-05-28 | Bops, Inc. | Accessing tables in memory banks using load and store address generators sharing store read port of compute register file separated from address register file |
US6564297B1 (en) * | 2000-06-15 | 2003-05-13 | Sun Microsystems, Inc. | Compiler-based cache line optimization |
US6675376B2 (en) | 2000-12-29 | 2004-01-06 | Intel Corporation | System and method for fusing instructions |
US20030033588A1 (en) | 2001-01-29 | 2003-02-13 | John Alexander | System, method and article of manufacture for using a library map to create and maintain IP cores effectively |
US7028286B2 (en) | 2001-04-13 | 2006-04-11 | Pts Corporation | Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture |
US6889318B1 (en) | 2001-08-07 | 2005-05-03 | Lsi Logic Corporation | Instruction fusion for digital signal processor |
JP4841861B2 (ja) | 2005-05-06 | 2011-12-21 | ルネサスエレクトロニクス株式会社 | 演算処理装置及びデータ転送処理の実行方法 |
US7966609B2 (en) | 2006-03-30 | 2011-06-21 | Intel Corporation | Optimal floating-point expression translation method based on pattern matching |
US8904151B2 (en) | 2006-05-02 | 2014-12-02 | International Business Machines Corporation | Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath |
US8127117B2 (en) | 2006-05-10 | 2012-02-28 | Qualcomm Incorporated | Method and system to combine corresponding half word units from multiple register units within a microprocessor |
US7461238B2 (en) | 2006-06-07 | 2008-12-02 | International Business Machines Corporation | Simple load and store disambiguation and scheduling at predecode |
US9286072B2 (en) | 2011-10-03 | 2016-03-15 | International Business Machines Corporation | Using register last use infomation to perform decode-time computer instruction optimization |
US20140258667A1 (en) * | 2013-03-07 | 2014-09-11 | Mips Technologies, Inc. | Apparatus and Method for Memory Operation Bonding |
US20140281208A1 (en) | 2013-03-13 | 2014-09-18 | Silicon Graphics International Corp. | Associative Look-up Instruction for a Processor Instruction Set Architecture |
US9342284B2 (en) | 2013-09-27 | 2016-05-17 | Intel Corporation | Optimization of instructions to reduce memory access violations |
US9563251B2 (en) | 2013-12-28 | 2017-02-07 | Intel Corporation | Representing a cache line bit pattern via meta signaling |
US9501284B2 (en) * | 2014-09-30 | 2016-11-22 | Apple Inc. | Mechanism for allowing speculative execution of loads beyond a wait for event instruction |
US10503506B2 (en) * | 2015-10-19 | 2019-12-10 | Arm Limited | Apparatus and method for accessing data in a cache in response to an unaligned load instruction |
US11023233B2 (en) | 2016-02-09 | 2021-06-01 | Intel Corporation | Methods, apparatus, and instructions for user level thread suspension |
US11194722B2 (en) * | 2018-03-15 | 2021-12-07 | Intel Corporation | Apparatus and method for improved cache utilization and efficiency on a many core processor |
US10776207B2 (en) * | 2018-09-06 | 2020-09-15 | International Business Machines Corporation | Load exploitation and improved pipelineability of hardware instructions |
-
2018
- 2018-06-29 US US16/024,725 patent/US11593117B2/en active Active
-
2019
- 2019-06-17 WO PCT/US2019/037509 patent/WO2020005614A1/en active Application Filing
- 2019-06-17 CN CN201980055599.XA patent/CN112639727A/zh active Pending
- 2019-06-17 EP EP19735067.1A patent/EP3814892A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140052961A1 (en) * | 2011-02-17 | 2014-02-20 | Martin Vorbach | Parallel memory systems |
US20130339671A1 (en) * | 2012-06-14 | 2013-12-19 | Gerard R. Williams, III | Zero cycle load |
CN105247477A (zh) * | 2013-06-28 | 2016-01-13 | 英特尔公司 | 多寄存器存储器访问指令、处理器、方法和系统 |
CN108139907A (zh) * | 2015-10-14 | 2018-06-08 | Arm有限公司 | 向量数据传送指令 |
US20170153825A1 (en) * | 2015-11-27 | 2017-06-01 | Samsung Electronics Co., Ltd. | Access methods of memory device using relative addressing |
US20170249144A1 (en) * | 2016-02-26 | 2017-08-31 | Qualcomm Incorporated | Combining loads or stores in computer processing |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114489851A (zh) * | 2022-01-20 | 2022-05-13 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN114579198A (zh) * | 2022-01-20 | 2022-06-03 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN114579198B (zh) * | 2022-01-20 | 2024-02-20 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN114489851B (zh) * | 2022-01-20 | 2024-02-20 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN115905038A (zh) * | 2022-12-01 | 2023-04-04 | 格兰菲智能科技有限公司 | 缓存数据读取方法、装置、计算机设备和存储介质 |
CN115905038B (zh) * | 2022-12-01 | 2023-12-22 | 格兰菲智能科技有限公司 | 缓存数据读取方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
TW202001586A (zh) | 2020-01-01 |
WO2020005614A1 (en) | 2020-01-02 |
EP3814892A1 (en) | 2021-05-05 |
US11593117B2 (en) | 2023-02-28 |
US20200004550A1 (en) | 2020-01-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11593117B2 (en) | Combining load or store instructions | |
WO2017146860A1 (en) | Combining loads or stores in computer processing | |
US20210026634A1 (en) | Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register | |
US6173393B1 (en) | System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data | |
US9195466B2 (en) | Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media | |
CN107450888B (zh) | 嵌入式数字信号处理器中的零开销循环 | |
JP3803723B2 (ja) | 分岐予測を選択する分岐セレクタを採用する分岐予測機構 | |
JP6511462B2 (ja) | 浮動小数点レジスタエイリアシングのためのプロセッサ及び方法 | |
CN111344669B (zh) | 用于存储融合的系统和方法 | |
KR20160031503A (ko) | 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치 | |
WO2013103823A1 (en) | Processor with hazard tracking employing register range compares | |
US11010631B2 (en) | Efficient SIMD implementation of 3x3 non maxima suppression of sparse 2D image feature points | |
JP6352386B2 (ja) | 定数キャッシュを使用してより効率的にリテラル生成データを従属命令に転送するための方法および装置 | |
US7861071B2 (en) | Conditional branch instruction capable of testing a plurality of indicators in a predicate register | |
US6405303B1 (en) | Massively parallel decoding and execution of variable-length instructions | |
JPH06242953A (ja) | データ・プロセッサ | |
EP1609058A2 (en) | Method and apparatus for hazard detection and management in a pipelined digital processor | |
CN104424132B (zh) | 高性能指令缓存系统和方法 | |
US20020188817A1 (en) | Store buffer pipeline | |
TWI835807B (zh) | 用於組合載入或儲存指示的方法、裝置及非暫時性電腦可讀媒體 | |
KR20040111559A (ko) | 주소 레지스터의 내용을 스와핑하기 위한 방법 및 장치 | |
US10331449B2 (en) | Encoding instructions identifying first and second architectural register numbers | |
US8583897B2 (en) | Register file with circuitry for setting register entries to a predetermined value | |
US20140365751A1 (en) | Operand generation in at least one processing pipeline | |
JP3915019B2 (ja) | Vliwプロセッサ、プログラム生成装置、および記録媒体 |
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 |