CN112596790B - 执行访存微指令的方法和装置 - Google Patents
执行访存微指令的方法和装置 Download PDFInfo
- Publication number
- CN112596790B CN112596790B CN202011450782.0A CN202011450782A CN112596790B CN 112596790 B CN112596790 B CN 112596790B CN 202011450782 A CN202011450782 A CN 202011450782A CN 112596790 B CN112596790 B CN 112596790B
- Authority
- CN
- China
- Prior art keywords
- access
- micro instruction
- microinstruction
- memory
- address range
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 81
- 230000004044 response Effects 0.000 claims description 35
- 230000007958 sleep Effects 0.000 claims description 21
- 238000003860 storage Methods 0.000 claims description 4
- 108010001267 Protein Subunits Proteins 0.000 claims 1
- 230000000694 effects Effects 0.000 abstract description 5
- 238000005457 optimization Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 10
- 230000009191 jumping Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000004519 manufacturing process 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种执行访存微指令的方法和装置。该执行访存微指令的方法,包括:获取第一访存微指令和第二访存微指令;确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段;通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。该执行访存微指令的方法和装置可以提高访存流水线的带宽,加速访存微指令的执行过程,并且具有较大的优化效果。
Description
技术领域
本公开的实施例涉及一种执行访存微指令的方法和装置。
背景技术
当前的核心微架构计算每条访存微指令所访问的地址范围,并根据所计算的地址范围通过一次访存流水线执行一条访存微指令的方式来执行访存微指令。
发明内容
本公开至少一实施例提供一种执行访存微指令的方法,包括:获取第一访存微指令和第二访存微指令;确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段;通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,包括:获取第一访存地址范围和第二访存地址范围;响应于第一访存地址范围和第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,获取第一访存地址范围和第二访存地址范围,包括:获取第一访存微指令对应的地址输入信息,为第一访存微指令创建第一追踪表项,使得第一追踪表项包括第一访存微指令对应的地址输入信息;获取第二访存微指令对应的地址输入信息,使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项,并且响应于第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项,输出第二访存微指令对应的命中信息;获取第一访存微指令对应的访存调度队列信息,并且响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息;根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围,根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,获取第一访存微指令对应的地址输入信息包括:获取第一访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号,偏移量可以包括偏移量高位和块偏移;使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项包括:使用第二访存微指令对应的读写标识、比例、索引、基址和偏移量高位查找第一追踪表项;输出第二访存微指令对应的命中信息包括:输出第二访存微指令对应的命中标识、块偏移差值和微指令编号。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,获取第一访存微指令对应的访存调度队列信息,并且响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息包括:为第一访存微指令创建第一访存表项,使得第一访存表项包括第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,使得第一访存表项还包括与第二访存微指令相关的附加信息;查询第一访存表项,以获取第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,获取第一访存微指令对应的访存调度队列信息包括:获取第一访存微指令对应的访存首地址、访存粒度和完成标识;响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息包括:响应于接收到第二访存微指令对应的命中信息,获取第二访存微指令对应的块偏移差值、访存粒度和完成标识。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围包括:根据第一访存微指令对应的访存首地址和访存粒度确定第一访存地址范围;根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围,包括:根据第一访存微指令对应的访存首地址和第二访存微指令对应的块偏移差值、访存粒度确定第二访存地址范围。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作包括:通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,第一次访存流水线包括一次读流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为读操作,通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作包括:通过执行一次读流水线,实现对第一访存地址范围的读操作,并实现对第二访存地址范围的读操作。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,第一次访存流水线包括一次写完成流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为写完成操作,通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作包括:通过执行一次写完成流水线,实现对第一访存地址范围的写完成操作,并实现对第二访存地址范围的写完成操作。
例如,本公开至少一实施例提供的执行访存微指令的方法还包括:在完成对第一访存地址范围的访存操作后,删除第一追踪表项。
例如,本公开至少一实施例提供的执行访存微指令的方法还包括:为第二访存微指令创建第二访存表项,使得第二访存表项包括第二访存微指令对应的访存调度队列信息,并在完成对第二访存地址范围的访存操作后,保留第二访存表项,响应于第二访存表项被挑选,检查对第二访存地址范围的访存操作是否正确,并且响应于对第二访存地址范围的访存操作正确,删除第二访存表项,响应于对第二访存地址范围的访存操作错误,重新执行第二访存微指令。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,与第一访存微指令相关的操作为设置第一访存微指令在访存调度队列中的状态,与第二访存微指令相关的操作为设置第二访存微指令在访存调度队列中的状态,通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作包括:通过执行第一次访存流水线,设置第一访存微指令在访存调度队列中的状态为睡眠状态,并设置第二访存微指令在访存调度队列中的状态为睡眠状态。
例如,本公开至少一实施例提供的执行访存微指令的方法还包括:确定第一访存地址范围和第二访存地址范围不在相同的数据缓存地址段内;通过执行第一次访存流水线,实现与第一访存微指令相关的操作;通过执行第二次访存流水线,实现与第二访存微指令相关的操作。
例如,在本公开至少一实施例提供的执行访存微指令的方法中,确定第一访存地址范围和第二访存地址范围不在相同的数据缓存地址段内,通过执行第二次访存流水线,实现与第二访存微指令相关的操作包括:响应于第二访存微指令对应的地址输入信息的至少一部分未命中第一追踪表项,为第二访存微指令创建第二追踪表项,使得第二追踪表项包括第二访存微指令对应的地址输入信息;获取第三访存微指令;获取第三访存微指令的地址输入信息;使用第三访存微指令的地址输入信息的至少一部分查找第二追踪表项,并且响应于第三访存微指令的地址输入信息的至少一部分命中第二追踪表项,输出第三访存微指令对应的命中信息;获取第二访存微指令对应的访存调度队列信息;响应于接收到第三访存微指令对应的命中信息,获取与第三访存微指令相关的附加信息;根据第二访存微指令对应的访存调度队列信息确定第二访存地址范围,根据第二访存微指令对应的访存调度队列信息和与第三访存微指令相关的附加信息确定第三访存地址范围;确定第二访存地址范围和第三访存地址范围在相同的数据缓存地址段内;通过执行第二次访存流水线,实现与第二访存微指令相关的操作,并实现与第三访存微指令相关的操作,与第二访存微指令相关的操作的类型和与第三访存微指令相关的操作的类型相同。
例如,本公开至少一实施例提供的执行访存微指令的方法还包括:获取第四访存微指令;确定第四访存微指令所访问的第四访存地址范围和第一访存地址范围在相同的数据缓存地址段内;通过执行第一次访存流水线,实现与第四访存微指令相关的操作,与第四访存微指令相关的操作的类型和与第一访存微指令相关的操作的类型相同。
本公开至少一实施例还提供一种执行访存微指令的装置,包括:第一单元、第二单元和第三单元,第一单元被配置为:获取第一访存微指令和第二访存微指令;第二单元被配置为:确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段;第三单元被配置为:通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元被配置为:获取第一访存地址范围和第二访存地址范围;响应于第一访存地址范围和第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元包括第一子单元和第二子单元,第一子单元被配置为:获取第一访存微指令的地址输入信息;为第一访存微指令创建第一追踪表项,使得第一追踪表项包括第一访存微指令的地址输入信息;获取第二访存微指令对应的地址输入信息;使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项,并且响应于第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项,输出第二访存微指令对应的命中信息;第二子单元被配置为:获取第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息;根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围,根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二子单元被配置为:为第一访存微指令创建第一访存表项,使得第一访存表项包括第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,使得第一访存表项还包括与第二访存微指令相关的附加信息;查询第一访存表项,以获取第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第三单元被配置为:通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作同。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一次访存流水线包括一次读流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为读操作,第三单元被配置为:通过执行一次读流水线,实现对第一访存地址范围的读操作,并实现对第二访存地址范围的读操作。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一次访存流水线包括一次写完成流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为写完成操作,第三单元被配置为:通过执行一次写完成流水线,实现对第一访存地址范围的写完成操作,并实现对第二访存地址范围的写完成操作。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,与第一访存微指令相关的操作为设置第一访存微指令在访存调度队列中的状态,与第二访存微指令相关的操作为设置第二访存微指令在访存调度队列中的状态,第三单元被配置为:通过执行第一次访存流水线,设置第一访存微指令在访存调度队列中的状态为睡眠状态,并设置第二访存微指令在访存调度队列中的状态为睡眠状态。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元还被配置为:确定第一访存地址范围和第二访存地址范围不在相同的数据缓存地址段内;第三单元还被配置为:通过执行第一次访存流水线,实现与第一访存微指令相关的操作;通过执行第二次访存流水线,实现与第二访存微指令相关的操作。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一单元还被配置为:获取第四访存微指令;第二单元还被配置为:确定第四访存微指令所访问的第四访存地址范围和第一访存地址范围在相同的数据缓存地址段内;第三单元还被配置为:通过执行第一次访存流水线,实现与第四访存微指令相关的操作,与第四访存微指令相关的操作的类型和与第一访存微指令相关的操作的类型相同。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1图示了一种核心微架构的示意图;
图2图示了一种访存单元的具体结构的示意图;
图3为本公开至少一实施例提供的一种执行访存微指令的方法的流程图;
图4图示了包括一系列邻近的访存微指令的表格;
图5为本公开至少一实施例提供的执行访存微指令的方法的一个示例的流程图;
图6A图示了包括多个追踪表项的表格的一个示例;
图6B图示了包括偏移量高位和块偏移的偏移量的一个示例;
图7为本公开至少一实施例提供的执行访存微指令的方法的一个示例的流程图;
图8为本公开至少一实施例提供的执行访存微指令的方法的一个示例的流程图;
图9为本公开至少一实施例提供的执行访存微指令的方法的一个示例的流程图;
图10为本公开至少一实施例提供的执行访存微指令的方法的一个示例的流程图;
图11为本公开至少一实施例提供的一种执行访存微指令的装置的示意框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
例如,图1图示了一种核心(core)微架构的示意图。如图1所示,图1所示的核心微架构包括:取指单元10、译码单元20、分配单元30、定点执行单元40、浮点执行单元50、访存单元60,其中,定点执行单元40包括:定点重命名单元41、算术和逻辑运算单元(ArithmeticLogical Unit,ALU)调度队列42、虚拟地址计算单元(Address Generation Unit,AGU)调度队列43、定点物理寄存器堆44、ALU 45和AGU 46,浮点执行单元50包括:浮点重命名单元51、浮点计算单元(Floating Point Unit,FPU)调度队列52、浮点物理寄存器堆53和FPU 54。
在图1所示的核心微架构中,取指单元10配置为与一级(Level 1,L1)指令缓存交互,从L1指令缓存取出指令并将所取出的指令交给译码单元20。译码单元20配置为对输入的指令进行译码,产生微指令并将所产生的微指令发送给分配单元30。分配单元30根据微指令类别,将微指令分配给不同的调度队列,例如,如果微指令为定点计算操作,则将微指令发送给ALU调度队列42;例如,如果微指令为浮点计算操作,则将微指令发送给FPU调度队列52;例如,如果微指令为访存操作,则:将微指令发送给AGU调度队列43以进行虚拟地址计算,发送给访存单元60以进行虚拟地址计算后的访存操作,在定点写操作的情况下发送给ALU调度队列42以用于产生写的源操作数,在浮点写操作的情况下发送给FPU调度队列52以用于产生写的源操作数。定点重命名单元41和浮点重命名单元51配置为在微指令写入调度队列之前,对源寄存器和目的寄存器进行重命名操作。ALU调度队列42、AGU调度队列43和FPU调度队列52对所有接收到的微指令进行排队和乱序调度,并从中挑选出可执行的微指令进行发射,发射出的微指令从定点寄存器堆44或浮点物理寄存器堆53中读出源,然后由对应的执行单元进行执行。ALU 45配置为执行定点计算微指令和定点写微指令,例如,对于定点计算微指令,执行结果写回定点物理寄存器堆44;例如,对于定点写微指令,执行结果发送给访存单元60。AGU 46配置为执行访存微指令的虚拟地址计算,执行结果(即虚拟地址)发送给访存单元60。FPU 54配置为执行浮点计算微指令和浮点写微指令,例如,对于浮点计算微指令,执行结果写回浮点物理寄存器堆53;例如,对于浮点写微操作,执行结果发送给访存单元60。访存单元60配置为接收分配单元30发送的微指令并进行排队和调度执行,例如,接收AGU 45产生的虚拟地址,然后与一级(Level 1,L1)数据缓存交互;例如,接收ALU 45或FPU 54产生的写数据,进行写微指令的后续执行;例如,发送读微指令的结果(读数据)给定点执行单元40或浮点执行单元50。需要说明的是,现代高性能处理器通常乱序执行顺序提交,微指令在分配/重命名之前都是按序的。重排缓冲器(Reorder Buffer,ROB)是一个记录微指令状态信息的表,每个表项对应一个微指令。通常在分配阶段会按序分配ROB表项,然后当该微指令完成时,会更新其在ROB中的状态,比如定点微指令,由ALU 45执行完成后向ROB发送完成指示,浮点微指令由FPU 54执行完成后向ROB发送完成指示,访存微指令由访存单元60执行完成后向ROB发送完成指示。只有处于ROB头部且已完成的微指令才可以提交,从而实现按序提交。
例如,图2是图1所示的访存单元的具体结构的示意图。如图2所示,访存单元60包括:读调度队列61、写调度队列62、读流水线63、写完成流水线64、写提交流水线65、地址变换高速缓存(Translation Look-aside Buffer,TLB)66和L1数据缓存67。
在图2所示的访存单元中,读调度队列61配置为接收分配单元30发送的读微指令,接收AGU 46产生的读微指令的虚拟地址,并配置为对读微指令进行排队和调度,挑选出虚拟地址准备好的微指令,发送给读流水线63。写调度队列62配置为接收分配单元30发送的写微指令,接收AGU 46产生的写微指令的虚拟地址,接收ALU 45或FPU 54发送的写数据,并配置为对写微指令进行排队和调度,挑选出虚拟地址准备好的微指令(即待完成微指令),发送给写完成流水线64,挑选出最老的(oldest)可以提交的微指令(即待提交微指令),发送给写提交流水线65。读流水线63配置为执行从读调度队列61中挑选出的微指令,使用物理地址(如果只有虚拟地址准备好,则访问TLB,得到物理地址;如果物理地址已经准备好,则跳过TLB访问)访问L1数据缓存,如果命中,则返回读数据给定点执行单元40或浮点执行单元50;如果缺失,则由L1数据缓存把读请求发送给下一级缓存,并且将该读微指令的状态(包括物理地址)写回读到调度队列61,进行睡眠。写完成流水线64配置为执行从写调度队列62中挑选出的待完成微指令,使用物理地址(如果只有虚拟地址准备好,则访问TLB,得到物理地址;如果物理地址已经准备好,则跳过TLB访问)访问L1数据缓存,如果命中,则返回完成信号给定点执行单元40或浮点执行单元50;如果缺失,则由L1数据缓存把写请求发送给下一级缓存,并且将该写微指令的状态(包括物理地址)写回写调度队列62,进行睡眠。写提交流水线65配置为执行从写调度队列62中挑选出的待提交微指令,使用物理地址访问L1数据缓存,如果命中,则把写数据写入L1数据缓存;如果缺失,则由L1数据缓存把写请求发送给下一级缓存,并且将该写微指令的状态写回写调度队列,进行睡眠。
例如,在一些改进技术方案中,在分配单元中增加地址追踪单元,在读微指令和写微指令所访问的访存地址范围完全一致时,可以直接将写微指令的写数据旁路给读微指令作为读数据,从而不需要由访存单元访问L1数据缓存返回读数据,加速了读微指令执行过程。然而,一方面,上述改进技术方案仅适用于读微指令和写微指令所访问的访存地址范围完全一致的情况,而这种情况实际中比较少见;另一方面,上述改进技术方案仅可以加速读微指令的执行,而无法加速写微指令的执行,因此,上述现有的改进技术方案对微指令执行过程的加速效果有限。
本公开至少一实施例提供一种执行访存微指令的方法,包括:获取第一访存微指令和第二访存微指令;确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段;通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。
本公开至少一实施例还提供对应于上述执行访存微指令的方法的装置。
在本公开实施例提供的上述执行访存微指令的方法和装置中,通过确定多个访存微指令所访问的访存地址范围在相同的数据缓存地址段内,可以在一次访存流水线中实现与上述多个访存微指令相关的操作,从而提高访存流水线的带宽,加速访存微指令的执行过程,并且,由于邻近的访存微指令所访问的访存地址范围大概率邻近,所以本公开实施例提供的上述执行访存微指令的方法和装置具有更大的性能提升效果。
例如,图3为本公开至少一实施例提供的一种执行访存微指令的方法的流程图。该执行访存微指令的方法可以借助硬件、固件或其任意组合的方式实现。如图3所示,该执行访存微指令的方法包括步骤S110、步骤S120和步骤S130。
步骤S110:获取第一访存微指令和第二访存微指令。
步骤S120:确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段。
步骤S130:通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。
对于步骤S110,获取要执行的访存微指令。例如,所获取的第一访存微指令和第二访存微指令可以是图1中所示的译码单元20所产生的访存微指令。
例如,所获取的第一访存微指令和第二访存微指令可以是邻近的访存微指令,在这种情况下,第一访存微指令所访问的访存地址范围和第二访存微指令所访问的访存地址范围大概率是邻近的。
例如,图4图示了包括一系列邻近的访存微指令的表格,表格的第一列为访存微指令地址,表格的第二列为访存微指令的反汇编,表格的第三列为访存微指令在一亿条访存微指令中出现的频次。例如,可以根据图4所示的表格中的信息基于以下间接寻址计算公式来计算访存微指令访存首地址:基址+比例*索引+偏移量。在图4中,访存微指令的反汇编的方括号内的参量为计算访存首地址的输入,例如,rsi为基址,比例和索引均为0,0xfffffffffffff0为偏移量。如图4所示,邻近的访存微指令的访存首地址的输入有很大概率基址、比例和索引均相同,仅偏移量存在差别,即使用间接寻址计算公式计算出的访存微指令访存首地址邻近。因此,邻近的访存微指令所访问的访存地址大概率邻近,这使得应用本公开所提供的执行访存微指令的方法时,可以具有较大的优化效果。
需要说明的是,图4所示的表格仅是示例性的,而非对本公开的限制。实际上,本公开各实施例所提供的执行访存微指令的方法不限于邻近的访存微指令,也可以应用于非邻近的访存微指令。
还需要说明的是,图4所示的间接寻址计算方式仅是示例性的,而非对本公开的限制。实际上,也可以采用其他参量以及其他的间接寻址计算公式来计算访存微指令访存首地址。但是,为了描述清楚、一致,本公开的各实施例均以(基址+比例*索引+偏移量)的间接寻址计算公式为例进行说明,以下不再赘述。
对于步骤S120,确定访存微指令所访问的地址范围在相同的数据缓存地址段内。例如,数据缓存地址段可以是执行图2中所示的一次访存流水线(例如,读流水线63或写完成流水线64)所访问的L1数据缓存67的地址段。
例如,在本公开的一些实施例中,步骤S120可以包括步骤S121和步骤S122。
步骤S121:获取第一访存地址范围和第二访存地址范围。
步骤S122:响应于第一访存地址范围和第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内。
例如,图5图示了步骤S121的一个具体示例的流程图。在图5所示的示例中,步骤S121可以包括步骤S121-a至S121-d。在步骤S121-a处,获取第一访存微指令对应的地址输入信息,为第一访存微指令创建第一追踪表项,使得第一追踪表项包括第一访存微指令对应的地址输入信息。在步骤S121-b处,获取第二访存微指令对应的地址输入信息,使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项,并且响应于第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项,输出第二访存微指令对应的命中信息。在步骤S121-c处,获取第一访存微指令对应的访存调度队列信息,并且响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息。在步骤S121-d处,根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围,根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围。
例如,在步骤S121-a处,获取第一访存微指令对应的地址输入信息包括:获取第一访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号,其中,偏移量可以包括偏移量高位和块偏移。第一访存微指令对应的地址输入信息包括第一访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号。需要说明的是,在本公开的各实施例中,读写标识旨在说明访存微指令的类型,例如,指明一条访存微指令是读微指令还是写微指令;微指令编号旨在唯一标识该微指令;偏移量高位旨在用于进行第一访存地址范围和第二访存地址范围的初步匹配;块偏移旨在用于计算第二访存微指令相对于第一访存微指令的块偏移差值,以进行第一访存地址范围和第二访存地址范围的进一步匹配。
例如,在步骤S121-a处,为第一访存微指令创建第一追踪表项,使得第一追踪表项包括第一访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号,其中,偏移量可以包括偏移量高位和块偏移。例如,所创建的第一追踪表项支持插入、查找、删除等操作。例如,插入即将第一访存微指令的读写标识、比例、索引、基址、偏移量高位、块偏移和微指令标号插入多个追踪表项对应的表格以得到第一追踪表项,如果第一访存微指令计算对应的访存首地址不使用某一部分地址输入信息,则将该部分地址输入信息设置为零。例如,查找即允许使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项以得到第二访存微指令对应的命中信息。例如,删除即允许删除该第一追踪表项。
例如,图6A图示了包括多个追踪表项的表格的一个示例。在图6A所示的示例中,例如,读写标识等于0指示所对应的访存微指令为写微指令,读写标识等于1指示所对应的访存微指令为读微指令;例如,比例的取值范围为0/1/2/4/8;例如,索引和基址的取值范围为16个架构寄存器(Architectural Register);例如,偏移量高位的取值范围为-231~+231。需要说明的是,图6A中所示的各参量的取值范围仅是示例性的,而不是对本公开的限制,实际中,各参量的取值范围可以依据指令集架构和核心微架构决定。还需要说明的是,在本公开的各实施例中,若计算访存微指令访存首地址不需要使用基址、比例、索引、偏移量中的一个或多个参量,则追踪表项中可以将该一个或多个不需要使用的参量设置为零。
例如,图6B图示了包括偏移量高位和块偏移的偏移量的一个示例。在图6B所示的示例中,偏移量具有32位,块偏移为偏移量的低6位(即,[5:0]位),偏移量高位为偏移量的高26位(即,[31:6]位)。需要说明的是,上述偏移量、偏移量高位和块偏移的位数仅是示例性的,而非对本公开的限制。需说明的是,在本公开的各实施例中,可以根据实际情况调整偏移量高位和块偏移的位数,例如,块偏移的位数可以等于执行一次访存流水线所访问的数据缓存的宽度,又例如,块偏移的位数可以小于执行一次访存流水线所访问的数据缓存的宽度。还需要说明的是,在访存流水线中,读流水线一次访问L1数据缓存的宽度和写完成流水线一次访问L1数据缓存的宽度可以不同。例如,在读流水线一次访问L1数据缓存的宽度为32字节的情况下,块偏移可以由5位表示;例如,在写完成流水线一次访问L1数据缓存的宽度为64字节的情况下,块偏移可以由6位表示。
例如,在步骤S121-b处,获取第二访存微指令对应的地址输入信息包括:获取第二访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号,其中,偏移量可以包括偏移量高位和块偏移。第二访存微指令对应的地址输入信息包括第二访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号。
例如,在步骤S121-b处,使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项包括:使用第二访存微指令对应的读写标识、比例、索引、基址和偏移量高位查找第一追踪表项;输出第二访存微指令对应的命中信息包括:输出第二访存微指令对应的命中标识、块偏移差值和微指令编号。需要说明的是,在本公开的各实施例中,命中标识旨在说明第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项,块偏移差值旨在给出第二访存微指令对应的块偏移与第一访存微指令对应的块偏移之间的差。还需要说明的是,在本公开的各实施例中,第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项表示第二访存微指令对应的地址输入信息的至少一部分与第一追踪表项中写的第一访存微指令对应的地址输入信息的相应部分相同,例如,第二访存微指令对应的读写标识、比例、索引、基址和偏移量高位分别与第一访存微指令对应的读写标识、比例、索引、基址和偏移量高位相同。
因此,在本公开的各实施例中,不需要第一访存微指令和第二访存微指令对应的比例、索引、基址、偏移量完全一致,即不需要第一访存微指令和第二访存微指令对应的访存首地址完全一致。例如,本公开提供的执行访存微指令的方法可以允许第一访存微指令和第二访存微指令的比例、索引和基址完全一致,但偏移量不同,例如,第一访存微指令和第二访存微指令的偏移量高位相同,但是第一访存微指令和第二访存微指令的块偏移量不同。例如,本公开提供的执行访存微指令的方法可以允许第一访存微指令和第二访存微指令的比例、索引和基址完全一致,但偏移量邻近,使得通过间接寻址计算公式计算出的第一访存微指令和第二访存微指令对应的访存首地址在相同的数据缓存地址段内。
需要说明的是,在本公开的各实施例中,第一追踪表项需要写有第一访存微指令对应的读写标识以说明第一访存微指令的类型,在步骤S121-b中,需要第二访存微指令对应的读写标识与第一访存微指令对应的读写标识一致,即第一访存微指令的类型和第二访存微指令的类型相同。例如,第一访存微指令和第二访存微指令均为读微指令,又例如,第一访存微指令和第二访存微指令均为写微指令。因此,本公开所提供的执行访存微指令的方法既可以应用于写微指令也可以应用于读微指令,而仅需要第一访存微指令的类型和第二访存微指令的类型相同,这相对于现有的技术方案可以大幅度地加速访存微指令的执行。
还需要说明的是,在本公开的一些实施例中,在创建第一追踪表项并使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项的同时,可以检查分配单元所获取的所有微指令的微指令集合,微指令集合包括第一访存微指令、第二访存微指令和其他微指令,并且如果微指令集合中的任意一条微指令的目的寄存器在第一追踪表项的基址和索引中出现,则删除第一追踪表项。因为,在这种情况下,基址和索引对应的寄存器内容被更改,即使后续的微指令的基址和索引与第一追踪表项中的基址和索引分别相同,计算出的访存首地址也无法保证邻近。例如,微指令集合中存在加微指令“add R1,R2”,该加微指令指示的计算为R1+R2=>R1,其中R1和R2为源寄存器,R1也为目的寄存器,该加微指令执行完毕后将结果写入目的寄存器,该目的寄存器写的内容被更改。又例如,第一访存微指令为读微指令“load[rax]->rbx”,第二访存微指令为读微指令“load[rax+0x8]-->rax”,在第二访存微指令命中第一访存微指令后,由于第二访存微指令的目的寄存器rax与第一访存微指令的基址rax相同,写基址的寄存器的内容被更改。
例如,在步骤S121-c处,获取第一访存微指令对应的访存调度队列信息,并且响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息包括:为第一访存微指令创建第一访存表项,使得第一访存表项包括第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,使得第一访存表项还包括与第二访存微指令相关的附加信息;查询第一访存表项,以获取第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息。
例如,获取第一访存微指令对应的访存调度队列信息包括:获取第一访存微指令对应的访存首地址、访存粒度和完成标识。第一访存微指令对应的访存调度队列信息包括第一访存微指令对应的访存首地址、访存粒度和完成标识。
例如,响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息包括:响应于接收到第二访存微指令对应的命中信息,获取第二访存微指令对应的块偏移差值、访存粒度和完成标识。与第二访存微指令相关的附加信息包括第二访存微指令对应的块偏移差值、访存粒度和完成标识。
需要说明的是,在本公开的各实施例中,访存首地址旨在给出访存微指令所访问的访存地址范围的首地址;访存粒度旨在给出访存微指令从访存首地址开始访存的字节的数目;完成标识意指用于通知完成的标识,例如对于读微指令,完成标识可以是目的寄存器的物理寄存器编号,例如对于写微指令,完成标识可以是重排缓冲器(Reorder Buffer,ROB)编号。
还需要说明的是,上述访存调度队列信息还可以包括其他的信息,例如有效位、状态信息等,本公开的各实施例对此不作限制。
因此,在公开的各实施例中,并未改变访存微指令所被分配到的调度队列,仅是在第一访存微指令的第一访存表项中添加了与第二访存微指令相关的附加信息。
例如,在步骤S121-d处,根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围包括:根据第一访存微指令对应的访存首地址和访存粒度确定第一访存地址范围;根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围,包括:根据第一访存微指令对应的访存首地址和第二访存微指令对应的块偏移差值、访存粒度确定第二访存地址范围。例如,第一访存微指令对应的访存首地址为32且访存粒度为8字节,则第一访存微指令所访问的第一访存地址范围为第32至39字节;第一访存微指令对应的访存首地址为32,第二访存微指令对应的块偏移差值为16且访存粒度为8字节,则第二访存微指令所访问的第二访存地址范围为第48至55字节。
例如,在步骤S122处,执行一次访存流水线所访问的地址段的宽度为64字节,则数据缓存地址段可以为第0至63字节、第64至127字节等数地址段。例如,在第一访存地址范围为第32至39字节、第二访存地址范围为第48至55字节的情况下,第一访存地址范围和第二访存地址范围均在第0至63字节的地址段内,因此,可以确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内。
对于步骤S130,在确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内的情况下,可以仅通过一次访存流水线实现与第一访存微指令相关的操作和与第二访存微指令相关的操作。
需要说明的是,在本公开的各实施例中,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型需要相同。
例如,在本公开的一些实施例中,步骤S130包括步骤S131。
步骤S131:通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作。
例如,第一次访存流水线包括一次读流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为读操作,通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作包括:通过执行一次读流水线,实现对第一访存地址范围的读操作,并实现对第二访存地址范围的读操作。
例如,图7图示了根据本公开各实施例的执行一次读流水线的一个示例。如图7所示,在步骤S210处,从读调度队列中挑选第一访存微指令;在步骤S220处,判断第一访存表项是否包括与第二访存微指令相关的附加信息,如果是,继续进行到步骤S230,如果否,跳转到步骤S260;在步骤S230处,获取第一访存微指令对应的访存首地址、访存粒度,获取第二访存微指令对应的块偏移差值、访存粒度,然后,基于第一访存微指令对应的访存首地址、访存粒度确定第一访存地址范围,基于第一访存微指令对应的访存首地址以及第二访存微指令对应的块偏移差值、访存粒度确定第二访存地址范围;在步骤S240处,判断第一访存地址范围和第二访存地址范围是否完全位于相同的数据缓存地址段内,如果是,继续进行到步骤S250,如果否,跳转到步骤S260;在步骤S250处,从L1数据缓存中获得第二访存微指令对应的数据,并发送第二访存微指令的完成标识;在步骤S260处,从L1数据缓存中获得第一访存微指令对应的数据,并发送第一访存微指令的完成标识。需要说明的是,在图7中,为了便于说明的目的,将对第一访存地址范围的访存操作和对第二访存地址范围的访存操作示出为了S250和S260两个步骤,但实际上,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作是在一次读流水线中同时执行的。
例如,第一次访存流水线包括一次写完成流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为写完成操作,通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作包括:通过执行一次写完成流水线,实现对第一访存地址范围的写完成操作,并实现对第二访存地址范围的写完成操作。
例如,图8图示了根据本公开各实施例的执行一次写完成流水线的一个示例。如图8所示,在步骤S310处,从写调度队列中挑选第一访存微指令;在步骤S320处,判断第一访存表项是否包括与第二访存微指令相关的附加信息,如果是,继续进行到步骤S330,如果否,跳转到步骤S360;在步骤S330处,获取第一访存微指令对应的访存首地址、访存粒度,获取第二访存微指令对应的块偏移差值、访存粒度,然后,基于第一访存微指令对应的访存首地址、访存粒度确定第一访存地址范围,基于第一访存微指令对应的访存首地址以及第二访存微指令对应的块偏移差值、访存粒度确定第二访存地址范围;在步骤S340处,判断第一访存地址范围和第二访存地址范围是否完全位于相同的数据缓存地址段内,如果是,继续进行到步骤S350,如果否,跳转到步骤S360;在步骤S350处,发送第二访存微指令的完成标识;在步骤S360处,发送第一访存微指令的完成标识。需要说明的是,在图8中,为了便于说明的目的,将发送第一访存微指令的完成标识和发送第二访存微指令的完成标识示出为了S350和S360两个步骤,但实际上,发送第一访存微指令的完成标识和发送第二访存微指令的完成标识是在一次写完成流水线中同时执行的。
例如,在本公开的一些实施例中,步骤S131还包括:在完成对第一访存地址范围的访存操作后,删除第一追踪表项。
例如,在本公开的一些实施例中,步骤S131还包括:为第二访存微指令创建第二访存表项,使得第二访存表项包括第二访存微指令对应的访存调度队列信息,并在完成对第二访存地址范围的访存操作后,保留第二访存表项,响应于第二访存表项被挑选,检查对第二访存地址范围的访存操作是否正确,并且响应于对第二访存地址范围的访存操作正确,删除第二访存表项,响应于对第二访存地址范围的访存操作错误,重新执行第二访存微指令。例如,通过产生主流水线的刷新号来重新执行第二访存微指令,该主流水线包括取指、译码、分配、执行和访存整个过程。
例如,在一些实施例中,与第一访存微指令相关的操作为设置第一访存微指令在访存调度队列中的状态,与第二访存微指令相关的操作为设置第二访存微指令在访存调度队列中的状态。
例如,在本公开的一些实施例中,步骤S130包括步骤S132。
步骤S132:通过执行第一次访存流水线,设置第一访存微指令在访存调度队列中的状态为睡眠状态,并设置第二访存微指令在访存调度队列中的状态为睡眠状态。
例如,图9图示了根据本公开各实施例的实现与访存微指令相关的操作的一个示例。如图9所示,在步骤S410处,从访存调度队列中挑选第一访存微指令;在步骤S420处,确定无法完成第一访存微指令的执行;在步骤S430处,判断第一访存表项是否包括与第二访存微指令相关的附加信息,如果是,继续进行到步骤S440,如果否,跳转到步骤S480;在步骤S440处,获取第一访存微指令对应的访存首地址、访存粒度,获取第二访存微指令对应的块偏移差值、访存粒度,然后,基于第一访存微指令对应的访存首地址、访存粒度确定第一访存地址范围,基于第一访存微指令对应的访存首地址以及第二访存微指令对应的块偏移差值、访存粒度确定第二访存地址范围;在步骤S450处,判断第一访存地址范围和第二访存地址范围是否完全位于相同的数据缓存地址段内,如果是,继续进行到步骤S460,如果否,跳转到步骤S480;在步骤S460处,判断第一访存微指令和第二访存微指令是否可以共享睡眠状态,如果是,继续进行到步骤S470,如果否,跳转到步骤S480;在步骤S470处,更新第二访存微指令在访存调度队列中的状态为对应的睡眠状态;在步骤S480处,更新第一访存微指令在访存调度队列中的状态为对应的睡眠状态。需要说明的是,在步骤S460处,是否可以共享睡眠状态取决于睡眠类别和微架构,例如,对于L1数据缓存缺失,第一访存地址范围和第二访存地址范围完全位于相同的数据缓存地址段内,则第一访存微指令和第二访存微指令可以共享睡眠状态;例如,对于第一访存微指令依赖于更前面的其他指令,这种依赖关系具有比执行一次访存微指令所访问的数据缓存地址段的宽度更细的粒度,第一访存微指令和第二访存微指令不可以共享睡眠状态。
因此,在本公开的各实施例中,通过确定第一访存微指令和第二访存微指令所访问的访存地址范围在相同的数据缓存地址段内,可以在一次访存流水线中实现与第一访存微指令和第二访存微指令相关的操作,从而提高访存流水线的带宽,加速访存微指令的执行过程。
例如,在本公开的一些实施例中,图3所示的执行访存微指令的方法还包括步骤S140。
步骤S140:确定第一访存地址范围和第二访存地址范围不在相同的数据缓存地址段内;通过执行第一次访存流水线,实现与第一访存微指令相关的操作;通过执行第二次访存流水线,实现与第二访存微指令相关的操作。
例如,在本公开实施例的一个示例中,第二访存微指令对应的地址输入信息的至少一部分可以未命中第一追踪表项,则执行访存微指令的方法还包括:响应于第二访存微指令对应的地址输入信息的至少一部分未命中第一追踪表项,为第二访存微指令创建第二追踪表项,使得第二追踪表项包括第二访存微指令对应的地址输入信息;获取第三访存微指令;获取第三访存微指令的地址输入信息;使用第三访存微指令的地址输入信息的至少一部分查找第二追踪表项,并且响应于第三访存微指令的地址输入信息的至少一部分命中第二追踪表项,输出第三访存微指令对应的命中信息;获取第二访存微指令对应的访存调度队列信息;响应于接收到第三访存微指令对应的命中信息,获取与第三访存微指令相关的附加信息;根据第二访存微指令对应的访存调度队列信息确定第二访存地址范围,根据第二访存微指令对应的访存调度队列信息和与第三访存微指令相关的附加信息确定第三访存地址范围;确定第二访存地址范围和第三访存地址范围在相同的数据缓存地址段内;通过执行第二次访存流水线,实现与第二访存微指令相关的操作,并实现与第三访存微指令相关的操作,与第二访存微指令相关的操作的类型和与第三访存微指令相关的操作的类型相同。
需要说明的是,在本示例中,确定第二访存地址范围和第三访存地址范围在相同的数据缓存地址段内,并通过执行第二次访存流水线,实现与第二访存微指令相关的操作和与第三访存微指令相关的操作,这与第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内的情况的具体执行过程类似,在此不再赘述。还需要说明的是,在本示例中,第二访存地址范围和第三访存地址范围在相同的数据缓存地址段内是示例性的,而非对本公开的限制,例如,第二访存地址范围和第三访存地址范围可以不在相同的数据缓存地址段内,此时,分别在不同的流水线中执行与第二访存微指令相关的操作和与第三访存微指令相关的操作。
例如,图10图示了使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项的一个示例。如图10所示,在步骤S510处,获取第二访存微指令;在步骤S520处,使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项;在步骤S530处,判断第二访存微指令对应的地址输入信息的至少一部分是否命中第一追踪表项,如果是,继续进行到步骤S540,如果否,跳转到步骤S550;在步骤S540处,输出第二访存微指令对应的命中信息;在步骤S550处,为第二访存微指令创建第二追踪表项,使得第二追踪表项包括第二访存微指令对应的地址输入信息;在步骤S560处,输出第二访存微指令的不命中信息。
例如,在本公开实施例的另一个示例中,第一访存地址范围和第二访存地址范围未完全位于执行一次访存流水线所访问的地址段内,例如,执行一次访存流水线所访问的地址段的宽度为64字节,在第一访存地址范围为第32至39字节、第二访存地址范围为第60至67字节的情况下,第一访存地址范围在第0至63字节的地址段内,第二访存地址范围跨越第0至63字节的地址段和第64至127字节的地址段,可以确定第一访存地址范围和第二访存地址范围未完全位于相同的数据缓存地址段内。在这种情况下,执行访存微指令的方法还包括:创建第二访存微指令的访存表项,通过执行第二次访存流水线,完成对第二访存地址范围的访存操作,并在完成对第二访存地址范围的访存操作后,删除第二访存微指令的访存表项。
例如,在本公开的一些实施例中,执行访存微指令的方法还包括:获取第四访存微指令;确定第四访存微指令所访问的第四访存地址范围和第一访存地址范围在相同的数据缓存地址段内;通过执行第一次访存流水线,实现与第四访存微指令相关的操作,与第四访存微指令相关的操作的类型和与第一访存微指令相关的操作的类型相同。
需要说明的是,在本公开的实施例中,第四访存微指令仅是示例性的,旨在说明除了第二访存微指令之外,还存在其他的访存微指令,该其他的访存微指令所访问的访存地址范围和第一访存地址范围也在相同的数据缓存地址段内,此时,在该第一次访存流水线中,还实现与其他的访存微指令相关的操作。该其他的访存微指令的数目根据具体情况而定,本公开的实施例对此不作限制。
因此,在本公开的各实施例中,通过确定访存微指令中的多个访存微指令所访问的访存地址范围在相同的数据缓存地址段内,可以在一次访存流水线中实现与上述多个访存微指令相关的操作,从而提高访存流水线的带宽,加速访存微指令的执行过程。
图11为本公开至少一实施例提供的一种执行访存微指令的装置的示意框图。例如,如图11所示,该执行访存微指令的装置包括:第一单元610、第二单元620和第三单元630。
该第一单元610被配置为获取第一访存微指令和第二访存微指令。例如,该第一单元610可以实现步骤S110,其具体实现方法可以参考步骤S110的相关描述,在此不再赘述。例如,该第一单元可以实现为图1中所示的分配单元。
该第二单元620被配置为确定第一访存微指令所访问的第一访存地址范围和第二访存微指令所访问的第二访存地址范围在相同的数据缓存地址段内,数据缓存地址段表示执行一次访存流水线所访问的地址段。例如,该第二单元620可以实现步骤S120,其具体实现方法可以参考步骤S120的相关描述,在此不再赘述。
该第三单元630被配置为通过执行第一次访存流水线,实现与第一访存微指令相关的操作,并实现与第二访存微指令相关的操作,与第一访存微指令相关的操作的类型和与第二访存微指令相关的操作的类型相同。例如,该第三单元630可以实现步骤S130,其具体实现方法可以参考步骤S130的相关描述,在此不再赘述。例如,该第三单元630可以实现为图2中所示的访存单元中的访存流水线,诸如读流水线或写完成流水线。
需要说明的是,在本公开的实施例中,使用第一单元、第二单元和第三单元仅用于根据功能区分各个单元,实际中,第一单元、第二单元和第三单元可以是相互独立的部件,也可以是集成在一起的部件,也可以是部分集成在一起的部件,本公开的实施例对第一单元、第二单元和第三单元的具体实现形式不作限制。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元620被配置为获取第一访存地址范围和第二访存地址范围;响应于第一访存地址范围和第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定第一访存地址范围和第二访存地址范围在相同的数据缓存地址段内。例如,该第二单元620可以实现步骤S121和S122,其具体实现方法可以参考步骤S121和S122的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元620包括第一子单元621和第二子单元622。
该第一子单元621被配置为获取第一访存微指令的地址输入信息;为第一访存微指令创建第一追踪表项,使得第一追踪表项包括第一访存微指令的地址输入信息;获取第二访存微指令对应的地址输入信息;使用第二访存微指令对应的地址输入信息的至少一部分查找第一追踪表项,并且响应于第二访存微指令对应的地址输入信息的至少一部分命中第一追踪表项,输出第二访存微指令对应的命中信息。例如,该第一子单元621可以实现步骤S121-a和S121-b,其具体实现方法可以参考步骤S121-a和S121-b的相关描述,在此不再赘述。例如,该第一子单元621可以实现为地址追踪单元,该地址追踪单元可以被添加到图1所示的分配单元中。
该第二子单元622被配置为获取第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,获取与第二访存微指令相关的附加信息;根据第一访存微指令对应的访存调度队列信息确定第一访存地址范围,根据第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息确定第二访存地址范围。例如,该第二子单元622可以实现步骤S121-c和S121-d,其具体实现方法可以参考步骤S121-c和S121-d的相关描述,在此不再赘述。例如,该第二子单元622可以实现为图2中所示的访存单元60中的访存调度队列,诸如读调度队列或写调度队列。
需要说明的是,在本公开的实施例中,使用第一子单元和第二子单元仅用于根据功能区分各个子单元,实际中,第一子单元和第二子单元可以是相互独立的部件,也可以是集成在一起的部件,也可以是部分集成在一起的部件,本公开的实施例对第一子单元和第二子单元的具体实现形式不作限制。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二子单元622被配置为:为第一访存微指令创建第一访存表项,使得第一访存表项包括第一访存微指令对应的访存调度队列信息;响应于接收到第二访存微指令对应的命中信息,使得第一访存表项还包括与第二访存微指令相关的附加信息;查询第一访存表项,以获取第一访存微指令对应的访存调度队列信息和与第二访存微指令相关的附加信息。例如,该第二子单元622可以实现步骤S121-c,其具体实现方法可以参考步骤S121-c的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第三单元630被配置为:通过执行第一次访存流水线,实现对第一访存地址范围的访存操作,并实现对第二访存地址范围的访存操作同。例如,该第三单元630可以实现步骤S131,其具体实现方法可以参考步骤S131的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一次访存流水线包括一次读流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为读操作,第三单元630被配置为通过执行一次读流水线,实现对第一访存地址范围的读操作,并实现对第二访存地址范围的读操作。例如,该第三单元630可以实现步骤S131,其具体实现方法可以参考步骤S131的相关描述以及图7所示的示例的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一次访存流水线包括一次写完成流水线,对第一访存地址范围的访存操作和对第二访存地址范围的访存操作均为写完成操作,第三单元630被配置为通过执行一次写完成流水线,实现对第一访存地址范围的写完成操作,并实现对第二访存地址范围的写完成操作。例如,该第三单元630可以实现步骤S131,其具体实现方法可以参考步骤S131的相关描述以及图8所示的示例的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,与第一访存微指令相关的操作为设置第一访存微指令在访存调度队列中的状态,与第二访存微指令相关的操作为设置第二访存微指令在访存调度队列中的状态,第三单元630被配置为通过执行第一次访存流水线,设置第一访存微指令在访存调度队列中的状态为睡眠状态,并设置第二访存微指令在访存调度队列中的状态为睡眠状态。例如,该第三单元630可以实现步骤S132,其具体实现方法可以参考步骤S132的相关描述以及图9所示的示例的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第二单元620还被配置为确定第一访存地址范围和第二访存地址范围不在相同的数据缓存地址段内;第三单元630还被配置为通过执行第一次访存流水线,实现与第一访存微指令相关的操作;通过执行第二次访存流水线,实现与第二访存微指令相关的操作。例如,该第二单元620和第三单元630可以实现步骤S140,其具体实现方法可以参考步骤S140的相关描述,在此不再赘述。
例如,在本公开至少一实施例提供的执行访存微指令的装置中,第一单元610还被配置为获取第四访存微指令;第二单元620还被配置为确定第四访存微指令所访问的第四访存地址范围和第一访存地址范围在相同的数据缓存地址段内;第三单元630还被配置为通过执行第一次访存流水线,实现与第四访存微指令相关的操作,与第四访存微指令相关的操作的类型和与第一访存微指令相关的操作的类型相同。需要说明的是,在本公开的实施例中,第四访存微指令仅是示例性的,旨在说明除了第二访存微指令之外,还存在其他的访存微指令,该其他的访存微指令所访问的访存地址范围和第一访存地址范围也在相同的数据缓存地址段内。例如,该第一单元610、第二单元620和第三单元630所实现的步骤分别与步骤S110、S120和S130类似,在此不再赘述。
需要说明的是,为表述清楚、简洁,本公开的实施例并没有给出执行访存微指令的装置的全部组成单元。为实现执行访存微指令的装置的必要功能,本领域技术人员可以根据具体需要提供、设置其他未示出的组成单元,本公开的实施例对此不作限制。
关于不同实施例中的执行访存微指令的装置的技术效果可以参考本公开的实施例中提供的执行访存微指令的方法的技术效果,这里不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。
Claims (24)
1.一种执行访存微指令的方法,包括:
获取第一访存微指令和第二访存微指令;
获取所述第一访存微指令所访问的第一访存地址范围和所述第二访存微指令所访问的第二访存地址范围;
响应于所述第一访存地址范围和所述第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定所述第一访存地址范围和所述第二访存地址范围在相同的数据缓存地址段内,其中,所述数据缓存地址段表示执行一次访存流水线所访问的地址段;
通过执行第一次访存流水线,实现与所述第一访存微指令相关的操作,并实现与所述第二访存微指令相关的操作,其中,与所述第一访存微指令相关的操作的类型和与所述第二访存微指令相关的操作的类型相同。
2.根据权利要求1所述的方法,其中,获取所述第一访存地址范围和所述第二访存地址范围,包括:
获取所述第一访存微指令对应的地址输入信息,为所述第一访存微指令创建第一追踪表项,使得所述第一追踪表项包括所述第一访存微指令对应的地址输入信息;
获取所述第二访存微指令对应的地址输入信息,使用所述第二访存微指令对应的地址输入信息的至少一部分查找所述第一追踪表项,并且响应于所述第二访存微指令对应的地址输入信息的所述至少一部分命中所述第一追踪表项,输出所述第二访存微指令对应的命中信息;
获取所述第一访存微指令对应的访存调度队列信息,并且响应于接收到所述第二访存微指令对应的命中信息,获取与所述第二访存微指令相关的附加信息;
根据所述第一访存微指令对应的访存调度队列信息确定所述第一访存地址范围,根据所述第一访存微指令对应的访存调度队列信息和与所述第二访存微指令相关的附加信息确定所述第二访存地址范围。
3.根据权利要求2所述的方法,其中,
获取所述第一访存微指令对应的地址输入信息包括:获取所述第一访存微指令对应的读写标识、比例、索引、基址、偏移量和微指令标号,其中,所述偏移量包括偏移量高位和块偏移;
使用所述第二访存微指令对应的地址输入信息的至少一部分查找所述第一追踪表项包括:使用所述第二访存微指令对应的读写标识、比例、索引、基址和偏移量高位查找所述第一追踪表项;
输出所述第二访存微指令对应的命中信息包括:输出所述第二访存微指令对应的命中标识、块偏移差值和微指令编号。
4.根据权利要求3所述的方法,其中,获取所述第一访存微指令对应的访存调度队列信息,并且响应于接收到所述第二访存微指令对应的命中信息,获取与所述第二访存微指令相关的附加信息包括:
为所述第一访存微指令创建第一访存表项,使得所述第一访存表项包括所述第一访存微指令对应的访存调度队列信息;
响应于接收到所述第二访存微指令对应的命中信息,使得所述第一访存表项还包括与所述第二访存微指令相关的附加信息;
查询所述第一访存表项,以获取所述第一访存微指令对应的访存调度队列信息和与所述第二访存微指令相关的附加信息。
5.根据权利要求4所述的方法,其中,
获取所述第一访存微指令对应的访存调度队列信息包括:获取所述第一访存微指令对应的访存首地址、访存粒度和完成标识;
响应于接收到所述第二访存微指令对应的命中信息,获取与所述第二访存微指令相关的附加信息包括:响应于接收到所述第二访存微指令对应的命中信息,获取所述第二访存微指令对应的块偏移差值、访存粒度和完成标识。
6.根据权利要求5所述的方法,其中,
根据所述第一访存微指令对应的访存调度队列信息确定所述第一访存地址范围包括:根据所述第一访存微指令对应的访存首地址和访存粒度确定所述第一访存地址范围;
根据所述第一访存微指令对应的访存调度队列信息和与所述第二访存微指令相关的附加信息确定所述第二访存地址范围,包括:根据所述第一访存微指令对应的访存首地址和所述第二访存微指令对应的块偏移差值、访存粒度确定所述第二访存地址范围。
7.根据权利要求6所述的方法,其中,通过执行第一次访存流水线,实现与所述第一访存微指令相关的操作,并实现与所述第二访存微指令相关的操作包括:通过执行所述第一次访存流水线,实现对所述第一访存地址范围的访存操作,并实现对所述第二访存地址范围的访存操作。
8.根据权利要求7所述的方法,其中,所述第一次访存流水线包括一次读流水线,对所述第一访存地址范围的访存操作和对所述第二访存地址范围的访存操作均为读操作,
通过执行第一次访存流水线,实现对所述第一访存地址范围的访存操作,并实现对所述第二访存地址范围的访存操作包括:通过执行所述一次读流水线,实现对所述第一访存地址范围的读操作,并实现对所述第二访存地址范围的读操作。
9.根据权利要求7所述的方法,其中,所述第一次访存流水线包括一次写完成流水线,对所述第一访存地址范围的访存操作和对所述第二访存地址范围的访存操作均为写完成操作,
通过执行第一次访存流水线,实现对所述第一访存地址范围的访存操作,并实现对所述第二访存地址范围的访存操作包括:通过执行所述一次写完成流水线,实现对所述第一访存地址范围的写完成操作,并实现对所述第二访存地址范围的写完成操作。
10.根据权利要求7所述的方法,还包括:在完成对所述第一访存地址范围的访存操作后,删除所述第一追踪表项。
11.根据权利要求7所述的方法,还包括:为所述第二访存微指令创建第二访存表项,使得所述第二访存表项包括所述第二访存微指令对应的访存调度队列信息,并在完成对所述第二访存地址范围的访存操作后,保留所述第二访存表项,响应于所述第二访存表项被挑选,检查对所述第二访存地址范围的访存操作是否正确,并且
响应于对所述第二访存地址范围的访存操作正确,删除所述第二访存表项,
响应于对所述第二访存地址范围的访存操作错误,重新执行所述第二访存微指令。
12.根据权利要求6所述的方法,其中,与所述第一访存微指令相关的操作为设置所述第一访存微指令在访存调度队列中的状态,与所述第二访存微指令相关的操作为设置所述第二访存微指令在访存调度队列中的状态,
通过执行第一次访存流水线,实现与所述第一访存微指令相关的操作,并实现与所述第二访存微指令相关的操作包括:通过执行所述第一次访存流水线,设置所述第一访存微指令在访存调度队列中的状态为睡眠状态,并设置所述第二访存微指令在访存调度队列中的状态为睡眠状态。
13.根据权利要求1所述的方法,还包括:
确定所述第一访存地址范围和所述第二访存地址范围不在相同的数据缓存地址段内;
通过执行所述第一次访存流水线,实现与所述第一访存微指令相关的操作;
通过执行第二次访存流水线,实现与所述第二访存微指令相关的操作。
14.根据权利要求13所述的方法,其中,确定所述第一访存地址范围和所述第二访存地址范围不在相同的数据缓存地址段内,通过执行第二次访存流水线,实现与所述第二访存微指令相关的操作包括:
响应于第二访存微指令对应的地址输入信息的至少一部分未命中第一追踪表项,为所述第二访存微指令创建第二追踪表项,使得所述第二追踪表项包括所述第二访存微指令对应的地址输入信息;
获取第三访存微指令;
获取所述第三访存微指令的地址输入信息;
使用所述第三访存微指令的地址输入信息的至少一部分查找所述第二追踪表项,并且响应于所述第三访存微指令的地址输入信息的所述至少一部分命中所述第二追踪表项,输出所述第三访存微指令对应的命中信息;
获取所述第二访存微指令对应的访存调度队列信息;
响应于接收到所述第三访存微指令对应的命中信息,获取与所述第三访存微指令相关的附加信息;
根据所述第二访存微指令对应的访存调度队列信息确定所述第二访存地址范围,根据所述第二访存微指令对应的访存调度队列信息和与所述第三访存微指令相关的附加信息确定所述第三访存地址范围;
确定所述第二访存地址范围和所述第三访存地址范围在相同的数据缓存地址段内;
通过执行所述第二次访存流水线,实现与所述第二访存微指令相关的操作,并实现与所述第三访存微指令相关的操作,其中,与所述第二访存微指令相关的操作的类型和与所述第三访存微指令相关的操作的类型相同。
15.根据权利要求1所述的方法,还包括:
获取第四访存微指令;
确定所述第四访存微指令所访问的第四访存地址范围和所述第一访存地址范围在相同的数据缓存地址段内;
通过执行所述第一次访存流水线,实现与所述第四访存微指令相关的操作,其中,与所述第四访存微指令相关的操作的类型和与所述第一访存微指令相关的操作的类型相同。
16.一种执行访存微指令的装置,包括第一单元、第二单元和第三单元,其中,
所述第一单元被配置为:获取第一访存微指令和第二访存微指令;
所述第二单元被配置为:获取所述第一访存微指令所访问的第一访存地址范围和所述第二访存微指令所访问的第二访存地址范围,响应于所述第一访存地址范围和所述第二访存地址范围均完全位于执行一次访存流水线所访问的地址段内,确定所述第一访存地址范围和所述第二访存地址范围在相同的数据缓存地址段内,其中,所述数据缓存地址段表示执行一次访存流水线所访问的地址段;
所述第三单元被配置为:通过执行第一次访存流水线,实现与所述第一访存微指令相关的操作,并实现与所述第二访存微指令相关的操作,其中,与所述第一访存微指令相关的操作的类型和与所述第二访存微指令相关的操作的类型相同。
17.根据权利要求16所述的装置,其中,所述第二单元包括第一子单元和第二子单元,其中,
所述第一子单元被配置为:获取所述第一访存微指令的地址输入信息;为所述第一访存微指令创建第一追踪表项,使得所述第一追踪表项包括所述第一访存微指令的地址输入信息;获取所述第二访存微指令对应的地址输入信息;使用所述第二访存微指令对应的地址输入信息的至少一部分查找所述第一追踪表项,并且响应于所述第二访存微指令对应的地址输入信息的所述至少一部分命中所述第一追踪表项,输出所述第二访存微指令对应的命中信息;
所述第二子单元被配置为:获取所述第一访存微指令对应的访存调度队列信息;响应于接收到所述第二访存微指令对应的命中信息,获取与所述第二访存微指令相关的附加信息;根据所述第一访存微指令对应的访存调度队列信息确定所述第一访存地址范围,根据所述第一访存微指令对应的访存调度队列信息和与所述第二访存微指令相关的附加信息确定所述第二访存地址范围。
18.根据权利要求17所述的装置,其中,
所述第二子单元被配置为:为所述第一访存微指令创建第一访存表项,使得所述第一访存表项包括所述第一访存微指令对应的访存调度队列信息;响应于接收到所述第二访存微指令对应的命中信息,使得所述第一访存表项还包括与所述第二访存微指令相关的附加信息;查询所述第一访存表项,以获取所述第一访存微指令对应的访存调度队列信息和与所述第二访存微指令相关的附加信息。
19.根据权利要求18所述的装置,其中,
所述第三单元被配置为:通过执行所述第一次访存流水线,实现对所述第一访存地址范围的访存操作,并实现对所述第二访存地址范围的访存操作同。
20.根据权利要求19所述的装置,其中,所述第一次访存流水线包括一次读流水线,对所述第一访存地址范围的访存操作和对所述第二访存地址范围的访存操作均为读操作,
所述第三单元被配置为:通过执行所述一次读流水线,实现对所述第一访存地址范围的读操作,并实现对所述第二访存地址范围的读操作。
21.根据权利要求19所述的装置,其中,所述第一次访存流水线包括一次写完成流水线,对所述第一访存地址范围的访存操作和对所述第二访存地址范围的访存操作均为写完成操作,
所述第三单元被配置为:通过执行所述一次写完成流水线,实现对所述第一访存地址范围的写完成操作,并实现对所述第二访存地址范围的写完成操作。
22.根据权利要求18所述的装置,其中,与所述第一访存微指令相关的操作为设置所述第一访存微指令在访存调度队列中的状态,与所述第二访存微指令相关的操作为设置所述第二访存微指令在访存调度队列中的状态,
所述第三单元被配置为:通过执行所述第一次访存流水线,设置所述第一访存微指令在访存调度队列中的状态为睡眠状态,并设置所述第二访存微指令在访存调度队列中的状态为睡眠状态。
23.根据权利要求16所述的装置,其中,
所述第二单元还被配置为:确定所述第一访存地址范围和所述第二访存地址范围不在相同的数据缓存地址段内;
所述第三单元还被配置为:通过执行所述第一次访存流水线,实现与所述第一访存微指令相关的操作;通过执行第二次访存流水线,实现与所述第二访存微指令相关的操作。
24.根据权利要求16所述的装置,其中,
所述第一单元还被配置为:获取第四访存微指令;
所述第二单元还被配置为:确定所述第四访存微指令所访问的第四访存地址范围和所述第一访存地址范围在相同的数据缓存地址段内;
所述第三单元还被配置为:通过执行所述第一次访存流水线,实现与所述第四访存微指令相关的操作,其中,与所述第四访存微指令相关的操作的类型和与所述第一访存微指令相关的操作的类型相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011450782.0A CN112596790B (zh) | 2020-12-10 | 2020-12-10 | 执行访存微指令的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011450782.0A CN112596790B (zh) | 2020-12-10 | 2020-12-10 | 执行访存微指令的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112596790A CN112596790A (zh) | 2021-04-02 |
CN112596790B true CN112596790B (zh) | 2022-11-22 |
Family
ID=75192242
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011450782.0A Active CN112596790B (zh) | 2020-12-10 | 2020-12-10 | 执行访存微指令的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112596790B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0201848A2 (en) * | 1985-05-06 | 1986-11-20 | Wang Laboratories Inc. | Information processing system with enhanced instruction execution and support control |
CA2173225A1 (en) * | 1993-10-12 | 1995-04-20 | Stephen W. Olson | Virtual address translation hardware assist circuit and method |
US5717910A (en) * | 1996-03-29 | 1998-02-10 | Integrated Device Technology, Inc. | Operand compare/release apparatus and method for microinstrution sequences in a pipeline processor |
CN1431585A (zh) * | 2002-08-22 | 2003-07-23 | 智慧第一公司 | 延伸微处理器地址模式的装置及方法 |
CN1570856A (zh) * | 2003-12-15 | 2005-01-26 | 智慧第一公司 | 用以防止微处理器管线中的停滞的装置及方法 |
CN107977577A (zh) * | 2016-10-21 | 2018-05-01 | 龙芯中科技术有限公司 | 访存指令访问检测方法及装置 |
-
2020
- 2020-12-10 CN CN202011450782.0A patent/CN112596790B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0201848A2 (en) * | 1985-05-06 | 1986-11-20 | Wang Laboratories Inc. | Information processing system with enhanced instruction execution and support control |
CA2173225A1 (en) * | 1993-10-12 | 1995-04-20 | Stephen W. Olson | Virtual address translation hardware assist circuit and method |
US5717910A (en) * | 1996-03-29 | 1998-02-10 | Integrated Device Technology, Inc. | Operand compare/release apparatus and method for microinstrution sequences in a pipeline processor |
CN1431585A (zh) * | 2002-08-22 | 2003-07-23 | 智慧第一公司 | 延伸微处理器地址模式的装置及方法 |
CN1570856A (zh) * | 2003-12-15 | 2005-01-26 | 智慧第一公司 | 用以防止微处理器管线中的停滞的装置及方法 |
CN107977577A (zh) * | 2016-10-21 | 2018-05-01 | 龙芯中科技术有限公司 | 访存指令访问检测方法及装置 |
Non-Patent Citations (1)
Title |
---|
Burroughs公司B1700为微程序设计提供的条件;Wayne T.Wilner;《计算机研究与发展》(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112596790A (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6502185B1 (en) | Pipeline elements which verify predecode information | |
JP3798404B2 (ja) | 2レベルの分岐予測キャッシュによる分岐予測 | |
US11720365B2 (en) | Path prediction method used for instruction cache, access control unit, and instruction processing apparatus | |
US7181598B2 (en) | Prediction of load-store dependencies in a processing agent | |
KR100747128B1 (ko) | 발행 후에 명령의 비투기적 성질을 발견하고 상기 명령을 재발행하는 스케줄러 | |
US7861066B2 (en) | Mechanism for predicting and suppressing instruction replay in a processor | |
US6542984B1 (en) | Scheduler capable of issuing and reissuing dependency chains | |
US6622237B1 (en) | Store to load forward predictor training using delta tag | |
US6651161B1 (en) | Store load forward predictor untraining | |
US20080028193A1 (en) | Transitive suppression of instruction replay | |
US20080276070A1 (en) | Reducing the fetch time of target instructions of a predicted taken branch instruction | |
US10437595B1 (en) | Load/store dependency predictor optimization for replayed loads | |
US6564315B1 (en) | Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction | |
US20020124156A1 (en) | Using "silent store" information to advance loads | |
US10310859B2 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
US6721877B1 (en) | Branch predictor that selects between predictions based on stored prediction selector and branch predictor index generation | |
US6622235B1 (en) | Scheduler which retries load/store hit situations | |
US8683179B2 (en) | Method and apparatus for performing store-to-load forwarding from an interlocking store using an enhanced load/store unit in a processor | |
US5740398A (en) | Program order sequencing of data in a microprocessor with write buffer | |
US7730290B2 (en) | Systems for executing load instructions that achieve sequential load consistency | |
US20030182536A1 (en) | Instruction issuing device and instruction issuing method | |
US20060218124A1 (en) | Performance of a data processing apparatus | |
US10942743B2 (en) | Splitting load hit store table for out-of-order processor | |
US20210011729A1 (en) | Managing Commit Order for an External Instruction Relative to Queued Instructions | |
CN114721724A (zh) | 一种基于risc-v指令集的六级流水线处理器 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40049840 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |