CN114600080A - 解耦访问执行处理 - Google Patents
解耦访问执行处理 Download PDFInfo
- Publication number
- CN114600080A CN114600080A CN202080073386.2A CN202080073386A CN114600080A CN 114600080 A CN114600080 A CN 114600080A CN 202080073386 A CN202080073386 A CN 202080073386A CN 114600080 A CN114600080 A CN 114600080A
- Authority
- CN
- China
- Prior art keywords
- instruction
- execution
- instructions
- circuitry
- type tag
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 119
- 239000000872 buffer Substances 0.000 claims abstract description 123
- 238000003672 processing method Methods 0.000 claims abstract description 5
- 238000000034 method Methods 0.000 claims description 67
- 230000001419 dependent effect Effects 0.000 claims description 25
- 230000004044 response Effects 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 16
- 230000004913 activation Effects 0.000 claims description 6
- 238000003860 storage Methods 0.000 description 56
- 238000001514 detection method Methods 0.000 description 19
- 230000006835 compression Effects 0.000 description 14
- 238000007906 compression Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 10
- 238000002372 labelling Methods 0.000 description 9
- 230000009471 action Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 6
- 238000004220 aggregation Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000006837 decompression Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000000246 remedial effect Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000005054 agglomeration Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004581 coalescence Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011109 contamination Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002401 inhibitory effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 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 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
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- 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
- G06F9/3834—Maintaining memory consistency
-
- 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
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (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的性能恒定驱动装置。然而,这样做的机会有限并且改进减慢,使得新一代的CPU通常仅实现相对于前一代的较小性能改进。处理器设计方面的特定挑战涉及缩放指令窗口并且因此缩放前瞻执行深度的难题。虽然更大的指令窗口通常会增加前瞻执行深度并且因此允许实现更高级别的指令级并行性,但是与支持日益增大的指令窗口的构建设备相关联的复杂性很显著。此外,由于高速缓存未命中(和其他存储器访问延迟挑战)而引起的停滞降低了总体性能并加剧了指令窗口问题,因为指令流的一些部分可能无法取得进展,但仍然消耗资源并减少有效的前瞻执行深度。
发明内容
本文公开的至少一些示例提供了一种数据处理装置,该数据处理装置包括:发布电路,该发布电路用于相对于有序指令序列发布指令用于乱序执行;第一指令执行电路和第二指令执行电路;和解耦访问缓冲器,其中该发布电路响应于与指令相关联的类型标记,在指令具有第一类型标记时向第一指令执行电路发布指令用于执行,并且在指令具有第二类型标记时向第二指令执行电路发布指令用于执行;其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列;其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;其中数据处理装置被布置成使由第一指令执行电路进行的具有第一类型标记的指令的指令执行优先于由第二指令执行电路进行的具有第二类型标记的指令的指令执行;并且其中第一指令执行电路被布置成将从存储器检索到的数据值作为具有第一类型标记的指令的执行的结果存储在解耦访问缓冲器中,并且第二指令执行电路响应于该解耦访问缓冲器中存储有执行具有第二类型标记的待决指令所需的数据值:从该解耦访问缓冲器检索该数据值并执行该待决指令。
本文公开的至少一些示例提供了一种数据处理方法,该数据处理方法包括:相对于有序指令序列发布指令用于乱序执行;响应于与指令相关联的类型标记,在指令具有第一类型标记时向第一指令执行电路发布指令用于执行,并且在指令具有第二类型标记时向第二指令执行电路发布指令用于执行,其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列,其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;使由第一指令执行电路进行的具有第一类型标记的指令的指令执行优先于由第二指令执行电路进行的具有第二类型标记的指令的指令执行;将从存储器检索到的数据值作为由第一指令执行电路进行的具有第一类型标记的指令的执行的结果存储在解耦访问缓冲器中;响应于该解耦访问缓冲器中存储有执行具有第二类型标记的待决指令所需的数据值,从该解耦访问缓冲器中为第二指令执行电路检索该数据值并在第二指令执行电路中执行该待决指令。
本文公开的至少一些示例提供了一种数据处理装置,该数据处理装置包括:用于相对于有序指令序列发布指令用于乱序执行的装置;用于指令执行的第一装置和用于指令执行的第二装置;解耦访问缓冲装置;响应于与指令相关联的类型标记,用于在指令具有第一类型标记时向用于指令执行的第一装置发布指令以用于执行的装置,以及用于在指令具有第二类型标记时向用于指令执行的第二装置发布指令以用于执行的装置,其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列,其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;用于进行以下操作的装置:使由用于指令执行的第一装置进行的具有第一类型标记的指令的指令执行优先于由用于指令执行的第二装置进行的具有第二类型标记的指令的指令执行;用于进行以下操作的装置:将从存储器检索到的数据值作为由用于指令执行的第一装置进行的具有第一类型标记的指令的执行的结果存储在解耦访问缓冲装置中;响应于该解耦访问缓冲装置中存储有执行具有第二类型标记的待决指令所需的数据值,用于从该解耦访问缓冲装置中为用于指令执行的第二装置检索该数据值的装置,以及用于在用于指令执行的第二装置中执行该待决指令的装置。
附图说明
将参考如附图所示的本发明的实施方案,结合以下描述阅读,仅以举例的方式进一步描述本技术,其中:
图1A示出了在针对访问指令的高速缓存未命中使得一些后续执行指令使管线停滞的情况下的包括由现有技术处理器接收的访问和执行指令两者的指令序列,图1B示出了根据一些实施方案的由处理器接收的相同指令序列,其中优先化访问指令的执行和推迟执行指令允许取得更大指令执行进展;
图2示意性地示出了一些实施方案中的数据处理装置;
图3示出了在处理器中根据一些示例性实施方案的方法所采取的步骤序列;
图4示意性地示出了一些实施方案中的数据处理装置;
图5示意性地示出了一些实施方案中的数据处理装置;
图6示意性地示出了在一些实施方案中提供的冲突检测电路;并且
图7示出了由冲突检测电路根据一些示例性实施方案的方法所采取的步骤序列。
图8A和图8B示出了示例性指令序列的数据依赖性图,其中图8A是“访问”数据依赖性图,并且图8B是“执行”数据依赖性图;
图9示意性地示出了根据一些实施方案的数据处理装置;
图10是示出根据一些实施方案的方法所采取的步骤序列的流程图;
图11是示出根据一些实施方案的方法所采取的步骤序列的流程图;
图12示意性地示出了根据一些实施方案的数据处理装置;
图13A示出了根据一些实施方案的遍历表的示例性内容;
图13B示出了根据一些实施方案的最后的写入器表的示例性内容;
图14A和图14B示意性地示出了根据一些实施方案的指令标签存储装置和一些示例性内容;
图15示意性地示出了根据一些实施方案的与微操作高速缓存相关联的指令高速缓存层次结构;
图16示意性地示出了根据一些示例性具体实施的装置;
图17示意性地示出了一些示例性具体实施中的图1的装置,还示出了有效操作示例;
图18示意性地示出了根据一些示例性具体实施的装置;
图19示意性地示出了根据一些示例性具体实施的试验性接近检查和地址接近检查的有效示例;
图20示意性地示出了根据一些示例性具体实施的有效示例中的处于不同阶段的待决加载缓冲器的内容;
图21是示出根据一些示例性具体实施的执行数据处理操作的方法的流程图;
图22示意性地示出了根据一些实施方案的包括第一指令的指令序列,该第一指令限定一组后续指令中的每个指令是执行指令还是访问指令;
图23示意性地示出了一些实施方案中的解码电路;
图24示意性地示出了一些实施方案中的包括微操作高速缓存的数据处理装置;
图25示意性地示出了一些实施方案中的包括寄存器组的数据处理装置;
图26A至图26C示意性地示出了一些示例性实施方案中的根据本技术的指令的三个版本;
图27示意性地示出了一些实施方案中的解码电路;
图28是示出根据一些实施方案的由解码电路采取的一些列步骤的流程图;
图29是示出根据一些实施方案的由解码电路采取的一些列步骤的流程图;并且
图30示意性地示出了在一些实施方案中可以使用的模拟器具体实施。
具体实施方式
在本文的至少一个示例中,存在一种数据处理装置,该数据处理装置包括:发布电路,该发布电路用于相对于有序指令序列发布指令用于乱序执行;第一指令执行电路和第二指令执行电路;和解耦访问缓冲器,其中该发布电路响应于与指令相关联的类型标记,在指令具有第一类型标记时向第一指令执行电路发布指令用于执行,并且在指令具有第二类型标记时向第二指令执行电路发布指令用于执行;其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列;其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;其中数据处理装置被布置成使由第一指令执行电路进行的具有第一类型标记的指令的指令执行优先于由第二指令执行电路进行的具有第二类型标记的指令的指令执行;并且其中第一指令执行电路被布置成将从存储器检索到的数据值作为具有第一类型标记的指令的执行的结果存储在解耦访问缓冲器中,并且第二指令执行电路响应于该解耦访问缓冲器中存储有执行具有第二类型标记的待决指令所需的数据值:从该解耦访问缓冲器检索该数据值并执行该待决指令。
因此,本技术提出了数据处理装置的配置,该配置基于解耦访问/执行方法。该装置接收单个指令流,并且该装置在内部将程序分成分别由第一指令执行电路和第二指令执行电路处理的两串。第一指令执行电路在本文中也被称为“访问”部件,并且第二指令执行电路在本文中也被称为“执行”部件。这些部件在很大程度上独立于彼此操作,并且具体地,装置被布置成使访问指令执行电路的操作优先于执行指令执行电路的操作。也就是说,在装置支持在单个指令流中接收的指令的乱序执行的情况下,将访问指令执行电路和执行指令执行电路的相应操作有意地配置为允许在由执行指令执行电路处理的其他执行指令之前执行由访问指令执行电路处理的访问指令。实际上,装置的一种配置方式可以是允许相对于执行指令尽可能早地执行此类访问指令。
本技术在指令是“访问相关”时将第一类型(“访问”)标记与该指令相关联,这意味着该指令确定了加载操作的至少一个特征。因此,应当注意,不仅加载指令本身是访问指令,而且确定该加载操作的至少一个特征的任何其他指令也是访问指令。例如,如果加载指令限定了如由保持在指定寄存器中的值限定的应当发生加载的存储器地址,则将该值存储在指定寄存器中的先前指令也是访问指令。此外,例如,如果将该值存储在指定寄存器中的先前指令通过修改另一个寄存器的内容来这样做了,则在该其他寄存器中提供该值的更早指令也是访问指令,依此类推。这种方法认识到,为了执行由加载指令指定的存储器访问,那些先前指令必须全部已经被执行了。因此,为了优先化加载指令的执行,那些其他先前指令本身也必须被优先化。根据该技术,不确定加载指令的任何特征的指令是“执行”指令。实际上,根据该技术标记指令的一种方法,可以简单地凭借指令未被标记为“访问”指令而将该指令确定为“执行”指令。
这种方法尤其认识到了这一事实:与存储器访问相关联的延迟可能对装置内的指令执行和处理的时间尺度有重大影响。然而,应当注意,在乱序处理器中所提出的技术比常规技术更进一步减少了存储器访问延迟的影响。例如,在具有足够大的指令窗口的情况下,可以在乱序处理器中在实际需要通过这些加载指令从存储器读取的值之前很好地执行加载指令。如果这些加载(其在早期被派送)导致高速缓存未命中,那么存储器访问的延迟被有效地“隐藏”,因为处理器可以在派送加载和随后根据该加载的结果执行指令之间执行其他指令。因此,如果处理器可以将存储器访问与指令执行重叠,则该重新排序机制具有一定益处。然而,如果存在依赖于尚未利用关键资源“加载”的数据(但未取得进展)的指令,则有效前瞻执行深度可以显著小于实际指令窗口。
然而,本技术还支持加载和加载相关指令的更进一步的提前执行,方法是:在专用于执行该类型的指令的一组执行电路中优先化访问指令序列的执行,并且将这些指令分离到单独的一组执行电路来推迟执行指令序列。这两组指令执行电路基本上独立于彼此操作,并且因此至少在这方面,可能对这些指令执行电路执行相应指令执行的方式没有约束。因此,源自单个编程指令流的两个指令串(访问和执行)都可以乱序执行,而不仅是相对于彼此乱序执行。
然而,这两组指令执行电路通过提供解耦访问缓冲器来关联,访问指令执行电路将从存储器检索到的数据值存储到该解耦访问缓冲器中,并且执行指令执行电路可以从该解耦访问缓冲器读取执行其自己的待决指令中的一个待决指令所需的数据值。访问和执行部件之间的该内部缓冲器由硬件管理并且对软件是透明的。因此,需注意,本技术不需要软件的参与(并且具体地,数据值在访问和执行部件之间的移动不需要由软件进行显式协调)。例如,不需要软件可见队列和通过编译器或编程器进行的源代码的转换,使得访问和执行部分之间的转移是显式的。
解耦访问缓冲器还可以有利地靠近需要其内容的地点(例如,执行指令执行电路)定位,因此不仅通过使数据更靠近CPU减少了延迟,而且还提高了所述数据的访问带宽。与从L1数据高速缓存读取相比,对该内部缓冲器的访问可以具有更高的带宽(就可在循环中访问的不同项目的数量而言)。这是因为内部DAB缓冲器可被提供作为比常规高速缓存更小的结构,并且因此该内部DAB缓冲器可以具有更多访问端口而不会变得过分复杂。
还应当注意,虽然本技术的益处与通过“预获取”实现的益处具有一些重叠,但是这不仅仅是本文公开的预获取技术。通常,预获取可用于通过在需要数据之前将该特定数据放入高速缓存中来减少高速缓存未命中的次数。因此,可以采用观察存储器访问模式并使用过去访问来预测未来访问的预获取器。然而,各种问题可能限制预获取可实现的益处。例如,预获取器需要初始训练时期来锁定模式。接下来的问题是要预获取多少。如果执行过少预获取,则高速缓存未命中将仍然会经常发生。如果执行过多预获取,则这可能导致高速缓存污染问题(即,预获取的数据逐出仍然需要的数据)。此外,可能难以确定预获取器应在特定识别的存储器访问模式下操作的时间。
由于处理器的访问部件的“提前”操作完全由单个编程指令流限定,所以本技术的确还用于使数据更靠近处理器的功能单元(或存储器层次结构中的更高级别),然而不同于预获取,可能生成更有用的流量,因为该操作更贴切地与处理器实际上正在进行的操作对准。因此,认为执行(整个)单个编程指令流需要通过访问操作放入解耦访问缓冲器中的所有数据。因此,由于过度活动的预获取器将“无用的”预获取数据放入高速缓存(导致更多有用数据被逐出)而引起的问题在此处是不相关的。过度预获取也可能导致多处理器系统中产生重大问题,因为一个或多个处理器消耗的过多带宽可以使系统中的其他处理器在没有适当的公平性策略的情况下更难以取得正向进展。
实际上,本技术甚至可以支持改进的预获取,因为本技术能够使得更多访问在合并的“批处理”中一起被看到,因此预获取器(如果系统中存在的话)的训练可以更及时。
根据本技术,可以多种方式进行指令的标记。例如,在一些实施方案中,数据处理装置还包括指令依赖性确定电路,该指令依赖性确定电路用于当正在确定的指令是加载指令时将第一类型标记与该正在确定的指令相关联,并且用于执行依赖性链确定过程,以争取找到包括该正在确定的指令的依赖性链,其中当发现通往加载指令的依赖性链时,将第一类型标记与该正在确定的指令相关联。因此,提供指令依赖性确定电路为数据处理装置提供了基于通往加载指令的依赖性链的识别来识别“第一类型”(访问)指令本身的能力。形成这种依赖性链的一部分的任何指令都是访问指令。因此,通过使用其指令依赖性确定电路,数据处理装置可以标记接收的指令流本身的指令,这意味着不需要接收已被标记的接收的指令流。
指令依赖性确定电路可采取各种形式,但是在一些实施方案中,数据处理装置还包括:寄存器重命名电路,该寄存器重命名电路包括用于存储指令中指定的架构寄存器和用于保持数据值的临时副本的物理寄存器之间的临时关联性的重命名表,其中指令依赖性确定电路被布置成使用该重命名表的内容执行依赖性链确定过程。重命名表(同样在乱序处理器中用于存储架构寄存器和物理寄存器之间的关联性)提供指令依赖性识别的各个方面(例如,因为一旦已经对一个指令进行了重命名,与同一架构寄存器(在程序中)交互的另外的指令就必须被识别并被指引到架构寄存器已被重命名为的物理寄存器)。因此,指令依赖性确定电路可以有利地与寄存器重命名电路相关联,并且尤其是与寄存器重命名电路维护的重命名表相关联。
指令依赖性确定电路还可以使用数据处理装置中可获得的各种其他信息来执行依赖性链确定过程。例如,在一些实施方案中,数据处理装置还包括:解码电路,该解码电路用于接收有序指令序列并执行解码操作,其中至少一些解码操作导致指令被分成多于一个微操作定义,其中这些微操作定义由发布电路接收;和微操作高速缓存,该微操作高速缓存用于接收和临时存储由发布电路发布的微操作定义,使得能够免除由于导出微操作定义的指令的再一次出现而进行的解码,其中该指令依赖性确定电路被布置成使用该微操作高速缓存的内容执行依赖性链确定过程。微操作高速缓存的内容表示指令相关信息的有用主体,在该有用主体内,可以快速地识别指令之间的各种关联和依赖性(例如,通过参考微操作对的匹配目标和源寄存器),并且因此,当指令依赖性确定电路被布置成使用微操作高速缓存的内容执行依赖性链确定过程时,可以提供处于高效配置的指令依赖性确定电路。
然而,可以存在其他示例性具体实施,在这些其他示例性具体实施中,外部代理向数据处理装置提供关于接收的指令流的哪些指令是“第一类型”并且哪些指令是“第二类型”(访问或执行)的信息。可以各种方式提供该信息,但是在一些实施方案中,数据处理装置还包括解码电路,该解码电路用于接收有序指令序列并执行解码操作,其中该解码电路响应于该有序指令序列中的指令类型分类指令,根据该指令类型分类指令中针对该有序指令序列的子集指定的标记类型定义将第一类型标记和第二类型标记中的一者与该子集中的每个指令相关联。因此,本技术还提出了指令类型分类指令,该指令类型分类指令使得编程器能够为特定的一组指令(例如,紧跟其后的限定数量的指令)限定每个指令是具有第一类型还是第二类型,并且作为响应,解码电路接着将第一类型标记或第二类型标记应用于该组中的每个指令。
在一些实施方案中,在由第一执行电路进行的第一类型指令执行正在进行时,第二指令执行电路能够进入非活动状态,在该非活动状态下,不发生第二类型指令执行。关于访问指令的执行优先于执行指令的执行的事实,甚至可能存在在访问指令的执行的某些结果可获得(即,已经存储在解耦访问缓冲器中)之前执行指令执行电路可能几乎没有取得正向进展的操作时期。因此,尽管由第一执行电路进行的第一类型指令执行继续进行,但是通过第二指令执行电路进入非活动状态可以在数据处理装置的某些操作时期期间实现功率节省。
在如上所述第二指令执行电路依赖于由第一执行电路进行的第一类型指令执行的结果的情况下,在一些实施方案中,第二指令执行电路响应于来自第一指令执行电路的激活信号,退出非活动状态并继续进行第二类型指令执行。
重新激活第二指令执行电路的触发事件可以采取各种形式,但是在一些实施方案中,第一指令执行电路响应于解耦访问缓冲器的占用,向第二指令执行电路发布激活信号。这可以例如是二进制触发事件,其中当解耦访问缓冲器完全耗尽时,第二指令执行电路进入其非活动状态,并且当解耦访问缓冲器已刷新内容时,第二指令执行电路返回到活动状态。
然而,在一些实施方案中,第一指令执行电路响应于解耦访问缓冲器的占用高于阈值占用,向第二指令执行电路发布激活信号。因此,可以有效地根据特定系统性能要求而灵活地限定该阈值占用。
第二指令执行电路可被不同地配置为允许其接收来自有序指令序列的指令(这些指令被识别为具有第二类型标记),并且还可能在某个间隔内不执行那些指令(而其他第一类型指令在第一类型指令执行电路中继续推进)。在一些实施方案中,第二指令执行电路包括执行高速缓存,该执行高速缓存用于存储在指令执行开始之前由发布电路向第二指令执行电路发布的指令。由此,这些“独立”指令(即,在程序的数据流图中终止于加载的所有依赖性链之外的那些指令)可以被存放在执行高速缓存中,直到它们继续进行所需的数据从存储器送来。这些指令可以例如有效地保持为紧凑的“被动”形式(即,不完全解开/扩展),直到它们需要进一步继续进行,从而限制所需的储存容量。
第二指令执行电路可以采取多种形式,并且实际上可以可执行第二指令执行电路接收的指令类型的任何形式提供。然而,在一些实施方案中,第二指令执行电路包括预留站电路,该预留站电路用于支持用于乱序指令执行的寄存器重命名操作,其中该预留站电路被布置成从解耦访问缓冲器接收数据值。因此,该预留站电路表示第二指令执行电路的从解耦访问缓冲器提供该连接的有用部件,并且当从解耦访问缓冲器引入数据值时,该预留站电路的现有机制(例如,用于基于依赖性对指令进行重新排序)可被有效地利用。
本技术还认识到,在某些情况下,第二指令执行电路的与存储操作有关的操作方面可能需要仔细处理。例如,在一些实施方案中,第二指令执行电路包括暂时保持包括将被存储到存储器的数据值的条目的存储单元,并且装置被布置成识别解耦访问缓冲器中的条目,其中通过执行的加载指令加载该条目的数据值的条目的加载地址与存储单元中的条目的用于正被执行的存储指令的存储地址匹配;并且被布置成当该存储指令在有序指令序列中在该加载指令之前时确定冲突条件为真。例如,存储缓冲器可以暂时保持写入数据,该写入数据将不会离开存储缓冲器,直到存储被“提交”。本技术认识到,尤其是在由第二指令执行电路进行的加载指令的执行可以在相当“提前”的时间发生的情况下,存在较新存储指令反超到同一地址的较旧加载指令的可能(并且因此存在发生写入前读出错误的可能)。因此,识别此类冲突条件可允许在发生此类数据冒险之前采取补救措施。
在一些实施方案中,装置响应于冲突条件,使得第一指令执行电路和第二指令执行电路中来自有序指令序列的加载指令和任何随后的指令被刷新。因此,可以刷新加载指令和随后的所有指令。然而,在一些实施方案中,装置响应于冲突条件,使得第一指令执行电路和第二指令执行电路中来自有序指令序列的加载指令和任何后续直接或间接依赖指令被刷新。这些技术可以确保避免了数据冒险并且避免了所处理的数据的污染。此外,一些实施方案将实现更具选择性的刷新,并且一些实施方案将实现更完整的刷新。在一些实施方案中,例如,装置响应于冲突条件,使得加载指令和第一指令执行电路和第二指令执行电路中被确定为依赖于该加载的任何指令被刷新。换句话说,不区分指令的新旧/排序,这是更迟钝的方法(可能刷新更多指令),但实现起来更简单。相比之下,在其他实施方案中,可以实现部分刷新,从而仅刷新被确定为有可能受到数据冒险的影响的那些指令,这对正在进行的处理的干扰更小,尽管需要更详细地跟踪相关指令。
如上所述,标记可以被不同地提供,但是在一些实施方案中,第一类型标记包括与指令相关联的第一预定义标志,并且第二类型标记包括与指令相关联的第二预定义标志。在一些实施方案中,第一类型标记包括与指令相关联的第一预定义标志,并且第二类型标记包括与指令相关联的第二预定义标志。
在本文的至少一个示例中,存在一种数据处理方法,该数据处理方法包括:相对于有序指令序列发布指令用于乱序执行;响应于与指令相关联的类型标记,在指令具有第一类型标记时向第一指令执行电路发布指令用于执行,并且在指令具有第二类型标记时向第二指令执行电路发布指令用于执行,其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列,其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;使由第一指令执行电路进行的具有第一类型标记的指令的指令执行优先于由第二指令执行电路进行的具有第二类型标记的指令的指令执行;将从存储器检索到的数据值作为由第一指令执行电路进行的具有第一类型标记的指令的执行的结果存储在解耦访问缓冲器中;响应于该解耦访问缓冲器中存储有执行具有第二类型标记的待决指令所需的数据值,从该解耦访问缓冲器中为第二指令执行电路检索该数据值并在第二指令执行电路中执行该待决指令。
在本文的至少一个示例中,存在一种数据处理装置,该数据处理装置包括:用于相对于有序指令序列发布指令用于乱序执行的装置;用于指令执行的第一装置和用于指令执行的第二装置;解耦访问缓冲装置;响应于与指令相关联的类型标记,用于在指令具有第一类型标记时向用于指令执行的第一装置发布指令以用于执行的装置,以及用于在指令具有第二类型标记时向用于指令执行的第二装置发布指令以用于执行的装置,其中具有第一类型标记的指令和具有第二类型标记的指令源自该有序序列,其中在指令是访问相关指令时,该指令具有第一类型标记,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在指令不是访问相关指令时,该指令具有第二类型标记;用于进行以下操作的装置:使由用于指令执行的第一装置进行的具有第一类型标记的指令的指令执行优先于由用于指令执行的第二装置进行的具有第二类型标记的指令的指令执行;用于进行以下操作的装置:将从存储器检索到的数据值作为由用于指令执行的第一装置进行的具有第一类型标记的指令的执行的结果存储在解耦访问缓冲装置中;响应于该解耦访问缓冲装置中存储有执行具有第二类型标记的待决指令所需的数据值,用于从该解耦访问缓冲装置中为用于指令执行的第二装置检索该数据值的装置,以及用于在用于指令执行的第二装置中执行该待决指令的装置。
现在将参考附图描述一些具体实施方案。
图1A示出了表明上下文的场景,在该上下文中,本发明技术是特别相关的。该图(在左侧)示出了包括访问(A1、A2等)指令和执行(E1、E2等)指令两者的指令序列,这些指令由现有技术处理器在如图所示交织的单个流中接收。假设访问指令A3是提供执行指令E1所需的信息的“加载”指令。如果访问指令A3触发高速缓存未命中,则从E1开始的执行指令序列将被停滞,直到存储器系统递送所请求的数据为止。这具有另外的不利结果,即整个管线随后填充有停滞的执行指令,从而限制其前瞻执行深度,并且最终迫使其停滞。
图1B示出了本技术对于相同上下文的适用性,其中由处理器根据本技术接收包括访问(A1、A2等)指令和执行(E1、E2等)指令两者的相同指令序列。此处,所示管线属于处理器的“访问”管线部分,并且可以看出:通过使访问指令(在所示访问管线中处理)优先并且通过推迟执行指令(E1-E3,其可由处理器的“执行”管线部分处理(未示出)),完整的处理器能够在其用于访问指令E1等待的数据的时间期间执行更多指令。实际上,如果程序的访问部分能够在执行A6时发现另一个潜在的长延迟事件(例如,高速缓存未命中),则例如通过在该事件将通常发生的时间点之前发起数据访问来弥补该“未命中”的代价。应当注意,通过将执行指令放置在被设计用于对于几个循环保持被动直到数据到达为止的临时存储区域或高速缓存(图中的“E高速缓存”)中。
图2示意性地示出了根据一些实施方案的数据处理装置。提供了检索和解码数据处理装置将执行的有序指令序列的“前端”电路的单个集合,该集合包括获取电路101和解码电路102。经解码指令被传递到发布电路103。根据本技术,发布电路103被布置成识别与所接收的有序指令序列中的至少一些指令相关联的标记。具体地,发布电路103响应于与指令相关联的“访问”标记的标识,向访问执行电路104发布该指令用于执行。相反地,不具有“访问”标记的指令被引导至“执行”执行电路105用于执行。虽然在某些示例中可能有两种显式类型的标记,但在所示示例中实际上只有访问标记。因此,具有该标记的指令被引导至访问执行电路104,并且相反地,不具有访问标记的任何指令被引导至执行执行电路105。访问标记与所有访问相关指令相关联,这些所有访问相关指令确定用于根据指定存储器地址检索数据值的加载操作的至少一个特征。图8A和图8B及其相关联描述说明了根据本技术的访问指令的定义,其中可以看出,访问依赖性图包括通往表示加载指令的终端节点的所有指令。
访问执行电路包括执行部分106,该执行部分可例如以管线方式布置。应当理解,图2的示意图仅处于较高抽象级别,以便提供数据处理装置100的构造的总体原理的概述。然而,特别需要注意的是,加载单元107在访问执行电路104中,该加载单元的由执行部分106执行的加载指令限定的加载操作被委托。这种加载操作首先访问也形成访问执行电路104的一部分的L1高速缓存108,并且(如果存在访问未命中)可以进一步将访问传递到L2高速缓存109(并且可能进一步传递到存储器系统中)。从存储器系统和/或高速缓存层次结构返回的数据值进入L1高速缓存108,并且由高速缓存子系统返回的数据值被放置到解耦访问缓冲器110中,该解耦访问缓冲器形成访问执行电路104的一部分。这些值也可以被提供给寄存器111,执行部分106作为其执行的数据处理操作的一部分而访问该寄存器。
不具有“访问”标记的指令由发布电路103发布给执行执行电路105。所接收的指令暂时保持在指令高速缓存112中,使得这些指令能够延迟,同时优先化访问指令的并行执行并且在访问执行电路104中进行该并行执行。解耦访问缓冲器110被布置成将关于其内容的某些信号发送到执行执行电路104。因此,当通过加载操作的动作从存储器检索到的数据项在解耦访问缓冲器110中可获得时,此事实可以被发送信号通知执行执行电路105的执行部分113,该执行部分可以在执行特定指令时利用该值。执行部分113还可以利用保持在寄存器111中的值,并且相反地,由于其自身的数据处理操作,导致会对寄存器111的内容进行某些更新。在执行执行电路105的数据处理取决于由访问执行电路104执行的处理的情况下,图2中所示的示例性实施方案的另一个特征是提供执行执行电路105的低功率状态控制电路114。当解耦访问缓冲器110耗尽(变为空)时,该低功率状态控制电路从解耦访问缓冲器110接收通知,并且响应于此,低功率状态控件114使得执行执行电路105进入非活动的低功率(或低频操作)状态。相反地,当解耦访问缓冲器110再次具有内容时,低功率状态控件114可以使得执行执行电路105再次变成活动状态(即,完全供电或以比之前更高的频率操作)并开始进一步指令执行。虽然一旦解耦访问缓冲器110中存在任何内容就可以这种方式唤醒执行执行电路105,但在图2的示例中,解耦访问缓冲器110当其内容满足预先确定的阈值内容(即,最小内容)时发送信号通知低功率状态控件114,使得以这种方式操作执行执行电路105的功率节省优点得以改善,并且仅在解耦访问缓冲器110中可获得足够数量的数据值时才唤醒该执行执行电路以便继续指令执行。根据系统要求,可将该阈值的特定水平设置为具体实施细节。
图3是示出根据一些实施方案的方法所采取的步骤序列的流程图。具体地,图3示出了根据本技术处理所接收的指令序列内的指令的方式。该流程开始于步骤150,在该步骤中,考虑所接收的指令序列中的下一个指令。在步骤151处确定该指令是否具有第一类型(“访问”)标记。当确实是时,该流程继续进行到步骤152,在该步骤中,将该指令发布给访问执行电路。然后在步骤153处,在由访问执行电路执行的乱序指令执行中优先化该指令的执行。然后在步骤154处,当从存储器系统检索到的一个或多个数据值被返回时,该值或这些值被存储在解耦访问缓冲器中。然而,如果在步骤151处,发现指令不具有第一类型标记,则该流程继续进行到步骤155,在该步骤中向执行执行电路发布指令。然后,在步骤156处,作为由执行执行电路执行的乱序指令执行的一部分,延迟该指令(例如,将该指令保持在指令高速缓存或缓冲器中)。在步骤155处,一旦该指令所需的数据值在解耦访问缓冲器中可获得,就发起该指令的执行。例如,当该指令保持在执行指令执行电路中时,解耦访问缓冲器中该指令的所需数据值的存在可以用于触发该指令的执行。应当注意,从步骤154到步骤157的虚线路径指示步骤157依赖于由其他路径产生的动作,但这不是所示的过程式流程中的真实步骤。
图4示意性地示出了根据一些实施方案的示例性数据处理装置200。前端电路201的单个集合包括指令高速缓存202、获取电路203、解码电路204和分流器205。因此,所接收的有序指令序列到达分流器205,该分流器然后被布置成根据指令是否具有相关联的“访问”标记而将指令引导到访问电路210或执行电路220。当将指令传递到访问电路210中时,该访问电路的第一阶段被示出为微操作高速缓存211、重命名电路212、发布队列213和寄存器读取阶段214。这些管线式部件以本领域普通技术人员将熟悉并且在本文中未详细描述的方式进行布置。此外,根据指令的性质,将对应信号从寄存器读取阶段214传递到整数ALU单元216、加载单元218和/或分支解决(BR)单元220。因此,应当理解,访问电路210能够执行各种类型的指令(需注意不仅是加载指令),并且确实如图2所示的特定执行单元216、218仅仅是示例,并且可以提供其他执行单元。分支解决的结果(如BR单元220中所确定的)被传递回获取单元203和微操作高速缓存211。还应当注意,数据处理装置200还设置有分支预测单元230,该分支预测单元与微操作高速缓存211的内容相互作用,并且向获取单元203指示其何时预测到将采用分支并且应实现所获取的指令中的对应跳跃。
整数ALU单元216相对于保持在访问部分210的寄存器中的值执行其数据处理操作,这些值可能已经从高速缓存/存储器系统检索到了。由加载单元218执行从存储器检索这些值(通过加载操作的动作),并且图4示出了这些加载单元与L1高速缓存231的相互作用,该L1高速缓存形成包括L2高速缓存232的高速缓存层次结构的一部分。还可以提供通往存储器系统(未示出)的另外的高速缓存级别。从高速缓存/存储器系统返回的值被使得存储在解耦访问(DA)缓冲器234中。参考整数ALU单元216的上面提及的数据处理操作,这些结果还被馈送到访问结果高速缓存236中,整数ALU单元216作为执行其数据处理操作的一部分而具有对该访问结果高速缓存的访问权限。在应用于数据处理装置200的寄存器240之前,将对这些值执行的修改传递到提交队列238中。
接收在有序指令序列中的且不具有访问标记的指令被从分流器205传递到执行电路220。具体地,这些指令首先被接收在X调度高速缓存250中,这些指令被保持在该X调度高速缓存中以便相对于其执行在访问电路210中被优先化的访问指令延迟。执行指令可以紧凑的预执行形式(即,不如同它们将最终在被执行时那样被完全解开和扩展)保持在X调度高速缓存250中,以便允许紧凑地提供该高速缓存250。执行电路220包括预留站252,该预留站使得该执行电路能够管理其自身的乱序指令执行,并且尤其是能够持续跟踪指令依赖性和操作数可用性。执行电路220还包括两个整数ALU单元253和两个浮点单元(FPU)254,以及两个存储单元255。在执行其指令时,执行电路220因此被布置成使得从预留站252接收ALU253和FPU 254所需的值,并且将由这些单元执行的数据处理的结果传递回预留站252。执行电路220也包括分支解决(BR)单元258,该BR单元像访问电路210的BR单元220一样向前端电路201的获取电路203发送信号通知。
预留站252将结果值传递到访问电路210的提交队列238,以便更新寄存器值。把将被写出到存储器的数据值从预留站252传递到存储单元255。由存储单元255发起的存储事务在访问电路210的存储缓冲器256中临时缓冲。这使得能够缓冲写入数据,直到存储被“提交”。这还提供了识别存储事务的地址与已经将值带到解耦访问缓冲器234中的加载的地址匹配的情况的一丝机会。识别可能导致数据冒险(即,较新加载和较旧存储之间的冲突)的更新,使得可以采取补救措施,并且将参考下面的图5更详细地论述该特征。
图5示意性地示出了一些示例性实施方案中的数据处理装置300。数据处理装置300包括前端电路301,该前端电路本身包括获取电路302、解码电路303和发布电路304。以上文所讨论的方式,发布电路304识别某些指令(其具有与其相关联的“访问”标记)并且将这些指令发布给访问电路305,而将其他指令发布给执行电路306。图5基于图4的示例,但是未示出所有部件,这无非是为了有利于在该示例中清楚地讨论。由访问电路305接收的指令进入其执行管线307,该执行管线执行各种数据处理操作,其中的一些数据处理操作涉及与寄存器308的交互,并且其中的一些数据处理操作使得加载单元309发起与高速缓存/存储器系统的加载事务。在图5的图示中,仅示出了L1高速缓存310。从高速缓存/存储器层次结构返回的数据值被传递到解耦访问缓冲器311,并且据此,这些值中的一些值可以引起对保持在寄存器308中的值的更新(例如,经由各个阶段,诸如提交队列—参见图4)。图5的讨论的特定焦点是提供冲突检测单元312,这在下面更详细地描述。执行电路306包括执行高速缓存313、预留站314、ALU/FPU单元315和存储单元316。执行电路306操作的方式基本上与上文针对图4的执行电路220所描述的方式相同,并且为了简洁起见,此处不再重复。冲突检测单元312还与存储单元316相互作用,并且具体地被布置成识别可以导致数据冒险的上述情况,即已经在由访问电路305执行的执行中优先化的较新加载和由执行电路306执行的较旧存储指令之间发生冲突的情况。当这些相应加载和存储操作涉及相同的存储器地址时,可能发生数据冒险,即在程序顺序中,存储应当在加载之前执行,但是该顺序已经被根据本技术的加载操作的优先次序破坏。此外,在存储和加载已经在单独的、在很大程度上独立的执行单元(即,执行电路306和访问电路305)中执行的情况下,通常将避免单独的乱序处理单元内的这种数据冒险的机制可能不够。
下面参考图6和图7更详细地描述了冲突检测单元312操作的特定方式,但是当识别这种数据冒险情况时,冲突检测单元被布置成将这种数据冒险情况发送信号通知数据处理装置300的各个部分,包括访问执行管线307和执行高速缓存313/预留站314,因为将需要从相应管线刷新各种指令并且将需要重新执行一些指令。在一些实施方案中,数据处理装置300被布置成使得仅刷新加载指令和任何后续指令,但更简单的实施方案假设:由于具体实施的简易性,当识别出这种数据冒险条件时触发相应管线的完全刷新。
图6示意性地示出了冲突检测电路312相对于存储单元316和解耦访问缓冲器311的内容的操作。存储单元316保持关于存储事务的条目,这些存储事务仍在“飞行中”,即尚未被提交。相关联的各种信息都可以与每个条目相关联,尽管与本讨论相关(如图6的示例中所示),但是该信息包括将存储的值、将存储该值的地址以及指令标识符(其在此处由重新排序缓冲器(ROB)ID提供)。解耦访问缓冲器311还包括与其保持的条目有关的各种信息,在图6的示例中,该信息被示出为检索值的地址、值本身以及与该加载操作相关联的指令标识符,该指令标识符在图6的示例中也是ROB ID。本领域普通技术人员已知,乱序执行管线诸如由图4的示例的访问电路210和执行电路220提供的乱序执行管线利用此类重新排序缓冲器和ROB ID,以便维护程序对其所执行的指令进行排序的知识,使得尽管它们执行了乱序执行,但是当提交结果时,可以对指令的效果进行正确地排序。冲突检测电路312被布置成监测存储单元316和解耦访问缓冲器311的相应内容,并且识别条目之间的地址匹配的实例。这可例如通过以下操作来执行:对两者中的一者(例如,DAB 311)的条目的绕圈式(循环)检查—依次获取每个条目的地址以及检查在另一者(例如存储单元316)中是否存在匹配的条目。当发现一对地址匹配时,参考ROB ID确定对应指令的相应排序,并且当因此识别出数据冒险(“冲突”)时,冲突检测电路使得执行刷新。该刷新可以是完全管线刷新,或者可以是部分管线刷新。
图7示出了根据冲突检测电路312可以操作的内容的步骤序列。在步骤400处,检查解耦访问缓冲器的下一个条目。在步骤401处,然后确定在执行存储单元内是否存在相同地址的条目。如果不存在,则该流程返回到步骤400,以便检查解耦访问缓冲器的下一个条目。然而,当存在匹配地址时,该流程继续进行到步骤402,在该步骤中,确定存储单元条目(在程序顺序中)是否在加载之前,该加载使得值被带入解耦访问缓冲器(DAB)中。如果不是这种情况,则该流程返回到步骤400,以便检查解耦访问缓冲器的下一个条目。然而,如果是这种情况,则已经识别出冲突条件,并且在步骤403处,压缩加载指令本身并且刷新在访问和执行电路中的任何后续指令,以避免加载和存储操作的已被颠倒的排序的错误副作用。在其他实施方案中,执行部分管线刷新,使得仅直接或间接依赖于压缩的加载指令的指令才同样被压缩,但是管线的其余部分保持原封不动。然后,该流程返回到步骤400。
数据处理装置可接收和执行的示例性指令序列如下:
考虑到上文所示的指令序列并且在加载指令(LDR)被定义为“预先确定类型的指令”的情况下,指令的标记取决于对指令之间的数据依赖性的分析。这些依赖性在图8A和图8B中以图形形式示出。此处,将值提供给加载指令的源操作数的任何指令被认为是“访问”指令,并且将值提供给“访问”指令的源操作数的任何指令本身也被认为是访问指令。未被贴标签为访问指令的指令被认为是执行指令,因为发现这些指令不属于访问数据依赖性图的一部分。因此,如图8A所示,在访问数据依赖性图中的指令I10、I7、I9、I5、I3和I2被给予访问标记“A”。其余指令(其不会直接或间接导致“加载”)被标记为执行(E),包括I13、I12、I11、I8、I6、I14和I1。本技术涉及识别用于数据处理装置接收的指令序列的此类数据依赖性图,并且具体地,如下文参考下面的图将更详细地描述的,本技术提供了允许数据处理装置精心制作此类访问数据依赖性图并用“访问”标记对其组成指令进行标记(这是在线执行的,即,在数据处理装置接收和执行指令时即时执行)的装置和方法。
图9示意性地示出了根据一些实施方案的数据处理装置。示意性地所示,数据处理装置500包括获取/解码阶段501,该获取/解码阶段获取并解码将由数据处理装置执行的指令序列中的指令。这些经解码指令存储在指令存储区502中,重新映射器电路503从该指令存储区访问这些经解码指令并执行指令指定寄存器的任何所需重新映射。根据重新映射器阶段,指令被传递到发布电路504或发布电路505。发布电路505发布用于由执行电路506执行的指令,而发布电路505发布用于由执行电路507执行的指令。这些并行管线同样在最终提交阶段508中集合。还提供了重新映射器电路503访问的寄存器写入器存储装置510,其中条目由重新映射器电路503创建。寄存器写入器存储装置510的条目511包括指令指示和寄存器指示。具体地,对于被重新映射器电路503遇到的每个指令,该重新映射器电路在寄存器写入器存储装置510中创建条目,这些条目指示指令及其目的地寄存器(即,通过该指令写入其内容的寄存器)。应当注意,就乱序处理器而言,在寄存器重写器存储装置510的条目511中提及的寄存器是物理寄存器(在这种情况下,重新映射器503是重命名阶段,被布置成管理在指令中提及的架构寄存器和数据处理装置的物理寄存器之间的映射)。相反地,就有序处理器而言,在寄存器重写器存储装置510的条目511中提及的寄存器可以是架构寄存器(即,如指令中所提及的)。应当注意,一些指令可能具有多于一个目的地寄存器,因此可响应于单个指令而在寄存器重新写入器存储装置510中创建多个条目511。
图9还示出了数据处理装置500还包括指令贴标签队列512、指令贴标签电路513和指令标签存储装置514。指令标签存储装置514与指令存储区502相关联地提供,使得指令存储区502中的指令可以与存储在指令标签存储装置514中的标签相关联(或不相关联)。实际上,在一些实施方案中,指令存储区502和指令标签存储装置514可以合并成单个存储单元,其中标签直接与指令相关联地存储。然而,在其他实施方案中,指令存储区502不存在,并且指令标签存储装置514通过接收由指令贴标签器513生成的标签并将这些标签直接提供给处理器的前端来进行操作(下面描述的图15B示意性地展示了这种类型的实施方案)。指令贴标签电路513通过获取在指令贴标签队列512中排队的下一个指令标识符并将其写入指令标签存储装置514以指示该指令被“贴标签”来进行操作。例如,当需要将指令分类为“访问”或“执行”的上述指令分类时,指令的标签指示该指令是定义的“访问”指令(而未贴标签的指令被解读为“执行”指令)。
除了使得标签存储在指令标签存储装置514中之外,指令贴标签器513还为指令确定其是否具有任何生产者指令。生产者指令是生成指令的至少一个源操作数的那些指令。因此,基于用于当前指令的指定源寄存器,指令贴标签器513参考寄存器写入器存储装置510,以确定其中是否存储有指示该寄存器或这些寄存器的任何条目。当是这种情况情况时,使得将来自寄存器写入器存储装置510中的条目的对应指令标识符添加到指令贴标签队列512。因此,可以识别出通往预先确定类型的指令(在该示例性实施方案中,加载指令)的数据依赖性链或数据依赖性图,并且可以对该数据依赖性链或数据依赖性图的每个指令贴标签。还需注意从重新映射器503到指令贴标签队列512的路径。这用于通过将遇到的任何加载指令的加载指令标识符插入指令贴标签队列来发起该过程。因此,指令贴标签器513从指令贴标签队列12接收指令标识符,这些指令标识符通过先前的迭代(其中指令贴标签器513在寄存器写入器存储装置510中标识生产者指令,并且使得该生产者指令或那些生产者指令被添加到该指令贴标签队列中)写入该队列中,或者由重新映射器503在遇到加载指令时将这些指令标识符插入指令贴标签队列中。
图10是示出根据一些实施方案的方法所采取的步骤序列的流程图,其具体地描述了图9的示例中数据处理装置500中的部件诸如重新映射器503的操作。可以认为该流程开始于步骤550,在该步骤中,该部件遇到数据处理装置正在执行的指令序列中的下一个指令。在步骤550处确定该指令是否写入到目的地寄存器。如果不是,则该流程自己循环,以考虑序列中的下一个指令。然而,当是时,该流程继续进行到步骤551,在该步骤中,在寄存器写入存储装置中创建与目的地寄存器和指令相关联的条目。接下来,在步骤552处,确定指令是否具有预先确定的类型。例如,这可以是对指令是否是加载指令的确定。如果不是,则该流程返回到步骤550。当是时,该流程继续进行到步骤553,在该步骤中,将指令(即,其标识符)添加到指令贴标签队列中。然后,该流程返回到步骤550。
图11是示出根据一些实施方案的方法所采取的步骤序列的流程图,其具体地是为了对指令进行贴标签而执行的那些步骤,如可由图9中的数据处理装置500的指令贴标签电路513执行的步骤。可认为该流程开始于步骤600,在该步骤中,从指令贴标签队列接收下一个指令。然后在步骤601处,创建指令标签存储装置中的条目,从而对该指令进行“贴标签”,其中该指令与其标签之间的关联形成指令标签存储装置中的条目。然后在步骤602处,确定该指令是否具有一个或多个生产者指令,即指令的至少一个源操作数是否是由已通过另一个指令写入的寄存器的内容给出。如上文参考图9所述,这可以例如通过参考寄存器写入器存储装置510和存储在其中的条目来执行。如果指令不具有任何生产者指令,或者在指令存储区502中不可获得生产者,或者生产者指令已经在先前被帖标签,则该流程返回到步骤600,以便处理指令贴标签队列中的下一个指令。然而,当识别出一个或多个生产者指令时,则在步骤603处将这些生产者指令中的指令添加到指令贴标签队列,然后该流程返回到步骤600。
图12示意性地示出了根据一些实施方案的数据处理装置700。获取电路701和解码电路702操作为从存储器检索将执行的指令序列并对其进行解码。可以细分为微操作的经解码指令填充微操作高速缓存703。下一个管线阶段是重命名电路704。数据处理装置700被布置成执行乱序指令执行,并且因此执行对物理寄存器的架构的重命名以便支持该操作。此后,根据给定指令是被标记为“A”(即,访问指令)还是“E”(即,执行指令),将该给定指令传递到所示的两个执行管线中的一个执行管线。“执行”管线在图12中由发布阶段705、寄存器读取阶段706、执行阶段707和完成阶段708示意性地表示。最终提交阶段709与其他管线共享。其他“执行”管线在图12中由发布阶段710、寄存器读取阶段711、执行阶段712、存储器访问阶段713和完成阶段714示意性地表示。应当注意,访问管线还具有与执行阶段712并行的存储器访问阶段713。由访问管线处理的贴上标签“A”的访问指令优先于由执行管线执行的指令执行。因此,数据处理装置700可以是上文相对于图1至图7所述的类型的解耦访问执行处理器。因此,自贴标签能力允许这种解耦访问执行处理器接收未贴标签的指令流并且添加标签在飞行中。
图12中示出了两个存储部件,重命名电路704具有对这两个存储部件的访问权限。这些存储部件中的第一个存储部件是寄存器写入存储装置720,并且第二个存储部件是关联的指令存储装置725。对于重命名阶段703处理的每个指令,如果指令生成存储到寄存器的结果值,则物理寄存器被分配作为目的地寄存器,并且进行架构寄存器(在指令中指定)和物理寄存器之间的新映射。重命名阶段704还记录指令的标识,该指令负责写入寄存器写入器存储装置720的条目721中的该物理寄存器。一些指令可以具有多于一个目的地寄存器,并且因此可以在重命名阶段704中生成多个映射。此外,当单个指令负责写入若干个物理寄存器时,在寄存器写入器存储装置720中产生若干对应条目。当源操作数寄存器被重命名时,重命名阶段704查询寄存器写入器存储装置720,以便为关联的指令存储装置725创建内容。识别写入到当前指令的源操作数寄存器的指令使得重命名阶段704能够将这些“生产者”指令与当前指令进行关联。因此,使用从寄存器写入器存储装置获取的信息揭示了一个或多个“生产者”指令,该寄存器写入器存储装置的指令写入当前指令的源操作数寄存器。因此,关联的指令存储装置725中的每个条目726给出其他指令的列表,这些其他指令产生由该指令消耗的至少一个数据值。
数据处理装置700还具有指令贴标签队列730,该指令贴标签队列之前是写入缓冲器731。提供写入缓冲器731允许重命名阶段704、指令贴标签器732和指令贴标签队列730操作的速度存在潜在差异。当重命名阶段704遇到预先确定类型的指令(在该示例中,加载指令)时,其将用于该加载指令的标识符插入写入缓冲器731中。这是发起数据依赖性图的精心制作过程的机制,因为加载指令(在该示例中)是数据依赖性图的终端节点。指令贴标签器732从指令贴标签队列730接收指令标识符。在所示示例中,提供了四个并行指令贴标签器,每个指令贴标签器从指令贴标签队列730接收指令标识符。对于由指令贴标签器732的集合中的指令贴标签器从指令贴标签队列30获取的每个指令标识符,指令被写入到访问/执行(A/E)标签高速缓存733中,其中在该示例性实施方案中,高速缓存中的位置对应于指令标识符,并且位被写入来指示指令被贴标签为访问指令。指令贴标签器还使用当前指令标识符来在关联的指令存储装置725中进行查找,并且当找到对应条目时,读取在该条目中被指定为生产者的一个或多个指令标识符。这些生产者指令的指令标识符经由写入缓冲器731发送到指令贴标签队列730中,以便进行处理。
图13A示出了关联的指令存储装置(诸如图12的示例中的关联的指令存储装置725)的示例性内容,其中此处这种结构被称为“遍历表”。该遍历表的内容对应于上文所阐述的示例性指令序列,并且数据依赖性图在图8A和图8B中示出。因此(与图8A相比):I2被列出为针对指令I3的生产者指令;I3是针对指令I5的生产者指令;I5是针对指令I9的生产者指令;并且指令I7和I9是针对指令I10的生产者指令。应当注意,指令I10是加载指令,并且因此是数据依赖性图的终端节点。
图13B示出了寄存器写入器存储装置(诸如图12的寄存器写入器存储装置720)的示例性内容,其在该图中被称为“最后的写入器表”。应当理解,被指令中指定的架构寄存器映射到的特定物理寄存器取决于重命名阶段的特定配置以及当遇到这些指令时物理寄存器的可用性。因此,图13B仅是最后的写入器表的一个特定示例性内容的抽点打印。从图13B可以看出,在所示抽点打印点处,指令I5是用于物理寄存器26的“最后写入器”,而指令I9是用于物理寄存器28的最后写入器。物理寄存器25和27当前可以被映射到架构寄存器,并且当前没有有效的“最后写入器”指令,因此被标记为“-”。
图14A和图14B示出了指令标签存储装置的示例性配置和每个指令标签存储装置中的一些示例性内容。在图14A的示例性实施方案中,指令标签存储装置被布置成存储关联指令标识符、标签和“未处理”指示符的条目。因此,对于任何给定指令,可以确定指令标签存储装置中是否存在对应条目,并且具体地,确定该指令是否被贴标签。未处理标志用于防止某些指令被放置在指令贴标签队列中。例如,在图12的实施方案中,这防止重命名阶段704将指令以及因此已由贴标签单元处理的加载(因此通过以这种方式进行标记,其不需要触发新的数据依赖性图精心制作过程)放入写入缓冲器731中。另外,应当注意,图14A的表中针对I20的条目具有未处理标志,而不是“A”标签,该未处理标志可以与先验地已知不为访问指令的一些指令相关联地存储,诸如分支指令和在无寄存器回写的情况下的存储。应当注意,如果设置了“访问”标签,则实际上不需要明确地设置“未处理”标志,因为设置访问标签也防止了指令被添加到指令贴标签队列中。
图14B示出了指令标签存储装置的另选实施方案,其中该示例被称为A/E高速缓存,其可以对应于图12的示例的A/E标签高速缓存733。这是一种特别紧凑的结构,仅需要存储有限量的信息,因为指令标识符被映射到特定高速缓存位置,并且位被存储在特定位置处并指示将映射到该位置的指令被标记为访问指令。“未处理”位也可以类似的方式进行指示,从而在被主体指令映射到的位置处存储位。应当注意,一些指令被标记为未处理,而不是“访问”,诸如分支指令和在无寄存器回写的情况下的存储的上述示例。
图15A和图15B示意性地示出了允许从指令标签存储区逐出贴标签信息但将其保留以供将来使用的配置。在图15A中,示出了解码阶段800将经解码指令传递到微操作高速缓存801的示例,其中在该示例中,高速缓存本身被提供有贴标签信息,并且其中此处该贴标签信息是访问/执行贴标签信息(例如,指示指令是否为访问指令的位)。重新映射器阶段802从此处获取指令。该配置还包括两个级别的指令高速缓存层次结构803和804,这些指令高速缓存层次结构也被布置成存储具有相关联的贴标签信息的指令信息。因此,如果从微操作高速缓存逐出指令,则可以将其相关联的标签信息发送给这些另外级别的指令高速缓存层次结构,这意味着随后可以在稍后时间点将该信息加载回微操作高速缓存中,而不必再次执行贴标签过程(和数据图精心制作过程)。
图15B示意性地示出了前端电路810在处理器的执行管线811之前。具体地,这是一种实施方案,其中不存在微操作高速缓存,但是相关联的指令标签高速缓存812(其从贴标签电路诸如上述贴标签电路接收标签信息)将该标签信息直接提供给处理器的前端电路810以与通过的指令相关联。如果指令标签高速缓存812变满并且条目被逐出,则这些条目可以被发送给另外级别的指令高速缓存814和815。当再次遇到相同指令时,可以将标签信息与指令一起带入处理器中,然而不需要重新生成标签信息(并且重复数据图精心制作过程)。
图16示意性地示出了一些实施方案中的装置10。装置10包括与数据处理装置中的加载请求的处理相关的各种部件,该数据处理装置可以例如是上文参考图2、图4和/或图5所述的数据处理装置中的一个数据处理装置。如在图16中可以看出,此处所示的唯一部件是与加载请求的处理相关的那些部件,并且本领域的普通技术人员通常将理解此类装置的上下文,并且可以将此类加载处理电路引入图2、图4和/或图5的示例中。图16示出了由地址生成电路110接收的传入加载请求,该地址生成电路被布置成生成相应加载请求所需的地址。应当注意,地址生成电路可以是用于生成地址的电路的专用布置,或者还由能够执行与地址生成有关的整数算术的常规算术逻辑单元(ALU)提供。在后一种情况下,在一个实施方案中,解码器可以将加载指令分成两个单独的微操作,一个微操作用于执行从所使用的特定寻址模式导出的地址计算,并且另一个微操作用于执行由“加载”指令指定的实际访问。在这种情况下,一旦已执行地址生成微操作,“加载”指令的“解析”地址就将被写入图16所示的“待决”加载缓冲器(PLB)中。还应当注意,请求可能不按程序顺序到达该缓冲器。加载请求到达待决加载缓冲器(PLB)电路120,该PLB电路在该示例中被布置成FIFO缓冲器,并且因此,在图16的图示中,可以认为单独的待决加载请求在PLB 120的顶部进入并通过所示位置逐步进入双轨,以最终离开并被传递到聚结电路130。当然,通常未发生FIFO中的条目的物理移动,而是参考每个条目的标识符来处理这种位置进展。在一种作用中,聚结电路130将来自PLB 120的加载请求转发给加载处理电路140,使得可以执行这些加载请求并且从存储器系统检索作为其主体的相应数据项。在图16的图示中,仅明确地示出了该存储器系统的L1高速缓存160。然而,聚结电路130还在系统中发挥着另一种作用,即,根据保持在PLB120中的待决加载确定是否至少两个待决加载请求与彼此足够靠近而使得可以通过将这些至少两个待决加载请求聚结成一个加载请求来提高加载处理效率的存储器地址有关。这种相应存储器地址的高效靠近在本文中被称为在满足“地址接近条件”时存在。尽管这种地址接近条件可以根据本技术的特定具体实施来不同地定义,但在图16的示例中,这种地址接近条件是参考L1高速缓存160来定义的,具体地是参考其高速缓存线大小来定义的。换句话说,聚结电路130检查被指定用于在PLB 120中缓冲的待决加载的存储器地址,并且确定是否至少两个待决加载请求与同一高速缓存线有关。既然如此,那么那些至少两个待决加载请求由聚结电路130聚结。聚结电路130的该动作的一部分包括抑制所有待决加载请求的转发,除了被发现满足该高速缓存线大小定义的“地址接近条件”的该至少两个待决加载请求中的一个待决加载请求。从聚结电路130到PLB 120的反馈路径示意性地示出了这一点。此外,聚结电路130还生成传输到解聚结电路150的对应信号。当加载处理电路140已引起从存储器系统(例如从L1高速缓存160)检索数据时,数据被传递到解聚结电路150。通过从聚结电路130接收信号,解聚结电路150知道不仅由加载处理电路140执行的加载请求指定的数据项应作为一个所请求数据项进行传递,而且由至少一个另外的待决加载请求(其到加载处理电路140的转发被聚结电路130抑制)指定的数据项也应被提取并作为至少一个另外的所请求数据项进行传递。例如,在从L1高速缓存160返回数据的高速缓存线长度的情况下,解聚结电路150在这种情况下从该高速缓存线提取将返回的多个数据项。
图17示意性地示出了图16的装置10,其中输入、处理和输出的有效示例被叠加。地址生成电路110被示出为接收将架构寄存器R20识别为保持应发生加载的地址的加载请求。地址生成电路110然后确定架构寄存器R20(当前)对应于物理地址“21”,并将具有该地址信息的待决加载添加到PLB 120。PLB 120是FIFO缓冲器结构,因此将该最新的待决加载请求添加到第一条目(在该图中在最上面)。应当注意,PLB 120通常是完全满的,因为在所有可能存储位置中存在条目,但是可以针对每个单独的条目维持不同状态,如将在下文更详细地讨论的。另外,应当注意,仅因为这些特定条目与本讨论相关而仅明确地示出了图17中的PLB 120中的条目的子集。因此,在图17中针对PLB 120的内容所示的抽点打印时刻,明确地示出了四个条目,分别与存储器地址位置21、8、5和3有关。附加信息或元数据诸如与每个条目对应的数据访问类型、格式和访问大小信息也可以存储在待决加载缓冲器中。如果需要,为了从由存储器返回的数据提取相关数据项,可以将该元数据与解聚结电路共享。
聚结电路130监测PLB 120的内容并且确定哪些请求将被转发给加载处理电路140。在PLB 120的内容的进展的过程中,访问地址3的待决加载请求在PLB 120中变为最旧的有效待决加载请求,并且聚结电路130将该请求转发给加载处理电路140,从而将该条目的状态指示符标记为“在飞行中”(IF)。在飞行中状态意味着PLB 120中用于该待决加载请求的该条目通常当时保留在PLB 120中,直到已经处理了加载并返回了所请求数据,使得该条目可被标记为无效。然而,PLB 120中的条目的其他状态也用于支持本技术。聚结电路130监测并比较作为保持在PLB 120中的相应待决加载请求的主体的存储器地址,具体地以识别PLB 120中的多个条目,该多个条目与彼此足够靠近而使得可能发生这些加载请求的“聚结”的存储器地址有关。在图17的示例中,聚结电路130被布置成确定PLB 120中的多个待决加载请求是否与在存储器系统中使用的高速缓存线大小内并且具体地在L1高速缓存160中的存储器地址有关。在图17所示的示例性抽点打印中,聚结电路130确定PLB 120中的两个另外的待决加载请求(即,访问存储器地址5和8的那些待决加载请求)满足其对地址的接近要求,因为根据存储器地址3、5和8检索到的数据项将在同一高速缓存线中。因此,聚结电路130将与存储器地址5和8有关的待决加载请求标记为“无效”,并且向解聚结电路150发送这三个待决加载请求已经以这种方式分组在一起的指示。
在已经转发了与存储器地址3有关的待决加载请求后,加载处理电路140访问存储器系统(包括L1数据高速缓存160),以便执行所需加载。从L1数据高速缓存160返回的高速缓存线包括多个数据项,该多个数据项包括由存储器地址3、5和8引用的那些数据项。与高速缓存线对应的数据被传递到解聚结电路150(或至少由其访问)。在不存在来自聚结电路130的信号的情况下,解聚结电路150将仅提取与存储器地址3对应的数据项,然而在解聚结电路150已经接收到来自聚结电路130的指示与存储器地址3、5和8有关的待决加载请求已聚结的指示的情况下,解聚结电路150从高速缓存线的返回数据提取与全部三个存储器地址对应的数据项。解聚结电路150将所需数据接收到聚结电路130,作为响应,这导致与存储器地址3的待决加载请求对应的条目被标记为无效。因此,当该条目到达PLB 120的头部时,将该条目删除(或至少允许该条目被覆写)。类似地,当与地址5和8对应的条目到达PLB 120的头部时,类似地将这些条目删除(或至少允许这些条目被覆写)。应当注意,如果处理聚结的加载请求的过程被中断,则可以恢复对应条目,其中与存储器地址3对应的条目从在飞行中改变为有效,并且与存储器地址5和8对应的条目从无效改变为有效。
图18示意性地示出了基于相对于图16和图17所示的原理构建的示例性实施方案。已经参考图16和图17讨论了图18的装置中的各种部件。这些部件在图18中通过相同的附图标号来标识。示出了馈送到寄存器读取电路320和地址生成电路110中的指令队列310。因此,通过在指令队列310中识别出该序列加载请求,确定与这些加载请求有关的存储器地址,并且将用于每个加载请求的对应条目添加到PLB 120中。在图18中示出了聚结电路130的另外的细节。在图18的示例性实施方案中,解聚结电路130被示出为包括试验性接近检查电路331、地址接近检查电路332和冒险检测电路333。试验性接近检查电路331和地址接近检查电路332在两阶段过程中确定PLB 120中的多个条目是否与足够靠近而使得其相应加载可以有利地聚结的地址有关。基本上,试验性接近检查电路331执行粗略比较,而地址接近检查电路332执行更精确的比较。由试验性接近检查电路331执行的比较的更粗略性质使得该检查能够更快速地执行,并且因此更快地(临时地)更新PLB 120中的对应条目的状态。在执行初始试验性接近检查(这在一些实施方案中采用一个CPU循环(取决于PLB的大小))之后,则将“首位”待决加载请求(即,在PLB 120的头部处)派送到开始存储器访问的加载处理单元341,该“首位”待决加载请求已经与在FIFO PLB 120的队列中在其之后的待决加载请求进行了比较。在图18的示意性示例性图示中,加载处理单元341出于此目的而访问的存储器系统包括TLB 342(包括查找和故障检查电路)、L1高速缓存160和存储器系统365的其余部分(在L1未命中的情况下访问)。虽然该访问继续进行,但是聚结电路更新PLB 120中的任何其他条目(其为处于“保持”状态的潜在匹配(即,通过试验性接近检查)),并且将标识这些候选的信息发送到地址接近检查电路332,该地址接近检查电路执行更详细的检查以确定潜在匹配的剩余地址位是否与由加载处理单元341处理的传出加载的地址位相同。当地址接近检查332未发现(足够靠近的)匹配时,那么聚结电路使得PLB 120中的这些相关待决加载请求恢复为有效状态。换句话说,这些加载请求然后将进一步通过PLB 120继续进行,这些加载请求可用于与其他加载请求进行比较以获得地址接近度,并且(在这些加载请求在到达PLB队列的头部之前未被压缩的情况下)在这些加载请求到达PLB队列120的头部时将这些加载请求传递到加载处理单元241。
相反地,如果地址接近检查332发现匹配,则聚结电路使得PLB 120中的这些相关待决加载请求从保持改变为无效,并且将关于每个“压缩的”加载的信息传递到解聚结电路150,使得可以相应地提取来自高速缓存的所需结果。该信息可包括:加载ID,其在高速缓存线内的偏移;请求的大小;以及其取决于的传出加载的ID。应当注意,尽管聚结电路花费了附加时间(例如,两个CPU循环)来相对于另外的加载请求(在上述示例中被压缩)执行这些动作,但这仍然小于L1高速缓存的典型访问时间,这意味着其操作的延迟被有效地隐藏。该延迟未被隐藏的唯一情况是:另外的加载请求被暂时置于保持状态(由于试验性接近匹配),但是随后通过(全)地址接近测试发现这些另外的加载请求并不是完全匹配。
由加载处理单元341发布的加载请求访问TLB 342,以便执行所需查找(用于从虚拟到物理寻址的转换)并适当地响应任何故障。应当注意,可以提供各种类型(例如,虚拟地索引或物理地索引)的L1高速缓存,并且因此,对TLB 342的访问可以在L1高速缓存访问之前或之后。当执行L1数据高速缓存访问并且(作为高速缓存命中的结果或通过进一步访问存储器系统365的其余部分)返回相关的高速缓存线内容时,数据读取和通路多路复用电路343处理高速缓存线数据并将其内容传递到解聚结电路150(其内容可由该解聚结电路访问)。然后,解聚结电路提取(针对包括来自一个高速缓存线的多个数据项的聚结的加载请求结果的)所需数据项。参考解耦访问执行处理器的上述示例,这些数据项可放置在缓冲器350中(其可例如对应于图2的解耦访问缓冲器110、图4的解耦访问缓冲器234或图5的解耦访问缓冲器311),也可从该缓冲器将这些数据项发送到结果高速缓存370和/或完整处理器的“执行”部分(诸如图4的示例的访问结果高速缓存236和执行部分220)。
图18的聚结电路331还被示意性地示出为包括冒险检测电路333,该冒险检测电路形成相干性机制的一部分,该装置在更宽数据处理系统(该装置形成其一部分)中支持这些相干性机制。这些相干性机制允许系统中的多个主设备以本领域普通技术人员将通常熟悉的方式访问和修改存储器的共享区域中的数据项。冒险检测电路被布置成从外部装置(例如,访问与该装置共享的存储器的另一个主设备)接收写入通知。这些写入通知可例如来自在多主系统中交换的窥探请求。因此,当聚结电路将加载请求传递到加载处理单元341(对于将访问的特定高速缓存线)时,聚结电路的冒险检测电路333跟踪该访问直到完成,并且如果在该高速缓存线仍然在飞行中时接收到与该高速缓存线有关的写入通知,则冒险检测电路采取补救措施。如果外部装置在继续执行写入之前等待确认信号,并且排序规则限定正在执行的本地加载应首先完成,则冒险检测电路延迟发送对应的确认信号直到已经检索到高速缓存线之后为止。
冒险检测电路333还可相对于PLB 120的内容采取动作。例如,当排序规则限定由外部装置通知的访问应在本地加载之前完成时,但是在本地加载已经由加载处理单元(凭借自身能力或与至少一个其他加载请求聚结)处理的情况下,冒险检测电路恢复待决加载缓冲器电路中的条目。这可以通过将条目的“在飞行中”或“无效”状态改变回有效来实现,或者可以将对应的加载请求添加到待决加载缓冲器。冒险检测电路333防止将加载请求转发给加载处理电路,直到已知由写入通知指示的修改已经完成为止。此外,冒险检测电路333向解聚结电路发送信号通知不应返回相关加载请求的相关结果。
图19示出了在示例诸如图18所示的示例的聚结电路中执行的两阶段地址比较检查的有效示例。此处,正在针对其执行比较的示例性假设基本存储器地址(即,对应于已经到达待决加载缓冲器的头部的有效待决加载请求)为“261167”。应当注意,此处仅出于易读性目的而以十进制记数法给出该示例,并且原理可容易地转换成典型的二进制具体实施。在第一“试验性”阶段331中,将该地址的数字[2:1]与和PLB中的待决加载请求有关的其他地址进行比较,并且因此确定还具有数字的内容“16”的其他地址以试验性地匹配。因此选定的四个地址的集合使得其在PLB中的待决加载请求的状态更新为“保持”。接下来,在第二“全检查”阶段332中,将基础地址的数字[5:3]与和PLB中的待决加载请求有关的其他地址进行比较。在该示例中,确定这些地址中的哪个地址还具有这些数字的内容“261”。不匹配的那些使得其在PLB中的条目的状态恢复为“有效”。确实匹配的那些使得其在PLB中的条目的状态更新为“无效”,因为这些条目将被聚结。因此,在所示示例中,发送到解聚结电路的聚结的请求指示指示基础请求访问地址261167,并且该请求的结果还应当用于在地址261162、261160和261163处提取数据项。应当理解,该地址信息不需要明确地传送,而是可以更紧凑的形式传送,例如用基础加载ID的指示符和高速缓存线内的相应偏移来传送。
图20示出了根据一些实施方案的在内容随着示例性内容集合被处理而演变时的待决加载缓冲器的内容。在八个连续时间点A-H处示出了待决加载缓冲器的内容的抽点打印以及相对于该内容采取的一些列动作1000-1006。缓冲器的条目被示出为在图中垂直地堆叠,其中缓冲器的头部(即,保持最旧的条目)在该图的顶部并且缓冲器的尾部(即,保持最新条目)在该图的底部。内容A示出了与已经到达缓冲器的头部的地址74有关的加载。该条目被标记为无效(I),并且因此动作1000是从缓冲器的头部丢弃该无效项,从而产生内容B。接下来,动作1001执行试验性接近检查,并且因此头部项和在地址接近检查中可能完全匹配的任何项被标记为“保持”(H)。应当注意,在内容C中,该组待决加载请求包括“加载3”、“加载5”、“加载8”,以及加载5和加载8中间的条目中的另外的加载。仅仅是为了有利于易读性,该条目、图20中除“加载3”、“加载5”和“加载8”条目之外的所有其他条目未被明确地命名。由于作为动作1002执行的(全)地址接近检查,内容D保留在待决加载缓冲器中,其中头部处的条目被标记为“在飞行中”(IF)(因为其被转发给了加载处理电路),并且满足地址接近条件的请求被标记为“无效”(I),因为它们已经被聚结。应当注意,在地址接近检查中发现在加载5和加载8中间的条目中的请求不匹配,并且其状态被重置为“有效”(V)—参见内容D。下一个动作1003与被接收的写入通知有关,该写入通知对应于(并且取代)基于加载3发布的聚结的加载中的至少一个聚结的加载,并且因此,该加载被压缩(丢弃在加载处理电路中生成的任何结果)并且在PLB中通过将该加载再次标记为有效来恢复该加载。产生内容E。然后,在队列的头部处存在有效的待决加载请求,并且动作1004再次发起加载(将该请求转发给加载处理电路),并且PLB中的条目被标记为在飞行中(内容F)。在这次尝试中,“加载3”成功完成,从解聚结电路返回加载请求的结果以及与“加载5”和“加载8”对应的那些结果,然后动作1005将“加载3”请求标记为无效(参见内容G)。最后,动作1006丢弃在队列的头部处的该无效请求,从而产生内容H。应当注意,用于“加载5”和“加载8”的条目也将随后在到达队列的头部时被简单地丢弃。
图21示出了根据一些实施方案的方法所采取的步骤序列。序列开始于步骤1010,在该步骤中,生成加载请求所需的地址。在步骤1011处,在待决加载缓冲器电路中缓冲待决加载请求。在步骤1012处,将待决加载请求(其已经到达由待决加载缓冲器形成的队列的头部)转发给加载处理电路用于执行。然后在步骤1013处,相对于该刚才发布的加载请求针对待决加载缓冲器中的一个或多个后续加载请求确定是否请求满足地址接近条件。当满足地址接近条件时,该流程继续进行到步骤1014,在该步骤中,抑制满足该地址接近条件的一个或多个后续加载请求到加载处理电路的转发。然而,如果在步骤1013处发现不满足地址接近条件,则该流程继续进行到步骤1015。该流程还从步骤1014继续进行到步骤1015。在步骤1015处,从存储器系统检索由转发的加载请求标识的数据项集合。在步骤1016处,返回由加载请求本身标识的数据项作为该加载请求的结果。如果在步骤1013处发现不满足地址接近条件,则该流程从步骤1016继续进行到完成该步骤序列的步骤1018。然而,如果在步骤1013处发现满足地址接近条件,则该流程从步骤1016继续进行经过步骤1017,在该步骤中,返回与该一个或多个后续加载请求对应的附加数据项。然后,该流程在步骤1018处结束。
图22示出了根据一些实施方案的指令序列,该指令序列包括导引指令1100并且后面是多个另外的(其他)指令1101。根据本技术提供导引指令1100,以便给出与后续指令1101有关的处理器信息,并且尤其是为每个后续指令指示该后续指令是被视为“执行”指令还是“访问”指令。上文参考示出根据本技术的解耦访问执行处理器(及其示例)的原理的前述图、对将指令分类为“执行”指令或“访问”指令以及数据依赖性图示例的讨论等,描述了在解耦访问执行处理器的上下文中的这种分类目的。在图22的示例中,可以看出导引指令1100基本上包括两个部分。特定位编码将该指令识别为到装置的解码电路的该类型的导引指令的第一“操作码”部分,以及给出与该组后续指令的分类(访问或执行)有关的信息的另一个部分。此外,在图22的示例中,可以看出指令1100中的信息明确地呈现(即就立即值而言),在该示例中,0指示访问指令,而1指示执行指令。应当注意,如上所述,这些访问/执行标记所应用于的一组指令1101可以紧跟在导引指令1100之后,或者尤其是出于定时目的,一个或多个其他指令(未示出)可以存在于指令序列中导引指令1100和该组指令1101中的第一个指令之间。
图23示意性地示出了一些实施方案中的解码电路1110。该解码电路可例如是图2中的解码电路102、图4中的解码电路204、图5中的解码电路302、图9中的电路501的解码部分、图12中的解码电路702和/或图15A中的解码电路800。解码电路1110在图23中被示出为包括操作码识别电路1111、用于执行另外的解码操作1112的电路,以及访问/执行标记电路1113。本领域普通技术人员将理解,为了传达与本技术的讨论相关的点,只能以相对较高的抽象水平示出解码电路1110。因此,只是为了清楚起见,未在图中表示通常将存在的现代解码电路的许多部件。指令序列(即,获取的指令)由解码电路1110接收,并且操作码识别电路1111通过形成指令的一部分的特定操作码来识别本技术的导引指令。当识别出这些指令中的一个指令时,操作码识别电路1111向访问/执行标记电路1113发送信号通知该情况,并且还传递被编码在指令中的访问/执行信息。在图23的示例性实施方案中,操作码识别电路1111被布置成识别图22中所示类型的导引指令,并且因此,然后将作为该指令的一部分提供的显式访问/执行信息直接传递到访问/执行标记电路1113。该显式访问/执行信息存储在标记缓冲器1114中,该标记缓冲器形成访问/执行标记电路1113的一部分。以这种方式,图22的后续一组指令1101的相关标记由解码电路1110保持,然后在接收到该后续指令序列时,应用相应标记。这些标记的应用由另外的解码操作电路1112执行,该另外的解码操作电路接收用于每个后续指令的相关标记。因此,解码电路1110的输出是根据经解码指令是具有“访问”类型还是“执行”类型标记的经解码指令。应当注意,解码电路1110被布置成具有默认标记,这在此处是指处理器默认地将指令视为“访问”(除非这些指令具有特定类型,否则该处理器出于其他原因要求将它们转发给处理器的特定部分,这是可执行这些特定指令的唯一方式)。
图24示意性地示出了一些示例性实施方案中的装置1120。获取电路1121接收从存储器系统检索到的指令并且将这些指令提供给解码电路1122,该解码电路执行解码操作,该解码操作通常可以是上文参考图23所述的。如图24所示,存储器系统包括(至少)指令高速缓存1130和1131,以争取尽可能多地避免与从指令在存储器中的原始存储位置检索指令相关联的完全延迟。图24的装置1120的另一个特征是微操作高速缓存1123,其中暂时存储了由于指令的解码而产生的微操作。发布电路1124从微操作高速缓存1123(如果存储在那儿的话)检索指令,以便向执行执行电路1125和访问执行电路1126中的一者发布指令。访问执行电路1126包括解耦访问缓冲器1127,执行执行电路1125具有对该解耦访问缓冲器的访问权限。还示出了另外的存储器系统1128(即,除指令高速缓存1130和1131之外,并且例如可能还包括实际存储器之前的一个或多个共享高速缓存和/或系统高速缓存)。因此,应当理解,图24中所示的执行执行电路1125、访问执行电路1126和解耦访问缓冲器1127可被认为是上文参考前述图所述的这些部件的示例中的任一个示例。
参考图24中的微操作高速缓存1123,应当注意,微操作高速缓存中的每个条目可具有与其相关联的附加标记(A或E),该附加标记指示该条目将被处理为访问指令还是执行指令(微操作)。根据本技术基于在导引指令之后的指令的分类来布置解码电路1123,以将标记应用于存储在微操作高速缓存1123中的经解码指令(和/或其等效微操作)。因此,当发布电路1124访问微操作高速缓存1123中的条目时,该发布电路也可被提供相关联的分类(标记)信息,并且因此可在此基础上将这些微操作引导到适当的执行电路1125或1126。指令高速缓存1130和1131还可存储应用于微操作高速缓存1123中的条目的相关联的分类信息(标记)(如由解码电路1122生成的),并且因此当条目从微操作高速缓存逐出到指令高速缓存层次结构的这些所示级别时,可以保存这些标记。
图25示意性地示出了一些示例性实施方案中的装置1160。获取电路1161接收从存储器系统1168检索到的指令并且将这些指令提供给解码电路1162,该解码电路执行解码操作,该解码操作通常可以是上文参考图23所述的。该装置还包括寄存器重命名电路1163,该寄存器重命名电路执行寄存器重命名操作以允许乱序指令执行。因此,重新映射(重命名)的指令被传递到发布电路1164,该发布电路向执行执行电路1165和访问执行电路1166中的一者发布指令。访问执行电路1166包括解耦访问缓冲器1167,执行执行电路1165具有对该解耦访问缓冲器的访问权限。应当理解,图25中所示的执行执行电路1165、访问执行电路1166和解耦访问缓冲器1167可被认为是上文参考前述图所述的这些部件的示例中的任一个示例。图25还示出了三组物理寄存器1169、1170和1171。尽管在图25中单独地示出,但是这些应当被理解为物理寄存器的一个集合,并且所示成组的细分不是物理上的。所示的三个子集被重命名电路1163用于指令,该重命名电路根据给定指令是“访问”指令还是“执行”指令来对其进行处理。当解码电路1162遇到根据本技术的导引指令时,该解码电路生成控制信号以修改寄存器重命名电路1163的重命名操作,使得寄存器组用于被“导引的”后续指令,这取决于这些后续指令的类型。此处,寄存器1171保持由“访问”指令生成并且仅由其他“访问”指令消耗的值;寄存器1170保持由“访问”指令生成并且由“执行”指令消耗的值;并且寄存器1169保持由“执行”指令生成并且仅由其他“执行”指令消耗的值。
图26A至26C示意性地示出了一些实施方案中的根据本技术的导引指令的结构。在图26A中,指令被示出为包括操作码、格式化信息和关于一个或多个后续指令的访问/执行(A/E)信息。在图26A的示例中,格式化信息是二进制的,其中值0指示AE信息是即时的(即,普通的),并且以图22的方式,在AE信息的集合中的每个位值对应于一个后续指令,指示其类型。相反地,格式值1指示AE信息是压缩的。该压缩可以是固定的和预先确定的,因此解码电路解读指令(通过适当地解压缩指令)不需要指令中的另外的信息。图26B示出了格式信息包括两个二进制位的示例。如同图26A的情况,第一值(此处为00)指示AE信息是即时的(即,普通的),直接指示后续指令序列的分类。二进制对的三个其他可能值指示已经使用了三个不同压缩方案(#1、#2或#3)中的哪个压缩方案以便在指令中编码AE信息。在该示例中,压缩方案#1(由格式信息01指示)为运行长度编码(RLE),使得例如模式“AAAAAAEEEAAAAA”在AE信息中(在逻辑上)呈现为{6A,3E,5A}。运行长度编码(RLE)是已知的并且此处未进行更详细的描述—本领域普通技术人员可应用任何已知RLE程序和对AE信息的表示。在图26B的示例中,格式信息“10”(压缩方案#2)指示一种压缩方案,根据该压缩方案,模式“AAAEEAAAAAEEEEEE”在AE信息中呈现为{A,3,2,5,6}。在图26B的示例中未使用可能的压缩方案#3,但是实际上,可根据需要在指令编码中使用更多的位(在其可用的范围内)来指示更多压缩方案。图26C的示例示出了指令包括操作码信息、AE信息和格式/重新排序信息。因此,格式/重新排序信息指示所使用(未使用)的压缩方案(如在图26A和图26B的示例中),但是另外指示(例如,通过另外的单个二进制位指示)是否在应用(或未应用)压缩之前,例如在已经应用任何压缩方案之前,已经将已知重新排序(固定排列)应用于位。可在创建指令时应用该重新排序,或者可随后在编译器改变指令的排序时由该编译器应用该重新排序。编译器不管怎么样出于其他原因都可进行该操作,但是可明确地执行该操作,以便使得能够对访问指令和执行指令进行分组以有助于压缩,从而提高压缩比率。
图27示意性地示出了一些实施方案中的解码电路1140。这可以是上述示例或图中的任一者的解码电路。该图展示了如何通过解码电路接收、处理和解码图26A至图26C中所示的格式中的一个格式的指令。指令1141由解码电路1141接收,并且操作码部分被路由到操作码识别电路1142。格式信息(和重新排序信息,如果存在的话)以及AE信息被路由到解压缩/重新排序电路1142。操作码识别电路1142向解压缩/重新排序电路1142提供控制信息,以便在解压缩/重新排序电路1142中正确地应用指令的类型,尤其是格式化信息的性质(参见例如图26A至图26C的示例)。然后,解压缩/重新排序电路1142解压缩AE信息(如果需要的话),并且执行逆向重新排序(如果需要的),以便生成至少一个后续指令所需的所需解开的A/E标记。应当理解,通常出于效率原因,通过给定导引指令(在可用编码空间中)标记尽可能多的后续指令。
图28是示出由解码电路根据一些实施方案的方法所采取的步骤序列的流程图。这可以是上述示例或图中的任一者的解码电路。在步骤1200处,由解码电路接收下一个指令,并且在步骤1201处,确定该指令是否是本技术的A/E导引指令中的一者。如果不是,则该流程继续进行到步骤1202,在该步骤中,解码电路根据需要对该指令进行“正常”解码(因为实际上对于由解码电路接收的大多数指令,将通常是这种情况),以便装置执行其一般数据处理操作。然而,当遇到A/E导引指令时,该流程继续进行到步骤1203,在该步骤中,从该指令提取AE信息。然后在步骤1204处,将这种AE导引(即,单独指令的标记或分类)应用于相关后续指令以用于由装置进行的解耦访问执行执行。有关该解耦访问执行执行的更多细节,请参考上述示例中的任一个示例。该流程返回到步骤1200。
图29是示出当导引指令还包括压缩的AE信息时由解码电路根据一些实施方案的方法所采取的步骤序列的流程图。这可以是上述示例或图中的任一者的解码电路。可认为该流程开始于步骤1250,在该步骤中,由解码电路接收将解码的下一个指令。然后在步骤1251处,确定该指令是否是根据本技术的A/E导引指令,并且如同图28的情况,当不是时,该流程继续进行经过步骤1252,以便该指令被“正常”解码,并且该流程返回到步骤1250。在遇到A/E导引指令的情况下,该流程继续进行到步骤1253,在该步骤中,进一步确定该指令是否指示AE信息被压缩和/或重新排序。如果是,则该流程继续进行经过步骤1254,以便该AE信息被解开,其中应当理解,这种解开可包括解压缩和/或重新排序,如上文具体地参考图26A至图26C和图27所讨论的。然后,该流程从步骤1253(在无压缩/重新排序的情况下)或从步骤1254(在有压缩/重新排序的情况下)继续进行到步骤1255,以提取原始普通的/未压缩的/重新排序的AE信息。然后在步骤1256处,将这种AE导引应用于相关后续指令以用于解耦访问执行指令。同样,有关该解耦访问执行执行的更多细节,请参考上述示例中的任一个示例。该流程返回到步骤1250。
图30示出了可使用的模拟器具体实施。虽然先前所述的实施方案在用于操作支持所涉及的技术的特定处理硬件的装置和方法方面实现了本发明,但也可以提供根据本文所述的实施方案的指令执行环境,该指令执行环境是通过使用计算机程序来实现的。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可在支持模拟器程序1310的主机处理器1330上运行,任选地运行主机操作系统1320。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在某些情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一个处理器本地的代码时。例如,模拟器具体实施可向指令执行环境提供主机处理器硬件不支持的附加功能,或者提供通常与不同硬件架构相关联的指令执行环境。模拟概述在以下文献中给出:“SomeEfficient Architecture Simulation Techniques”,Robert Bedichek,Winter1990USENIX Conference,第53-63页。
就先前已参考特定硬件构造或特征描述了实施方案而言,在模拟的实施方案中,等效功能可由合适的软件构造或特征提供。例如,特定电路可在模拟的实施方案中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存存储器可在模拟的实施方案中被实现为软件数据结构。在先前描述的实施方案中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器1330)上的布置中,在合适的情况下,一些模拟的实施方案可利用主机硬件。
模拟器程序1310可被存储在计算机可读存储介质(其可为非暂态介质)上,并且向目标代码1300提供程序接口(指令执行环境),该程序接口与模拟器程序310正在建模的硬件架构的应用程序接口相同。因此,在此类实施方案中的目标代码1300的程序指令包括用于提供A/E标记的上述新颖导引指令,并且可使用模拟器程序1310从指令执行环境内执行这些程序指令,使得实际上不具有上述装置的硬件特征的主机计算机1330可仿真这些特征。
简而言之,公开了数据处理的总体概述装置和方法。装置包括第一指令执行电路、第二指令执行电路和解耦访问缓冲器。根据指令是具有第一类型标记还是第二类型标记向该第一指令执行电路和该第二指令执行电路中的一者发布有序指令序列中的指令用于执行。具有该第一类型标记的指令是访问相关指令,该访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征。使由该第一指令执行电路进行的具有该第一类型标记的指令的指令执行优先于由该第二指令执行电路进行的具有该第二类型标记的指令的指令执行。将从存储器检索到的数据值作为这些第一类型指令的执行的结果存储在该解耦访问缓冲器中。一旦执行待决的第二类型指令所需的数据值在该解耦访问缓冲器中,该第二指令执行电路就从该解耦访问缓冲器检索该数据值并执行该待决指令。
在本申请中,字词“被配置为...”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
虽然本文已结合附图详细描述了示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围的前提下,本领域的技术人员可在其中实现各种变化、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可与独立权利要求的特征一起进行各种组合。
Claims (16)
1.一种数据处理装置,所述数据处理装置包括:
发布电路,所述发布电路用于相对于有序指令序列发布指令用于乱序执行;
第一指令执行电路和第二指令执行电路;和
解耦访问缓冲器,
其中所述发布电路响应于与指令相关联的类型标记,在所述指令具有第一类型标记时向所述第一指令执行电路发布所述指令用于执行,并且在所述指令具有第二类型标记时向所述第二指令执行电路发布所述指令用于执行,
其中具有所述第一类型标记的指令和具有所述第二类型标记的指令源自所述有序序列,
其中在所述指令是访问相关指令时,所述指令具有所述第一类型标记,所述访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在所述指令不是访问相关指令时,所述指令具有所述第二类型标记,
其中所述数据处理装置被布置成使由所述第一指令执行电路进行的具有所述第一类型标记的指令的指令执行优先于由所述第二指令执行电路进行的具有所述第二类型标记的指令的指令执行,
并且其中所述第一指令执行电路被布置成将从存储器检索到的数据值作为具有所述第一类型标记的所述指令的执行的结果存储在所述解耦访问缓冲器中,并且所述第二指令执行电路响应于所述解耦访问缓冲器中存储有执行具有所述第二类型标记的待决指令所需的数据值:
从所述解耦访问缓冲器检索所述数据值并执行所述待决指令。
2.根据权利要求1所述的数据处理装置,还包括指令依赖性确定电路,所述指令依赖性确定电路用于当正在确定的指令是加载指令时将所述第一类型标记与所述正在确定的指令相关联,并且用于执行依赖性链确定过程,以争取找到包括所述正在确定的指令的依赖性链,其中当发现通往所述加载指令的所述依赖性链时,将所述第一类型标记与所述正在确定的指令相关联。
3.根据权利要求2所述的数据处理装置,还包括:
寄存器重命名电路,所述寄存器重命名电路包括用于存储指令中指定的架构寄存器和用于保持数据值的临时副本的物理寄存器之间的临时关联性的重命名表,
其中所述指令依赖性确定电路被布置成使用所述重命名表的所述内容执行所述依赖性链确定过程。
4.根据权利要求2或权利要求3所述的数据处理装置,还包括:
解码电路,所述解码电路用于接收所述有序指令序列并执行解码操作,其中至少一些解码操作导致指令被分成多于一个微操作定义,其中所述微操作定义由所述发布电路接收;和
微操作高速缓存,所述微操作高速缓存用于接收并暂时存储由所述发布电路发布的所述微操作定义,使得能够免除由于导出所述微操作定义的指令的再一次出现而进行的解码,
其中所述指令依赖性确定电路被布置成使用所述微操作高速缓存的所述内容执行所述依赖性链确定过程。
5.根据权利要求1或权利要求2所述的数据处理装置,还包括解码电路,所述解码电路用于接收所述有序指令序列并执行解码操作,其中所述解码电路响应于所述有序指令序列中的指令类型分类指令,根据所述指令类型分类指令中针对所述有序指令序列的子集指定的标记类型定义将所述第一类型标记和所述第二类型标记中的一者与所述子集中的每个指令相关联。
6.根据任一前述权利要求所述的数据处理装置,其中在由所述第一执行电路进行的第一类型指令执行正在进行时,所述第二指令执行电路能够进入非活动状态,在所述非活动状态下,不发生第二类型指令执行。
7.根据权利要求6所述的数据处理装置,其中所述第二指令执行电路响应于来自所述第一指令执行电路的激活信号,退出所述非活动状态并继续进行第二类型指令执行。
8.根据权利要求7所述的数据处理装置,其中所述第一指令执行电路响应于所述解耦访问缓冲器的占用,向所述第二指令执行电路发布所述激活信号。
9.根据权利要求8所述的数据处理装置,其中所述第一指令执行电路响应于所述解耦访问缓冲器的所述占用高于阈值占用,向所述第二指令执行电路发布所述激活信号。
10.根据任一前述权利要求所述的数据处理装置,其中所述第二指令执行电路包括执行高速缓存,所述执行高速缓存用于存储在指令执行开始之前由所述发布电路向所述第二指令执行电路发布的指令。
11.根据任一前述权利要求所述的数据处理装置,其中所述第二指令执行电路包括预留站电路,所述预留站电路用于支持用于乱序指令执行的寄存器重命名操作,其中所述预留站电路被布置成从所述解耦访问缓冲器接收所述数据值。
12.根据任一前述权利要求所述的数据处理装置,其中所述第二指令执行电路包括暂时保持包括将被存储到存储器的数据值的条目的存储单元,并且所述装置被布置成识别所述解耦访问缓冲器中的条目,其中通过执行的加载指令加载所述条目的所述数据值的所述条目的加载地址与所述存储单元中的条目的用于正被执行的存储指令的存储地址匹配;并且被布置成当所述存储指令在所述有序指令序列中在所述加载指令之前时确定冲突条件为真。
13.根据权利要求12所述的数据处理装置,其中所述装置响应于所述冲突条件,使得所述第一指令执行电路和所述第二指令执行电路中来自所述有序指令序列的所述加载指令和任何随后的指令被刷新。
14.根据权利要求12所述的数据处理装置,其中所述装置响应于所述冲突条件,使得所述第一指令执行电路和所述第二指令执行电路中来自所述有序指令序列的所述加载指令和直接或间接依赖于所述加载指令的任何随后的指令被刷新。
15.一种数据处理方法,所述数据处理方法包括:
相对于有序指令序列发布指令用于乱序执行;
响应于与指令相关联的类型标记,在所述指令具有第一类型标记时向第一指令执行电路发布所述指令用于执行,并且在所述指令具有第二类型标记时向第二指令执行电路发布所述指令用于执行,
其中具有所述第一类型标记的指令和具有所述第二类型标记的指令源自所述有序序列,
其中在所述指令是访问相关指令时,所述指令具有所述第一类型标记,所述访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在所述指令不是访问相关指令时,所述指令具有所述第二类型标记;
使由所述第一指令执行电路进行的具有所述第一类型标记的指令的指令执行优先于由所述第二指令执行电路进行的具有所述第二类型标记的指令的指令执行;
将从存储器检索到的数据值作为由所述第一指令执行电路进行的具有所述第一类型标记的所述指令的执行的结果存储在解耦访问缓冲器中;
响应于所述解耦访问缓冲器中存储有执行具有所述第二类型标记的待决指令所需的数据值,从所述解耦访问缓冲器中为所述第二指令执行电路检索所述数据值并在所述第二指令执行电路中执行所述待决指令。
16.一种数据处理装置,所述数据处理装置包括:
用于相对于有序指令序列发布指令用于乱序执行的装置;
用于指令执行的第一装置和用于指令执行的第二装置;
解耦访问缓冲装置;
响应于与指令相关联的类型标记,用于在所述指令具有第一类型标记时向所述用于指令执行的第一装置发布所述指令以用于执行的装置,以及用于在所述指令具有第二类型标记时向所述用于指令执行的第二装置发布所述指令以用于执行的装置,
其中具有所述第一类型标记的指令和具有所述第二类型标记的指令源自所述有序序列,
其中在所述指令是访问相关指令时,所述指令具有所述第一类型标记,所述访问相关指令确定用于根据存储器地址检索数据值的加载操作的至少一个特征,并且其中在所述指令不是访问相关指令时,所述指令具有所述第二类型标记;
用于进行以下操作的装置:使由所述用于指令执行的第一装置进行的具有所述第一类型标记的指令的指令执行优先于由所述用于指令执行的第二装置进行的具有所述第二类型标记的指令的指令执行;
用于进行以下操作的装置:将从存储器检索到的数据值作为由所述用于指令执行的第一装置进行的具有所述第一类型标记的所述指令的执行的结果存储在所述解耦访问缓冲装置中;
响应于所述解耦访问缓冲装置中存储有执行具有所述第二类型标记的待决指令所需的数据值,用于从所述解耦访问缓冲装置中为所述用于指令执行的第二装置检索所述数据值的装置,以及用于在所述用于指令执行的第二装置中执行所述待决指令的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP19386043.4A EP3812891A1 (en) | 2019-10-21 | 2019-10-21 | Decoupled access-execute processing |
EP19386043.4 | 2019-10-21 | ||
PCT/EP2020/079097 WO2021078630A1 (en) | 2019-10-21 | 2020-10-15 | Decoupled access-execute processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114600080A true CN114600080A (zh) | 2022-06-07 |
Family
ID=68581729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080073386.2A Pending CN114600080A (zh) | 2019-10-21 | 2020-10-15 | 解耦访问执行处理 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3812891A1 (zh) |
CN (1) | CN114600080A (zh) |
WO (1) | WO2021078630A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11567767B2 (en) | 2020-07-30 | 2023-01-31 | Marvell Asia Pte, Ltd. | Method and apparatus for front end gather/scatter memory coalescing |
US20220374237A1 (en) * | 2021-05-21 | 2022-11-24 | Telefonaktiebolaget Lm Ericsson (Publ) | Apparatus and method for identifying and prioritizing certain instructions in a microprocessor instruction pipeline |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6615338B1 (en) * | 1998-12-03 | 2003-09-02 | Sun Microsystems, Inc. | Clustered architecture in a VLIW processor |
GB2510655B (en) * | 2013-07-31 | 2015-02-25 | Imagination Tech Ltd | Prioritizing instructions based on type |
-
2019
- 2019-10-21 EP EP19386043.4A patent/EP3812891A1/en active Pending
-
2020
- 2020-10-15 WO PCT/EP2020/079097 patent/WO2021078630A1/en active Application Filing
- 2020-10-15 CN CN202080073386.2A patent/CN114600080A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220391214A1 (en) | 2022-12-08 |
WO2021078630A1 (en) | 2021-04-29 |
EP3812891A1 (en) | 2021-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10073698B2 (en) | Pipelined processor with multi-issue microcode unit having local branch decoder | |
US8069336B2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
US7003629B1 (en) | System and method of identifying liveness groups within traces stored in a trace cache | |
JP3798404B2 (ja) | 2レベルの分岐予測キャッシュによる分岐予測 | |
US7213126B1 (en) | Method and processor including logic for storing traces within a trace cache | |
US11194581B2 (en) | Controlling the operation of a decoupled access-execute processor | |
KR100993018B1 (ko) | 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법 | |
US9891915B2 (en) | Method and apparatus to increase the speed of the load access and data return speed path using early lower address bits | |
US20080086623A1 (en) | Strongly-ordered processor with early store retirement | |
JP2015228237A (ja) | アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア比較ハザードの予測及び回避 | |
KR100698493B1 (ko) | 좁은 피연산자들에서 계산을 수행하는 방법 및 장치 | |
US6360314B1 (en) | Data cache having store queue bypass for out-of-order instruction execution and method for same | |
US20200192800A1 (en) | An apparatus and method for managing capability metadata | |
CN114600080A (zh) | 解耦访问执行处理 | |
KR101123378B1 (ko) | 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼 | |
US20080065834A1 (en) | Method to Prevent Operand Data with No Locality from Polluting the Data Cache | |
US11163581B2 (en) | Online instruction tagging | |
US11899940B2 (en) | Apparatus and method for handling memory load requests | |
US7694110B1 (en) | System and method of implementing microcode operations as subroutines | |
US9342303B2 (en) | Modified execution using context sensitive auxiliary code | |
TWI793739B (zh) | 推測分支模式更新方法和微處理器 | |
US5841999A (en) | Information handling system having a register remap structure using a content addressable table | |
US9348598B2 (en) | Data processing apparatus and method for pre-decoding instructions to be executed by processing circuitry | |
US12001845B2 (en) | Decoupled access-execute processing | |
US7555633B1 (en) | Instruction cache prefetch based on trace cache eviction |
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 |