CN111736900A - 一种并行双通道的cache设计方法和装置 - Google Patents
一种并行双通道的cache设计方法和装置 Download PDFInfo
- Publication number
- CN111736900A CN111736900A CN202010822426.0A CN202010822426A CN111736900A CN 111736900 A CN111736900 A CN 111736900A CN 202010822426 A CN202010822426 A CN 202010822426A CN 111736900 A CN111736900 A CN 111736900A
- Authority
- CN
- China
- Prior art keywords
- instruction
- new
- new instruction
- l1cache
- write
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
本申请公开了一种并行双通道的cache设计方法和装置,在流水阶段一时,获取双通道新入队的两个新指令的地址,并对新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行不同的操作;在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息;在流水阶段三时,根据新指令是否已操作完毕、是否命中L1 cache,进行相应的操作,从而解决了现有的单通道cache设计中读或写指令共用一个存储通道,限制了存储指令的并行执行,使得处理器乱序执行的效率较低的技术问题。
Description
技术领域
本申请涉及处理器技术领域,尤其涉及一种并行双通道的cache设计方法和装置。
背景技术
随着体系结构和工艺的发展,处理器运算能力也随之高速发展,从1990年的33MHz到2020年的超过3GHz,CPU的频率已经提高了数百倍。由于继续提高单核频率,会带来巨大的发热量和功耗。为继续提高处理器性能,多核技术应运而生,从单核到百核。多核的中心思想是将一个大任务分成多个子任务,分摊到多个内核上执行。所以,目前大多数处理器的设计,都采用高频+多核心的组合方案,以获取性能和功耗的平衡。
目前主流CPU的主频已超过3GHz,但是存储总线频率一般不超过1GHz,导致处理器的性能受限于存储的读写速度。cache是处理器和主存之间的缓存,在传统的单通道cache设计中,单通道的设计限制了存储指令的并行执行,同时成为处理器性能提升的瓶颈。开源内核BOOM及其SOC工程中,读或写指令共用一个存储通道,且仅有一个通道。这些cache系统的设计,大大限制了处理器乱序执行的效率。
发明内容
本申请提供了一种并行双通道的cache设计方法和装置,用于解决现有的单通道cache设计中读或写指令共用一个存储通道,限制了存储指令的并行执行,使得处理器乱序执行的效率较低的技术问题。
有鉴于此,本申请第一方面提供了一种并行双通道的cache设计方法,包括:
S1:在流水阶段一时,获取双通道新入队的两个新指令的地址,并对所述新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将所述新指令标记为读操作已完成;
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为写指令时,将冲突处所述老指令中的写指令标记为写操作已完成;
S2:在流水阶段二时,比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,所述tag区域用于地址匹配;
S3:在流水阶段三时,根据所述新指令是否已操作完毕、是否命中L1 cache,执行以下步骤:
S30:判断所述新指令是否标记为读操作已完成或写操作已完成,若是,则将所述新指令设置为无效,并将标记为读操作已完成的所述新指令对应的数据返回对应的通道端口,若否,则执行S31;
S31:基于所述新指令的命中或失靶信息确定所述新指令是否命中L1 cache,若是,则执行S32,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储;
S32:当命中L1 cache的所述新指令为读指令时,根据所述新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据。
可选的,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,包括:
当命中L1 cache的所述新指令为写指令时,在cacheline数据被替换时,将标记为dirty的cacheline数据写入到L2 cache或主存。
可选的,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,还包括:
在L1 cache空闲时,将标记为dirty的cacheline数据写入到L2 cache或主存。
可选的,当未命中L1 cache的所述新指令为读指令时,进行读分配以从底层存储中读数据,包括:
向L2 cache或主存中发送读指令以读取相应的数据;
将从L2 cache或主存中读取的数据写回L1 cache,并将读取的数据返回对应的通道端口。
可选的,所述比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,包括:
比较所述新指令的tag区域与L1 cache的tag区域是否一致,若是,则所述新指令命中L1 cache,若否,则所述新指令未命中L1 cache。
可选的,cache的双通道具有优先级,相应的,所述获取双通道新入队的两个新指令的地址,之前还包括:
当输入的所述两个新指令存在顺序依赖关系时,将所述两个新指令中先执行的所述新指令存放到优先级较高的通道中,将后执行的所述新指令存放到优先级较低的通道中。
本申请第二方面提供了一种并行双通道的cache设计装置,包括:
冲突检测单元,用于在流水阶段一时,获取双通道新入队的两个新指令的地址,并对所述新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将所述新指令标记为读操作已完成;
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为写指令时,将冲突处所述老指令中的写指令标记为写操作已完成;
比较单元,用于在流水阶段二时,比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,所述tag区域用于地址匹配;
处理单元,用于在流水阶段三时,根据所述新指令是否已操作完毕、是否命中L1cache,进行相应的处理;
处理单元具体包括:
判断单元,用于判断所述新指令是否标记为读操作已完成或写操作已完成,若是,则将所述新指令设置为无效,并将标记为读操作已完成的所述新指令对应的数据返回对应的通道端口,若否,则触发确定单元;
所述确定单元,用于基于所述新指令的命中或失靶信息确定所述新指令是否命中L1cache,若是,则触发更新单元,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储;
所述更新单元,用于当命中L1 cache的所述新指令为读指令时,根据所述新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据。
可选的,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,还包括:
当命中L1 cache的所述新指令为写指令时,在L1 cache空闲时,将标记为dirty的cacheline数据写入到L2 cache或主存。
可选的,当未命中L1 cache的所述新指令为读指令时,进行读分配以从底层存储中读数据,包括:
向L2 cache或主存中发送读指令以读取相应的数据;
将从L2 cache或主存中读取的数据写回L1 cache,并将读取的数据返回对应的通道端口。
可选的,所述比较单元,具体用于:
比较所述新指令的tag区域与L1 cache的tag区域是否一致,若是,则所述新指令命中L1 cache,若否,则所述新指令未命中L1 cache。
从以上技术方案可以看出,本申请具有以下优点:
本申请提供了一种并行双通道的cache设计方法,包括:S1:在流水阶段一时,获取双通道新入队的两个新指令的地址,并对新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:当新指令与老指令中的写指令存在地址冲突,且新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将新指令标记为读操作已完成;当新指令与老指令中的写指令存在地址冲突,且新指令为写指令时,将冲突处老指令中的写指令标记为写操作已完成;S2:在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息,tag区域用于地址匹配;S3:在流水阶段三时,根据新指令是否已操作完毕、是否命中L1 cache,执行以下步骤:S30:判断新指令是否标记为读操作已完成或写操作已完成,若是,则将新指令设置为无效,并将标记为读操作已完成的新指令对应的数据返回对应的通道端口,若否,则执行S31;S31:基于新指令的命中或失靶信息确定新指令是否命中L1 cache,若是,则执行S32,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储;S32:当命中L1cache的新指令为读指令时,根据新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的新指令为写指令时,基于写回模式更新数据。
本申请中的并行双通道的cache设计方法,通过三级流水线技术,分解cache访问步骤,使得cache达到更高的访问频率,单位时间内可以运行更多的读或写指令;通过并行读或写指令的双通道,单位时间内能访问更多的存储数据;但三级流水线技术和双通道并行,可能会因为地址冲突而导致并行受限的问题,本申请通过乱序load、store覆盖,顺序提交的方法,解决了冲突情况,从而解决了现有的单通道cache设计中读或写指令共用一个存储通道,限制了存储指令的并行执行,使得处理器乱序执行的效率较低的技术问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种并行双通道的cache设计方法的一个流程示意图;
图2为本申请实施例提供的流水线阶段三处理过程的一个流程示意图;
图3为本申请实施例提供的双通道L1 cache设计的总体架构的一个示意图;
图4为本申请实施例提供的内部循环队列结构的一个示意图;
图5为本申请实施例提供的深度为3的内部循环队列在流水线阶段一处理冲突的一个示意图;
图6为本申请实施例提供的一个48位地址和一个32KB组关联cache的匹配示意图;
图7为本申请实施例提供的cache更新策略优化的一个示意图;
图8为本申请实施例提供的cache失靶时数据返回路径优化的一个示意图;
图9为本申请实施例提供的cache的典型应用的一个示意图;
图10为本申请实施例提供的一种并行双通道的cache设计装置的一个结构示意图。
具体实施方式
本申请提供了一种并行双通道的cache设计方法和装置,用于解决现有的单通道cache设计中读或写指令共用一个存储通道,限制了存储指令的并行执行,使得处理器乱序执行的效率较低的技术问题。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解,请参阅图1,本申请提供的一种并行双通道的cache设计方法的一个实施例,包括:
步骤101、在流水阶段一时,获取双通道新入队的两个新指令的地址,并对新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行不同的操作。
在获取双通道新入队的两个新指令的地址后,将新指令的地址与双通道入队之前的老指令的所有地址进行比对,记录最新的冲突地址。根据冲突指令的不同,执行以下步骤:
1、当新指令与流水线队列中的老指令中的写指令(store指令)存在地址冲突,且新指令为读指令(load指令)时,记录最新冲突的store指令地址,将冲突处store指令的数据读取到冲突处load指令对应的位置,并将新指令标记为读操作已完成,此时,只需等待顺序提交。这是乱序load的表现,即比队列排前的load或store指令先获取到数据。
2、当新指令与老指令中的store指令存在地址冲突,且新指令为写指令时,记录最新冲突的store指令地址,并将冲突处老指令中的所有store指令标记为写操作已完成。这是store覆盖的表现,即新入队的store指令,会取消队列中冲突的store指令,因为在解决了冲突的load指令读取数据后,存放到底层store数据,提交当前流水线队列中最新的数据即可,这样可以大幅减少底层存储访问,加快cache访问速度。
步骤102、在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息。
在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息,并记录在队列对应的位置。
cacheline是cache的最小缓存单元。缓存与缓存之间、缓存与主存之间移动数据的最小单元就是cacheline,目前主流CPU的cacheline为64Byte,一个cacheline主要包括四部分:valid位、tag区域、data区域、dirty位。valid表示本cacheline是否有效,tag区域作为标记,用于地址匹配,data区域存放了一堆地址对应的数据,dirty位表示cache数据未更新到更深缓存或主存。而load/store指令的虚拟地址也由三部分组成:tag、index、offset。index用于匹配cache中的指定set,tag用于匹配出cache中的指定way,index和tag就能唯一确定一个组关联cache的cacheline,最后通过offset确定取出cacheline中data区域指定字节。
因此,通过比较地址和cacheline,能快速得到是否命中信息。
步骤103、在流水阶段三时,根据新指令是否已操作完毕、是否命中L1 cache,进行相应的操作。
请参考图2,在流水阶段三时,根据新指令是否已操作完毕、是否命中L1 cache,进行相应的操作,具体包括:
步骤1030、判断新指令是否标记为读操作已完成或写操作已完成,若是,则将新指令设置为无效,并将标记为读操作已完成的新指令对应的数据返回对应的通道端口,若否,则执行步骤1031。
如果当前新指令状态由于load乱序或store覆盖的原因,已经标记为读操作已完成,直接将队列中标记为读操作已完成的新指令对应的数据返回对应的通道端口,并将标记为读操作已完成的新指令设置为无效;如果当前新指令状态已经标记为写操作已完成,将标记为写操作已完成的该新指令设置为无效。此时访问速度最快。
步骤1031、基于新指令的命中或失靶信息确定新指令是否命中L1 cache,若是,则执行步骤1032,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储。
根据新指令的命中或失靶信息确定新指令是否命中L1 cache,若新指令命中L1cache,则进入步骤1032;若新指令未命中L1 cache,即失靶L1 cache,需要进行读或写分配,以从底层存储中读数据或写数据到底层存储。
步骤1032、当命中L1 cache的新指令为读指令时,根据新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的新指令为写指令时,基于写回模式更新数据。
当命中L1 cache的新指令为load指令时,根据新指令的地址读取命中的L1 cache对应位置的数据,并将该数据返回该新指令对应的通道端口;当命中L1 cache的新指令为store指令时,基于写回模式更新数据。
本申请实施例中的并行双通道的cache设计方法,通过三级流水线技术,分解cache访问步骤,使得cache达到更高的访问频率,单位时间内可以运行更多的读或写指令;通过并行读或写指令的双通道,单位时间内能访问更多的存储数据;但三级流水线技术和双通道并行,可能会因为地址冲突而导致并行受限的问题,本申请通过乱序load、store覆盖,顺序提交的方法,解决了冲突情况,从而解决了现有的单通道cache设计中读或写指令共用一个存储通道,限制了存储指令的并行执行,使得处理器乱序执行的效率较低的技术问题。
以上为本申请提供的一种并行双通道的cache设计方法的一个实施例,以下为本申请提供的一种并行双通道的cache设计方法的另一个实施例。
本申请提供的一种并行双通道的cache设计方法的另一个实施例,包括:
步骤201、在流水阶段一时,获取双通道新入队的两个新指令的地址,并对新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行不同的操作。
需要注意的是,本申请实施例中默认双通道中的通道1指令具有冲突时更高的执行优先级,产生冲突的原因为:两个通道访问同一个地址的数据。两个通道中哪个先执行,结果会截然相反。因此,在输入有顺序依赖关系的有冲突load或store指令时,需要将先执行的指令存放到通道1,后执行的指令存放到通道2。
本申请实施例中的一种并行双通道的cache设计,总体架构如图3所示。为了更好地对双通道进行控制或仲裁,处理读写数据和地址外,每个通道还设置了一些其它的控制信号。以通道1为例,各个信号的含义分别如下:
full1表示通道1中缓存指令的循环队列已满,不能继续送入指令,需要等待;
ready1表示通道1的一次读或写操作已完成,如果是读操作,此时ls_data1上数据有效;
ls_addr1表示通道1读或写地址,这是个双向IO端口;
ls_data1表示通道1读地址对应的读出数据,或者写地址对应的要写入数据;
ls_r_w1表示通道1送入的指令是读指令还是写指令,true表示读指令,false表示写指令;
ls_valid1表示通道1送入的读或写指令是否有效。
因此,在full1信号为false时,该流水线每个通道每周期将能接收一个load/store指令。控制信号和地址数据都缓存在队列中同一行位置,如图4所示。其中,循环队列中各个信号的含义如下:
done表示该位置读或写操作已完成,但不意味着数据或控制信号已返回到端口,因为按照总体设计思路,需要按照入队顺序进行顺序出队,done信号默认为false;
addr、data、r_w分别表示读或写地址、读或写数据、读或写标志信号;
c_index是队列的当前位置,在双通道两个队列中的索引编号,图中的数值,只表示队列深度为3时的索引示例;
f_index用于记录队列当前位置,和双通道队列中哪个最年轻位置冲突,f_index为0时表示当前位置没有和队列中任何位置冲突;
val表示队列中当前位置是否有效,当队列该位置没有存数据,或者读写操作已完成并提交到端口后,需要将该位设置为false(即val默认值),当队列位置存有有效数据时,该位设置为true。
图4中,tail表示循环队列中下一次将存元素位置,head表示下一次将取元素位置,tail和head的配合能确定循环队列中哪些位置有效。
假设缓存控制信号和数据的队列深度为3,即和流水线级数一样,且通道1和通道2的循环队列中已经分别存了一条指令。假设两通道循环队列刚从端口获取的数据存入到队列中,请参考图5的上半部分。因为cache的设计中,对于同一行产生冲突的指令,通道1的先执行策略,可得并行输入指令的执行顺序为:
i 1→i 3→i 4
i
2
其中,i N (N=1,2,3,4)为队列中索引index=N处的指令,分为两行,是因为上下两行可以并行执行。
如图5所示,head位置的通道1老指令i 1为操作地址a1的store指令,tail位置的通道1新指令i 3为操作地址a1的load指令,tail位置的通道2新指令i 4为操作地址a1的store指令,这些指令之间存在冲突,即依赖关系。
对于新指令i 3,其为load指令,与靠近队头的老指令i 1(store指令)产生了冲突,因此,可直接将老指令i 1的data寄存器的值d1,赋值给新指令i 3的data寄存器,并标记新指令i 3为load操作已完成(done=true),记录冲突的指令位置(f_index=1)。
对于新指令i 4,其为store指令,与靠近队头的老指令i 1(store指令)产生冲突,因此,可直接标记新指令i 1为store操作已完成(done=true)。
在流水阶段一,解决冲突后,对队列的修改部分如图5的下半部分所示。
步骤202、在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息。
比较新指令的tag区域与L1 cache的tag区域是否一致,若是,则新指令命中L1cache,若否,则新指令未命中L1 cache,即失靶L1 cache。
本申请实施例中,cache采用组关联映射方式,相对于直接映射和全关联映射,其可以实现硬件成本、命中率、cache存储空间利用率三者的平衡。
请参考图6,给出了一个48位地址,和一个32KB(4ways*256sets*32B cacheline)大小的组关联cache的匹配方式。其中每个tag旁边的V表示该tag为有效的(valid),cacheline旁边的D表示该cacheline的是脏的(dirty),即cacheline中数据被修改过还没更新到底层存储。
新指令中的addr和L1 cache匹配得到数据的过程如下:
1、addr的8bit set index,决定匹配cache中的哪一个组(set)。由于只有256个组,所以8bit可以完全匹配,此时可得到4个cacheline(如果更低的cache颠簸频率,可设置cache为更大的way,代价就是硬件成本变大)。
2、addr的35bit tag,和前一步得到cacheline的tag部分分别进行匹配。当两个tag匹配时,表示addr命中L1 cache,否则为addr失靶。
3、addr的5bit offset,表示在addr命中L1 cache时,取出cacheline中对应部分数据。由于本实施例中cacheline为32B,所以每一种offset对应cacheline中对应位置的一个字节。
步骤203、在流水阶段三时,根据新指令是否已操作完毕、是否命中L1 cache,进行相应的操作。
1、如果指令的done信号标记为true,则查看r_w的值:
(1)当r_w==true时,表示该指令为load指令,此时需要将该指令对应的数据返回到ready和ls_data端口,并设置队列中一个位置:val=false。
(2)当r_w==false时,表示该指令为store指令,直接设置队列中的一个位置:val=false。
2、如果指令的done信号标记为false,则根据是否命中L1 cache进行不同的操作:
(1)命中L1 cache时,根据addr的offset值取出命中的cacheline对应位置的数据,同时,当r_w==true时,类似done为true时返回数据到对应的端口信号,当r_w==false时,基于写回模式更新数据。
(2)未命中L1 cache时,则尝试进行读或写分配,从而从底层存储读出数据,或将数据存到底层存储,并设置队列的控制信号、IO端口信号。
本申请实施例中还对cache更新策略进行了优化,即当命中L1 cache时,写操作如何更新数据,请参考图7的上半部分,传统的写回模式中,每个cacheline被修改后会有一个dirty位标记,主存中的数据只有在cacheline被替换时才会将cacheline数据提交,那么在替换时,就会出现长时间等待。请参考图7的下半部分,本申请实施例中增加了一种cache空闲更新策略,即在当前cache空闲时,也对标记为dirty的数据进行提交,以便能更加及时驱逐脏数据。
本申请实施例中还对load指令未命中L1 cache时,数据返回路径进行了优化。请参考图8的上半部分,传统的对于非命中情况下数据的返回路径为:先从底层存储中读取出一个cacheline,然后逐级更新到当前cache层次,最后再从这个cacheline中读出对应位置数据。由于路径较长,未命中cache时的时间代价很高。通常处理器只需要cacheline中某部分数据,所以在本申请实施例中从底层存储命中需要的cacheline时,立即从中取出对应的数据并发送给处理器,减少处理器的等待时间。请参考图8的下半部分,本申请实施例中的第④步,对于从底层新取出的cacheline,一方面从中取出对应位置的数据,另一方面,同时将取出的cacheline分配到L1 cache中,避免后续同样地址的再次失靶。与传统的返回路径相比,本申请实施例中的并行双通道的cache设计方法,减少了load指令未命中cache时,数据的返回路径,从而减少了处理器的等待时间。
本申请实施例中的并行双通道的cache设计方法,可以应用于高性能需求的CPU、DSP、GPU和主存交互时,请参考图9,由于传统单通道cache的性能限制,处理器的性能受到限制的场景中,以提高处理器的性能。本申请划分三级流水线访问L1 cache,通过三级流水线技术,能达到更高的访问频率;通过双通道并行,实现真正的load指令或store指令的并行,并非是load指令和store指令的伪并行,单位时间内能访问更多的存储数据;由于三级流水线技术和双通道并行,可能会因为地址冲突而导致并行受限的问题,本申请实施例通过乱序load、store覆盖,顺序提交的方法,解决了传统的情况;通过增加cache空闲更新策略对cache的脏数据进行更新,避免了现有的脏数据只有在cacheline数据被替换时才会更新到主存,造成cache和主存数据长时间不一致的问题;并且,本申请实施例通过从更深存储或主存中获取到一个新的cacheline数据时,在将新数据存入到cache中保存的同时,将新数据直接输出,减少了处理器的等待时间。
以上为本申请提供的一种并行双通道的cache设计方法,以下为本申请提供的一种并行双通道的cache设计装置。
请参考图10,本申请提供的一种并行双通道的cache设计装置的一个实施例,包括:
冲突检测单元301,用于在流水阶段一时,获取双通道新入队的两个新指令的地址,并对新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:
当新指令与老指令中的写指令存在地址冲突,且新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将新指令标记为读操作已完成;
当新指令与老指令中的写指令存在地址冲突,且新指令为写指令时,将冲突处老指令中的写指令标记为写操作已完成。
比较单元302,用于在流水阶段二时,比较新指令的tag区域与L1 cache的tag区域,得到新指令的命中或失靶信息,tag区域用于地址匹配。
处理单元303,用于在流水阶段三时,根据新指令是否已操作完毕、是否命中L1cache,进行相应的处理。
处理单元303具体包括:
判断单元3031,用于判断新指令是否标记为读操作已完成或写操作已完成,若是,则将新指令设置为无效,并将标记为读操作已完成的新指令对应的数据返回对应的通道端口,若否,则触发确定单元3032。
确定单元3032,用于基于新指令的命中或失靶信息确定新指令是否命中L1cache,若是,则触发更新单元3033,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储。
更新单元3033,用于当命中L1 cache的新指令为读指令时,根据新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的新指令为写指令时,基于写回模式更新数据。
作为进一步的改进,当命中L1 cache的新指令为写指令时,基于写回模式更新数据,还包括:
在L1 cache空闲时,将标记为dirty的cacheline数据写入到L2 cache 或主存。
作为进一步的改进,当未命中L1 cache的新指令为读指令时,进行读分配以从底层存储中读数据,包括:
向L2 cache或主存中发送读指令以读取相应的数据;
将从L2 cache或主存中读取的数据写回L1 cache,并将读取的数据返回对应的通道端口。
作为进一步的改进,比较单元302,具体用于:
比较新指令的tag区域与L1 cache的tag区域是否一致,若是,则新指令命中L1 cache,若否,则新指令未命中L1 cache。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种并行双通道的cache设计方法,其特征在于,包括:
S1:在流水阶段一时,获取双通道新入队的两个新指令的地址,并对所述新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将所述新指令标记为读操作已完成;
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为写指令时,将冲突处所述老指令中的写指令标记为写操作已完成;
S2:在流水阶段二时,比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,所述tag区域用于地址匹配;
S3:在流水阶段三时,根据所述新指令是否已操作完毕、是否命中L1 cache,执行以下步骤:
S30:判断所述新指令是否标记为读操作已完成或写操作已完成,若是,则将所述新指令设置为无效,并将标记为读操作已完成的所述新指令对应的数据返回对应的通道端口,若否,则执行S31;
S31:基于所述新指令的命中或失靶信息确定所述新指令是否命中L1 cache,若是,则执行S32,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储;
S32:当命中L1 cache的所述新指令为读指令时,根据所述新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据。
2.根据权利要求1所述的并行双通道的cache设计方法,其特征在于,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,包括:
当命中L1 cache的所述新指令为写指令时,在cacheline数据被替换时,将标记为dirty的cacheline数据写入到L2 cache或主存。
3.根据权利要求1所述的并行双通道的cache设计方法,其特征在于,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,还包括:
在L1 cache空闲时,将标记为dirty的cacheline数据写入到L2 cache或主存。
4.根据权利要求1所述的并行双通道的cache设计方法,其特征在于,当未命中L1cache的所述新指令为读指令时,进行读分配以从底层存储中读数据,包括:
向L2 cache或主存中发送读指令以读取相应的数据;
将从L2 cache或主存中读取的数据写回L1 cache,并将读取的数据返回对应的通道端口。
5.根据权利要求1所述的并行双通道的cache设计方法,其特征在于,所述比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,包括:
比较所述新指令的tag区域与L1 cache的tag区域是否一致,若是,则所述新指令命中L1 cache,若否,则所述新指令未命中L1 cache。
6.根据权利要求1所述的并行双通道的cache设计方法,其特征在于,cache的双通道具有优先级,相应的,所述获取双通道新入队的两个新指令的地址,之前还包括:
当输入的所述两个新指令存在顺序依赖关系时,将所述两个新指令中先执行的所述新指令存放到优先级较高的通道中,将后执行的所述新指令存放到优先级较低的通道中。
7.一种并行双通道的cache设计装置,其特征在于,包括:
冲突检测单元,用于在流水阶段一时,获取双通道新入队的两个新指令的地址,并对所述新指令的地址与双通道入队之前的老指令的所有地址进行地址冲突检测,并根据冲突指令的不同,执行以下步骤:
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为读指令时,将冲突处写指令的数据读取到冲突处读指令对应的位置,并将所述新指令标记为读操作已完成;
当所述新指令与所述老指令中的写指令存在地址冲突,且所述新指令为写指令时,将冲突处所述老指令中的写指令标记为写操作已完成;
比较单元,用于在流水阶段二时,比较所述新指令的tag区域与L1 cache的tag区域,得到所述新指令的命中或失靶信息,所述tag区域用于地址匹配;
处理单元,用于在流水阶段三时,根据所述新指令是否已操作完毕、是否命中L1cache,进行相应的处理;
处理单元具体包括:
判断单元,用于判断所述新指令是否标记为读操作已完成或写操作已完成,若是,则将所述新指令设置为无效,并将标记为读操作已完成的所述新指令对应的数据返回对应的通道端口,若否,则触发确定单元;
所述确定单元,用于基于所述新指令的命中或失靶信息确定所述新指令是否命中L1cache,若是,则触发更新单元,若否,则进行读或写分配以从底层存储中读数据或写数据到底层存储;
所述更新单元,用于当命中L1 cache的所述新指令为读指令时,根据所述新指令的地址信息读取命中的cacheline对应位置的数据返回到对应的通道端口,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据。
8.根据权利要求7所述的并行双通道的cache设计装置,其特征在于,当命中L1 cache的所述新指令为写指令时,基于写回模式更新数据,还包括:
当命中L1 cache的所述新指令为写指令时,在L1 cache空闲时,将标记为dirty的cacheline数据写入到L2 cache或主存。
9.根据权利要求7所述的并行双通道的cache设计装置,其特征在于,当未命中L1cache的所述新指令为读指令时,进行读分配以从底层存储中读数据,包括:
向L2 cache或主存中发送读指令以读取相应的数据;
将从L2 cache或主存中读取的数据写回L1 cache,并将读取的数据返回对应的通道端口。
10.根据权利要求7所述的并行双通道的cache设计装置,其特征在于,所述比较单元,具体用于:
比较所述新指令的tag区域与L1 cache的tag区域是否一致,若是,则所述新指令命中L1 cache,若否,则所述新指令未命中L1 cache。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010822426.0A CN111736900B (zh) | 2020-08-17 | 2020-08-17 | 一种并行双通道的cache设计方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010822426.0A CN111736900B (zh) | 2020-08-17 | 2020-08-17 | 一种并行双通道的cache设计方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111736900A true CN111736900A (zh) | 2020-10-02 |
CN111736900B CN111736900B (zh) | 2020-11-27 |
Family
ID=72658446
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010822426.0A Active CN111736900B (zh) | 2020-08-17 | 2020-08-17 | 一种并行双通道的cache设计方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736900B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463658A (zh) * | 2021-02-03 | 2021-03-09 | 鹏城实验室 | 加载存储单元的实现方法、装置和计算机存储介质 |
CN115982091A (zh) * | 2023-03-21 | 2023-04-18 | 深圳云豹智能有限公司 | 基于rdma引擎的数据处理方法与系统、介质、设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2352066A (en) * | 1999-07-14 | 2001-01-17 | Element 14 Ltd | Instruction set for a computer |
CN1869920A (zh) * | 2005-05-26 | 2006-11-29 | Arm有限公司 | 超标量处理器内的指令发出控制 |
CN102073533A (zh) * | 2011-01-14 | 2011-05-25 | 中国人民解放军国防科学技术大学 | 支持动态二进制翻译的多核体系结构 |
US20140215191A1 (en) * | 2013-01-25 | 2014-07-31 | Apple Inc. | Load ordering in a weakly-ordered processor |
CN203786732U (zh) * | 2013-12-02 | 2014-08-20 | 天津光电通信技术有限公司 | 一种基于dsp与fpga的多通道数据采集处理设备 |
CN106201872A (zh) * | 2016-07-05 | 2016-12-07 | 北京鼎源科技有限公司 | 一种Android系统的运行环境检测方法 |
US9990294B2 (en) * | 2016-02-24 | 2018-06-05 | Apple Inc. | Methods for performing a memory resource retry |
CN109213527A (zh) * | 2017-06-30 | 2019-01-15 | 超威半导体公司 | 具有重叠执行的流处理器 |
US20190108034A1 (en) * | 2017-10-06 | 2019-04-11 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
CN110457238A (zh) * | 2019-07-04 | 2019-11-15 | 中国民航大学 | 减缓GPU访存请求及指令访问cache时停顿的方法 |
-
2020
- 2020-08-17 CN CN202010822426.0A patent/CN111736900B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2352066A (en) * | 1999-07-14 | 2001-01-17 | Element 14 Ltd | Instruction set for a computer |
CN1869920A (zh) * | 2005-05-26 | 2006-11-29 | Arm有限公司 | 超标量处理器内的指令发出控制 |
CN102073533A (zh) * | 2011-01-14 | 2011-05-25 | 中国人民解放军国防科学技术大学 | 支持动态二进制翻译的多核体系结构 |
US20140215191A1 (en) * | 2013-01-25 | 2014-07-31 | Apple Inc. | Load ordering in a weakly-ordered processor |
CN203786732U (zh) * | 2013-12-02 | 2014-08-20 | 天津光电通信技术有限公司 | 一种基于dsp与fpga的多通道数据采集处理设备 |
US9990294B2 (en) * | 2016-02-24 | 2018-06-05 | Apple Inc. | Methods for performing a memory resource retry |
CN106201872A (zh) * | 2016-07-05 | 2016-12-07 | 北京鼎源科技有限公司 | 一种Android系统的运行环境检测方法 |
CN109213527A (zh) * | 2017-06-30 | 2019-01-15 | 超威半导体公司 | 具有重叠执行的流处理器 |
US20190108034A1 (en) * | 2017-10-06 | 2019-04-11 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
CN110457238A (zh) * | 2019-07-04 | 2019-11-15 | 中国民航大学 | 减缓GPU访存请求及指令访问cache时停顿的方法 |
Non-Patent Citations (1)
Title |
---|
张洋: ""高效能GPU微体系结构关键技术研究"", 《中国博士学位论文全文数据库》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463658A (zh) * | 2021-02-03 | 2021-03-09 | 鹏城实验室 | 加载存储单元的实现方法、装置和计算机存储介质 |
CN112463658B (zh) * | 2021-02-03 | 2021-05-28 | 鹏城实验室 | 加载存储单元的实现方法、装置和计算机存储介质 |
CN115982091A (zh) * | 2023-03-21 | 2023-04-18 | 深圳云豹智能有限公司 | 基于rdma引擎的数据处理方法与系统、介质、设备 |
CN115982091B (zh) * | 2023-03-21 | 2023-06-23 | 深圳云豹智能有限公司 | 基于rdma引擎的数据处理方法与系统、介质、设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111736900B (zh) | 2020-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11074190B2 (en) | Slot/sub-slot prefetch architecture for multiple memory requestors | |
US8180981B2 (en) | Cache coherent support for flash in a memory hierarchy | |
US7634591B2 (en) | Method and apparatus for tracking command order dependencies | |
US6427188B1 (en) | Method and system for early tag accesses for lower-level caches in parallel with first-level cache | |
US20080141268A1 (en) | Utility function execution using scout threads | |
US20030217251A1 (en) | Prediction of load-store dependencies in a processing agent | |
US20070271565A1 (en) | Anticipatory helper thread based code execution | |
US6539457B1 (en) | Cache address conflict mechanism without store buffers | |
JP2010191638A (ja) | キャッシュ装置 | |
JP2004157593A (ja) | 多ポート統合キャッシュ | |
JPH04303248A (ja) | マルチバッファデータキャッシュを具えているコンピュータシステム | |
CN111736900B (zh) | 一种并行双通道的cache设计方法和装置 | |
CN110297787B (zh) | I/o设备访问内存的方法、装置及设备 | |
CN107038125A (zh) | 具有加速预取请求的独立流水线的处理器高速缓存 | |
US6557078B1 (en) | Cache chain structure to implement high bandwidth low latency cache memory subsystem | |
JP3498673B2 (ja) | 記憶装置 | |
US20060265551A1 (en) | Handling of cache accesses in a data processing apparatus | |
US11921634B2 (en) | Leveraging processing-in-memory (PIM) resources to expedite non-PIM instructions executed on a host | |
JP6679570B2 (ja) | データ処理装置 | |
GB2365592A (en) | L1 cache memory | |
CN112639749A (zh) | 减少由于地址转换缺失而引起的管线暂缓的方法、装置和系统 | |
US20040243765A1 (en) | Multithreaded processor with multiple caches | |
US6976130B2 (en) | Cache controller unit architecture and applied method | |
JP2013041414A (ja) | 記憶制御システムおよび方法、置換方式および方法 | |
US10198260B2 (en) | Processing instruction control transfer instructions |
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 |