发明内容
本公开至少一个实施例提供一种缓存操作方法,应用于包括多个缓存块的缓存,其中,所述方法包括:接收对于所述缓存的访问请求,其中,所述访问请求包括访问控制信息,所述访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息,所述第一优先级信息指示所述访问请求相关的数据的优先级,所述第一最后访问信息指示所述访问请求是否为最后一次访问,所述第一瞬时信息指示所述访问请求是否为瞬时访问;根据所述访问请求的访问控制信息,对所述缓存进行操作。
例如,在本公开一实施例提供的方法中,为每个缓存块提供有缓存控制信息,所述缓存控制信息至少包括优先级信息项、最后访问信息项和瞬时信息项,所述多个缓存块包括至少一个被占用的非空缓存块,所述非空缓存块的优先级信息项记录的第二优先级信息指示所述非空缓存块的优先级,所述非空缓存块的最后访问信息项记录的第二最后访问信息指示对于所述非空缓存块的上一次访问是否为最后一次访问,所述非空缓存块的瞬时信息项记录的第二瞬时信息指示对于所述非空缓存块的上一次访问是否为瞬时访问,根据所述访问请求的访问控制信息,对所述缓存进行操作,包括:根据所述访问请求的访问控制信息以及所述多个缓存块中非空缓存块的缓存控制信息,对所述缓存进行操作。
例如,在本公开一实施例提供的方法中,所述访问控制信息还包括第一旁通信息,根据所述访问请求的访问控制信息以及所述多个缓存块中非空缓存块的缓存控制信息,对所述缓存进行操作,包括:响应于所述访问请求未命中,获取所述访问请求中的访问控制信息;响应于所述第一旁通信息指示所述访问请求不是旁通类型的访问请求,基于所述访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息,确定针对所述访问请求的操作策略;基于所述非空缓存块的缓存控制信息中的第二优先级信息以及所述操作策略,利用所述多个缓存块对所述访问请求进行响应。
例如,在本公开一实施例提供的方法中,所述第一优先级信息为有效值时指示所述访问请求相关的数据为高优先级,所述第一优先级信息为无效值时指示所述访问请求相关的数据为低优先级;所述第一最后访问信息为有效值时指示所述访问请求为最后一次访问,所述第一最后访问信息为无效值时指示所述访问请求不是最后一次访问;所述第一瞬时信息为有效值时指示所述访问请求为瞬时访问,所述第一瞬时信息为无效值时指示所述访问请求不是瞬时访问;所述第一旁通信息为有效值时指示所述访问请求为旁通类型的访问请求,所述第一旁通信息为无效值时指示所述访问请求不是旁通类型的访问请求;所述第二优先级信息为有效值时指示所述非空缓存块为高优先级,所述第二优先级信息为无效值时指示所述非空缓存块为低优先级;所述第二最后访问信息为有效值时指示对于所述非空缓存块的上一次访问为最后一次访问,所述第二最后访问信息为无效值时指示对于所述非空缓存块的上一次访问不是最后一次访问;所述第二瞬时信息为有效值时指示对于所述非空缓存块的上一次访问为瞬时访问,所述第二瞬时信息为无效值时指示对于所述非空缓存块的上一次访问不是瞬时访问。
例如,在本公开一实施例提供的方法中,所述操作策略包括第一策略、第二策略、第三策略和第四策略;所述第一策略包括:若存在空闲的缓存块,将所述缓存请求对应的数据分配到所述空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,替换所述低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,替换高优先级的缓存块;所述第二策略包括:若存在空闲的缓存块,将所述缓存请求对应的数据分配到所述空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,替换所述低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,将所述访问请求变更为旁通类型的访问请求且不进行替换操作;所述第三策略包括:若存在空闲的缓存块,将所述缓存请求对应的数据分配到所述空闲的缓存块;若不存在空闲的缓存块,将所述访问请求变更为旁通类型的访问请求且不进行替换操作;所述第四策略包括:将所述访问请求变更为旁通类型的访问请求且不进行替换操作和分配操作。
例如,在本公开一实施例提供的方法中,所述访问请求为读请求,基于所述访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息,确定针对所述访问请求的操作策略,包括:响应于所述第一优先级信息为有效值、所述第一最后访问信息为无效值,确定所述操作策略为所述第一策略;响应于所述第一优先级信息、所述第一最后访问信息、所述第一瞬时信息均为无效值,或者所述第一优先级信息、所述第一最后访问信息、所述第一瞬时信息均为有效值,确定所述操作策略为所述第二策略;响应于所述第一优先级信息为无效值、所述第一瞬时信息为有效值,确定所述操作策略为所述第三策略;响应于所述第一最后访问信息为有效值、所述第一瞬时信息为无效值,确定所述操作策略为所述第四策略。
例如,在本公开一实施例提供的方法中,所述访问请求为写请求,基于所述访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息,确定针对所述访问请求的操作策略,包括:响应于所述第一优先级信息为有效值、所述第一最后访问信息为无效值,确定所述操作策略为所述第一策略;响应于所述第一优先级信息、所述第一瞬时信息均为无效值,或者所述第一优先级信息、所述第一最后访问信息均为有效值,确定所述操作策略为所述第二策略;响应于所述第一优先级信息为无效值、所述第一瞬时信息为有效值,确定所述操作策略为所述第三策略。
例如,在本公开一实施例提供的方法中,基于所述非空缓存块的缓存控制信息中的第二优先级信息以及所述操作策略,利用所述多个缓存块对所述访问请求进行响应,包括:确定所述多个缓存块中的空闲缓存块和非空缓存块;响应于所确定的操作策略为所述第一策略或所述第二策略,根据所述非空缓存块的第二优先级信息确定所述非空缓存块的优先级,并对所述访问请求进行响应。
例如,在本公开一实施例提供的方法中,根据所述非空缓存块的第二优先级信息确定所述非空缓存块的优先级,并对所述访问请求进行响应,包括:响应于存在多个同一优先级的缓存块且需要进行替换操作,根据预设算法,在所述多个同一优先级的缓存块中选择一个缓存块进行替换。
例如,在本公开一实施例提供的方法中,所述预设算法包括先进先出算法、最近最少使用算法、伪最近最少使用算法、最近最不经常使用算法至少之一。
例如,在本公开一实施例提供的方法中,基于所述非空缓存块的缓存控制信息中的第二优先级信息以及所述操作策略,利用所述多个缓存块对所述访问请求进行响应,还包括:响应于将所述访问请求对应的数据分配到选择的缓存块,将所述访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息进行存储,以分别作为所述缓存块的缓存控制信息中的第二优先级信息、第二最后访问信息和第二瞬时信息。
例如,在本公开一实施例提供的方法中,根据所述访问请求的访问控制信息以及所述多个缓存块中非空缓存块的缓存控制信息,对所述缓存进行操作,还包括:根据所述访问请求的访问控制信息,对所述多个缓存块的状态及数据进行管理。
例如,在本公开一实施例提供的方法中,根据所述访问请求的访问控制信息,对所述多个缓存块的状态及数据进行管理,包括:响应于所述访问请求命中、所述访问请求为读请求且所述读请求的第一最后访问信息为有效值,读取相应的缓存块中的数据之后将所述缓存块标记为无效缓存块。
例如,在本公开一实施例提供的方法中,根据所述访问请求的访问控制信息,对所述多个缓存块的状态及数据进行管理,还包括:响应于所述访问请求为写请求、所述写请求中的第一瞬时信息为有效值且第一最后访问信息为无效值、且所述写请求对应的数据被成功分配到缓存块中,在所述缓存块空闲时将所述数据写入与所述缓存级联的下一级存储体;响应于所述访问请求为写请求、所述写请求中的第一瞬时信息为有效值且第一最后访问信息为有效值、且所述写请求对应的数据被成功分配到缓存块中,在所述缓存块空闲时将所述数据写入与所述缓存级联的下一级存储体,并且将所述缓存块标记为无效缓存块。
例如,本公开一实施例提供的方法还包括:响应于接收到降级请求,管理所述降级请求对应的缓存块的优先级。
例如,在本公开一实施例提供的方法中,管理所述降级请求对应的缓存块的优先级,包括:响应于所述降级请求对应的缓存块的第二优先级信息为有效值,将所述缓存块的第二优先级信息修改为无效值;响应于所述降级请求对应的缓存块的第二优先级信息为无效值且第二最后访问信息为有效值,在所述缓存块下一次被访问后将所述缓存块标记为无效缓存块,并且清空所述缓存块的缓存控制信息。
例如,在本公开一实施例提供的方法中,根据所述访问请求的访问控制信息,对所述缓存进行操作,还包括:响应于所述第一旁通信息为有效值,将所述访问请求配置为旁通类型的访问请求。
例如,在本公开一实施例提供的方法中,所述访问请求的访问控制信息来自软件层的配置。
例如,在本公开一实施例提供的方法中,所述访问请求对应的数据为人工智能应用场景的数据。
本公开至少一个实施例还提供一种缓存操作装置,应用于包括多个缓存块的缓存,其中,所述缓存操作装置包括:接收单元,配置为接收对于所述缓存的访问请求,其中,所述访问请求包括访问控制信息,所述访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息,所述第一优先级信息指示所述访问请求相关的数据的优先级,所述第一最后访问信息指示所述访问请求是否为最后一次访问,所述第一瞬时信息指示所述访问请求是否为瞬时访问;处理单元,配置为根据所述访问请求的访问控制信息,对所述缓存进行操作。
本公开至少一个实施例还提供一种电子设备,包括本公开任一实施例提供的缓存操作装置。
本公开至少一个实施例还提供一种处理器,包括本公开任一实施例提供的缓存操作装置和缓存。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
在计算***中,通常采用多级缓存,例如通常采用一级缓存(L1 cache,也称为L1缓存)、二级缓存(L2 cache,也称为L2缓存)、三级缓存(L3 cache,也称为L3缓存)。这些缓存通常集成在处理器内,L1缓存最靠近处理器核心,L2缓存其次,L3缓存再次。相应地,L1缓存的速度最快,L2缓存其次,L3缓存再次。在需要获取数据时,处理器会先到L1缓存中寻找需要的数据,如果在L1缓存中没有找到,则会到L2缓存中寻找,如果仍然没有找到,则会到L3缓存中寻找。若在L1缓存、L2缓存、L3缓存中均没有找到所需要的数据,则会到内存中寻找。
为了提高命中率,需要尽可能地将最近可能使用的数据存储到缓存中。而缓存的容量有限,因此当缓存的空间被写满之后,需要采用缓存替换策略将一些数据从缓存中删除,然后将新的数据写入释放出的空间中。缓存替换策略实际上是一种数据淘汰机制,采用合理的缓存替换策略,可以有效提高命中率。当然,缓存替换策略也涉及到硬件开销,这会对芯片面积和成本产生影响。
缓存替换策略一般由硬件本身实现,例如使用一些固化的替换算法。常用的替换算法有先进先出算法(FIFO)、最近最少使用算法(LRU)、伪最近最少使用算法(PLRU)、最近最不经常使用算法(LFRU)等。缓存的基本单位是缓存块(Cache Line,也可称之为缓存行)。这些替换算法都是为了选出合适的缓存块作替换,以最大程度地保证命中率。通常而言,简单的策略(例如FIFO、LRU、PLRU等)的硬件开销小,功耗小;复杂的策略(例如LFRU等)的效果通常会优于简单策略,但是开销会更大。
固化的硬件替换策略不能保证在所有场景下都能达到缓存的最大命中率,有些策略可以保证在大多数场景都能有较好的命中率,但是往往需要采用比较复杂的算法,实现时需要更多的逻辑单元(也即需要更大的芯片面积),工作时也会带来更大的功耗。
本公开至少一个实施例提供一种缓存操作方法、缓存操作装置、电子设备及处理器。该缓存操作方法可以根据场景灵活配置缓存替换策略,提升在不同场景下的替换效果,可以提高命中率,硬件开销小,所需要的芯片面积小。
下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
本公开至少一个实施例提供一种缓存操作方法,应用于包括多个缓存块的缓存。该缓存操作方法包括:接收对于缓存的访问请求,访问请求包括访问控制信息,访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息,第一优先级信息指示访问请求相关的数据的优先级,第一最后访问信息指示访问请求是否为最后一次访问,第一瞬时信息指示访问请求是否为瞬时访问;根据访问请求的访问控制信息,对缓存进行操作。
图1为本公开一些实施例提供的一种缓存操作方法的流程示意图。如图1所示,该缓存操作方法包括如下操作。
步骤S10:接收对于缓存的访问请求,其中,访问请求包括访问控制信息,访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息,第一优先级信息指示访问请求相关的数据的优先级,第一最后访问信息指示访问请求是否为最后一次访问,第一瞬时信息指示访问请求是否为瞬时访问;
步骤S20:根据访问请求的访问控制信息,对缓存进行操作。
例如,该缓存操作方法应用于缓存(cache),该缓存包括多个缓存块(CacheLine)。
例如,在步骤S10中,访问请求可以是来自命令队列的请求,或者是来自任意的处理线程的请求,本公开的实施例对此不作限制。例如,访问请求可以是读请求或写请求。例如,访问请求包括访问控制信息,访问控制信息可以来自软件层的配置。也即是,在软件层的代码和指令中,将相关信息写入相应的命令,从而在硬件层执行相应的请求时,该请求会携带访问控制信息。例如,可以根据不同数据的特点,在相应的命令中写入预设的信息,从而使得相应的请求中携带预设的访问控制信息。
例如,访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息。在一些示例中,访问控制信息还可以进一步包括第一旁通信息。第一优先级信息指示访问请求相关的数据的优先级,第一最后访问信息指示访问请求是否为最后一次访问(这里,访问可以指读数据,也可以指写数据),第一瞬时信息指示访问请求是否为瞬时访问,第一旁通信息指示是否需要将该访问请求配置为旁通(bypass)类型的请求。这里,旁通类型的访问请求所对应的数据不会被存储到缓存中。
例如,在一些示例中,可以采用4bit(比特)二进制数来表示访问控制信息。在bit[3:0]中,bit[0]表示第一优先级信息,bit[1]表示第一最后访问信息,bit[2]表示第一瞬时信息,bit[3]表示第一旁通信息。下表示出了访问控制信息的符号和含义。
例如,在该示例中,第一优先级信息为有效值(例如bit[0]为1,也即PRI=1)时指示访问请求相关的数据为高优先级;第一优先级信息为无效值(例如bit[0]为0,也即PRI=0)时指示访问请求相关的数据为低优先级。第一最后访问信息为有效值(例如bit[1]为1,也即LAST/FW =1)时指示访问请求为最后一次访问;第一最后访问信息为无效值(例如bit[1]为0,也即LAST/FW =0)时指示访问请求不是最后一次访问。这里,当访问请求为读请求时,bit[1]中的数值的符号用LAST表示;当访问请求为写请求时,bit[1]中的数值的符号用FW表示。第一瞬时信息为有效值(例如bit[2]为1,也即TRS=1)时指示访问请求为瞬时访问;第一瞬时信息为无效值(例如bit[2]为0,也即TRS=0)时指示访问请求不是瞬时访问。第一旁通信息为有效值(例如bit[3]为1,也即BYPS=1)时指示该访问请求为旁通类型的访问请求;第一旁通信息为无效值(例如bit[3]为0,也即BYPS=0)时指示该访问请求不是旁通类型的访问请求。
例如,当该缓存操作方法用于对来自人工智能应用场景的数据所对应的访问请求进行操作时,可以根据各类数据的使用特点对相应的访问请求的访问控制信息进行配置。例如,可以将训练场景中后向传播的权重梯度数据(weight gradient data)对应的访问请求的第一优先级信息标记为有效值(表示高优先级),可以将推理场景中的激活函数数据(activation data)或训练场景中后向传播的激活函数数据和激活函数梯度(activationgradient)对应的访问请求的第一最后访问信息标记为有效值(表示为最后一次读/写)。例如,可以将流数据(stream in/stream out data)对应的访问请求的第一瞬时信息标记为有效值(表示为瞬时访问)。
需要说明的是,本公开的实施例中,访问控制信息中各类信息的表示方式和符号不限于上表中示出的方式,可以采用任意适用的方式来表示,本公开的实施例对此不作限制。例如,在其他一些示例中,每一类信息也可以采用多位二进制数来表示,而不限于1位二进制数,或者,也可以采用字符串来表示,这可以根据实际需求而定。对访问请求的访问控制信息的配置规则也不限于上文描述的规则,可以根据实际应用场景中各类数据的特点进行灵活配置,本公开的实施例对此不作限制。
例如,为缓存的每个缓存块提供有缓存控制信息,缓存控制信息可以存放在标签块表(tag表)中。标签块表包括多个标签项,标签块表用于将主存中的多个主存块按映射规则与多个标签项进行映射。标签块表的详细说明可参考常规设计,此处不再详述。例如,可以在通常的标签块表中增加一些栏目来存储缓存控制信息,从而不需要额外的存储空间。例如,在另一些示例中,也可以单独构建一个表格来存储缓存控制信息,由此无需修改当前的标签块表。关于如何存储缓存控制信息,可以根据实际需求而定,本公开的实施例对此不作限制。
例如,缓存中的多个缓存块包括至少一个被占用的非空缓存块,也即,该非空缓存块当前存储了有效的数据,不处于空闲状态。缓存控制信息至少包括优先级信息项、最后访问信息项和瞬时信息项。优先级信息项记录有第二优先级信息,最后访问信息项记录有第二最后访问信息,瞬时信息项记录有第二瞬时信息。例如,非空缓存块的优先级信息项记录的第二优先级信息指示该非空缓存块的优先级,非空缓存块的最后访问信息项记录的第二最后访问信息指示对于该非空缓存块的上一次访问是否为最后一次访问,非空缓存块的瞬时信息项记录的第二瞬时信息指示对于该非空缓存块的上一次访问是否为瞬时访问。
例如,在一些示例中,可以采用3bit二进制数来表示缓存控制信息。在bit[2:0]中,bit[0]表示第二优先级信息,bit[1]表示第二最后访问信息,bit[2]表示第二瞬时信息。下表示出了缓存控制信息的符号和含义。
例如,在该示例中,第二优先级信息为有效值(例如bit[0]为1,也即PRI’=1)时指示该非空缓存块为高优先级;第二优先级信息为无效值(例如bit[0]为0,也即PRI’=0)时指示该非空缓存块为低优先级。第二最后访问信息为有效值(例如bit[1]为1,也即LAST’/FW’=1)时指示对于该非空缓存块的上一次访问为最后一次访问;第二最后访问信息为无效值(例如bit[1]为0,也即LAST’/FW’ =0)时指示对于该非空缓存块的上一次访问不是最后一次访问。第二瞬时信息为有效值(例如bit[2]为1,也即TRS’=1)时指示对于该非空缓存块的上一次访问为瞬时访问;第二瞬时信息为无效值(例如bit[2]为0,也即TRS’=0)时指示对于该非空缓存块的上一次访问不是瞬时访问。
例如,非空缓存块的缓存控制信息来自于将数据写入该缓存块时对应的访问请求中的访问控制信息。也即是,在将某一访问请求对应的数据存储到该非空缓存块的同时,将该访问请求的访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息进行存储,以分别作为该非空缓存块的缓存控制信息中的第二优先级信息、第二最后访问信息和第二瞬时信息。例如,将第一优先级信息存储作为第二优先级信息,将第一最后访问信息存储作为第二最后访问信息,将第一瞬时信息存储作为第二瞬时信息。
需要说明的是,缓存控制信息中没有旁通信息。这是由于,被存储到缓存中的数据所对应的访问请求必然不是旁通类型的访问请求,因此该访问请求的第一旁通信息均为无效值,也就无需对其进行存储记录。若某一访问请求的第一旁通信息为有效值,则需要将该访问请求配置为旁通类型的访问请求,因此不会将对应的数据存储到缓存中,也就不会存储访问控制信息所对应的内容。
例如,在步骤S20中,根据访问请求的访问控制信息对缓存进行操作可以包括:根据访问请求的访问控制信息以及多个缓存块中非空缓存块的缓存控制信息,对缓存进行操作。
如图2所示,首先在软件层对访问请求的访问控制信息进行配置,例如对第一优先级信息、第一最后访问信息、第一瞬时信息、第一旁通信息进行配置。然后,在硬件层的指令执行单元执行相应请求的指令时,该请求会携带访问控制信息。基于访问请求的访问控制信息和多个缓存块中非空缓存块的缓存控制信息,对缓存(例如L2缓存)进行操作,由此实现程序控制。
图3为图1中步骤S20的示例的流程示意图。如图3所示,在一些示例中,上述步骤S20可以包括如下操作。
步骤S21:响应于访问请求未命中,获取访问请求中的访问控制信息;
步骤S22:响应于第一旁通信息指示该访问请求不是旁通类型的访问请求,基于访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息,确定针对访问请求的操作策略;
步骤S23:基于非空缓存块的缓存控制信息中的第二优先级信息以及操作策略,利用多个缓存块对访问请求进行响应;
步骤S24:响应于第一旁通信息为有效值,将访问请求配置为旁通类型的访问请求。
例如,在步骤S21中,若访问请求未命中,也即,缓存中不存在所需要的数据,则可能需要从下一级存储体或者主存中获取数据并将获取的数据存储到该缓存中。由此,需要获取访问请求中的访问控制信息,以便于基于访问控制信息对该缓存进行后续操作。例如,所获取的访问控制信息至少包括前述的第一优先级信息、第一最后访问信息、第一瞬时信息,相关内容可参考上文内容,此处不再赘述。
例如,在步骤S22中,若第一旁通信息指示该访问请求不是旁通类型的访问请求,也即,所需要的数据需要存储到缓存中,则基于访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息,确定针对该访问请求的操作策略。
例如,操作策略可以包括第一策略、第二策略、第三策略和第四策略。
第一策略包括:若存在空闲的缓存块,将缓存请求对应的数据分配到空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,替换低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,替换高优先级的缓存块。
第二策略包括:若存在空闲的缓存块,将缓存请求对应的数据分配到空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,替换低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,将访问请求变更为旁通类型的访问请求且不进行替换操作。
第三策略包括:若存在空闲的缓存块,将缓存请求对应的数据分配到空闲的缓存块;若不存在空闲的缓存块,将访问请求变更为旁通类型的访问请求且不进行替换操作。
第四策略包括:将访问请求变更为旁通类型的访问请求且不进行替换操作和分配操作。
例如,在上述各个策略中,当存在多个空闲的缓存块且需要将数据分配到空闲的缓存块时,可以根据预设算法选择一个空闲的缓存块,或者随机选择一个空闲的缓存块。预设算法例如为通常的先进先出算法(FIFO)、最近最少使用算法(LRU)、伪最近最少使用算法(PLRU)、最近最不经常使用算法(LFRU)等。
如图4所示,在一些示例中,在访问请求为读请求的情形,上述步骤S22可以包括如下操作。此时,第一最后访问信息用LAST表示。
步骤S221:响应于第一优先级信息为有效值、第一最后访问信息为无效值,确定操作策略为第一策略;
步骤S222:响应于第一优先级信息、第一最后访问信息、第一瞬时信息均为无效值,或者第一优先级信息、第一最后访问信息、第一瞬时信息均为有效值,确定操作策略为第二策略;
步骤S223:响应于第一优先级信息为无效值、第一瞬时信息为有效值,确定操作策略为第三策略;
步骤S224:响应于第一最后访问信息为有效值、第一瞬时信息为无效值,确定操作策略为第四策略。
例如,各个策略采用下表三所示的符号表示,各类信息采用前述表一所示的符号表示,且用0表示无效值,1表示有效值,则上述确定操作策略的方式可以如下表四所示。
如图5所示,在一些示例中,在访问请求为写请求的情形,上述步骤S22可以包括如下操作。此时,第一最后访问信息用FW表示。
步骤S225:响应于第一优先级信息为有效值、第一最后访问信息为无效值,确定操作策略为第一策略;
步骤S226:响应于第一优先级信息、第一瞬时信息均为无效值,或者第一优先级信息、第一最后访问信息均为有效值,确定操作策略为第二策略;
步骤S227:响应于第一优先级信息为无效值、第一瞬时信息为有效值,确定操作策略为第三策略。
例如,各个策略采用前述表三所示的符号表示,各类信息采用前述表一所示的符号表示,且用0表示无效值,1表示有效值,则上述确定操作策略的方式可以如下表五所示。
例如,返回图3,在步骤S23中,基于非空缓存块的缓存控制信息中的第二优先级信息以及操作策略,利用多个缓存块对访问请求进行响应。
例如,如图6所示,在一些示例中,上述步骤S23可以包括如下操作。
步骤S231:确定多个缓存块中的空闲缓存块和非空缓存块;
步骤S233:响应于所确定的操作策略为第一策略或第二策略,根据非空缓存块的第二优先级信息确定非空缓存块的优先级,并对访问请求进行响应。
例如,在一些示例中,除了包括上述步骤S231和S233,步骤S23还可以包括步骤S232。
步骤S232:响应于所确定的操作策略为第三策略或第四策略,对访问请求进行响应。
例如,在步骤S231中,确定多个缓存块中的空闲缓存块和非空缓存块,也即是,确定多个缓存块中是否存在空闲缓存块、是否存在非空缓存块、哪些缓存块为空闲缓存块、哪些缓存块为非空缓存块。例如,非空缓存块是指被占用的缓存块,其中存储了有效的数据。空闲缓存块是指未被占用的缓存块。例如,可以根据标签块表(tag表)中的信息确定空闲缓存块和非空缓存块,这可以参考常规设计,此处不再详述。
例如,在步骤S232中,若所确定的操作策略为第三策略或第四策略,则可以对访问请求进行响应。由于在第三策略和第四策略下无需获知缓存块的优先级即可进行操作,因此无需获取非空缓存块的第二优先级信息即可进行响应。
例如,在步骤S232中,进行响应的具体方式如下。在所确定的操作策略为第三策略的情形下,若存在空闲的缓存块,则将缓存请求对应的数据分配到空闲的缓存块,也即,将数据存储到该空闲的缓存块中;若不存在空闲的缓存块,则将访问请求变更为旁通类型的访问请求且不进行替换操作。例如,当存在多个空闲的缓存块时,可以根据预设算法选择一个空闲的缓存块,或者随机选择一个空闲的缓存块。预设算法例如为通常的先进先出算法(FIFO)、最近最少使用算法(LRU)、伪最近最少使用算法(PLRU)、最近最不经常使用算法(LFRU)等。例如,在所确定的操作策略为第四策略的情形下,直接将访问请求变更为旁通类型的访问请求且不进行替换操作和分配操作。
例如,在步骤S233中,若所确定的操作策略为第一策略或第二策略,则根据非空缓存块的第二优先级信息确定非空缓存块的优先级,并对访问请求进行响应。
例如,在步骤S233中,进行响应的具体方式如下。在所确定的操作策略为第一策略的情形下,若存在空闲的缓存块,则将缓存请求对应的数据分配到空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,则替换低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,则替换高优先级的缓存块。在所确定的操作策略为第二策略的情形下,若存在空闲的缓存块,则将缓存请求对应的数据分配到空闲的缓存块;若不存在空闲的缓存块且存在低优先级的缓存块,则替换低优先级的缓存块;若不存在空闲的缓存块且不存在低优先级的缓存块,则将访问请求变更为旁通类型的访问请求且不进行替换操作。
例如,如图7所示,在一些示例中,上述步骤S233还可以进一步包括如下操作。
步骤S2331:响应于存在多个同一优先级的缓存块且需要进行替换操作,根据预设算法,在多个同一优先级的缓存块中选择一个缓存块进行替换;
步骤S2332:响应于将访问请求对应的数据分配到选择的缓存块,将访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息进行存储,以分别作为该缓存块的缓存控制信息中的第二优先级信息、第二最后访问信息和第二瞬时信息。
例如,在步骤S2331中,预设算法包括先进先出算法(FIFO)、最近最少使用算法(LRU)、伪最近最少使用算法(PLRU)、最近最不经常使用算法(LFRU)至少之一。当需要替换低优先级的缓存块且存在多个低优先级的缓存块时,可以根据预设算法选择一个低优先级的缓存块进行替换;当需要替换高优先级的缓存块且存在多个高优先级的缓存块时,可以根据预设算法选择一个高优先级的缓存块进行替换。当然,本公开的实施例不限于此,当存在多个同一优先级的缓存块且需要进行替换操作时,也可以随机选择一个缓存块进行替换操作。
例如,在步骤S2332中,在将访问请求对应的数据分配到选择的缓存块之后,将访问控制信息中的第一优先级信息、第一最后访问信息和第一瞬时信息也进行存储,以分别作为该缓存块的缓存控制信息中的第二优先级信息、第二最后访问信息和第二瞬时信息。也即是,将第一优先级信息存储作为第二优先级信息,将第一最后访问信息存储作为第二最后访问信息,将第一瞬时信息存储作为第二瞬时信息。由此,可以生成对应于该缓存块的缓存控制信息,以便于在下一次对访问请求进行响应时根据操作策略进行操作。
返回图3,例如,在步骤S24中,若第一旁通信息为有效值,则将访问请求配置为旁通类型的访问请求。也即是,该访问请求对应的数据不被存储到缓存中,而采用旁通(bypass)方式进行响应。
例如,当该缓存操作方法应用于人工智能应用场景时,访问请求对应的数据为人工智能应用场景的数据。该人工智能应用场景可以为人工智能计算(AI计算)、神经网络计算、机器学习等场景。
上述人工智能计算(AI计算)可以是指使用图形处理器(GPU, GraphicsProcessing Unit)或通用图形处理器(GPGPU,General Purpose GPU)实现的人工智能计算。
例如,在一些示例中,对于一些算法步骤明确、数据流比较清晰的应用场景(如AI计算等),用户可以预先判断某些存储在L2缓存的数据是否需要再次被使用,是否会有更高的访问量等情况,并在编程时使访问这些应用数据的指令携带一些包含这些信息的访问控制信息。硬件执行指令时,这些访问控制信息会伴随各级模块的请求或控制流信号一路传递到L2缓存。L2缓存在得到请求数据所在缓存块的缓存控制信息后,可以判断其在替换时的优先级,从而令硬件做出准确的替换。访问请求中的访问控制信息会伴随缓存块的标签项等信息一并记录,并在之后新的缓存块需要替换时用于比较。
需要说明的是,本公开的实施例中,缓存操作方法可以用于对多核大规模计算芯片中的L1缓存、L2缓存、L3缓存或其他任意级别的缓存进行操作,或者用于对其他具有计算功能的设备中的缓存进行操作,本公开的实施例对此不作限制。具体的操作策略、访问控制信息中各类信息的设置等可以根据不同的应用场景以及数据特点而定,不限于上文中描述的方式。
在本公开的实施例中,通过上文描述的方式,可以由软件直接配置访问请求的访问控制信息,从而确定访问请求的优先级,并标注是否为瞬时访问、是否为最后一次访问、是否为旁通类型等信息,进而还可以确定缓存中缓存块的替换优先级,由此确定相应的操作策略以实现缓存操作。本公开的实施例提供了一种可以根据场景灵活配置缓存替换策略的方法,可以提升在不同场景下的替换效果,帮助缓存在所有场景下达到最大命中率。相比于复杂的固化替换策略,本公开实施例提供的缓存操作方法可以更直接地由硬件实现,硬件开销较小。例如,当该缓存操作方法应用于L2缓存时,由于L2缓存在***中的共用性以及远离指令执行单元的性质,该缓存操作方法可以大大提升其在不同场景下的替换效果。并且,由于L2缓存的尺寸一般较大,每个缓存块的标签项(tag)一般存放于专门的标签项存储体(tag ram)中,因而缓存块的缓存控制信息可以与标签项一并存放,所需要的芯片面积也较小。
在本公开的实施例中,该缓存操作方法除了定义替换优先级之外,还可以利用控制信息(例如访问控制信息、缓存控制信息)中各类信息的不同组合实现其他功能,比如直接无效化(invalidate)某一不再使用的缓存块,或者定义该缓存块的数据为临时存放的数据,可以被缓存主动逐出(evict)。下面将对这些功能的实现方式进行说明。
例如,在步骤S20中,根据访问请求的访问控制信息以及多个缓存块中非空缓存块的缓存控制信息,对缓存进行操作,可以包括:根据访问请求的访问控制信息,对多个缓存块的状态及数据进行管理。基于读请求和写请求执行信息管理的流程示例如图8所示,包括如下操作。
步骤S2281:响应于访问请求命中、访问请求为读请求且读请求的第一最后访问信息为有效值,读取相应的缓存块中的数据之后将缓存块标记为无效缓存块;
步骤S2282:响应于访问请求为写请求、写请求中的第一瞬时信息为有效值且第一最后访问信息为无效值、且写请求对应的数据被成功分配到缓存块中,在缓存块空闲时将数据写入与缓存级联的下一级存储体;
步骤S2283:响应于访问请求为写请求、写请求中的第一瞬时信息为有效值且第一最后访问信息为有效值、且写请求对应的数据被成功分配到缓存块中,在缓存块空闲时将数据写入与缓存级联的下一级存储体,并且将缓存块标记为无效缓存块。
例如,在步骤S2281中,若访问请求命中、访问请求为读请求且读请求的第一最后访问信息为有效值(LAST=1),则说明该访问请求是对缓存中的某一缓存块所存储的数据的最后一次访问。因此,在读取相应的缓存块中的数据之后将该缓存块标记为无效缓存块,也即是,将该缓存块无效化(invalidate)。由此,可以根据访问请求中的第一最后访问信息来无效化某一不再使用的缓存块。
例如,在步骤S2282中,若访问请求为写请求、写请求中的第一瞬时信息为有效值(TRS=1)且第一最后访问信息为无效值(FW=0)、且写请求对应的数据被成功分配到缓存块中,则说明此时写入缓存的数据为脏数据(dirty data)。因此,在该缓存块空闲时将数据写入与缓存级联的下一级存储体。由此,可以实现在缓存中临时存放数据,这些数据可以被缓存主动逐出(evict)。
例如,在步骤S2283中,若访问请求为写请求、写请求中的第一瞬时信息为有效值(TRS=1)且第一最后访问信息为有效值(FW=1)、且写请求对应的数据被成功分配到缓存块中,则说明该访问请求为动态直写(dynamic write-through)请求。因此,在该缓存块空闲时将数据写入与缓存级联的下一级存储体,并且,由于这些数据已经是完全写好或者合并完整的数据,因此将该缓存块标记为无效缓存块,也即是,将该缓存块无效化。这里,动态直写请求表示在下级存储体可以立即接受写数据时,本级缓存会将该请求变为旁通(bypass)访问,否则会先缓存在本级缓存内部,等下级存储体可以接收时再主动写出。
例如,在一些实施例中,该缓存操作方法还可以包括如下操作。
步骤S30:响应于接收到降级请求,管理降级请求对应的缓存块的优先级。
例如,在步骤S30中,降级请求不同于读请求和写请求,降级请求并不对缓存块中的数据进行访问,而是用于对缓存块的优先级进行管理,例如,用于修改缓存控制信息中的第二优先级信息。降级请求携带有地址信息,利用该地址信息可以定位到某一确定的缓存块,从而对该缓存块的优先级进行管理。
图9为本公开一些实施例提供的缓存操作方法中基于降级请求进行优先级管理的流程示意图。如图9所示,上述步骤S30可以包括如下操作。
步骤S31:响应于降级请求对应的缓存块的第二优先级信息为有效值,将缓存块的第二优先级信息修改为无效值;
步骤S32:响应于降级请求对应的缓存块的第二优先级信息为无效值且第二最后访问信息为有效值,在缓存块下一次被访问后将缓存块标记为无效缓存块,并且清空缓存块的缓存控制信息。
例如,在步骤S31中,若降级请求对应的缓存块的第二优先级信息为有效值(PRI’=1),将该缓存块的第二优先级信息修改为无效值,也即,修改PRI’的数值使得PRI’=0。由此,使该缓存块由高优先级变为低优先级。例如,在PRI’=1且FW’=1时,需要将PRI’的数值修改为0;在PRI’=1且FW’=0时,也需要将PRI’的数值修改为0。
例如,在步骤S32中,若降级请求对应的缓存块的第二优先级信息为无效值(PRI’=0)且第二最后访问信息为有效值(FW’=1),则在该缓存块下一次被访问后将该缓存块标记为无效缓存块,并且清空该缓存块的缓存控制信息。通过这种方式,可以直接在缓存中将不再使用的脏数据(dirty data)丢弃。
需要说明的是,若降级请求对应的缓存块的第二优先级信息为无效值(PRI’=0)且第二最后访问信息为无效值(FW’=0),则此时不修改该缓存块的第二优先级信息。
图10为本公开一些实施例提供的一种缓存操作方法的应用示意图。如图10所示,在一些示例中,在该缓存操作方法用于对L2缓存进行操作时,可以采用如下流程。
首先,接收新请求,该新请求可以是读请求,也可以是写请求。然后,根据请求中携带的访问控制信息获取第一优先级信息(PRI)、第一最后访问信息(LAST/FW)、第一瞬时信息(TRS)、第一旁通信息(BYPS),并且基于这些信息查找配置表,以确定该请求是否命中。
若新请求未命中(cache miss),则检查BYPS是否为有效值。若BYPS为有效值,则表示该请求需要配置为旁通类型的访问请求,因此将该请求旁通到L2缓存的下一级存储体。若BYPS为无效值,则判断是否需要分配缓存块。若需要分配缓存块,则可以基于上文中描述的各种操作策略及判断方式来对缓存块进行分配或替换。若不需要分配缓存块,则不进行替换/分配操作。这里,可以基于该请求携带的第一优先级信息(PRI)、第一最后访问信息(LAST/FW)、第一瞬时信息(TRS)以及L2缓存中各个缓存块的第二优先级信息(PRI’)、第二最后访问信息(LAST’/FW’)、第二瞬时信息(TRS’)来确定操作策略并进行操作。此外,除了判断是否需要分配缓存块之外,还需要判断是否修改缓存控制信息。例如,可以基于请求中携带的访问控制信息来修改对应于缓存块的缓存控制信息,以实现缓存控制信息的更新。
若新请求命中(cache hit),则从缓存中读取数据或将数据写入缓存中。并且,还需要判断是否对缓存块进行无效化操作。例如,可以基于对应的缓存块的缓存控制信息来判断是否需要无效化该缓存块。若需要无效化该缓存块,则对标签项表(tag表)进行修改,以实现无效化。
例如,如图10所示,在步骤Z1、Z2、Z3、Z4中,需要基于访问控制信息和/或缓存控制信息进行相应的判断。例如,在步骤Z1中,需要基于BYPS进行相应判断;在步骤Z2中,需要基于PRI、LAST/FW、TRS、PRI’进行相应判断;在步骤Z3中,需要基于PRI、LAST/FW、TRS进行相应判断;在步骤Z4中,需要基于LAST/FW、TRS进行相应判断。相关说明可参考上文中关于缓存操作方法各个步骤的描述,此处不再赘述。
需要说明的是,本公开的实施例中,该缓存操作方法还可以包括更多或更少的步骤,各个步骤的执行顺序不受限制,可以并行执行,也可以串行执行,这可以根据实际需求而定。
本公开至少一个实施例还提供一种缓存操作装置。该缓存操作装置可以根据场景灵活配置缓存替换策略,提升在不同场景下的替换效果,可以提高命中率,硬件开销小,所需要的芯片面积小。
图11为本公开一些实施例提供的一种缓存操作装置的示意框图。如图11所示,该缓存操作装置100包括接收单元110和处理单元120。例如,该缓存操作装置100应用于包括多个缓存块的缓存。
接收单元110配置为接收对于缓存的访问请求。例如,该访问请求包括访问控制信息,访问控制信息包括第一优先级信息、第一最后访问信息和第一瞬时信息。第一优先级信息指示该访问请求相关的数据的优先级,第一最后访问信息指示该访问请求是否为最后一次访问,第一瞬时信息指示该访问请求是否为瞬时访问。例如,接收单元110可以执行如图1所示的缓存操作方法的步骤S10。处理单元120配置为根据访问请求的访问控制信息,对缓存进行操作。例如,处理单元120可以执行如图1所示的缓存操作方法的步骤S20。
例如,接收单元110和处理单元120可以为硬件、软件、固件以及它们的任意可行的组合。例如,接收单元110和处理单元120可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于接收单元110和处理单元120的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,缓存操作装置100的各个单元与前述的缓存操作方法的各个步骤对应,关于该缓存操作装置100的具体功能可以参考上文中缓存操作方法的相关描述,此处不再赘述。图11所示的缓存操作装置100的组件和结构只是示例性的,而非限制性的,根据需要,该缓存操作装置100还可以包括其他组件和结构。
本公开至少一个实施例还提供一种电子设备。该电子设备可以根据场景灵活配置缓存替换策略,提升在不同场景下的替换效果,可以提高命中率,硬件开销小,所需要的芯片面积小。
图12为本公开一些实施例提供的一种电子设备的示意框图。如图12所示,该电子设备200包括缓存操作装置210。例如,缓存操作装置210可以为图11所示的缓存操作装置100,并且可以执行前述的缓存操作方法。该电子设备200可以为计算机、服务器或其他任意的具有计算能力的设备,只需设置有缓存并且需要对缓存进行操作即可,本公开的实施例对此不作限制。关于该电子设备200的相关说明可参考上文中关于缓存操作装置100的描述,此处不再赘述。
本公开至少一个实施例还提供一种处理器。该处理器可以根据场景灵活配置缓存替换策略,提升在不同场景下的替换效果,可以提高命中率,硬件开销小,所需要的芯片面积小。
图13为本公开一些实施例提供的一种处理器的示意框图。如图13所示,该处理器300包括缓存操作装置310以及缓存320。例如,缓存320可以为L1缓存、L2缓存、L3缓存等任意级别的缓存。缓存操作装置310用于对缓存320进行操作,例如读/写数据、对缓存320中多个缓存块的状态及数据进行管理等。缓存操作装置310可以为图11所示的缓存操作装置100。例如,处理器300可以为多核大规模计算芯片,也可以为单核计算芯片,本公开的实施例对此不作限制。关于处理器300的相关说明可参考上文中关于缓存操作装置100的描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。