CN115563027A - 存数指令的执行方法、系统及装置 - Google Patents
存数指令的执行方法、系统及装置 Download PDFInfo
- Publication number
- CN115563027A CN115563027A CN202211468484.3A CN202211468484A CN115563027A CN 115563027 A CN115563027 A CN 115563027A CN 202211468484 A CN202211468484 A CN 202211468484A CN 115563027 A CN115563027 A CN 115563027A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- instruction
- memory
- address
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开关于一种存数指令的执行方法、系统及装置,属于计算机技术领域。其中,该方法包括:获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址;根据虚拟存储地址确定对应的物理地址;将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令包括存数指令;基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内;将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。本公开构建独立的存数指令的流水线,将取数指令和存数指令流水线解耦合,缩短存数指令的执行时间,提高指令执行效率。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种存数指令的执行方法、系统及装置。
背景技术
传统的访存指令执行的过程中取数指令(Load)、存数指令(Store)共用访存流水线。Load和Store的执行要保持同样的流水级,而Store和Load执行写回的要求不一样,Load必须要得到数据高速缓存的数据才能写回,在执行时必须要判断DCache是否命中,如果命中取到DCache中的数据,如果不命中则在访存重定序队列lsroq中等待从下一级存储系统写回的数据。而Store的写回和提交不需要DCache中的数据,Store指令在提交后才真正执行写操作,写DCache或者写到下一级存储系统。Load和Store共用流水线,Store就要与Load执行一样的时间,降低了执行效率。
发明内容
本公开提供一种存数指令的执行方法、系统、装置、电子设备及计算机可读存储介质,以至少解决如何增强访存指令中存数指令的执行效率的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种存数指令的执行方法,包括:获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;根据所述虚拟存储地址确定对应的物理地址;将所述待存储数据和所述物理地址发送至访存重定序队列,以进行访存指令重定序,所述访存指令中包括所述存数指令;基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内;将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
在本公开的一个实施例中,所述基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内,包括:根据所述存数指令对应的所述物理地址,确定所述存数指令对应的所述目标缓存项;将所述存数指令的所述待存储数据缓存至所述目标缓存项内。
在本公开的一个实施例中,所述根据所述存数指令对应的所述物理地址,确定所述存数指令对应的所述目标缓存项,包括:根据所述存数指令对应的所述物理地址,确定所述存数指令在所述高速缓冲存储器中对应的缓存行地址;将所述缓存行地址与所述存数缓存队列中缓存项内地址域的地址进行比较;响应于存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述缓存项确定为所述存数指令对应的所述目标缓存项;响应于不存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述存数缓存队列中头指针指向的缓存项确定为所述存数指令对应的所述目标缓存项,并将所述头指针指向所述目标缓存项的下一个缓存项。
在本公开的一个实施例中,响应于不存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述存数缓存队列中头指针指向的缓存项确定为所述存数指令对应的所述目标缓存项之后,还包括:将所述目标缓存项内地址域的地址设置为所述存数指令对应的缓存行地址;以及将所述目标缓存项的有效标志位设置为有效值。
在本公开的一个实施例中,所述将所述缓存行地址与所述存数缓存队列中缓存项内地址域的地址进行比较,包括:根据所述有效标志位,从所述缓存项中筛选出有效的所述缓存项;将所述缓存行地址与有效的所述缓存项内地址域的地址进行比较。
在本公开的一个实施例中,所述将所述存数指令的所述待存储数据缓存至所述目标缓存项内,包括:将所述待存储数据缓存至所述目标缓存项的字节存储资源中;将所述待存储数据占用的所述字节存储资源对应的字节标志位设置为第一预设数据。
在本公开的一个实施例中,所述将所述存数指令的所述待存储数据缓存至所述目标缓存项内之后,还包括:将所述目标缓存项对应的时钟计数器清零。
在本公开的一个实施例中,还包括:响应于在当前时钟周期内,所述存数缓存队列中缓存项未被写入所述待存储数据,控制所述缓存项的所述时钟计数器加一;或者在每个时钟周期控制所述存数缓存队列对应的全局计数器加一,并在所述全局计数器的数值等于预设阈值的情况下,控制未被写入所述待存储数据的缓存项对应的所述时钟计数器加一。
在本公开的一个实施例中,所述将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器,包括:将字节标志位全部为第一预设数据的缓存项内的数据写入所述高速缓冲存储器;或者将时钟计数器的数值等于第二预设数据的缓存项内的数据写入所述高速缓冲存储器;或者响应于所述存数缓存队列被写满,将所述字节标志位全部为所述第一预设数据的缓存项内的数据写入所述高速缓冲存储器,或者将所述时钟计数器的数值最大的所述缓存项内的数据写入所述高速缓冲存储器。
在本公开的一个实施例中,还包括:获取在每个流水节拍进入所述存数缓存队列的存数指令的个数;获取所述存数缓存队列中可用的缓存项的个数;若在每个所述流水节拍进入所述存数缓存队列的所述存数指令的个数大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
在本公开的一个实施例中,还包括:获取在单个流水节拍进入所述存数缓存队列的存数指令的个数的最大值;获取所述存数缓存队列中可用的缓存项的个数;若所述最大值大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
根据本公开实施例的第二方面,提供一种存数指令的执行系统,包括:寄存器堆、访存地址生成部件、数据转译后备缓冲存储器、访存重定序队列、存数缓存队列和高速缓冲存储器;其中,所述寄存器堆中包括定点寄存器堆和浮点寄存器堆,所述定点寄存器堆和所述浮点寄存器堆分别与所述访存重定序队列连接;所述定点寄存器堆还与所述访存地址生成部件连接;所述访存地址生成部件、所述数据转译后备缓冲存储器、所述访存重定序队列、所述存数缓存队列和所述高速缓冲存储器依次顺序连接;基于所述寄存器堆和所述访存地址生成部件,获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;基于所述数据转译后备缓冲存储器,根据所述虚拟存储地址确定对应的物理地址;基于所述访存重定序队列,根据所述待存储数据和所述物理地址进行访存指令重定序,所述访存指令中包括所述存数指令,以及基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至所述存数缓存队列中对应的目标缓存项内;所述高速缓冲存储器用于存储写入的数据,所述写入的数据为所述存数缓存队列中满足预设写入条件的缓存项内的数据。
根据本公开实施例的第三方面,提供一种存数指令的执行装置,包括:获取模块,用于获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;确定模块,用于根据所述虚拟存储地址确定对应的物理地址;发送模块,用于将所述待存储数据和所述物理地址发送至访存重定序队列,以进行访存指令重定序,所述访存指令中包括所述存数指令;缓存模块,用于基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内;写入模块,用于将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
在本公开的一个实施例中,所述缓存模块,进一步用于:根据所述存数指令对应的所述物理地址,确定所述存数指令对应的所述目标缓存项;将所述存数指令的所述待存储数据缓存至所述目标缓存项内。
在本公开的一个实施例中,所述缓存模块,进一步用于:根据所述存数指令对应的所述物理地址,确定所述存数指令在所述高速缓冲存储器中对应的缓存行地址;将所述缓存行地址与所述存数缓存队列中缓存项内地址域的地址进行比较;响应于存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述缓存项确定为所述存数指令对应的所述目标缓存项;响应于不存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述存数缓存队列中头指针指向的缓存项确定为所述存数指令对应的所述目标缓存项,并将所述头指针指向所述目标缓存项的下一个缓存项。
在本公开的一个实施例中,所述缓存模块,还用于:将所述目标缓存项内地址域的地址设置为所述存数指令对应的缓存行地址;以及将所述目标缓存项的有效标志位设置为有效值。
在本公开的一个实施例中,所述缓存模块,进一步用于:根据所述有效标志位,从所述缓存项中筛选出有效的所述缓存项;将所述缓存行地址与有效的所述缓存项内地址域的地址进行比较。
在本公开的一个实施例中,所述缓存模块,进一步用于:将所述待存储数据缓存至所述目标缓存项的字节存储资源中;将所述待存储数据占用的所述字节存储资源对应的字节标志位设置为第一预设数据。
在本公开的一个实施例中,所述缓存模块,还用于:将所述目标缓存项对应的时钟计数器清零。
在本公开的一个实施例中,所述缓存模块,还用于:响应于在当前时钟周期内,所述存数缓存队列中缓存项未被写入所述待存储数据,控制所述缓存项的所述时钟计数器加一;或者在每个时钟周期控制所述存数缓存队列对应的全局计数器加一,并在所述全局计数器的数值等于预设阈值的情况下,控制未被写入所述待存储数据的缓存项对应的所述时钟计数器加一。
在本公开的一个实施例中,所述写入模块,进一步用于:将字节标志位全部为第一预设数据的缓存项内的数据写入所述高速缓冲存储器;或者将时钟计数器的数值等于第二预设数据的缓存项内的数据写入所述高速缓冲存储器;或者响应于所述存数缓存队列被写满,将所述字节标志位全部为所述第一预设数据的缓存项内的数据写入所述高速缓冲存储器,或者将所述时钟计数器的数值最大的所述缓存项内的数据写入所述高速缓冲存储器。
在本公开的一个实施例中,所述写入模块,还用于:获取在每个流水节拍进入所述存数缓存队列的存数指令的个数;获取所述存数缓存队列中可用的缓存项的个数;若在每个所述流水节拍进入所述存数缓存队列的所述存数指令的个数大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
在本公开的一个实施例中,所述写入模块,还用于:获取在单个流水节拍进入所述存数缓存队列的存数指令的个数的最大值;获取所述存数缓存队列中可用的缓存项的个数;若所述最大值大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
根据本公开实施例的第四方面,提供一种电子设备,包括:处理器;用于存储所述处理器的可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如本公开实施例第一方面所述的存数指令的执行方法。
根据本公开实施例的第五方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如本公开实施例第一方面所述的存数指令的执行方法。
本公开的实施例提供的技术方案至少带来以下有益效果:获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址;根据虚拟存储地址确定对应的物理地址;将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令中包括存数指令;基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内;将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。构建独立的存数指令的流水线,将取数指令和存数指令流水线解耦合,缩短存数指令的执行时间,提高指令执行效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种存数指令的执行方法的流程图。
图2是根据一示例性实施例示出的另一种存数指令的执行方法的流程图。
图3是根据一示例性实施例示出的一种存数指令的执行方法中存数缓存队列的示意图。
图4是相关技术中访存指令的执行流水线示意图。
图5是根据本公开实施例的存数指令的执行流水线示意图。
图6是根据一示例性实施例示出的一种存数指令的执行装置的框图。
图7是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种存数指令的执行方法的流程图,如图1所示,本公开实施例的存数指令的执行方法,可以包括以下步骤:
S101,获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址。
需要说明的是,本公开实施例的存数指令的执行方法的执行主体为本公开实施例提供的存数指令的执行装置,该装置可以设置在电子设备中,以执行本公开实施例的存数指令的执行方法。
实际中,在存数(Store)指令流水线的第一个流水级中,Store指令对应的存数指令发射队列(Stqueue)基于派遣指令(Dispatch inst)存储待发射的Store指令,并将当前已经准备就绪的若干条指令按照存数指令发射队列的发射策略进行发射(例如选择在程序指令序上等待时间最长的若干条准备好的Store指令发射)。Store指令会等待其操作数的地址和数据同时准备就绪后发射。在一些实施例中每个流水节拍可以同时发射两条Store指令。
在本公开实施例中,在(Store)指令流水线的第二个流水级中可以从寄存器堆中获取已发射的存数指令对应的待存储数据和用于生成虚拟存储地址的数据。
例如,在一个流水节拍中发射的两个Store指令在定点寄存器堆中读取所需的各两个操作数。这两个操作数分别为待存储数据和用于生成虚拟存储地址的数据。两个Store指令分别通过对应的地址生成部件(该地址生成部件可以为访存地址生成部件或存数指令地址生成部件)利用从定点寄存器堆读出的用于生成虚拟存储地址的数据计算Store指令的虚拟存储地址(或称作虚地址)。其中,根据Store指令的类型,待存储数据可以从来自定点或浮点寄存器堆中读取。需要说明的是,在一个流水节拍中发射的Store指令的个数可根据需要设定,本申请不做限定,此外,地址生成部件的个数与一个流水节拍中发射的Store指令的个数相同。
S102,根据虚拟存储地址确定对应的物理地址。
在本公开实施例中,将虚拟存储地址送至数据转译后备缓冲存储器(DTLB)进行虚实地址转换,确定Store指令对应的用于数据存储的物理地址。
S103,将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令中包括存数指令。
在本公开实施例中,Store指令要将自己的数据即上述待存储数据传递给所有的已经在访存重定序队列(Lsroq)中、与其相关的且执行序在它后面的访存指令,其中是否“相关”的判断以字节为单位。在同一拍进入的Load指令和Store指令也要进行是否相关的比较。例如,比较进入的Store指令到下一条相关的Store指令之间是否有地址相关的Load指令已经写回,如果该Load指令已经写回,将该Load指令置例外重新执行,Load指令后面的所有指令也都重新执行。
不难理解的,访存重定序队列Lsroq完成访存重定序的功能。访存重定序机制是用于维护乱序发射的访存指令之间执行顺序的机制。访存重定序采取数据传递机制,使用数据传递机制进行访存指令重定序的方法为:当一条指令经过发射路径到达访存重定序队列Lsroq时,这条指令需要从所有执行序在它之前的、与其相关的Store指令处获取对应数据;同时,如果这条指令是Store指令,那么这条指令要将它自己的数据传递给所有的已经在重定序队列中、与其相关的、且执行序在它后面的Load指令。
对于Load指令写回但前面的Store指令地址未算出的情况下需要进行重新执行。即当Store指令进入访存重定序队列时,比较进入的Store指令后面到下一条相关的Store指令之间是否有地址相关的Load指令已经写回,如果该Load指令已经写回,将该Load指令置例外重新执行(roll back),Load指令后面的所有指令都需要重新执行,以此保证执行的正确性。
在一些实施例中,Lsroq队列用于维护访存的顺序,可以Load和Store共享一个队列,也可以Load和Store各用一个单独的队列,目的在于记录维护Load和Store的顺序。
S104,基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内。
在本公开实施例中,按照访存重定序队列中访存指令的程序执行序,将Store指令的待存储数据顺序提交至存数缓存队列(Store Buffer)中以缓存项为单位进行缓存,在提交后Store指令就可以退出Lsroq了。
S105,将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
本公开实施例,预先设置写入高速缓冲存储器的条件,该高速缓冲存储器具体可为数据高速缓冲存储器DCache或者数据高速缓存的数据存储阵列DCache Data,判断存数缓存队列中的各个缓存项是否需满足该预设写入条件,在满足该预设写入条件的情况下,以缓存项为单位将缓存项中的数据写入DCache,避免将Store指令的数据一个一个写入DCache,会一直占用数据端口的情况。而且对于Store指令没有命中的情况,对于已经写满整个缓存项的情况,不需要到下一级存储系统取回该缓存项原来的值。
综上,本公开从寄存器堆中获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址;根据虚拟存储地址确定对应的物理地址;将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令中包括存数指令;基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内;将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。构建独立的存数执行的流水线,将取数指令和存数指令流水线解耦合,缩短存数指令的执行时间,提高指令执行效率。
在上述实施例的基础上,如图2所示,上述步骤S104中“基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内”可包括以下步骤:
S201,根据存数指令对应的物理地址,确定存数指令对应的目标缓存项。
在本公开实施例中Store Buffer中的一项对应于DCache中的一个缓存(Cache)行,提交的Store指令的待存储数据写到Store Buffer中,以项为单位(即以DCache中的一个缓存行为单位)对于Store指令的待存储数据进行写合并,合并满一个Cache行后写入高速缓冲存储器。写合并的好处是对于合并满的Store指令,即使是访问DCache没有命中,也不需要访问下一层存储系统,因为Store的整个Cache行数据都是有的,可以直接写入DCache。因为程序访问具有局部性,Store指令对应的地址通常是连续的,有很多程序可以合并满。即使没有合并满,写DCache端口的占用率也可以降低。
在一些实施例中,根据存数指令对应的物理地址,确定存数指令在高速缓冲存储器中对应的缓存(Cache)行地址;将缓存行地址与缓存项中地址域的地址进行比较;响应于存在地址域的地址与缓存行地址相同的缓存项,将缓存项确定为存数指令对应的目标缓存项;响应于不存在地址域的地址与缓存行地址相同的缓存项,将存数缓存队列中头指针指向的缓存项确定为存数指令对应的目标缓存项,并将头指针指向目标缓存项的下一个缓存项。
在一些实施例中,在不存在地址域的地址与缓存行地址相同的缓存项的情况下,在将存数缓存队列中头指针指向的缓存项确定为存数指令对应的目标缓存项之后,将目标缓存项中地址域的地址设置为存数指令对应的缓存行地址;以及将目标缓存项的有效标志位设置为有效值,如置为1。
在一些实施例中,根据有效标志位,从缓存项中筛选出有效的缓存项;将缓存行地址与有效的缓存项中地址域的地址进行比较。
S202,将存数指令的待存储数据缓存至目标缓存项内。
在一些实施例中,将待存储数据缓存至目标缓存项的字节存储资源中,并将待存储数据占用的字节存储资源对应的字节标志位设置为第一预设数据,如置为1。
例如,可根据字节标志位,表示数据域中的字节存储资源是否被写入数据,如Bytemask为1表示该字节存储资源已被写入数据,Bytemask为0表示该字节存储资源未被写入数据。
在一些实施例中,若在当前时钟周期内,存数缓存队列中任一缓存项未被写入待存储数据,则控制该缓存项的时钟计数器加一;或者在每个时钟周期控制存数缓存队列对应的全局计数器加一,并在全局计数器的数值等于预设阈值的情况下,控制未被写入待存储数据的缓存项对应的时钟计数器加一。
举例说明,如图3所示,为Store Buffer的示意框图,其中每一项包括有效标志位域(Valid)、地址域(Block_paddr)、字节标志位域(Bytemask)、时钟计数器(Counter)、数据域(Data)以及其他各域。针对512位Cache块(1个Cache块对应于一个上述Cache行或StoreBuffer中的一项),物理地址39位的处理器,其块地址为31位,512位Cache块对应的64个字节(1个字节8位),Bytemask为64位,对应64个字节,用于表示该字节是否被Store指令写入数据,Bytemask为0表示该字节未被Store指令写,Bytemask为1表示该字节已被Store指令写,当Bytemask为全1时,表示该Cache块已被Store指令全部写满,设时钟计数器为20位,数据域Data存放512位的数据。各域用16进制数表示。
其中,提交的Store指令将数据写到Store Buffer,可存在两种情况:
其一、当Store Buffer空时,第一次写入Store Buffer,从头指针(Store Buffer_head)开始写入Store Buffer, 头指针Storebuffer_head指向写入项(即目标缓存项)的下一项。
其二、当Store Buffer中有数据时,用Store指令对应的块地址(即在高速缓冲存储器中对应的缓存行地址),与Store Buffer的Block_paddr域的块地址进行比较,如有与有效的项(Valid为1的项)的块地址相同的,合并入该项,如没有块地址与Block_paddr相同的项,则该Store指令占一个新的Store buffer项,将Block_paddr置为该指令的块地址,Valid位置为1,头指针Storebuffer_head指向写入项的下一项。此外,根据Store指令的类型在存数据的对应位置设置Bytemask,将写入的字节对应的Bytemask位设为1,并将数据写入Data域对应的位置。将该项的Counter的值清0。不难理解Bytemask域为全1,表示所有的数据都已经写满。
其中,Counter时钟计数器可作为是否结束一个缓存项写合并的判断依据,例如:时钟计数器可以设置一层,也可以设置两层。设计一层时钟计数器的方案:即Store Buffer的每一项设置一个Counter位,当时钟计数器达到设定的最大值,将该项写入Dcache中,其中时钟计数器的最大值可以为通过硬件设置的固定的时钟周期,比如100万拍,也可以用控制寄存器,根据程序的行为软件或硬件动态进行调整。设计两层时钟计数器的方案:StoreBuffer的每一项设置一个Counter位,另外全局也设置一个统一的全局计数器Global_counter,当Global_counter达到一个固定值时,各项的Counter位加1。好处是可以避免Store Buffer的每一项的Counter位的位数太大,占用较大的硬件资源。
此外,在一些实施例中,在当前提交的Store指令将数据写到Store Buffer的缓存项之前,若缓存项内存在Bytemask位为1的字节,即该字节中存在之前提交的Store指令写入的数据,那么当前提交的Store指令的数据仍然可以被写入该字节,以覆盖之前的数据,使得缓存项中存储的数据为最新数据。
具体来说,对于一层的时钟计数器的设计,各项Counter的值在每个时钟周期都加1,直到各位全为1。如果很长时间没有被写操作,那么Counter就会很大,但是如果对应的Store Buffer的项还未写满,就有可能不会被写满了,此时可以将Store buffer中Counter值最大的一项写入DCache。对于两层的计数器设计,可以做一个全局计数器,把时钟放慢。
全局计数器Global_counter每个时钟周期加1,直到Global_counter的各位为全1,各项的Counter再加1。
此外,当Store Buffer满时,也要结束写合并,可以选取Counter位值最大的一项,写入Dcache;如果Counter位值相同,可以从最早的Store指令开始进行处理。
在上述实施例的基础上,上述步骤S105中“将满足预设写入条件的缓存项内的数据写入高速缓冲存储器”,可包括以下三种情况:
其一、将字节标志位全部为第一预设数据的缓存项内的数据写入高速缓冲存储器。
其二、将时钟计数器的数值等于第二预设数据的缓存项内的数据写入高速缓冲存储器。
其三、响应于存数缓存队列被写满,将字节标志位全部为第一预设数据的缓存项内的数据写入高速缓冲存储器,或者将时钟计数器的数值最大的缓存项内的数据写入高速缓冲存储器。
举例说明,Store Buffer写DCache的条件可以为:该项的Bytemask位为全1,或该项Counter计数器各位全为1,或Store buffer已满,即Storebuffer full信号为1。
其中Store Buffer写满的判断,可通过以下方式实现:
其一、获取在每个流水节拍进入存数缓存队列的存数指令的个数;获取存数缓存队列中可用的缓存项的个数;若在每个流水节拍进入存数缓存队列的存数指令的个数大于可用的缓存项的个数,确定存数缓存队列被写满。
举例说明,按照每拍进入的Store指令数,Store buffer剩余的项数小于StoreBuffer当前拍进入的指令数时,Storebuffer full信号置为1,以Store buffer full信号置1表示存数缓存队列被写满。
其二、获取在单个流水节拍进入存数缓存队列的存数指令的个数的最大值;获取存数缓存队列中可用的缓存项的个数;若最大值大于可用的缓存项的个数,确定存数缓存队列被写满。
举例说明,按照每拍最大可进入的Store指令数,Store Buffer剩余的项数小于Store Buffer最大可进入的指令数时,Storebuffer full信号置为1,以Storebuffer full信号置1表示存数缓存队列被写满。
在一些实施例中,当Storebuffer full信号置为1,Store Buffer写DCache:从Store Buffer头指针Storebuffer_head开始找到第一项可以写DCache的项(即Bytemask全为1的项,或者Counter值最大的项),将该项的数据按照Bytemask的指示写入DCache,即写入Cache行的数据为该项Bytemask为1的位对应的Store Buffer数据域的值,Bytemask为0的位(表示该字节没有被Store指令写过)对应的Dcache数据域用Cache行原来的值。该项执行完写DCache操作后,将Valid位置为0,Bytemask位全部置为0。
此外,考虑到存在高速缓冲存储器是否支持Bytemask位(字节标志位),即对于缓存项没有写的字节是否需要高速缓冲存储器原来的数据,例如如果高速缓冲存储器支持ECC(循环冗余校验,Error CRC Check)等校验的情况,在缓存项中各个字节未写满的情况下(即缓存项中存在Bytemask位为0的字节),需要获取高速缓冲存储器原来的数据。将存数缓存队列中的数据写入高速缓冲存储器具体可包括以下四种处理方式:
其一、若DCache支持Bytemask位,当存数指令命中缓存时,则可直接将缓存项中的Bytemask位、待存储数据、地址等写入高速缓冲存储器,高速缓冲存储器可根据各个字节的Bytemask位判断该字节是否被写入数据。
其二、若DCache支持Bytemask位,当存数指令未命中缓存时,从下一级存储获取数据,再将缓存项中的Bytemask位、待存储数据、地址等写入高速缓冲存储器。
其三、若DCache不支持Bytemask位,当存数指令命中缓存时,读取缓存项中Bytemask位为0的字节在DCache中对应的字节,并将其与缓存项其他Bytemask位为1的字节拼接后写入DCache。
其四、若DCache不支持Bytemask位,当存数指令未命中缓存时,从下一级存储中取回数据,将其写入DCache,以及写到缓存项,将Bytemask位为0对应的字节,与缓存项其他Bytemask位为1的字节拼接,再写入DCache。
相较于如图4所示的相关技术中传统的指令流水线,即访存指令(Store指令和Load指令)共用流水线,本公开将Store指令的流水线分离出来,不再跟Load指令执行同样的流水线,不需要写到寄存器中,可以直接写回,按照程序的序做提交,不需要得到DCache中的数据,只需要做地址变换,其他Tag比较等都可以延后处理,其优点是Store指令可以提前退出Lsroq,提早释放资源。将Store指令提交至Store Buffer里面做写合并,采用块地址判断连续或者不连续的指令是否需要写同一DCache行,如果数据要写在一个DCache行里面,就把这些数据在Store Buffer合并起来,占用同一项,把Store Buffer的数据域设置为一个DCache行的大小,将相同DCache行的数据一次写入DCache,可以提高速度,减少延迟,本公开中即使未命中一级数据Cache,但是该Cache行的所有数据都有了,就可以直接写入DCache。
为实现上述实施例,本公开还提出一种存数指令的执行系统,包括寄存器堆、访存地址生成部件、数据转译后备缓冲存储器、访存重定序队列、存数缓存队列和高速缓冲存储器,其中,寄存器堆中包括定点寄存器堆和浮点寄存器堆,定点寄存器堆和浮点寄存器堆分别与访存重定序队列连接;定点寄存器堆还与访存地址生成部件连接;访存地址生成部件、数据转译后备缓冲存储器、访存重定序队列、存数缓存队列和高速缓冲存储器依次顺序连接;基于寄存器堆和访存地址生成部件,获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址;基于数据转译后备缓冲存储器,根据虚拟存储地址确定对应的物理地址;基于访存重定序队列,根据待存储数据和物理地址进行访存指令重定序,访存指令中包括存数指令,以及基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内;高速缓冲存储器用于存储写入的数据,写入的数据为存数缓存队列中满足预设写入条件的缓存项内的数据。图5为根据本公开实施例的存数指令的执行系统提供的存数指令执行流水线示意图。如图5所示,在第一个流水级,存数指令发射队列(Stqueue)接收派遣指令(Dispatch inst)派遣的存数指令,并将当前已经准备就绪的两条指令按照存数指令发射队列的发射策略进行发射(如选择在程序指令序上最老的两条准备好的Store指令发射),Store指令会等待操作数的地址和数据同时准备就绪后发射,如图5所示每拍可以同时发射两条Store指令。在第二个流水级,针对发射后的存数指令根据指令的类型从寄存器堆中的定点寄存器堆(Fix register file)和/或浮点寄存器堆(Float register file)中获取所需的操作数,访存地址生成部件(具体可为存数指令地址生成部件St_memaddr)根据存数指令的类型,利用从寄存器堆中读出的一个操作数计算存数指令的虚地址,其中一个存数指令对应一个访存地址生成部件,将虚地址发送至数据转译后备缓冲存储器(DTLB)准备进行虚实地址转换。其中,从寄存器堆中读出的另一个操作数是存数指令的数据,根据存数指令的类型从浮点寄存器堆或定点寄存器堆读出后发送至访存重定序队列(Lsroq)。在第三个流水级,从数据转译后备缓冲存储器中读取存数指令的物理地址,发送至访存重定序队列,访存重定序队列对队列中的访存指令进行重定序,对于需要重新执行的Load指令置例外重新执行(roll back)。在第四个流水级,每拍写回两条存数指令(Store Writeback),存数指令写回后,就可以按照程序执行序顺序提交存数指令,提交后写到存数缓存队列(Store buffer)中就可以退出Lsroq了。在第五个流水级,对存数指令进行写合并,将Store Buffer中的一条Store指令地址低位送到数据高速缓存的标签(DCache TAG)部件读Tag,以及在标签比较部件进行8路(8路组相连,该路数可根据需要设定,本申请不做限定)标签(Tag)和Store指令的Tag的比较,确定一级数据Cache是否命中,以及命中在哪一路。在第六个流水级,根据是否命中选择上述不同的写入方式将存数缓存队列中的数据写入高速缓冲存储器或数据高速缓存的数据存储阵列。
图6是根据一示例性实施例示出的一种存数指令的执行装置的框图。如图6所示,本公开实施例的存数指令的执行装置600,包括:获取模块601、确定模块602、发送模块603、缓存模块604和写入模块605。
获取模块601,用于获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址。
确定模块602,用于根据虚拟存储地址确定对应的物理地址。
发送模块603,用于将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令中包括存数指令。
缓存模块604,用于基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内。
写入模块605,用于将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
在本公开的一个实施例中,缓存模块604,进一步用于:根据存数指令对应的物理地址,确定存数指令对应的目标缓存项;将存数指令的待存储数据缓存至目标缓存项内。
在本公开的一个实施例中,缓存模块604,进一步用于:根据存数指令对应的物理地址,确定存数指令在高速缓冲存储器中对应的缓存行地址;将缓存行地址与存数缓存队列中缓存项内地址域的地址进行比较;响应于存在地址域的地址与缓存行地址相同的缓存项,将缓存项确定为存数指令对应的目标缓存项;响应于不存在地址域的地址与缓存行地址相同的缓存项,将存数缓存队列中头指针指向的缓存项确定为存数指令对应的目标缓存项,并将头指针指向目标缓存项的下一个缓存项。
在本公开的一个实施例中,缓存模块604,还用于:将目标缓存项中地址域的地址设置为存数指令对应的缓存行地址;以及将目标缓存项的有效标志位设置为有效值。
在本公开的一个实施例中,缓存模块604,进一步用于:根据有效标志位,从缓存项中筛选出有效的缓存项;将缓存行地址与有效的缓存项中地址域的地址进行比较。
在本公开的一个实施例中,缓存模块604,进一步用于:将待存储数据缓存至目标缓存项的字节存储资源中;将待存储数据占用的字节存储资源对应的字节标志位设置为第一预设数据。在本公开的一个实施例中,缓存模块,还用于:将目标缓存项对应的时钟计数器清零。
在本公开的一个实施例中,缓存模块604,还用于:响应于在当前时钟周期内,存数缓存队列中缓存项未被写入待存储数据,控制缓存项的时钟计数器加一;或者在每个时钟周期控制存数缓存队列对应的全局计数器加一,并在全局计数器的数值等于预设阈值的情况下,控制未被写入待存储数据的缓存项对应的时钟计数器加一。
在本公开的一个实施例中,写入模块605,进一步用于:将字节标志位全部为第一预设数据的缓存项内的数据写入高速缓冲存储器;或者将时钟计数器的数值等于第二预设数据的缓存项内的数据写入高速缓冲存储器;或者响应于存数缓存队列被写满,将字节标志位全部为第一预设数据的缓存项内的数据写入高速缓冲存储器,或者将时钟计数器的数值最大的缓存项内的数据写入高速缓冲存储器。
在本公开的一个实施例中,写入模块605,还用于:获取在每个流水节拍进入存数缓存队列的存数指令的个数;获取存数缓存队列中可用的缓存项的个数;若在每个流水节拍进入存数缓存队列的存数指令的个数大于可用的缓存项的个数,确定存数缓存队列被写满。
在本公开的一个实施例中,写入模块605,还用于:获取在单个流水节拍进入存数缓存队列的存数指令的个数的最大值;获取存数缓存队列中可用的缓存项的个数;若最大值大于可用的缓存项的个数,确定存数缓存队列被写满。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
综上,本公开从寄存器堆中获取已发射的存数指令对应的待存储数据和待存储数据对应的虚拟存储地址;根据虚拟存储地址确定对应的物理地址;将待存储数据和物理地址发送至访存重定序队列,以进行访存指令重定序,访存指令包括存数指令;基于访存重定序队列中访存指令的程序执行序,将存数指令的待存储数据缓存至存数缓存队列中对应的目标缓存项内;将存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。构建独立的存数执行的流水线,将取数指令和存数指令流水线解耦合,缩短存数指令的执行时间,提高指令执行效率。
图7是根据一示例性实施例示出的一种电子设备700的框图。
如图7所示,上述电子设备700包括:
存储器701及处理器702,连接不同组件(包括存储器701和处理器702)的总线703,存储器701存储有计算机程序,当处理器702执行程序时实现本公开实施例的存数指令的执行方法。
总线703表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
电子设备700典型地包括多种电子设备可读介质。这些介质可以是任何能够被电子设备700访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器701还可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)704和/或高速缓冲存储器705。电子设备700可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统706可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM, DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线703相连。存储器701可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本公开各实施例的功能。
具有一组(至少一个)程序模块707的程序/实用工具708,可以存储在例如存储器701中,这样的程序模块707包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块707通常执行本公开所描述的实施例中的功能和/或方法。
电子设备700也可以与一个或多个外部设备709(例如键盘、指向设备、显示器710等)通信,还可与一个或者多个使得用户能与该电子设备700交互的设备通信,和/或与使得该电子设备700能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口712进行。并且,电子设备700还可以通过网络适配器713与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图7所示,网络适配器713通过总线703与电子设备700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器702通过运行存储在存储器701中的程序,从而执行各种功能应用以及数据处理。
需要说明的是,本实施例的电子设备的实施过程和技术原理参见前述对本公开实施例的存数指令的执行方法的解释说明,此处不再赘述。
为了实现上述实施例,本公开还提出一种计算机可读存储介质。
其中,该计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如前的存数指令的执行方法。可选的,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (15)
1.一种存数指令的执行方法,其特征在于,包括:
获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;
根据所述虚拟存储地址确定对应的物理地址;
将所述待存储数据和所述物理地址发送至访存重定序队列,以进行访存指令重定序,所述访存指令中包括所述存数指令;
基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内;
将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
2.根据权利要求1所述的方法,其特征在于,所述基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内,包括:
根据所述存数指令对应的所述物理地址,确定所述存数指令对应的所述目标缓存项;
将所述存数指令的所述待存储数据缓存至所述目标缓存项内。
3.根据权利要求2所述的方法,其特征在于,所述根据所述存数指令对应的所述物理地址,确定所述存数指令对应的所述目标缓存项,包括:
根据所述存数指令对应的所述物理地址,确定所述存数指令在所述高速缓冲存储器中对应的缓存行地址;
将所述缓存行地址与所述存数缓存队列中缓存项内地址域的地址进行比较;
响应于存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述缓存项确定为所述存数指令对应的所述目标缓存项;
响应于不存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述存数缓存队列中头指针指向的缓存项确定为所述存数指令对应的所述目标缓存项,并将所述头指针指向所述目标缓存项的下一个缓存项。
4.根据权利要求3所述的方法,其特征在于,所述响应于不存在所述地址域的地址与所述缓存行地址相同的所述缓存项,将所述存数缓存队列中头指针指向的缓存项确定为所述存数指令对应的所述目标缓存项之后,还包括:
将所述目标缓存项内地址域的地址设置为所述存数指令对应的缓存行地址;以及
将所述目标缓存项的有效标志位设置为有效值。
5.根据权利要求4所述的方法,其特征在于,所述将所述缓存行地址与所述存数缓存队列中缓存项内地址域的地址进行比较,包括:
根据所述有效标志位,从所述缓存项中筛选出有效的所述缓存项;
将所述缓存行地址与有效的所述缓存项内地址域的地址进行比较。
6.根据权利要求2所述的方法,其特征在于,所述将所述存数指令的所述待存储数据缓存至所述目标缓存项内,包括:
将所述待存储数据缓存至所述目标缓存项的字节存储资源中;
将所述待存储数据占用的所述字节存储资源对应的字节标志位设置为第一预设数据。
7.根据权利要求6所述的方法,其特征在于,所述将所述存数指令的所述待存储数据缓存至所述目标缓存项内之后,还包括:
将所述目标缓存项对应的时钟计数器清零。
8.根据权利要求7所述的方法,其特征在于,还包括:
响应于在当前时钟周期内,所述存数缓存队列中缓存项未被写入所述待存储数据,控制所述缓存项的所述时钟计数器加一;或者
在每个时钟周期控制所述存数缓存队列对应的全局计数器加一,并在所述全局计数器的数值等于预设阈值的情况下,控制未被写入所述待存储数据的缓存项对应的所述时钟计数器加一。
9.根据权利要求1所述的方法,其特征在于,所述将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器,包括:
将字节标志位全部为第一预设数据的缓存项内的数据写入所述高速缓冲存储器;或者
将时钟计数器的数值等于第二预设数据的缓存项内的数据写入所述高速缓冲存储器;或者
响应于所述存数缓存队列被写满,将所述字节标志位全部为所述第一预设数据的缓存项内的数据写入所述高速缓冲存储器,或者将所述时钟计数器的数值最大的所述缓存项内的数据写入所述高速缓冲存储器。
10.根据权利要求9所述的方法,其特征在于,还包括:
获取在每个流水节拍进入所述存数缓存队列的存数指令的个数;
获取所述存数缓存队列中可用的缓存项的个数;
若在每个所述流水节拍进入所述存数缓存队列的所述存数指令的个数大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
11.根据权利要求9所述的方法,其特征在于,还包括:
获取在单个流水节拍进入所述存数缓存队列的存数指令的个数的最大值;
获取所述存数缓存队列中可用的缓存项的个数;
若所述最大值大于所述可用的缓存项的个数,确定所述存数缓存队列被写满。
12.一种存数指令的执行系统,其特征在于,包括:寄存器堆、访存地址生成部件、数据转译后备缓冲存储器、访存重定序队列、存数缓存队列和高速缓冲存储器;
其中,所述寄存器堆中包括定点寄存器堆和浮点寄存器堆,所述定点寄存器堆和所述浮点寄存器堆分别与所述访存重定序队列连接;
所述定点寄存器堆还与所述访存地址生成部件连接;
所述访存地址生成部件、所述数据转译后备缓冲存储器、所述访存重定序队列、所述存数缓存队列和所述高速缓冲存储器依次顺序连接;
基于所述寄存器堆和所述访存地址生成部件,获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;
基于所述数据转译后备缓冲存储器,根据所述虚拟存储地址确定对应的物理地址;
基于所述访存重定序队列,根据所述待存储数据和所述物理地址进行访存指令重定序,所述访存指令中包括所述存数指令,以及基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至所述存数缓存队列中对应的目标缓存项内;
所述高速缓冲存储器用于存储写入的数据,所述写入的数据为所述存数缓存队列中满足预设写入条件的缓存项内的数据。
13.一种存数指令的执行装置,其特征在于,包括:
获取模块,用于获取已发射的存数指令对应的待存储数据和所述待存储数据对应的虚拟存储地址;
确定模块,用于根据所述虚拟存储地址确定对应的物理地址;
发送模块,用于将所述待存储数据和所述物理地址发送至访存重定序队列,以进行访存指令重定序,所述访存指令中包括所述存数指令;
缓存模块,用于基于所述访存重定序队列中所述访存指令的程序执行序,将所述存数指令的所述待存储数据缓存至存数缓存队列中对应的目标缓存项内;
写入模块,用于将所述存数缓存队列中满足预设写入条件的缓存项内的数据写入高速缓冲存储器。
14.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器的可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1-11中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211468484.3A CN115563027B (zh) | 2022-11-22 | 2022-11-22 | 存数指令的执行方法、系统及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211468484.3A CN115563027B (zh) | 2022-11-22 | 2022-11-22 | 存数指令的执行方法、系统及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115563027A true CN115563027A (zh) | 2023-01-03 |
CN115563027B CN115563027B (zh) | 2023-05-12 |
Family
ID=84770111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211468484.3A Active CN115563027B (zh) | 2022-11-22 | 2022-11-22 | 存数指令的执行方法、系统及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115563027B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116627865A (zh) * | 2023-04-26 | 2023-08-22 | 安庆师范大学 | 具有多个存储装置的计算机的访问方法及装置 |
CN117478089A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 存数指令执行方法、装置及电子设备 |
CN117971722A (zh) * | 2024-03-28 | 2024-05-03 | 北京微核芯科技有限公司 | 一种取数指令的执行方法及其装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090198867A1 (en) * | 2008-01-31 | 2009-08-06 | Guy Lynn Guthrie | Method for chaining multiple smaller store queue entries for more efficient store queue usage |
CN110515659A (zh) * | 2019-08-28 | 2019-11-29 | 中国人民解放军国防科技大学 | 一种原子指令的执行方法和装置 |
CN112099854A (zh) * | 2020-11-10 | 2020-12-18 | 北京微核芯科技有限公司 | 调度乱序队列和判断队列取消项的方法和装置 |
CN113934655A (zh) * | 2021-12-17 | 2022-01-14 | 北京微核芯科技有限公司 | 解决高速缓冲存储器地址二义性问题的方法和装置 |
US20220197810A1 (en) * | 2020-12-21 | 2022-06-23 | Fujitsu Limited | Calculator and calculation method |
CN114924794A (zh) * | 2022-07-20 | 2022-08-19 | 北京微核芯科技有限公司 | 一种存储部件的发射队列的地址存储、调度方法和装置 |
US20220358045A1 (en) * | 2021-05-07 | 2022-11-10 | Ventana Micro Systems Inc. | Physical address proxies to accomplish penalty-less processing of load/store instructions whose data straddles cache line address boundaries |
-
2022
- 2022-11-22 CN CN202211468484.3A patent/CN115563027B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090198867A1 (en) * | 2008-01-31 | 2009-08-06 | Guy Lynn Guthrie | Method for chaining multiple smaller store queue entries for more efficient store queue usage |
CN110515659A (zh) * | 2019-08-28 | 2019-11-29 | 中国人民解放军国防科技大学 | 一种原子指令的执行方法和装置 |
CN112099854A (zh) * | 2020-11-10 | 2020-12-18 | 北京微核芯科技有限公司 | 调度乱序队列和判断队列取消项的方法和装置 |
US20220197810A1 (en) * | 2020-12-21 | 2022-06-23 | Fujitsu Limited | Calculator and calculation method |
US20220358045A1 (en) * | 2021-05-07 | 2022-11-10 | Ventana Micro Systems Inc. | Physical address proxies to accomplish penalty-less processing of load/store instructions whose data straddles cache line address boundaries |
CN113934655A (zh) * | 2021-12-17 | 2022-01-14 | 北京微核芯科技有限公司 | 解决高速缓冲存储器地址二义性问题的方法和装置 |
CN114924794A (zh) * | 2022-07-20 | 2022-08-19 | 北京微核芯科技有限公司 | 一种存储部件的发射队列的地址存储、调度方法和装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116627865A (zh) * | 2023-04-26 | 2023-08-22 | 安庆师范大学 | 具有多个存储装置的计算机的访问方法及装置 |
CN116627865B (zh) * | 2023-04-26 | 2024-02-06 | 安庆师范大学 | 具有多个存储装置的计算机的访问方法及装置 |
CN117478089A (zh) * | 2023-12-28 | 2024-01-30 | 北京微核芯科技有限公司 | 存数指令执行方法、装置及电子设备 |
CN117478089B (zh) * | 2023-12-28 | 2024-03-29 | 北京微核芯科技有限公司 | 存数指令执行方法、装置及电子设备 |
CN117971722A (zh) * | 2024-03-28 | 2024-05-03 | 北京微核芯科技有限公司 | 一种取数指令的执行方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115563027B (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240078190A1 (en) | Write merging on stores with different privilege levels | |
US8458408B2 (en) | Cache directed sequential prefetch | |
US6425075B1 (en) | Branch prediction device with two levels of branch prediction cache | |
US8364907B2 (en) | Converting victim writeback to a fill | |
US7415575B1 (en) | Shared cache with client-specific replacement policy | |
KR101531078B1 (ko) | 데이터 처리 시스템 및 데이터 처리 방법 | |
US6725337B1 (en) | Method and system for speculatively invalidating lines in a cache | |
US5983325A (en) | Dataless touch to open a memory page | |
US6622237B1 (en) | Store to load forward predictor training using delta tag | |
US6651161B1 (en) | Store load forward predictor untraining | |
US9886385B1 (en) | Content-directed prefetch circuit with quality filtering | |
US8145848B2 (en) | Processor and method for writeback buffer reuse | |
CN115563027B (zh) | 存数指令的执行方法、系统及装置 | |
US6694424B1 (en) | Store load forward predictor training | |
US6481251B1 (en) | Store queue number assignment and tracking | |
US9135005B2 (en) | History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties | |
US8239638B2 (en) | Store handling in a processor | |
US10831675B2 (en) | Adaptive tablewalk translation storage buffer predictor | |
JP2713332B2 (ja) | データ処理装置及びメモリ・キャッシュの動作方法 | |
US6704854B1 (en) | Determination of execution resource allocation based on concurrently executable misaligned memory operations | |
US6338128B1 (en) | System and method for invalidating an entry in a translation unit | |
US20030182539A1 (en) | Storing execution results of mispredicted paths in a superscalar computer processor | |
EP4020229A1 (en) | System, apparatus and method for prefetching physical pages in a processor | |
US6079002A (en) | Dynamic expansion of execution pipeline stages | |
WO1991013402A1 (en) | Two-level branch prediction cache |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |