CN115168248B - 支持simt架构的高速缓冲存储器及相应处理器 - Google Patents
支持simt架构的高速缓冲存储器及相应处理器 Download PDFInfo
- Publication number
- CN115168248B CN115168248B CN202211068513.7A CN202211068513A CN115168248B CN 115168248 B CN115168248 B CN 115168248B CN 202211068513 A CN202211068513 A CN 202211068513A CN 115168248 B CN115168248 B CN 115168248B
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- tag
- memory
- cache block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 141
- 238000013507 mapping Methods 0.000 claims abstract description 81
- 238000013500 data storage Methods 0.000 claims abstract description 35
- 230000004044 response Effects 0.000 claims description 8
- 230000000717 retained effect Effects 0.000 abstract description 2
- 238000000034 method Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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
- G06F12/0877—Cache access modes
- G06F12/0884—Parallel mode, e.g. in parallel with main memory or CPU
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
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
本申请提供了支持SIMT架构的高速缓冲存储器及相应处理器,包括控制器、标签存储单元、数据存储单元和用于保存标签与缓存块之间的映射关系的映射单元。对于接收到的访存请求,控制器在缓存命中时根据映射单元确定命中的标签所对应的缓存块;在缓存未命中时为该访存请求分配新标签来替换标签存储单元中的一个标签,为该访存请求分配新的缓存块,在映射单元中建立新分配的标签与缓存块之间的映射;将被替换的标签对应的缓存块设定为处于未与标签绑定的状态,但仍将其保留在数据存储单元中。该方案在不改变高速缓冲存储器的现有标签检索范围和存储空间的情况下,允许在高速缓冲存储器中无条件地暂存一条SIMT指令中所有线程的数据。
Description
技术领域
本申请涉及处理器中高速缓存技术,尤其涉及支持多线程并行计算的高速缓冲存储器及相应处理器。
背景技术
本部分的陈述仅仅是为了提供与本申请的技术方案有关的背景信息,以帮助理解,其对于本申请的技术方案而言并不一定构成现有技术。
为缓和处理器与主存之间的速度差异,通常会在处理器与主存之间设置速度快但容量小的高速缓冲存储器(Cache)作为主存数据的缓存,因此也可将Cache简称为缓存。当处理器需要存取主存中的数据时,首先会从Cache中查找对应地址的数据是否已经缓存在Cache中,如果要访问的数据已缓存在Cache中(可称为“命中”),则直接从Cache中返回数据给处理器,否则由Cache的控制器从主存中提取数据进行缓存并返回给处理器。Cache的数据存储空间被平均分成相等的很多块,每一个块被称为缓存行(Cache line)或缓存块。为了与Cache映射,主存也分成若干块。Cache与主存之间的数据传输的最小单位为缓存块大小,任何时刻都有一些主存块被预取在缓存块中,但由于缓存块的数量远小于主存的块数,因此,一个缓存块并不能惟一地、永久地只对应一个主存块,因此每个缓存块会设置有一个标签(tag)用来表示当前存放的是哪一个主存块,该标签的内容相当于主存块的编号。在从Cache中读取数据时通过将访存存地址的一部分与各缓存块的标签进行比较,就能判断所读的数据是否已被缓存在Cache中。可以看出,对于Cache中标签的查找和比对速度会直接影响处理器对数据的存取效率,因此高速缓冲存储器中标签的数量是有限的,一般都小于32个。
而在诸如GPGPU之类的并行处理器中,通常采用单指令多线程(SIMT,SingleInstruction Multiple Threads)架构来实现数据的并行处理以提高性能。在SIMT处理器中,允许同一条指令的多数据分开寻址,即同一条指令中包含的多个线程可以同时访问不同地址的数据。SIMT处理器发出访存请求到访存控制单元(LSU,Load/Store Unit),LSU会先预处理这些所有线程的请求,比如合并相同地址的请求,然后会把这些访存请求发到L1缓存,以减少访存的次数。然而发明人在研究中发现在一些不友好的情况下,一条指令的多个线程中的访存请求不能被合并且所需数据都不在Cache中。这时需要从主存中读取数据,SIMT中一条指令一般含有32个线程或更多的线程,LSU需要一条指令中的所有线程的数据读取都完成才能开始执行该指令。也就是L1缓存要同时接受并处理至少32个请求;而现有L1缓存的可供分配的标签的最大数量可能会少于要处理的访存请求的数量,由此有时会无法完成同一指令中多个线程的数据读取,而LSU又会无限等待下去,从而在LSU和L1缓存之间可能出现死锁的情况。
需要说明的是,上述内容仅用于帮助理解本申请的技术方案,并不作为评价本申请的现有技术的依据。
发明内容
本申请提供一种支持SIMT架构的高速缓冲存储器,以有限的标签数量灵活地支持SIMT架构中多线程的访存处理,有效避免在LSU和L1缓存之间可能出现的死锁情况。
根据本申请实施例的第一方面,提供了一种支持SIMT架构的高速缓冲存储器,包括控制器、用于保存标签的标签存储单元、由多个缓存块构成的数据存储单元和映射单元。其中所述缓存块的数量大于所述标签的数量,每个缓存块都设置有标签绑定位和状态位,所述标签绑定位用于指示该缓存块是否与标签绑定,所述状态位用于指示对于该缓存块是否已经操作完毕。映射单元用于保存标签与缓存块之间的映射关系。控制器被配置为对于接收到的访存请求,在缓存命中时从映射单元中确定命中的标签所对应的缓存块,从该缓存块提取该访存请求要访问的数据作为对该访存请求的响应。对于接收到的访存请求,在缓存未命中时执行下列操作:在标签存储单元中为该访存请求分配一个标签存储位置以存放该访存请求的访存地址中的标签字段,并从数据存储单元中选择已操作完毕且未与标签绑定的多个缓存块的其中一个分配给该访存请求;在映射单元中将所分配的标签存储位置原来对应的缓存块的标签绑定位设置为指示未与标签绑定,接着在该标签存储位置与分配给该访存请求的缓存块之间建立映射关系,并将分配给该访存请求的缓存块的标签绑定位设置为指示已与标签绑定;以及从下一级存储器获取该访存请求要访问的数据并将其保存在为该访存请求分配的缓存块中。
在该实施例中,与现有的高速缓冲存储器中标签与缓存块一一对应的固定映射关系不同,高速缓冲存储器中标签与缓存块之间是动态映射的。也就是每个标签不再固定地与某个缓存块绑定,而是可以动态地映射到或绑定于任何一个缓存块,因此标签的替换和缓存块中数据的替换并不需要同步进行。例如,在前16个访存请求处理完成时,这些访存请求所要访问的数据已经被读取至L1缓存中,在接着处理后续的16个访存请求时,可以对标签存储单元中每个存储位置的标签进行替换,当标签存储单元中某个存储位置保存的标签被替换为新标签时,可以在数据存储单元中为该新标签对应的数据分配新的缓存块,并在映射单元中建立该新标签与新分配的缓存块之间的映射即可,而与原来在该存储位置保存的旧标签相对应的缓存块中的数据仍然保留在数据存储单元中。这样既能将后续16个访存请求的数据全部读取至L1缓存中,又不会影响L1缓存中已经读入的前16个访存请求的数据。通过这种动态映射方式可以在不改变L1缓存的现有标签检索范围和存储空间的情况下,将一条SIMT指令中所有线程的数据无条件地暂存在L1缓存中。因此在不影响L1缓存性能的情况下,防止了LSU与L1缓存之间死锁情况的发生。
在一些实施例中,映射单元可以采用随机存取存储器的形式实现。在又一些实施例中,映射单元可以采用寄存器的形式实现。例如,该映射单元可以包括与标签存储单元中各标签存储位置相对应的多个寄存器,每个寄存器的值等于在其对应的标签存储位置中保存的标签相对应的缓冲块的序号。这样的采用寄存器形式实现的映射单元可以进一步减少L1缓存中对于映射关系的存储所占的成本和面积,提高解析标签和缓存块之间映射关系的速度。
在一些实施例中,所述缓存块的数量与所述标签的数量的差值可以等于单指令多线程架构中同一指令所包含的线程数,从而可以确保同一SIMT指令中所有线程的数据在最坏的情况下都能存放在L1缓存中。
在一些实施例中,所述控制器可以被配置为从下一级存储器获取到所述访存请求要访问的数据时,将该数据返回给处理器的访存控制单元并将该数据所在缓存块的状态位设置为指示操作完毕,以便有利于及时地释放高速缓冲存储器的存储空间。
在一些实施例中,所述控制器可以被配置为从下一级存储器获取到所述访存请求要访问的数据时,向处理器的访存控制单元发送数据已经准备好的通知消息,并将保存所获取的数据的缓存块的状态位设置为指示未操作完毕;其中所述通知消息中包含用于指示所获取的数据在所述高速缓冲存储器中位置的信息;以及响应于收到来自处理器的访存单元取回数据的请求,将相应的数据返回给处理器的访存控制单元,并响应于收到来自处理器的访存控制单元发出的释放数据通知,将要释放的数据所在缓存块的状态位设置为指示已操作完毕。
在这样的实施例中,考虑到同一个读数据可能会被访存控制单元使用很多次,仅在收到来自访存控制单元发出的释放数据通知时,再将相应数据所在缓存块的状态位设置为指示已操作完毕,从而提高了数据访问效率。而且访存控制单元仅保存用于在L1缓存中定位读返回数据的指示信息,而非直接保存读返回数据本身,因此并不需要很大的硬件存储空间来暂存读返回的数据。而且对于同一地址的读返回数据在处理器中仅占用一个数据位置,而非在LSU和L1缓存中均保存相同副本,这不仅节省了处理器的硬件开销,还减小了处理器芯片的面积开销。
根据本申请实施例的第二方面,提供了一种SIMT架构的处理器,其包含根据本申请实施例的第一方面的高速缓冲存储器作为第一级缓存。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本申请一个实施例的支持单指令多线程架构的高速缓冲存储器的结构模块示意图。
图2为本申请一个实施例的标签与缓存块之间的映射关系示意图。
具体实施方式
为了使本申请的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本申请进一步详细说明。应当理解,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动下获得的所有其他实施例,都属于本申请保护的范围。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
在硬件上,高速缓冲存储器位于处理器和主存之间。为了进一步提升性能,还可以引入多级Cache,在L1缓存后面连接L2缓存,在L2缓存 和主存之间连接L3缓存。但在本申请的实施例中以及下文提及的Cache指的是在处理器内部包含的L1缓存(即第一级Cache)。当处理器从主存中存取数据的时候,首先从L1缓存中查找对应地址的数据是否缓存在Cache中,如果其数据缓存在Cache中,直接从Cache中将数据返回给处理器。而当Cache中没有缓存想要的数据时,处理器需要等待从主存中加载数据。
高速缓冲存储器中通常包括控制器、用于保存标签(tag)的标签存储单元和用于保存数据的数据存储单元。如上文提及的,Cache的数据存储空间被平均分成相等大小的多个缓存块(也可称为缓存行),每个缓存块都设置有唯一对应的标签,Cache与主存之间的数据传输的最小单位为缓存块大小。虽然标签也是Cache的一部分,但通常提及Cache大小时,仅指Cache最大能容纳的数据总量,即Cache的数据存储单元的存储空间大小。例如Cache大小为64字节,并且缓存块大小是8字节,则该Cache中包括8个缓存块,而Cache的控制器从主存中一次性存取的数据量为8字节。
高速缓冲存储器通常分为三种类型:直接映射缓存(Direct mapped Cache)、全相联缓存(Full associative Cache)和组相联缓存(Set associative Cache)。在直接映射缓存中,每个主存块只能映射至Cache中固定位置的缓存块,即使缓存内还空着许多位置也不能占用,使缓存的存储空间得不到充分的利用,而且如果程序恰好要重复访问对应同一缓存位置的不同主存块,经常发生块冲突,需要不停地进行替换,从而降低了命中率。在全相联缓存中,每个主存块都可映射至Cache中任一缓存块,在访问数据时,需要将访存请求中地址与各个缓存块的标签进行比较以确定是否命中,但每次需要全部比对后才能确定Cache不命中,然后再开始执行替换,这直接影响了数据缓存效率和访问效率。组相联缓存中将存储空间分成若干组,各组之间是直接映射方式,而组内各个缓存块之间则是全相联映射方式。相应地,主存也按Cache的容量分区,每个分区又分成若干个组,每个组包含若干主存块。这样,但主存中每个组只能映射到Cache中的指定组,但主存中一个组内的每个主存块可映射至Cache中指定组内的任意缓存块中。也就是说组内是全相联映射方式,而组间则是直接映射方式。组相联缓存在判断块命中以及替换算法上都要比全相联缓存简单高效,块冲突的概率比直接映射缓存的低,其命中率介于直接映射缓存和全相联缓存之间。
对于诸如GPGPU之类的采用SIMT架构的处理器中,同一条指令中包含的多个线程可以同时访问不同地址的数据,很少选择空间利用率和命中率相对较低的直接映射缓存,而更多的是选择全相联缓存或组相联缓存类型的Cache作为处理器的L1缓存。因此,在本申请的实施例中针对的是在访问数据时需要将访问地址中的部分位与高速缓冲存储器中多个缓存块的标签进行比对来判断是否命中的全相联缓存或组相联缓存类型的高速缓冲存储器。在这样的Cache中,标签的查找和比对速度会直接影响处理器对数据的存取效率,因此在L1中保存的标签的数量通常不会太多。L1缓存中比较常见的标签数量通常为4个、8个或16个等,一般都小于32个。为方便描述,下文均以组相联缓存类型的L1缓存作为示例来进行介绍,但应理解,本申请中介绍的实施例也适用于全相联缓存类型的L1缓存。
当Cache的控制器收到访存请求时,其通过访存请求中的地址(可简称为访存地址)来判断数据是否已缓存在Cache中。该访存地址通常包括三个部分:标签(tag)、索引(index)和偏移量(offset)。其中偏移量用于寻址缓存块中某个数据,索引用于定位Cache中的某一个组,而标签用于与通过索引指定的组中包含的各缓存块的对应tag进行比对以判断是否命中。仍以大小为64字节且缓存块大小是8字节的Cache为例,假设Cache被分成两个组,每组的存储空间大小为32 Bytes,即包含4个缓存块。当缓存块大小为8字节时,其寻址范围以3个比特即可表示,由此访存地址可采用最低3位表示偏移量字段;而其中组的数量为2,因此以1个比特就可以覆盖所有的组,这样访存地址中可以采用与偏移量相邻的1个比特表示索引字段,而访存地址中其余比特为标签字段,用于与通过索引定位的组中所有缓存块对应的tag进行比较。这样,对于示例的Cache在收到访存请求时,通过该访存请求中地址的索引字段可以定位到相应的组,取访存地址中的标签字段与该组中包含的各个缓存块的tag进行比较,如果有匹配的tag,则说明Cache命中,可以根据访存地址中偏移量字段提取与所匹配的tag对应的缓存块中相应数据返回给处理器。如果不相等,则说明要访问的数据还没有被缓存在Cache中(即“缺失”)。在Cache缺失的情况下,Cache的控制器为要访问的数据分配一个缓存块及其相应tag,从主存中加载该数据至所分配的缓存行中,并将该访存地址对应的标签字段保存在该缓存块对应的tag中。
如上文提到的,SIMT处理器的计算核心通常将访存请求发送到处理器的访存控制单元LSU,LSU会先预处理这些线程的请求,比如合并相同地址的请求,然后把这些访存请求发到L1缓存,以减少访存的次数。处理器的LSU首先访问L1缓存,如果命中,则将L1缓存中的数据返回给处理器,如果未命中,则尝试从L1缓存的下一级存储器读取数据。LSU会利用L1缓存来暂存读返回数据。然而发明人在研究中发现,在一些不友好的情况下,SIMT的一条指令的多个线程的访存请求不能被合并且所需数据都不在Cache中,并且对于组相联缓存类型的L1缓存,同一指令中所有线程的访存请求可能会出现需要映射到L1缓存的同一组中的情况。出于查找和匹配效率的考虑,L1缓存中标签数量通常一般都小于32个,而SIMT架构中一条指令一般含有32个线程或甚至更多的线程。这时处理器的访存控制单元LSU需要等待同一条指令中的所有线程的数据都读取完成,而L1缓存的一个组中受标签数量限制又无法完成同一指令中所有线程的数据读取,从而在处理器的LSU和L1缓存之间可能出现死锁的情况。而在本申请的实施例中提出一种支持单指令多线程架构的高速缓冲存储器,可以灵活地、无条件地容纳或缓存同一指令中所有线程的数据。
图1给出了根据本申请一个实施例的高速缓冲存储器100的结构模块示意图。该高速缓冲存储器100包括控制器101、用于保存标签的标签存储单元102、由多个缓存块构成的数据存储单元103和映射单元104。
与现有的高速缓冲存储器中标签与缓存块一一对应的固定映射关系不同,在高速缓冲存储器100中标签与缓存块之间是动态映射的。也就是每个标签不再固定地与某个缓存块绑定,而是可以动态地映射到或绑定于任一个缓存块。数据存储单元103中缓存块的数量大于标签存储单元102中所包含的标签的数量。每个缓存块可以与一个标签绑定,也可以不与任一标签绑定。在该实施例中,每个缓存块都设置有标签绑定位和状态位。标签绑定位用于指示该缓存块是否与标签绑定,例如当缓存块与某个标签绑定时,可以将其标签绑定位设置为1、y或T等,而缓存块不再绑定任何标签时,可将其标签绑定位设置为0、n或F等。状态位用于指示对于该缓存块是否已经操作完毕。例如当控制器101确定对于缓存块当前存放的数据的读写操作已经全部完成时,可以将该缓存块的状态位设置为1、y或T等,反之,可将其状态为设置为0、n或F等。每个缓存块只有在未绑定任何标签且读取操作已经全部完成的情况下,才允许释放其中的数据资源,即可以参与数据替换,可用于存放新的数据。
在该实施例中,标签与缓存块之间的映射关系被保存在映射单元104中。映射单元104例如可以表格的形式保存标签序号与缓存块序号之间的一一映射关系。标签序号用于指示标签存储单元102中保存的每个标签的位置。缓存块序号用于指示数据存储单元103中每个缓存块的位置。图2给出了根据本申请一个示例的标签与缓存块之间的映射关系示意图。如图2所示,标签存储单元中共有k+1个标签,而数据存储单元中共有n+1个缓存块,其中n和k都是自然数,且n大于k。映射单元中保存有这k+1个标签当前与各个缓存块的映射关系。第1个标签t0当前映射至第6个缓存块d5,第2个标签t1当前映射至第9个缓存块d8,……,第k+1个标签当前映射至第24个缓存块d23。由于缓存块数量大于标签数量,因此数据存储单元中会存在一些缓存块未绑定任何标签。对于这些未绑定任何标签的缓存块中存放的数据,有些已经读写完毕,而有些尚未读写完毕。这些状态可以根据各个缓存块的tag绑定位和状态位来指示。可以看出,映射单元104所保存的标签与缓存块之间的映射关系实际上所体现或反映的是标签存储单元102中各个存储位置当前保存的标签与数据存储单元103中相应缓存块当前保存的数据块之间的映射关系。因此也可以理解为映射单元104记录的是标签的存储位置与其对应数据的存储位置之间的映射。
在现有的L1缓存中,标签和缓存块中的数据是固定绑定的一一对应关系,二者必须是同步更新的。即当每个缓存块中的数据更新时,该缓存块对应的标签也会同时被更新;反之亦然,当标签存储单元102的某个存储位置保存的标签更新时,与该标签对应的缓存块中的数据也一定会被同时更新。而在本申请的实施例中,通过引入了映射单元104实现了标签与缓存块中数据的动态映射或动态绑定。标签和缓存块中的数据可以不必同步更新。例如,当标签存储单元102中某个存储位置保存的标签被替换为新标签时,可以在数据存储单元103中为该新标签对应的数据分配新的缓存块,并在映射单元104中建立该新标签与新分配的缓存块之间的映射即可,而与原来在该存储位置保存的旧标签相对应的缓存块中的数据仍然保留在数据存储单元103中。也就是说,在本申请的高速缓冲存储器中,其数据存储单元中有些缓存块是与标签相绑定的,而有些缓存块处于没有绑定标签的状态。对于这些处于没有绑定标签状态的缓存块,如果对于其中数据的读写操作都完毕,则这些缓存块中的数据是允许释放的,该缓存块可以被用来重新使用的,即允许其中缓存新的数据。而如果对于这些处于没有绑定标签状态的缓存块中数据的读写操作还没有完成,则这些缓存块中的数据是被锁定的,此时这些缓存块不允许参与重新分配或任何更新操作。可以通过缓存块的状态位来指示对于缓存块中数据的读写操作是否已经完成。例如当该缓存块中的数据已经作为对访存请求的响应返回给处理器的LSU时,L1缓存的控制器可以将该缓存块的状态位设置为已经操作完毕,以允许对该缓存块的存储空间的重新利用。
因此,采用上述的标签与缓存块之间动态映射的高速缓冲存储器,可以无条件地暂存SIMT指令中所有线程的数据。通过L1缓存中有限的标签可以支持和处理超过标签数量的访存请求。更具体地,仍以一个SIMT指令中包含32个线程访问在其一个组中包含16个标签的L1缓存为例,在这种情况下,L1缓存的控制器需要将这32个线程的访存请求要访问的数据读取到该L1缓存的同一个组中,在前16个访存请求处理完成时,这个组中16个标签已经用尽,没有可用的标签可分配,但还有后面的16个访存请求等待处理。如果采用现有的L1缓存继续处理后续的16个访存请求,则需要对现有的标签进行替换,相应地该标签对应的缓存块中的数据也会被替换出L1缓存。而实际上现有标签所对应的数据为之前16个访存请求刚刚获取的要访问的数据,不应该被替换出去,LSU还在等待32个访存请求的数据全部读完成。因此会出现上文提到的LSU与L1缓存之间出现死锁的情况。而如果采用根据本申请实施例的L1缓存,则可以防止LSU与L1缓存之间出现死锁的情况。这是因为标签与缓存块之间是动态绑定的,标签的替换和缓存块中数据的替换并不需要同步进行。例如,在前16个访存请求处理完成时,这些访存请求所要访问的数据已经被读取至L1缓存中,在接着处理后续的16个访存请求时,可以对标签存储单元102中每个存储位置的标签进行替换,当标签存储单元102中某个存储位置保存的标签被替换为新标签时,可以在数据存储单元103中为该新标签对应的数据分配新的缓存块,并在映射单元104中建立该新标签与新分配的缓存块之间的映射即可,而与原来在该存储位置保存的旧标签相对应的缓存块中的数据仍然保留在数据存储单元103中。这样既能将后续16个访存请求的数据全部读取至L1缓存中,又不会影响L1缓存中已经读入的前16个访存请求的数据。通过这种动态映射方式可以在不改变L1缓存的现有标签检索范围和存储空间的情况下,将一条SIMT指令中所有线程的数据无条件地暂存在L1缓存中。因此本申请的方案在不影响L1缓存性能的情况下,防止了LSU与L1缓存之间死锁情况的发生。
在一些实施例中,映射单元104可以采用诸如SRAM、DRAM之类的随机存取存储器来实现,在其上以诸如数组、链表等数据结构来保存标签序号与缓存块序号之间的一一映射关系。以数组为例,该数组中元素的数量为标签存储单元102中可存储的标签的数量。数组中第一个元素中保存的是标签存储单元102中第一个标签当前所对应的缓存块的序号,依次类推。在又一些实施例中,映射单元104可以采用寄存器的形式实现,例如,将映射单元104实现为一组寄存器,各个寄存器分别对应于标签存储单元102中各标签的存储位置,而每个寄存器的值为相应位置的标签对应的缓存块的序号。这样的采用寄存器形式实现的映射单元可以进一步减少L1缓存中对于映射关系的存储所占的成本和面积,提高解析标签和缓存块之间映射关系的速度。
继续参考图1,当该高速缓冲存储器100接收到自SIMT处理器的访存控制单元LSU发送的访存请求时,控制器101对于接收到的访存请求中包含的访存地址进行解析。根据访存地址中索引字段定位到相应的组,然后将访存请求中标签字段与所定位的组中包含的标签进行比较。如果能找到匹配的标签,则缓存命中,说明该访存请求要访问的数据已经被缓存在该高速缓冲存储器中。如果比对完所有的标签都没有找到相匹配的标签,则说明该访存请求要访问的数据还没缓存在该高速缓冲存储器中,此时控制器101需要从下一级存储器(例如L2缓存或主存等)中将该访存请求要访问的数据读取至该高速缓冲存储器100中。
在缓存命中的情况下,控制器101根据映射单元104中所保存的标签与缓存块的映射关系确定该命中的标签对应的是哪个缓存块,并根据访存地址中偏移量字段从该缓存块提取该访存请求要访问的数据作为对该访存请求的响应返回给处理器的访存控制单元LSU。
在缓存未命中的情况下,控制器101为该访存请求分配一个标签,例如将访存请求中包含的访存地址的标签部分作为新分配的标签,并将新分配的标签保存在标签存储单元102中,这时需要用该新分配的标签去替换在标签存储单元102的其中一个存储位置保存的原有标签,从而实现标签的更新。实际上就是在标签存储单元102为该访存请求的标签分配了存储位置。同时,控制器101还需要在数据存储单元103中为该访存请求分配一个缓存块,以便能存放从下一级存储器中读取的该访存请求要访问的数据。为了在分配给该访存请求的标签和缓存块之间建立对应关系,控制器101还需要更新映射单元104中标签与缓存块之间的映射关系,以使得标签存储单元102中分配给该访存请求的标签与在数据存储单元103中分配给该访存请求的缓存块之间建立映射。例如,根据该标签在标签存储单元102中存储位置的序号在映射单元104中查找该标签序号对应的缓存块序号,将找到的缓存块序号对应的缓存块的标签绑定位设置为指示未与标签绑定,并将找到的缓存块序号替换为分配给该访存请求的缓存块在数据存储单元103中的序号。在映射单元104中建立相应映射之后,将分配给该访存请求的缓存块的标签绑定位设置为指示已与标签绑定。这样,就可以从下一级存储器读取包含该访存请求要访问的数据并将其保存在为该访存请求分配的缓存块中。
在一些实施例中,可以将控制器101配置为主动向SIMT处理器的访存控制单元LSU返回所读取的数据。也就是将从下一级存储器所读取的数据作为对相应访存请求的响应立刻返回给LSU,并将该数据所在的缓存块的状态位设置为指示操作完毕。但这样会使得所读取的数据同时存在于L1缓存和LSU中,造成处理器中存储空间的浪费。尤其是对于SIMT架构的处理器,多个线程的数据同时存在于L1缓存和LSU中,使得LSU也需要相对大的数据存储空间,这无疑会影响处理器的芯片尺寸。
因此在又一些实施例中,可以将控制器101配置为在读取到相关数据时,主动向SIMT处理器的访存控制单元LSU发送读数据已经准备好的通知消息,而非直接返回所读取的数据。在所返回的通知消息中可以包含用于定位该数据的信息,例如用于存放所读取的相关数据的缓存块在数据存储单元103中的位置的标识信息(例如缓存块的序号)、该数据在相应缓存块中的位置等等。在发送该通知消息的同时,控制器101需要将保存所读取的相关数据的缓存块的状态位设置为指示未操作完毕。这样就可以在L1缓存中锁定该缓存块,使得该缓存块当前保存的数据不会被替换出去。当处理器的访存控制单元需要提取其暂存在L1缓存中的数据时,可以根据之前收到的读数据已经准备好的通知消息,向L1缓存发出取回数据的请求。控制器101在收到访存控制单元的取回数据请求时,可以根据收到的请求中相关指示信息从相应缓存块中提取数据返回给访存控制单元。此时,控制器可以将相应缓存块的状态位设置为指示已操作完毕。但考虑到同一个读数据可能会被访存控制单元使用很多次,为了提高数据访问效率,控制器101可以被配置为在收到来自访存控制单元发出的释放数据通知时,再将相应数据所在缓存块的状态位设置为指示已操作完毕,从而使得这个缓存块可以参与后续L1缓存替换操作来缓存新数据。在这样的实施例中,访存控制单元仅保存用于在L1缓存中定位读返回数据的指示信息(例如指针),而非直接保存读返回数据本身,因此并不需要很大的硬件存储空间来暂存读返回的数据。而且对于同一地址的读返回数据在处理器中仅占用一个数据位置,而非在LSU和L1缓存中均保存相同副本,这不仅节省了处理器的硬件开销,还减小了处理器芯片的面积开销。
继续参考图1,当控制器101接收到来自处理器的访存控制单元的访存请求时,一旦发生缓存未命中的情况,就需要为该访存请求分配一个标签和缓存块,这实际上意味着需要对标签存储单元102中保存的某个现有标签进行替换,需要对数据存储单元103中某个缓存块中的数据进行替换。在现有的L1缓存中,标签及其对应的缓存块中的数据必须是同时替换的。而如上文结合动态映射所介绍的,在本申请的实施例中标签及其对应的缓存块不需要同步替换。
对于在为该访存请求分配新标签时从标签存储单元102中选择哪个已有标签进行替换的策略,本申请对此不进行限制。例如控制器101可以用新分配的标签来替换在标签存储单元102中存在时间最长的标签或者最久未被访问的标签。又例如,控制器101可以为每个标签设置一个计数器,用来记录对于该标签有待执行操作的次数,这些操作可以由控制器根据具体需求或内部逻辑来设定。当L1缓存内部对于每个标签的所有操作都完成时,该标签的计数器就归零,这意味着该标签目前已经处于可被替换的状态。
而对于在为访存请求分配新的缓存块时从数据存储单元103中选择哪个缓存块参与替换,在本申请的实施例中限定只能从数据存储单元103中处于未绑定任何标签且对该缓存块的读写操作都已完成的状态的那些缓存块中选择其中一个作为与新分配的标签对应的缓存块。每个缓存块所处的状态可以通过读取该缓存块的标签绑定位和状态位来确定。至于如何从满足上述状态的多个缓存块中选择其中一个缓存块的策略,本申请对此不进行任何限制。例如控制器101可以在这些满足条件的缓存块中选择最久未被访问的缓存块来分配给相应的访存请求。
如上文所提到的,当标签存储单元102中某个存储位置中的标签被替换为新标签时,这个被替换的旧标签所对应的缓存块中的数据并没有被同时替换,该缓存块中的数据还保留在数据存储单元103中,只是该缓存块不再绑定任何标签。只有在对于该缓存块的所有读写操作都完成时,才允许该缓存块参与替换。因此在数据存储单元103中缓存块的数量要大于标签存储单元102中存储的标签的数量。这样才能支持标签与缓存块之间的动态映射,才可以在SIMT指令的线程数超过现有L1缓存的标签数的情况下允许将一条SIMT指令中所有线程的数据无条件地读取并暂存在L1缓存中,从而防止了LSU与L1缓存之间死锁情况的发生。为了确保同一SIMT指令中所有线程的数据在最坏的情况下都能存放在L1缓存中,在数据存储单元103中的缓存块的数量与标签存储单元102中标签的数量的差值至少等于单指令多线程架构中同一指令所包含的线程数。当然如果L1缓存支持的多个SIMT处理器,则该差值还需要根据SIMT处理器的个数进行翻倍。实际上,在采用上述动态映射机制的L1缓存中,数据存储单元中缓存数量的增加并不会对L1缓存本身的访问效率有太大影响,真正影响L1缓存访问效率的是标签的查找和比对速度。因此,通过这种动态映射方式可以在不改变L1缓存的现有标签检索范围和存储空间的情况下,将一条SIMT指令中所有线程的数据无条件地暂存在L1缓存中,既不影响L1缓存的性能,又防止了LSU与L1缓存之间死锁情况的发生。
应理解,对于本文中提到的控制器、控制逻辑等,除了以纯计算机可读程序代码方式实现控制器之外,完全可以通过将相应功能模块、过程或步骤进行逻辑编程在使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等形式来实现相同功能。因此,这样的控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件的内部结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现相关过程或方法步骤的软件模块又可以是硬件部件内的结构。
在本发明的又一些实施例中,还提供了一种采用SIMT架构的处理器,其包括上文实施例中介绍的高速缓冲存储器作为L1缓存。
本说明书中针对“各个实施例”、“一些实施例”、“一个实施例”、或“实施例”等的参考指代的是结合所述实施例所描述的特定特征、结构、或性质包括在至少一个实施例中。因此,短语“在各个实施例中”、“在一些实施例中”、“在一个实施例中”、或“在实施例中”等在整个说明书中各地方的出现并非必须指代相同的实施例。此外,特定特征、结构、或性质可以在一个或多个实施例中以任何合适方式组合。因此,结合一个实施例中所示出或描述的特定特征、结构或性质可以整体地或部分地与一个或多个其他实施例的特征、结构、或性质无限制地组合,只要该组合不是非逻辑性的或不能工作。
本说明书中“包括”和“具有”以及类似含义的术语表达,意图在于覆盖不排他的包含,例如包含了一系列步骤或单元的过程、方法、系统、产品或设备并不限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。“一”或“一个”也不排除多个的情况。另外,本申请附图中的各个元素仅仅为了示意说明,并非按比例绘制。
虽然本申请已经通过上述实施例进行了描述,然而本申请并非局限于这里所描述的实施例,在不脱离本申请范围的情况下还包括所做出的各种改变以及变化。
Claims (6)
1.一种支持单指令多线程架构的高速缓冲存储器,包括控制器、用于保存标签的标签存储单元、由多个缓存块构成的数据存储单元和映射单元,其中所述缓存块的数量大于所述标签的数量,每个缓存块都设置有标签绑定位和状态位,所述标签绑定位用于指示该缓存块是否与标签绑定,所述状态位用于指示对于该缓存块是否已经操作完毕;其中映射单元用于保存标签与缓存块之间的映射关系;以及其中所述控制器被配置为:
对于接收到的访存请求,在缓存命中时从映射单元中确定命中的标签所对应的缓存块,从该缓存块提取该访存请求要访问的数据作为对该访存请求的响应;
对于接收到的访存请求,在缓存未命中时执行下列操作:
在标签存储单元中为该访存请求分配一个标签存储位置以存放该访存请求的访存地址中的标签字段,并从数据存储单元中选择已操作完毕且未与标签绑定的多个缓存块的其中一个分配给该访存请求;
在映射单元中将所分配的标签存储位置原来对应的缓存块的标签绑定位设置为指示未与标签绑定,接着在该标签存储位置与分配给该访存请求的缓存块之间建立映射关系,并将分配给该访存请求的缓存块的标签绑定位设置为指示已与标签绑定;以及
从下一级存储器获取该访存请求要访问的数据并将其保存在为该访存请求分配的缓存块中;
其中所述缓存块的数量与所述标签的数量的差值等于单指令多线程架构中同一指令所包含的线程数;
其中所述控制器还被配置为:
从下一级存储器获取到所述访存请求要访问的数据时,向处理器的访存控制单元发送数据已经准备好的通知消息,并将保存所获取的数据的缓存块的状态位设置为指示未操作完毕;
响应于收到来自处理器的访存控制单元取回数据的请求,将相应的数据返回给处理器的访存控制单元;
响应于收到来自处理器的访存控制单元发出的释放数据通知,将要释放的数据所在缓存块的状态位设置为指示已操作完毕。
2.根据权利要求1所述的高速缓冲存储器,其中所述映射单元以随机存取存储器的形式实现。
3.根据权利要求1所述的高速缓冲存储器,其中所述映射单元以寄存器的形式实现。
4.根据权利要求3所述的高速缓冲存储器,其中所述映射单元包括与标签存储单元中各标签存储位置相对应的多个寄存器,每个寄存器的值等于在其对应的标签存储位置中保存的标签相对应的缓存 块的序号。
5.根据权利要求1-4中任一项所述的高速缓冲存储器,其中所述通知消息中包含用于指示所获取的数据在所述高速缓冲存储器中位置的信息。
6.一种SIMT架构的处理器,其包含如权利要求1-5中任一项所述的高速缓冲存储器作为第一级缓存。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211068513.7A CN115168248B (zh) | 2022-09-02 | 2022-09-02 | 支持simt架构的高速缓冲存储器及相应处理器 |
PCT/CN2023/083997 WO2024045586A1 (zh) | 2022-09-02 | 2023-03-27 | 支持simt架构的高速缓冲存储器及相应处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211068513.7A CN115168248B (zh) | 2022-09-02 | 2022-09-02 | 支持simt架构的高速缓冲存储器及相应处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115168248A CN115168248A (zh) | 2022-10-11 |
CN115168248B true CN115168248B (zh) | 2022-11-25 |
Family
ID=83481502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211068513.7A Active CN115168248B (zh) | 2022-09-02 | 2022-09-02 | 支持simt架构的高速缓冲存储器及相应处理器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115168248B (zh) |
WO (1) | WO2024045586A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168248B (zh) * | 2022-09-02 | 2022-11-25 | 北京登临科技有限公司 | 支持simt架构的高速缓冲存储器及相应处理器 |
CN117891754B (zh) * | 2024-03-13 | 2024-05-10 | 广东琴智科技研究院有限公司 | 处理器Cache结构的缓存方法、计算子系统以及智能计算平台 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5813031A (en) * | 1994-09-21 | 1998-09-22 | Industrial Technology Research Institute | Caching tag for a large scale cache computer memory system |
US8700862B2 (en) * | 2008-12-03 | 2014-04-15 | Nvidia Corporation | Compression status bit cache and backing store |
CN111258935B (zh) * | 2018-11-30 | 2022-01-25 | 上海寒武纪信息科技有限公司 | 数据传输装置和方法 |
CN111897651B (zh) * | 2020-07-28 | 2024-03-19 | 华中科技大学 | 一种基于标签的内存系统资源管理方法 |
CN113204370A (zh) * | 2021-03-16 | 2021-08-03 | 南京英锐创电子科技有限公司 | 指令缓存方法及装置 |
CN113641596B (zh) * | 2021-10-18 | 2022-07-19 | 北京壁仞科技开发有限公司 | 缓存管理方法、缓存管理装置、处理器 |
CN115168248B (zh) * | 2022-09-02 | 2022-11-25 | 北京登临科技有限公司 | 支持simt架构的高速缓冲存储器及相应处理器 |
-
2022
- 2022-09-02 CN CN202211068513.7A patent/CN115168248B/zh active Active
-
2023
- 2023-03-27 WO PCT/CN2023/083997 patent/WO2024045586A1/zh unknown
Non-Patent Citations (1)
Title |
---|
一种高效的压缩Page Walk Cache结构;贾朝阳等;《计算机工程与科学》;20200915(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115168248A (zh) | 2022-10-11 |
WO2024045586A1 (zh) | 2024-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115168248B (zh) | 支持simt架构的高速缓冲存储器及相应处理器 | |
US6523091B2 (en) | Multiple variable cache replacement policy | |
CN111344684B (zh) | 多层缓存安置机制 | |
US6339813B1 (en) | Memory system for permitting simultaneous processor access to a cache line and sub-cache line sectors fill and writeback to a system memory | |
US6704822B1 (en) | Arbitration protocol for a shared data cache | |
US5778434A (en) | System and method for processing multiple requests and out of order returns | |
US7228388B2 (en) | Enabling and disabling cache bypass using predicted cache line usage | |
US20020116586A1 (en) | Shared write buffer for use by multiple processor units | |
WO1994003856A1 (en) | Column-associative cache | |
CN115168247B (zh) | 用于并行处理器中动态共享存储空间的方法及相应处理器 | |
US11048636B2 (en) | Cache with set associativity having data defined cache sets | |
US10908915B1 (en) | Extended tags for speculative and normal executions | |
US10915326B1 (en) | Cache systems and circuits for syncing caches or cache sets | |
US6745291B1 (en) | High speed LRU line replacement system for cache memories | |
US11200166B2 (en) | Data defined caches for speculative and normal executions | |
US20050240731A1 (en) | Managing a multi-way associative cache | |
US20210034367A1 (en) | Spare cache set to accelerate speculative execution | |
US20210034369A1 (en) | Cache systems for main and speculative threads of processors | |
CN109074313B (zh) | 缓存和方法 | |
CN115357196A (zh) | 动态可扩展的组相联高速缓存方法、装置、设备及介质 | |
EP0675443A1 (en) | Apparatus and method for accessing direct mapped cache | |
US9697898B2 (en) | Content addressable memory with an ordered sequence | |
WO2024045817A1 (zh) | 用于调度simt架构处理器的返回数据的方法及相应处理器 | |
JP2008512758A (ja) | 仮想アドレス・キャッシュに格納されたデータを共用する仮想アドレス・キャッシュ及び方法 | |
US20040243765A1 (en) | Multithreaded processor with multiple caches |
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 |