CN114090080A - 指令高速缓存器、指令读取方法及电子设备 - Google Patents
指令高速缓存器、指令读取方法及电子设备 Download PDFInfo
- Publication number
- CN114090080A CN114090080A CN202111361613.4A CN202111361613A CN114090080A CN 114090080 A CN114090080 A CN 114090080A CN 202111361613 A CN202111361613 A CN 202111361613A CN 114090080 A CN114090080 A CN 114090080A
- Authority
- CN
- China
- Prior art keywords
- instruction
- cache
- level
- read request
- current
- 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
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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/0877—Cache access modes
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
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
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种指令高速缓存器、指令读取方法及电子设备。
背景技术
在典型计算机结构中,通常包含处理器和多级存储器。多级存储器中,主存储器存储指令和数据。处理器从主存储器中获取指令和相应的数据,执行指令,并将结果数据写回到主存储器中,在处理器和主存储器之间,通常有一级或多级高速缓冲存储器(Cache)或称为一级或多级高速缓存器。高速缓存器用于降低处理器读取指令和数据的时间。当处理器需要读取主存储器中某个地址数据时,它首先检查该数据是否存在于高速缓存器中。如果高速缓存器中包含该数据,则处理器直接从高速缓存器中读取该数据,从高速缓存器中读取数据要远快于从主存储器中读取数据,如果高速缓存器中不包含该数据,则高速缓存器从主存储器中读取该数据,存放在高速缓存器中,并返回给处理器。
在现有计算机结构中,经常将第一级高速缓存器分为指令高速缓存器和数据高速缓存器两部分,其中,指令高速缓存器用于存储处理器需要执行的指令,数据高速缓存器用于存储处理器需要的数据。
然而,现有技术难以兼顾对于指令高速缓存器空间的利用率以及指令读取的效率的提高。
因此,如何同时提高指令读取的效率和指令高速缓存器空间的利用率,就成为本领域技术人员亟需解决的技术问题。
发明内容
有鉴于此,本申请实施例提供一种指令高速缓存器、指令读取方法及电子设备,以实现同时提高指令读取的效率和指令高速缓存器空间的利用率。
为实现上述目的,本申请实施例提供如下技术方案。
第一方面,本申请实施例提供一种指令高速缓存器,包括:
第一级指令高速缓存器,所述第一级指令高速缓存器的数量为多个,各个所述第一级指令高速缓存器分别与各个线程一一对应;
第二级指令高速缓存器,所述第二级指令高速缓存器对应于各个所述线程,且与各个所述第一级指令高速缓存器均对应。
第二方面,本申请实施例提供一种指令读取方法,所述指令读取方法,应用于如第一方面所述的指令高速缓存器,包括:
通过第一级指令高速缓存器接收对应的线程的当前指令的当前指令读请求;
当所述当前指令在所述第一级指令高速缓存器中命中时,读取并返回所述当前指令至处理器;
当所述当前指令在所述第一级指令高速缓存器中缺失时,向第二级指令高速缓存器发送当前指令读请求。
第三方面,本申请实施例提供一种电子设备,包括如第一方面所述的指令高速缓存器系统。
本申请实施例提供的指令高速缓存器包括两级指令高速缓存器:第一级指令高速缓存器、第二级指令高速缓存器,其中,第一级指令高速缓存器的数量为多个,并且各个第一级指令高速缓存器分别与各个线程一一对应,第二级指令高速缓存器为所有线程共有,对应于各个线程,并且,第二级指令高速缓存器也与各个第一级指令高速缓存器均对应。
这样,将指令高速缓存器分为两级,当读取线程的指令时,首先基于线程确定对应的第一级指令高速缓存器,在第一级指令高速缓存器中,每个线程使用独立的第一级指令高速缓存器,这样可以避免某个线程的指令占据过多的存储空间,影响其它线程的指令读取效率,从而可以提高各个线程的指令读取效率,同时,第二级指令高速缓存器数量为一个,为所有线程共用,可以避免多线程处理器中某个线程相对于其它线程读取指令更频繁时,该线程可能会出现较多的缓存缺失,可以保证第二级指令高速缓存器一直处于利用的状态,提高指令高速缓存器的空间的利用率,可见,本申请实施例提供的指令高速缓存器,通过将指令高速缓存器分为两级,可以同时提高指令读取的效率和指令高速缓存器空间的利用率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的指令高速缓存器应用示意图;
图2为本申请实施例提供的指令高速缓存器的架构图;
图3为本申请实施例提供的第一级指令高速缓存器架构图;
图4为本申请实施例提供的第二级指令高速缓存器架构图;
图5为本申请实施例提供的第二级指令高速缓存器另一架构图;
图6为本申请实施例提供的指令读取方法的一种可选流程示意图;
图7为本申请实施例提供的指令读取方法的另一种可选流程示意图;
图8为本申请实施例提供的指令读取方法的又一种可选流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例提供的指令高速缓存器应用示意图。
如图中所示,在计算机结构中,在处理器40和主存储器90之间,通常有一级高速缓存器50和多级高速缓冲存储器80,并且经常将一级高速缓存器50分为指令高速缓存器70和数据高速缓存器60两部分,其中,指令高速缓存器70用于存储处理器40需要执行的指令,数据高速缓存器60用于存储处理器40需要的数据。
对于指令高速缓存器70而言,如果处理器40的多个线程共用指令高速缓存器70,那么会因为某个线程的指令占据过多的存储空间,而影响其他线程的指令读取效率;如果将指令高速缓存器分区,每个线程对应一个分区,并且不会使用其他线程的分区,那么就会造成当多线程处理器中某个线程相对于其它线程读取指令更频繁时,由于分区的存在,则该线程可能会出现较多的缓存缺失(CacheMiss),而其它线程读取指令次数较少,所以其对应的分区利用率也较低。
为此,本申请实施例提供了一种指令高速缓存器,包括两级指令高速缓存器,即第一级指令高速缓存器10和第二级指令高速缓存器20。
请参考图2,图2为本申请实施例提供的指令高速缓存器的架构图。
本申请实施例所提供的指令高速缓存器包括两级指令高速缓存器:第一级指令高速缓存器10、第二级指令高速缓存器20,其中,第一级指令高速缓存器10的数量为多个,并且各个第一级指令高速缓存器10分别与各个线程(线程0、线程1......线程n)一一对应,第二级指令高速缓存器20为所有线程共有,对应于各个线程,并且,第二级指令高速缓存器20也与各个第一级指令高速缓存器10均对应。
第二级指令高速缓存器20也与各个第一级指令高速缓存器10均对应是指,第一级指令高速缓存器10的数量为多个,而第二级指令高速缓存器20的数量为一个,多个第一级指令高速缓存器10均与第二级指令高速缓存器20相对应。在一种具体的实施例中,可以通过仲裁器30连接各个第一级指令高速缓存器10与第二级指令高速缓存器20。
这样,将指令高速缓存器分为两级,当读取线程的指令时,首先基于线程确定对应的第一级指令高速缓存器10,在第一级指令高速缓存器10中,每个线程使用独立的第一级指令高速缓存器10,这样可以避免某个线程的指令占据过多的存储空间,影响其它线程的指令读取效率,从而可以提高各个线程的指令读取效率,同时,第二级指令高速缓存器20数量为一个,为所有线程共用,可以避免多线程处理器中某个线程相对于其它线程读取指令更频繁时,该线程可能会出现较多的缓存缺失,可以保证第二级指令高速缓存器20一直处于利用的状态,提高指令高速缓存器的空间的利用率,可见,本申请实施例提供的指令高速缓存器,通过将指令高速缓存器分为两级,可以同时提高指令读取的效率和指令高速缓存器空间的利用率。
在一种具体实施例中,可以将第一级高速缓存器10耦合在处理器的内部,与处理器的取指模块集成在一起。这样,使第一级高速缓存器10与处理器在物理上更为接近,可以使执行效率更高、速度更快,当然,在其他实施例中,第一级高速缓存器10也可以位于处理器的外部。
请继续参考图2,在另一种具体实施方式中,本申请实施例提供的指令高速缓存器还可以包括仲裁器30,仲裁器30可以连通各个第一级指令高速缓存器10与第二级指令高速缓存器20,各个第一级指令高速缓存器10的指令读请求经过仲裁器30仲裁后,发送至所述第二级指令高速缓存器20。
仲裁器30连接各个第一级指令高速缓存器10与第二级指令高速缓存器20,当有多个第一级指令高速缓存器10需要向第二级指令高速缓存器20发送指令读请求时,需要经过仲裁器30的仲裁来决定发送的先后顺序。
通过仲裁器30的仲裁,可以更合理、顺利的将每个第一级指令高速缓存器10中的指令读请求发送给第二级指令高速缓存器20。
为了进一步提高指令读取的效率,本申请实施例提供一种指令高速缓存器,请参考图3,图3为本申请实施例提供的第一级指令高速缓存器架构图。
如图中所示,第一级指令高速缓存器10可以包括第一级存储模块100、取指电路101、指令预取电路102、替换逻辑电路103、高速缓存更新电路104、第一级接口电路105。
其中,第一级存储模块100适于存储所对应的线程的各个指令;
取指电路101与第一级存储模块100相连,适于根据接收到的当前指令读请求,在第一级存储模块100中读取所述线程的当前指令;
指令预取电路102,适于当所述当前指令为非跳转指令时,获取所述当前指令读请求所请求的内存地址的下一地址指令,并在所述下一地址指令未存储在所述第一级存储模块100时,向所述第二级指令高速缓存器20发出所述下一地址指令读请求;
高速缓存更新电路104,适于接收第二级指令高速缓存器20返回的读请求中的指令,并更新第一级存储模块100,其中所述指令包括所述当前指令和所述下一地址指令。
在一种具体实施方式中,第一级存储模块100包括多个缓存单元,各个指令与各个缓存单元的映射关系为全关联映射。
在一种具体的实施例中,缓存单元可以为缓存行,第一级存储模块100包括多个缓存单元,即第一级存储模块100包括多个缓存行,具体的,每个线程都对应一个第一级指令高速缓存器10,相应的,每个线程都对应一个第一级存储模块100,第一级存储模块100的容量较小。
具体地,第一级存储模块100可以设置为包括4个缓存行,每个缓存行为256比特,处理器每条指令为32比特,那么,第一级存储模块100每个缓存行都可以存储8个连续地址的指令,4个缓存行存储的地址之间可以连续,也可以不连续。
由于处理器的取指操作具有较强的空间局部性,即一条指令被执行时,与它地址相邻的指令也很有可能会被执行,所以,第一级存储模块100每个缓存行存储8个连续地址的指令,可以提高指令的读取效率。
在一种具体的实施例中,还可以通过增加总线带宽,每次读取16个连续地址的指令,进一步的提高处理器的执行效率;第一级存储模块100采用全关联映射的方式,即各个线程的指令数据可以写到相对应的第一级存储模块100中的任一缓存行,每一缓存行的tag信号(标签信号),标识地址的高位,用来检索缓存行中的指令,valid信号(有效信号),用来标记当前的缓存行是否包含有效数据,valid信号可以为1比特取值为0或者1,其中,valid值为0表示数据无效,valid值为1表示数据有效,指令高速缓存器在初始状态下缓存行内没有指令,用valid 0表示当前缓存行的数据无效,当缓存行被更新成有指令存储的状态后,valid值由0变为1,表示当前缓存行数据有效。
全关联映射可以保证第一级存储模块100的缓存空间得到充分的利用,并且,虽然第一级存储模块100的容量较小,但各个线程都有相对应的第一级存储模块100,因此可以保证指令读取的效率。
在一种具体实施方式中,取指电路101与第一级存储模块100相连,适于根据接收到的当前指令读请求,在第一级存储模块100中读取所述线程的当前指令,具体可以包括:如果当前指令在第一级存储模块100中命中时,将当前指令返回至处理器;如果当前指令在第一级存储模块100中缺失时,向所述第二级指令高速缓存器20发送所述当前指令读请求。
当处理器发送当前指令读请求后,取指电路101会在第一级存储模块100中搜索读请求地址的指令,如果该指令存在于第一级存储模块100中,则取指电路101会获取到该当前指令,并将该当前指令返回给处理器的执行单元去执行指令,如果该当前指令在第一级存储模块100中缺失,则通过第一接口电路105向第二级指令高速缓存器20发送当前指令读请求,第一级接口电路105是第一级指令高速缓存器10中,适于传送第一级指令高速缓存器10与第二级指令高速缓存器20之间的数据的电路,通过取指电路101在第一级存储模块100中对当前指令的搜索,可以判断当前指令在第一级指令高速缓存器10中的命中或缺失,从而进行下一步工作,由上文叙述可知,第一级指令高速缓存器10通过仲裁器30仲裁后向第二级指令高速缓存器20发送指令读请求,在一种具体的实施例中,仲裁器30可以通过轮询的方式,即通过轮流询问每个第一级指令高速缓存器10中第一级存储模块100每个缓存行,依次向第二级指令高速缓存器20发送指令读请求。
需要说明的是,本申请并不限制仲裁方式,可以使用轮询的仲裁方式,在其它的实施例中,仲裁器30也可以通过其它的仲裁方式发送每个第一级指令高速缓存器10中第一级存储模块100每个缓存行的指令读请求。
当第二级指令高速缓存器20返回当前指令读请求中的当前指令后,高速缓存更新电路104会获取该当前指令,并将该当前指令更新到第一级指令高速缓存器10的缓存行中,具体更新到哪一个缓存行,在一种具体的实施例中,可以由替换逻辑电路103来决定,替换逻辑电路103适于记录第一级指令高速缓存器10中各个缓存行的使用情况,并当需要使用至少一个缓存行时,根据各个缓存行的使用情况,确定适于更新的缓存行,在具体的实施例中,替换逻辑电路可以采用LRU替换逻辑电路(最近最少使用替换逻辑电路),需要说明的是,本申请并不限制替换逻辑电路所采用的具体方式,在其它的实施例中,也可以采用其它不同的替换逻辑电路。
LRU替换逻辑电路根据每次取指电路101访问缓存行的情况,记录最近最少访问的缓存行,当需要进行缓存行更新时,高速缓存更新电路104会将最近最少访问的缓存行替换掉,相应的,取指电路101会获取到该当前指令,并将该当前指令返回给处理器的执行单元去执行指令,通过使用替换逻辑电路103来决定缓存行的替换策略,可以使第一级指令高速缓存器10中的缓存行得到更合理的利用。
由于处理器的取指操作具有较强的空间局部性,即一条指令被执行时,与它地址相邻的指令也很有可能会被执行,因此第一级指令高速缓存器10还设置指令预取电路102,通过指令预取电路102可以将与当前指令读请求所请求的内存地址相邻的下一地址指令预取到第一级存储模块100中。
由上文中所述,当取指电路101获取当前指令后,会判断该当前指令是否为跳转指令,如果是跳转指令,则取指电路101不做其它操作,如果不是跳转指令,则取指电路101会搜索当前指令读请求所请求的内存地址的下一地址指令是否存在于第一级指令高速缓存器10的第一级存储模块100中,如果下一地址指令在第一级存储模块100中命中,则指令预取电路102不会做其它操作,如果下一地址指令在第一级存储模块100中缺失,指令预取电路102会通过第一级接口电路105向第二级指令高速缓存器20发出下一地址指令读请求,当第二级指令高速缓存器20返回下一地址指令读请求中的下一地址指令时,高速缓存更新电路104会获取该下一地址指令,并将该下一地址指令根据替换逻辑电路103的替换策略来更新第一级存储模块100的缓存行。
可见,通过第一级存储模块100、取指电路101、指令预取电路102、替换逻辑电路103、高速缓存更新电路104及第一级接口电路105的相互配合,可以完成处理器指令读请求在第一级指令高速缓存器10中的处理过程,通过指令预取电路102将下一地址指令预取到第一级指令高速缓存器10的第一级存储模块100中,可以进一步提高指令读取的效率。
为进一步提高指令读取的效率,本申请实施例还提供一种指令高速缓存器,请参考图4,图4为本申请实施例提供的第二级指令高速缓存器架构图,如图中所示,第二级指令高速缓存器20可以包括高速缓存搜索电路200、第二级存储模块201、缺失缓存电路202、待决先入先出存储器203、高速缓存替换电路204、第二级接口电路205。
其中,第二级存储模块201适于存储所有所述线程的各指令;
高速缓存搜索电路200与第二级存储模块201连接,适于根据接收到的第一级指令高速缓存器发送的指令读请求,在第二级存储模块201中读取指令,其中,指令包括当前指令和下一地址指令,指令读请求包括当前指令读请求及下一地址指令读请求;
缺失缓存电路202适于当指令在所述第二级存储模块201中缺失,且指令读请求的指令地址与待决先入先出存储器203中存储的各个指令读请求的指令地址均不同时,发送指令读请求,并将指令读请求存入待决先入先出存储器203;
待决先入先出存储器203,适于存储第二级指令高速缓存器20发送的各个指令读请求,以及与所述第二级指令高速缓存器20发送的各个所述指令读请求所请求的指令地址相同的、未发送的各个指令读请求。
第二级存储模块201的容量较大,且为所有线程共用,使用现有技术中的组关联映射方式将指令数据映射到第二级存储模块201的相应的缓存行,组关联映射方式是将第二级存储模块201按同样大小分组,组内再分成同样大小的块,组间采用直接映射,组内的块之间采用全相联映射。
当第二级指令高速缓存器20接收到第一级指令高速缓存器10发送的指令读请求后,高速缓存搜索电路200会在第二级存储模块201中搜索指令读请求中的指令,当指令在第二级存储模块201中命中时,将所述指令返回至第一级指令高速缓存器10,高速缓存搜索电路200在第二级存储模块201中搜索到了相应的指令,为在第二级存储模块201中命中,当命中时,高速缓存搜索电路200会将该指令返回给第一级指令高速缓存器10,可见,指令在第二级存储模块201中命中后,可以在第二级指令高速缓存器20中完成指令读请求操作;如果读请求中的指令在第二级存储模块201中缺失,则高速缓存搜索电路200会将指令读请求发送给缺失缓存电路202。
缺失缓存电路202判断所述指令读请求的指令地址与所述待决先入先出存储器203中存储的各个指令读请求的指令地址是否相同,如果指令读请求的指令地址与所述待决先入先出存储器203中存储的各个指令读请求的至少一个指令地址相同时,将所述指令读请求存入待决先入先出存储器203,并停止发送所述指令读请求,这是由于在多线程处理器中,可能多个线程会请求同一个地址的指令,如果出现指令在第二级存储模块中缺失时,只需要向下一级高速缓存器或主存储器发送一次读请求即可,这样可以提高指令读取的效率,如果不同,则发送该指令读请求,并将该指令读请求存入与指令读请求中指令地址对应的待决先入先出存储器203中。
而根据指令读请求的指令地址的不同,待决先入先出存储器203的数量也为多个,每个不同的指令地址都有一个待决先入先出存储器203与之相对应,这样,可以将指令地址相同的指令读请求存入与该指令地址对应待决先入先出存储器203中。
可见,可以通过高速缓存搜索电路200、第二级存储模块201、缺失缓存电路202及待决先入先出存储器203的相互配合完成指令读请求在第二级指令高速缓存器20中读取工作,同时,由于在多线程处理器中,可能多个线程会请求同一个地址的指令,如果出现指令在第二级存储模块中缺失时,只需要向下一级高速缓存器或主存储器发送一次读请求即可,因此可以通过缺失缓存电路202及待决先入先出存储器203进一步提高指令读取的效率。
请继续参考图4,具体地,第二级指令高速缓存器20还可以包括高速缓存替换电路204及第二级接口电路205,第二级接口电路205适于传送第二级指令高速缓存器20与下一级高速缓存器或主存储器之间的数据,当下一级高速缓存器或主存储器返回缺失缓存电路202所发送的指令读请求中的指令后,高速缓存替换电路204会将指令更新到第二级存储模块201的缓存行中,缓存行的替换策略为轮询方式,即根据组关联的映射方式,在相应的组之中轮流更新第二级存储模块201中相应的缓存行,需要说明的是,本申请并不限制替换策略所采用的具体方式,在其它的实施例中,也可以采用不同于轮询方式的其它的方式的替换策略,并且,高速缓存替换电路204会检查待决先入先出存储器203中是否存储有与返回的指令读请求中地址相同的读请求,如果有,则继续执行待决先入先出存储器203中存储的指令,完成待决先入先出存储器203中所存储指令的数据读取任务。
当然,本申请实施例还提供另一种指令高速缓存器,请参考图5,图5为本申请实施例提供的第二级指令高速缓存器另一架构图。
如图中所示,第二级指令高速缓存器20还可以包括性能计数器电路206,性能计数器电路206,适于记录所述第二级存储模块201中命中及所述第二级存储模块201中缺失的次数,根据性能计数器电路206的计数,可以对第二级指令高速缓存器20进行优化,例如:可以调整第二级存储模块201整体缓存空间的大小,或者调整第二级存储模块201的组关联映射方式。
这样,根据性能计数器电路206的计数,可以有效评估第二级指令高速缓存器20的性能,方便后续对其进行优化。
请继续参考图5,在另一种具体的实施例中,第二级指令高速缓存器20还可以包括错误纠正码校验电路(ECC校验电路)207及错误处理电路208,错误纠正码校验电路207适于检测和/或纠正所述第二级指令高速缓存器中的存储数据错误。为了进一步优化第二级指令高速缓存器20,本申请实施例提供的指令高速缓存器还加入了错误纠正码校验电路207,在一种具体的实施例中,可以利用错误纠正码校验电路207来纠正第二级指令高速缓存器20中1比特位的存储数据错误,检测第二级指令高速缓存器20中2比特位的存储数据错误,当错误纠正码校验电路207检测到不可纠正的错误后,会将错误信号发送给错误处理电路208,错误处理电路208会停止处理器的指令读请求操作,并将错误信号发送给主机。
从而,通过错误纠正码校验电路207,可以保证第二级指令高速缓存器20存储数据的正确性。
需要说明的是,在本申请提供的指令高速缓存器中,第二级指令高速缓存器20可以不加入性能计数器电路206和错误纠正码校验电路(ECC校验电路)207,也可以选择加入性能计数器电路206、错误纠正码校验电路(ECC校验电路)207其中的一种,或者可以选择同时加入性能计数器电路206和错误纠正码校验电路(ECC校验电路)207。
同时,在本申请实施例提供的指令高速缓存器中,对于第一级指令高速缓存器10及第二级指令高速缓存器20中所包括的缓存行的数量、以及每个缓存行所包含的数据的大小、以及第一级指令高速缓存器10及第二级指令高速缓存器20所使用的映射方式、缓存行的替换策略、仲裁器30的仲裁方式均不做限制,在不同的实施例中,可以采用不同的方式。
基于本申请实施例提供的指令高速缓存器,本申请还提供一种指令读取方法,请参考图6,图6为本申请实施例提供的指令读取方法的一种可选流程示意图,该流程图包括如下步骤:
步骤S601:发送当前指令读请求。
容易理解的是,向指令高速缓存器发送当前指令读请求的是处理器中的某个线程。
步骤S602:通过第一级指令高速缓存器接收对应的线程的当前指令的当前指令读请求。
由于指令高速缓存器包括第一级指令高速缓存器和第二级指令高速缓存器,并且每个线程都有相对应的第一级指令高速缓存器,所以,可以通过指令高速缓存器中与所述线程对应的第一级指令高速缓存器接收当前指令读请求。
具体地,可以通过第一级指令高速缓存器中的取指电路接收相对应线程的当前指令读请求。
步骤S603:判断当前指令在第一级指令高速缓存器中是否命中,若是,执行步骤S604,若否,执行步骤S606。
当第一级指令高速缓存器接收到相对应线程的当前指令读请求后,首先要在第一级指令高速缓存器中搜索当前指令读请求中的指令,具体可以利用当前指令读请求中的指令内存地址进行查找,如果该指令在第一级指令高速缓存器中存在,则为第一级指令高速缓存器命中,如果该指令在第一级指令高速缓存器中不存在,则为第一级指令高速缓存器缺失,如果命中,则转向步骤S604,如果缺失,则转向步骤S606。
具体地,当取指电路接收到相对应线程的当前指令读请求后,可以首先通过取指电路在第一级指令高速缓存器中的第一级存储模块中搜索当前指令读请求中的指令,如果该指令在第一级存储模块中存在,则为第一级指令高速缓存器命中,如果该指令在第一级存储模块中不存在,则为第一级指令高速缓存器缺失,如果命中,则转向步骤S604,如果缺失,则转向步骤S606。
步骤S604:读取当前指令。
如果该指令在第一级指令高速缓存器中命中,第一级指令高速缓存器读取当前指令,具体可以为其中的取指电路读取当前指令。
步骤S605:返回当前指令。
第一级指令高速缓存器读取当前指令后,将当前指令返回至处理器。
具体可以为第一级指令高速缓存器中的取指电路读取当前指令,并返回当前指令给处理器。
步骤S606:向第二级指令高速缓存器发送当前指令读请求。
如果当前指令读请求所请求的当前指令在第一级指令高速缓存器中缺失,第一级指令高速缓存器将请求发送至第二级指令高速缓存器,以便从第二级指令高速缓存器中获取当前指令。
当然,可以利用第一级指令高速缓存器的取指电路通过第一级接口电路向第二级指令高速缓存器发送当前指令读请求。
可以看出,本申请实施例所提供的指令读取方法,利用了指令高速缓存器的第一级指令高速缓存器和第二级指令高速缓存器,当读取线程的指令时,首先基于线程通过对应的第一级指令高速缓存器接收请求,当第一级指令高速缓存器中未命中时,将请求发送至第二级指令高速缓存器,由于在第一级指令高速缓存器中,每个线程使用独立的第一级指令高速缓存器,这样可以避免某个线程的指令占据过多的存储空间,影响其它线程的指令读取效率,从而可以提高各个线程的指令读取效率,第二级指令高速缓存器数量为一个,为所有线程共用,可以避免多线程处理器中某个线程相对于其它线程读取指令更频繁时,该线程可能会出现较多的缓存缺失,可以保证第二级指令高速缓存器一直处于利用的状态,提高指令高速缓存器的空间的利用率,可见,本申请实施例提供的指令读取方法,可以同时提高指令读取的效率和指令高速缓存器空间的利用率。
当然,当第二级指令高速缓存器接收到当前指令读请求后,也需要进行当前指令的命中判断,具体可以参考以下内容。
步骤S607:判断当前指令读请求中的当前指令是否命中,若是,执行步骤S608,若否,执行步骤S609。
当第二级指令高速缓存器接收到第一级指令高速缓存器发送的当前指令读请求后,会首先在第二级指令高速缓存器中搜索指令读请求中的指令,如果该指令在第二级指令高速缓存器中存在,则为第二级指令高速缓存器命中,执行步骤S608,如果该指令在第二级指令高速缓存器中不存在,则为第二级指令高速缓存器缺失,执行步骤S609。
具体地,当第二级指令高速缓存器中的高速缓存搜索电路接收当前指令读请求后,会首先在第二级指令高速缓存器中的第二级存储模块中搜索当前指令读请求中的当前指令,如果当前指令在第二级存储模块中存在,则为第二级指令高速缓存器命中,执行步骤S608,如果该指令在第二级存储模块不存在,则为第二级指令高速缓存器缺失,执行步骤S609。
步骤S608:获取当前指令并返回给第一级指令高速缓存器。
如果命中,第二级指令高速缓存器获取当前指令并返回给第一级指令高速缓存器。
具体地,可以通过第二级指令高速缓存器的高速缓存搜索电路获取当前指令,并将当前指令返回给第一级高速缓存器。
步骤S609:发送当前指令读请求。
如果该指令在第二级指令高速缓存器中缺失,则第二级指令高速缓存器向下一级高速缓存器或主存储器发送当前指令读请求。
当然,可以为第二级指令高速缓存器的高速缓存搜索电路通过其第二级接口电路向下一级高速缓存器或主存储器发送当前指令读请求。
具体地,当存在下一级高速缓存器时,向下一级高速缓存器发送当前指令读请求,当不存在下一级高速缓存器时,向主存储器发送当前指令读请求。
步骤S610:返回当前指令读请求中的当前指令。
下一级高速缓存器或主存储器根据当前指令读请求得到当前指令后,向第二级指令高速缓存器返回当前指令。
步骤S611:获取当前指令并更新第二级指令高速缓存器。
第二级指令高速缓存器接收从下一级高速缓存器或主存储器返回的当前指令,并进行更新。
具体地,可以通过第二级指令高速缓存器中的高速缓存替换电路接收从下一级高速缓存器或主存储器返回的当前指令,然后将指令按照相应的替换策略更新到第二级指令高速缓存器中的第二级存储模块的缓存行中。
步骤S612:将当前指令返回给第一级指令高速缓存器。
第二级指令高速缓存器存储当前指令后,进一步将当前指令返回给第一级指令高速缓存器。
步骤S613:获取当前指令并更新第一级指令高速缓存器。
第二级指令高速缓存器将指令返回给第一级指令高速缓存器后,第一级指令高速缓存器中的高速缓存更新电路会获取到指令,并将该指令按照相应的替换策略更新到第一级指令高速缓存器中的第一级存储模块的缓存行中。
步骤S614:将当前指令返回给处理器。
步骤S614的具体内容可以参考步骤S605的描述,在此不再赘述。
可见,本申请实施例提供的基于本申请实施例提供的指令高速缓存器的指令读取方法,不论第二级指令高速缓存器中是否存储有当前指令,都能够顺利读取到当前指令,并且可以同时提高指令读取的效率和指令高速缓存器空间的利用率。
在另一种具体实施方式中,为了进一步提高指令读取的效率,本申请实施例还提供一种指令读取方法,请参考图7,图7为本申请实施例提供的指令读取方法的另一种可选流程示意图,该流程图包括如下步骤:
步骤S701:发送当前指令读请求。
步骤S702:通过第一级指令高速缓存器接收对应的线程的当前指令的当前指令读请求。
步骤S703:判断当前指令在第一级指令高速缓存器中是否命中,若是,执行步骤S704,若否,执行步骤S706。
步骤S704:读取当前指令。
步骤S705:返回当前指令。
步骤S706:向第二级指令高速缓存器发送当前指令读请求。
步骤S701-步骤S706的具体内容请参考图6关于步骤S601-步骤S606的描述,在此不再赘述。
步骤S707:判断当前指令是否为跳转指令,若是,执行步骤S704,若否,执行步骤S708。
需要说明的是,本文所述的当当前指令为跳转指令时,执行步骤S704,是指当前指令为跳转指令时,如果前述的当前指令的读取未完成,继续完成前述的当前指令的读取,而非重新执行一次读取当前指令的步骤,也可以理解为,如果当前指令为跳转指令,并不会触发新的步骤的执行,而当当前指令为非跳转指令时,则会触发新的步骤,即步骤S708。
这是由于处理器的取指操作具有较强的空间局部性,即一条指令被执行时,与它地址相邻的指令也很有可能会被执行,为了提高指令的读取效率,因此第一级指令高速缓存器还可以设置指令预取电路,通过指令预取电路可以将与当前指令读请求所请求的内存地址相邻的下一地址指令预取到第一级存储模块中,在步骤S704中,当第一级指令高速缓存器中的取指电路读取当前指令后,指令预取电路会获取当前指令并判断当前指令是否为跳转指令,如果是跳转指令,那么指令预取电路不会做任何操作,继续步骤S704的执行,如果不是跳转指令,则会执行步骤S708。
步骤S708:判断当前指令读请求所请求的内存地址的下一地址指令是否命中,若是,则执行步骤S704,若否,则执行步骤S709。
本文所述的当当前指令读请求所请求的内存地址的下一地址指令命中时,执行步骤S704,与前述的当当前指令为跳转指令时,执行步骤S704所表达的意义相同,在此不再赘述。
当指令预取电路判断当前指令为非跳转指令后,会接着判断当前指令读请求所请求的内存地址的下一地址指令是否命中,如果下一地址指令在第一级指令高速缓存器的第一级存储模块中存在,则为第一级指令高速缓存器命中,如果命中,那么指令预取电路不会做任何操作,接着转到步骤S704,如果下一地址指令在第一级指令高速缓存器的第一级存储模块中不存在,则为第一级指令高速缓存器缺失,如果缺失,则转向步骤S709。
步骤S709:向第二级指令高速缓存器发送下一地址指令读请求。
当指令预取电路判断下一地址指令在第一级指令高速缓存器的第一级存储模块中缺失时,向第二级指令高速缓存器发送下一地址指令读请求,具体可以通过第一级指令高速缓存器的第一级接口电路向第二级指令高速缓存器发送下一地址指令读请求。
步骤S710:判断指令读请求中的指令是否命中,若是,则执行步骤S711,若否,则执行步骤S712。
需要说明的是,由于当当前指令在第一级指令高速缓存器中未命中时,会向第二级指令高速缓存器发送当前指令读请求;当当前指令读请求所请求的内存地址的下一地址指令未命中时,会向第二级指令高速缓存器发送下一地址指令读请求,虽然是不同的指令读请求,但第二级指令高速缓存器接收到指令读请求后,都会按照相同的方式获取对应的指令,因此,为了方便描述,在此直接用指令读请求表示当前指令读请求或下一地址指令读请求,用指令表示当前指令或下一地址指令,不再分别进行描述。
当第二级指令高速缓存器中的高速缓存搜索电路接收到第一级指令高速缓存器发送的指令读请求后,会首先在第二级指令高速缓存器中的第二级存储模块中搜索指令读请求中的指令,如果该指令在第二级存储模块中存在,则为第二级指令高速缓存器命中,如果命中,则转向步骤S711,如果该指令在第二级存储模块中不存在,则为第二级指令高速缓存器缺失,如果缺失,则转向步骤S712。
步骤S711:获取该指令并返回给第一级高速缓存器。
步骤S712:发送指令读请求。
步骤S713:返回所述指令读请求中的指令。
步骤S714:获取指令并更新第二级指令高速缓存器。
步骤S715:将指令返回给第一级指令高速缓存器。
步骤S716:获取指令并更新第一级指令高速缓存器。
步骤S711-步骤S716的具体内容请参考图6关于步骤S608-步骤S613的描述,在此不再赘述。
需要说明的是,在步骤S710-步骤S716中,如果接收的是当前指令读请求,前述各个步骤所处理的是当前指令读请求和当前指令,如果接收的是下一地址指令读请求,前述各个步骤所处理的是下一地址指令读请求和下一地址指令。
步骤S717:将当前指令返回给处理器。
步骤S717的具体内容可以参考步骤S614的描述,在此不再赘述。
需要说明的是,在步骤S710-步骤S716中,如果所处理的是下一地址指令读请求和下一地址指令,那么仅需要将下一地址指令更新至第一级指令高速缓存器中即可,无需返回至处理器,当第一级指令高速缓器接收到处理器发送的获取该指令的请求时,再将其返回至处理器;如果所处理的是当前指令读请求和当前指令,那么需要将当前指令返回至处理器。
综上所述,本申请实施例提供的基于本申请实施例提供的指令高速缓存器的指令读取方法,可以同时提高指令读取的效率和指令高速缓存器空间的利用率,并且,由于处理器的取指操作具有较强的空间局部性,即一条指令被执行时,与它地址相邻的指令也很有可能会被执行,可见,本申请提供的指令读取方法,通过判断当前指令为非跳转指令时,判断下一地址指令是否在第一级指令高速缓存器中命中,如果缺失时,向第二级指令高速缓存器发送下一地址指令读请求,可以将下一地址指令预取到第一级指令高速缓存器的第一级存储模块中,从而方便后续对于下一地址指令的获取,可以进一步提高指令读取的效率。
请参考图8,图8为本申请实施例提供的指令读取方法的另一种可选流程示意图,该流程图包括如下步骤:
步骤S801:发送当前指令读请求。
步骤S802:通过第一级指令高速缓存器接收对应的线程的当前指令的当前指令读请求。
步骤S803:判断当前指令在第一级指令高速缓存器中是否命中,若是,执行步骤S804,若否,执行步骤S806。
步骤S804:读取当前指令。
步骤S805:返回当前指令。
步骤S806:向第二级指令高速缓存器发送当前指令读请求。
步骤S807:判断当前指令是否为跳转指令,若是,执行步骤S804,若否,执行步骤S808。
步骤S808:判断当前指令读请求所请求的内存地址的下一地址指令是否命中,若是,则执行步骤S804,若否,则执行步骤S809。
步骤S809:向第二级指令高速缓存器发送下一地址指令读请求。
步骤S810:判断指令读请求中的指令是否命中,若是,则执行步骤S811,若否,则执行步骤S812。
步骤S811:获取指令并返回给第一级高速缓存器。
步骤S801-步骤S811的具体内容请参考图7关于步骤S701-步骤S711的描述,在此不再赘述。
步骤S812:判断指令读请求的指令地址是否与待决先入先出存储器中存储的各个指令读请求的指令地址均不同,若是,执行步骤S814,若否,执行步骤S813。
在一种具体的实施例中,由于在多线程处理器中,可能多个线程会请求同一个地址的指令,如果出现指令在第二级指令高速缓存器中缺失时,只需要向下一级高速缓存器或主存储器发送一次读请求即可,为此,第二级指令高速缓存器可以设置待决先入先出存储器以存储向下一级高速缓存器或主存储器发送的各个指令读请求,以及与发送的各个所述指令读请求所请求的指令地址相同的、未发送的各个指令读请求。
从而,如果在步骤S810判断指令在第二级指令高速缓存器中缺失,第二级指令高速缓存器中的缺失缓存电路可以接着判断该指令读请求中的地址与待决先入先出存储器中存储的各个指令读请求的指令地址是否存在相同的指令地址,如果相同,则并非与待决先入先出存储器中存储的各个指令读请求的指令地址均不同,转向步骤S813,如果不同,则转向步骤S814,根据指令读请求的指令地址的不同,待决先入先出存储器的数量也为多个,每个不同的指令地址都有一个待决先入先出存储器与之相对应,这样,可以将指令地址相同的指令读请求存入与该指令地址对应待决先入先出存储器中。
步骤S813:将指令读请求存储到与指令读请求中的地址对应的待决先入先出存储器中。
如果步骤S812中缺失缓存电路判断该指令读请求中的地址与已发送的各个指令读请求所请求的指令地址中的至少一个相同时,停止发送指令读请求,并将指令读请求存储到与指令读请求中的地址对应的待决先入先出存储器中。
根据指令读请求的指令地址的不同,待决先入先出存储器的数量也为多个,每个不同的指令地址都有一个待决先入先出存储器与之相对应,这样,可以将指令地址相同的指令读请求存入与该指令地址对应待决先入先出存储器中。
步骤S814:发送指令读请求。
如果步骤S812中缺失缓存电路判断该指令读请求中的地址与已发送的各个指令读请求所请求的指令地址均不同时,通过第二级指令高速缓存器中第二级接口电路向下一级高速缓存器或主存储器发送指令读请求,并且还需执行步骤S813,即将指令读请求存储到与指令读请求中的地址对应的待决先入先出存储器中。
步骤S815:返回所述指令读请求中的指令。
步骤S816:获取指令并更新第二级指令高速缓存器。
步骤S815-步骤S816的具体内容请参考图7关于步骤S713-步骤S714的描述,在此不再赘述。
步骤S817:确定存有与返回的所述指令地址相同的所述指令读请求的所述待决先入先出存储器,执行所述待决先入先出存储器存储的所述指令读请求。
执行待决先入先出存储器存储的指令读请求,当第二级指令高速缓存器中的高速缓存替换电路获取从下一级高速缓存器或主存储器返回的指令,并将指令按照相应的替换策略更新到第二级指令高速缓存器中的第二级存储模块的缓存行中之后,第二级指令高速缓存器中的高速缓存替换电路会确定与返回指令地址相应的待决先入先出存储器,并执行待决先入先出存储器中的指令读请求。
步骤S818:将指令返回给第一级指令高速缓存器。
步骤S819:获取指令并更新第一级指令高速缓存器。
步骤S818-步骤S819的具体内容请参考图7关于步骤S715-步骤S716的描述,在此不再赘述。
需要说明的是,在步骤S810-步骤S819中,如果接收的是当前指令读请求,前述各个步骤所处理的是当前指令读请求和当前指令,如果接收的是下一地址指令读请求,前述各个步骤所处理的是下一地址指令读请求和下一地址指令。
步骤S820:获取当前指令并返回给处理器。
步骤S820的具体内容可以参考步骤S717的描述,在此不再赘述。
需要说明的是,在步骤S810-步骤S819中,如果所处理的是下一地址指令读请求和下一地址指令,那么仅需要将下一地址指令更新至第一级指令高速缓存器中即可,无需返回至处理器,当第一级指令高速缓器接收到处理器发送的获取该指令的请求时,再将其返回至处理器;如果所处理的是当前指令读请求和当前指令,那么需要将当前指令返回至处理器。
可见,由于在多线程处理器中,可能多个线程会请求同一个地址的指令,如果出现指令在第二级指令高速缓存器中缺失时,只需要向下一级高速缓存器或主存储器发送一次读请求即可,本申请提供的指令读取方法,通过判断指令读请求中的地址与待决先入先出存储器中存储的各个指令读请求的指令地址是否相同,只向下一级高速缓存器或主存储器发送一次地址不相同的指令读请求并将地址不相同的指令读请求存入与该地址相对应的待决先入先出存储器中,停止发送地址相同的指令读请求并将地址相同的指令读请求存入与该地址相对应的待决先入先出存储器中,这样可以为进一步提高指令读取的效率提供双重保证。
同时,需要说明是,本申请所提供的指令读取方法,并不限制关于跳转指令判断步骤S807、S808及相关步骤流程的使用,也不限制关于判断指令读请求中的地址与待决先入先出存储器中存储的各个指令读请求的指令地址是否相同的步骤S812及相关步骤流程的使用,在一种具体的实施例中可以两种相关步骤流程都不包括,在另一种具体的实施例中可以只包括其中一种相关步骤流程,在其它的具体实施例中可以两种相关步骤流程都包括。
本申请实施例还提供一种电子设备,该电子设备可以包括本申请上述实施例提供的指令高速缓存器系统。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。
Claims (21)
1.一种指令高速缓存器,其特征在于,包括:
第一级指令高速缓存器,所述第一级指令高速缓存器的数量为多个,各个所述第一级指令高速缓存器分别与各个线程一一对应;
第二级指令高速缓存器,所述第二级指令高速缓存器对应于各个所述线程,且与各个所述第一级指令高速缓存器均对应。
2.如权利要求1所述的指令高速缓存器,其特征在于,所述第一级指令高速缓存器包括:
第一级存储模块,适于存储所对应的所述线程的各指令;
取指电路,与所述第一级存储模块连接,适于根据接收到的当前指令读请求,在所述第一级存储模块中读取所述线程的当前指令;
指令预取电路,适于当所述当前指令为非跳转指令时,获取所述当前指令读请求所请求的内存地址的下一地址指令,并在所述下一地址指令未存储在所述第一级存储模块时,向所述第二级指令高速缓存器发出所述下一地址指令读请求;
高速缓存更新电路,适于接收所述第二级指令高速缓存器返回的读请求中的指令,并更新所述第一级存储模块,其中所述指令包括所述当前指令和所述下一地址指令。
3.如权利要求2所述的指令高速缓存器,其特征在于,所述第一级存储模块包括多个缓存单元,所述指令与各个所述缓存单元的映射关系为全关联映射。
4.如权利要求2所述的指令高速缓存器,其特征在于,所述取指电路,适于根据接收到的当前指令读请求,在所述第一级存储模块中读取所述线程的当前指令,包括:
当所述当前指令在所述第一级存储模块中命中时,将所述当前指令返回至处理器;
当所述当前指令在所述第一级存储模块中缺失时,向所述第二级指令高速缓存器发送所述当前指令读请求。
5.如权利要求3所述的指令高速缓存器,其特征在于,所述缓存单元为缓存行,所述第一级指令高速缓存器还包括:
替换逻辑电路,适于记录各个所述缓存行的使用情况,并当需要使用至少一个所述缓存行时,根据各个所述缓存行的使用情况,确定适于更新的缓存行。
6.如权利要求2-5任一项所述的指令高速缓存器,其特征在于,所述第二级指令高速缓存器包括:
第二级存储模块,适于存储所有所述线程的各指令;
高速缓存搜索电路,与所述第二级存储模块连接,适于根据接收到的第一级指令高速缓存器发送的指令读请求,在所述第二级存储模块中读取所述指令,其中,所述指令包括所述当前指令和所述下一地址指令,所述指令读请求包括所述当前指令读请求及所述下一地址指令读请求;
待决先入先出存储器,适于存储所述第二级指令高速缓存器发送的各个指令读请求,以及与所述第二级指令高速缓存器发送的各个所述指令读请求所请求的指令地址相同的、未发送的各个指令读请求;
缺失缓存电路,适于当所述指令在所述第二级存储模块中缺失,且所述指令读请求的指令地址与所述待决先入先出存储器中存储的各个指令读请求的指令地址均不同时,发送所述指令读请求,并将所述指令读请求存入所述待决先入先出存储器。
7.如权利要求6所述的指令高速缓存器,其特征在于,所述缺失缓存电路,还适于当所述指令在所述第二级存储模块中缺失,且所述指令读请求的指令地址与所述待决先入先出存储器中存储的各个指令读请求的至少一个指令地址相同时,将所述指令读请求存入所述待决先入先出存储器,并停止发送所述指令读请求。
8.如权利要求6所述的指令高速缓存器,其特征在于,所述高速缓存搜索电路,适于根据接收到的第一级指令高速缓存器发送的指令读请求,在所述第二级存储模块中读取所述指令,还包括:
当所述指令在所述第二级存储模块中命中时,将所述指令返回至所述第一级指令高速缓存器。
9.如权利要求8所述的指令高速缓存器,其特征在于,所述第二级指令高速缓存器还包括:
性能计数器电路,适于记录所述第二级存储模块中命中及所述第二级存储模块中缺失的次数。
10.如权利要求9所述的指令高速缓存器,其特征在于,所述第二级指令高速缓存器还包括:
错误纠正码校验电路,适于检测和/或纠正所述第二级指令高速缓存器中的存储数据错误。
11.如权利要求1所述的指令高速缓存器,其特征在于,还包括:
仲裁器,适于连通各个所述第一级指令高速缓存器与所述第二级指令高速缓存器,各个所述第一级指令高速缓存器的指令读请求经过所述仲裁器仲裁后,发送至所述第二级指令高速缓存器。
12.如权利要求1所述的指令高速缓存器,其特征在于,所述第一级指令高速缓存器耦合在处理器内部,与所述处理器的取指模块集成在一起。
13.一种指令读取方法,其特征在于,所述指令读取方法,应用于如权利要求1-12任一项所述的指令高速缓存器,包括:
通过第一级指令高速缓存器接收对应的线程的当前指令的当前指令读请求;
当所述当前指令在所述第一级指令高速缓存器中命中时,读取并返回所述当前指令至处理器;
当所述当前指令在所述第一级指令高速缓存器中缺失时,向第二级指令高速缓存器发送当前指令读请求。
14.如权利要求13所述的指令读取方法,其特征在于,还包括:
读取所述当前指令读请求的当前指令,当所述当前指令为非跳转指令时,获取所述当前指令读请求所请求的内存地址的下一地址指令,并在所述第一级指令高速缓存器中下一地址指令缺失时,向所述第二级指令高速缓存器发出所述下一地址指令读请求。
15.如权利要求13所述的指令读取方法,其特征在于,还包括:
当所述第二级指令高速缓存器确定所述指令在所述第二级存储模块中缺失,且所述指令读请求的指令地址与待决先入先出存储器中存储的各个指令读请求的指令地址均不同时,发送所述指令读请求并将所述指令读请求存储到与指令读请求中的地址对应的所述待决先入先出存储器中,所述指令包括所述当前指令或下一地址指令,所述指令读请求包括当前指令读请求或下一地址指令读请求,所述下一地址指令为所述当前指令读请求所请求的内存地址的下一地址的指令。
16.如权利要求15所述的指令读取方法,其特征在于,还包括:
当所述第二级指令高速缓存器确定所述指令在所述第二级存储模块缺失,且所述指令读请求的指令地址与所述待决先入先出存储器中存储的各个指令读请求的至少一个指令地址相同时,停止发送所述指令读请求,并将所述指令读请求存储到与指令读请求中的地址对应的所述待决先入先出存储器中。
17.如权利要求16所述的指令读取方法,其特征在于,还包括:
当所述第二级指令高速缓存器确定所述指令在所述第二级存储模块中命中时,将所述指令返回至所述第一级指令高速缓存器。
18.如权利要求13所述的指令读取方法,其特征在于,还包括:
所述第一级指令高速缓存器获取所述第二级指令高速缓存器返回的所述指令后,更新所述第一级指令高速缓存器。
19.如权利要求16所述的指令读取方法,其特征在于,还包括:
所述第二级指令高速缓存器获取返回的所述指令读请求中的指令后,更新所述第二级指令高速缓存器。
20.如权利要求19所述的指令读取方法,其特征在于,所述更新所述第二级指令高速缓存器之后还包括:确定存有与返回的所述指令地址相同的所述指令读请求的所述待决先入先出存储器,执行所述待决先入先出存储器存储的所述指令读请求。
21.一种电子设备,其特征在于,包括如权利要求1-12任一项所述的指令高速缓存器系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111361613.4A CN114090080A (zh) | 2021-11-17 | 2021-11-17 | 指令高速缓存器、指令读取方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111361613.4A CN114090080A (zh) | 2021-11-17 | 2021-11-17 | 指令高速缓存器、指令读取方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090080A true CN114090080A (zh) | 2022-02-25 |
Family
ID=80301316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111361613.4A Pending CN114090080A (zh) | 2021-11-17 | 2021-11-17 | 指令高速缓存器、指令读取方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114090080A (zh) |
-
2021
- 2021-11-17 CN CN202111361613.4A patent/CN114090080A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347649B2 (en) | Victim cache with write miss merging | |
US11314647B2 (en) | Methods and systems for managing synonyms in virtually indexed physically tagged caches | |
US9280474B2 (en) | Adaptive data prefetching | |
JP2554449B2 (ja) | キャッシュ・メモリを有するデータ処理システム | |
EP2275939B1 (en) | Processor and address translating method | |
US9886385B1 (en) | Content-directed prefetch circuit with quality filtering | |
CN101689146B (zh) | 分层的高速缓存标签架构 | |
US8583874B2 (en) | Method and apparatus for caching prefetched data | |
US9720847B2 (en) | Least recently used (LRU) cache replacement implementation using a FIFO storing indications of whether a way of the cache was most recently accessed | |
US6832294B2 (en) | Interleaved n-way set-associative external cache | |
US20110320720A1 (en) | Cache Line Replacement In A Symmetric Multiprocessing Computer | |
US11301250B2 (en) | Data prefetching auxiliary circuit, data prefetching method, and microprocessor | |
CN112840331A (zh) | 分层缓存系统中的预取管理 | |
US11768770B2 (en) | Cache memory addressing | |
US11977491B2 (en) | Prefetch kill and revival in an instruction cache | |
US8656106B2 (en) | Managing unforced injections of cache lines into a cache utilizing predetermined address ranges | |
US8595465B1 (en) | Virtual address to physical address translation using prediction logic | |
US20140013054A1 (en) | Storing data structures in cache | |
US7543113B2 (en) | Cache memory system and method capable of adaptively accommodating various memory line sizes | |
CN114090080A (zh) | 指令高速缓存器、指令读取方法及电子设备 | |
US9053030B2 (en) | Cache memory and control method thereof with cache hit rate | |
CN117331853B (zh) | 缓存处理方法、装置、电子设备及介质 | |
CN117331854B (zh) | 缓存处理方法、装置、电子设备及介质 | |
US20120102271A1 (en) | Cache memory system and cache memory control method | |
CN117971731A (zh) | Lru近似算法的硬件实现装置、lru值的更新方法及装置 |
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 |