掌桥专利:专业的专利平台
掌桥专利
首页

一种减少GPU内存重复数据读写的方法及相关设备

文献发布时间:2024-01-17 01:18:42


一种减少GPU内存重复数据读写的方法及相关设备

技术领域

本发明属于计算机存储技术领域,更具体地,涉及一种减少GPU内存重复数据读写的方法及相关设备。

背景技术

目前,许多近似计算应用如机器学习,图像处理,科学计算等广泛应用于人们的日常生活中,但是这些应用是计算密集和I/O密集的,对处理器的性能和能耗有较高的需求。因此,图形处理器(Graphics Processing Unit,GPU)被广泛应用于这些计算密集型应用加速。对于GPU架构而言,每个多流处理器核(Stream Multi-Processor,SM)包含计算单元和私有片上存储器(即一级缓存)。通常,计算单元有32个CUDA核心,可以运行一组32个独立的线程。为了保持流水繁忙,GPU在每个SM中调度数百个线程,并支持硬件级别的无缝上下文切换以消除上下文切换开销。片上存储器可缓存常用数据和指令,快速响应SM请求。由于私有片上存储器的面积有限,多个SM共享L2缓存,而L2缓存有多个内存分区。内存控制器管理每个内存分区单元中片上内存和片外DRAM(Dynamic Random Access Memory)之间的读/写请求。而互连网络为SM和内存分区提供拓扑例程,使SM能够访问所有内存分区。

由于GPU本身的片上缓存容量很有限,因此会有大量的片外数据访问DRAM,而访问DRAM将会产生大量的延迟和能耗,从而影响GPU的性能和能效。为了减少片外DRAM访问,增大缓存容量是一种方式,但是GPU芯片的面积本身就是有限的,扩展缓存容量将会需要消耗更多的芯片面积,这在实际生产实际中是不太实际的。目前Tesla V100 GPU的L2缓存仅为6MB。一些工作考虑减少片外访问数据量,如设计一些GPU内存压缩算法,减少数据传输量从而提升性能。但是压缩方法只能减少数据量,并不能减少请求数量,因此,其性能将会受到压缩比的限制。

因此,如何在芯片面积有限的情况下有效提升GPU的性能,仍是一个亟待解决的难题。

发明内容

针对现有技术的缺陷和改进需求,本发明提供了一种减少GPU内存重复数据读写的方法及相关设备,其目的在于,基于GPU负载的特性,对GPU的读写方法进行优化,有效减少对片外DRAM的重复数据读写,从而提升GPU的性能。

为实现上述目的,按照本发明的一个方面,提供了一种减少GPU内存重复数据读写的方法,包括:写操作,用于处理来自二级缓存的写请求,其执行步骤如下:

(W1)判断待写入数据块中,所有B字节元素是否均相等,若是,则将其判断为块内重复数据块,记录该数据块的类型以及其中一个B字节元素,写请求处理结束;否则,转入步骤(W2);

(W2)判断待写入数据块是否与某个参考数据块相同,若是,则将其判定为块间重复数据块,记录该数据块的类型并将其逻辑地址映射到其所引用的参考数据块的物理地址,写请求处理结束;否则,转入步骤(W3);

参考数据块为已存储于DRAM中的部分数据块;

(W3)判断待写入数据块是否可作为参考数据块,若是,则将该数据块的类型标记为参考数据块后,将其写入DRAM中,写请求处理结束;否则,将该数据块的类型标记为非重复数据块后,将其写入DRAM中,写请求处理结束;

其中,B为正整数。

进一步地,本发明提供的减少GPU内存重复数据读写的方法,还包括:在每一个数据块中维护L字节的地址元数据区,用于记录该数据块所映射的物理地址;

并且,步骤(W1)中,块内重复数据块的B字节元素被记录于该数据块的地址元数据区中;

其中,L为正整数,且B≤L。

进一步地,本发明提供的减少GPU内存重复数据读写的方法,还包括:在内存控制器中维护参考数据块表,用于记录参考数据块的信息;参考数据块表为大小固定的哈希桶,其中的每一个元素与一个参考数据块相对应,记录的信息包括参考数据块的哈希值、物理地址以及被引用计数;

并且,步骤(W2)中,判断待写入数据块是否与某个参考数据块相同,包括:

通过强哈希算法计算待写入数据块的哈希值,并与参考数据块表中的哈希值进行比较,若存在相同的哈希值,则判定相应的参考数据块与待写入数据块相同;否则,判定待写入数据块与参考数据块均不相同;

并且,步骤(W2)中,在记录块间重复数据块的类型并将其逻辑地址映射到其所引用的参考数据块的物理地址之后,还包括:将参考数据块表中相应元素内记录的被引用计数加1;

其中,强哈希算法为不存在哈希冲突的哈希算法。

进一步地,步骤(W3)中,判断待写入数据块是否可作为参考数据块,包括:

若参考数据块表未满,或者,参考数据块表已满但存在被引用计数为1的元素,则判定待写入数据块可作为参考数据块;否则,判定待写入数据块不可作为参考数据块;

并且,步骤(W3)中,将参考数据块写入DRAM中之后,还包括:在参考数据块表中为该参考数据块分配元素,将该参考数据块的哈希值、物理地址记录到所分配的元素中,并将该元素中的被引用计数初始化为1。

进一步地,本发明提供的减少GPU内存重复数据读写的方法,还包括:在每一个数据块中维护N比特的类型元数据区,用于记录该数据块的类型;

其中,N为正整数,且N≥2。

进一步地,本发明提供的减少GPU内存重复数据读写的方法,还包括:在内存控制器中维护元数据缓存,并将预设时间段内访问频率高于预设阈值的地址映射信息和类型信息存放于元数据缓存中。

进一步地,本发明提供的减少GPU内存重复数据读写的方法,还包括:读操作,用于处理来自二级缓存的读请求,其执行步骤如下:

(R1)访问元数据缓存以获取被读取数据块的地址映射信息和类型信息,若命中,则转入步骤(R2);否则,访问DRAM以获取被读取数据块的地址映射信息和类型信息,之后转入步骤(R2);

(R2)判断被读取数据块的类型,若为块内重复数据块,则从元数据缓存中获取该数据块的B字节元素并扩展为完整的数据块,之后将所得数据块返回,读请求处理结束;若为块间重复数据块,则从其地址映射信息中获取其所引用的参考数据块的物理地址,并转入步骤(R3);若为参考数据块或非重复数据块,则转入步骤(R4);

(R3)判断所引用的参考数据块是否被缓存于二级缓存中,若是,则读取该参考数据块后返回,读请求处理结束;否则,转入步骤(R4);

(R4)从DRAM中读取数据块后返回,读请求处理结束。

按照本发明的又一个方面,提供了一种内存控制器,包括:计算机可读存储介质和处理器;

计算机可读存储介质用于存储计算机程序;

处理器用于读取计算机可读存储介质中存储的计算机程序,执行本发明提供的上述减少GPU内存重复数据读写的方法。

按照本发明的又一个方面,提供了一种图形处理器,包括多个处理器核心,各处理器核心私有的一级缓存,所有处理器核心共享的二级缓存,以及用于互联一级缓存和二级缓存的片上互联网络;还包括:本发明提供的上述内存控制器。

按照本发明的又一个方面,提供了一种处理系统,包括:本发明提供的上述图形处理器以及DRAM。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

(1)本发明提供的减少GPU内存重复数据读写的方法,在处理来自二级缓存的写请求时,会先判断待写入数据块是否为重复数据块,对于块内重复数据块,仅记录其中的元素,对于块间重复数据块,则将其地址重映射到相应的参考数据块,由此能够有效减少对重复数据的写入。本发明通过对GPU应用中负载的特性进行分析发现,GPU应用中存在大量的重复内存行,平均而言,39.3%的块是块内重复的,52.7%的块是块间重复的,因此,本发明通过对写操作进行优化减少重复数据的写入,能够有效减少对片外DRAM的写入,从而提升GPU的整体性能并减少能耗。

(2)本发明提供的减少GPU内存重复数据读写的方法,在其优选方案中,将块内重复数据块的元素数据记录于地址元数据区中,实现了地址映射表的复用,能够有效节省片内存储资源。

(3)本发明提供的减少GPU内存重复数据读写的方法,在其优选方案中,利用固定大小的哈希表对参考数据块的信息进行记录,并直接通过强哈希算法计算哈希值,完成待写入数据块与参考数据块的匹配,从而判断出块间重复数据块,这种方式对于GPU内存行而言,不会产生哈希冲突,因此不会有额外的读操作,但是会导致较长的哈希计算延迟,本发明发现,GPU本身对延迟不敏感,而对带宽敏感,因此,本发明采用的块间重复数据块的判断方法与GPU的性能特征相适应,能够高效实现块间重复数据块的判断;同时,本发明在判断块间重复数据块之前,会先判断块内重复数据块,由此能够简化去重流程,并减少哈希计算,从而减缓重复数据块的判断延迟,减少对性能的影响。

(4)本发明提供的减少GPU内存重复数据读写的方法,在其优选方案中,通过在内存控制器中维护元数据缓存,对频繁访问的地址映射信息和类型信息进行缓存,由此能够提高后续读操作的缓存命中率,进一步提高GPU的性能。

(5)本发明提供的减少GPU内存重复数据读写的方法,在处理来自二级缓存的读请求时,会先判断数据块的类型,对于重复数据块,直接从元数据缓存中获取数据即可,无需访问片外DRAM;对于块间重复数据块,会先判断其所引用的参考数据块是否在二级缓存中,若在,则直接从二级缓存中读取数据即可,无需访问片外DRAM。因此,本发明能够有效减少对片外DRAM的读取,有效提升读性能,并最终提高GPU的综合性能。

总体而言,本发明基于GPU负载特性针对GPU内存设计的去重机制,并设计相应的元数据管理机制保证去重有效性,能够大大减少重复数据写,并大大减少片外读取,从而提升性能并降低能耗;经过试验论证,本发明方法相较现有技术,能将性能提升20.96%,能耗减少12.23%。

附图说明

图1为本发明实施例提供的系统结构示意图;

图2为本发明实施例提供的GPU负载特性分析示意图;

图3为本发明实施例提供的两种去重哈希检测方式对比示意图;其中,(a)为基于若哈希的去重哈希检测方式;(b)为基于强哈希的去重哈希检测方式;

图4为本发明实施例提供的元数据组织方式示意图;其中,(a)为参考数据块表,(b)为地址映射表,(c)为类型表;

图5为本发明实施例提供的写操作流程图;

图6为本发明实施例提供的读操作流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

在详细解释本发明的技术方案之前,先对本发明所适用的GPU内存系统的结构进行简要介绍。本发明所适用的系统结构如图1所示,硬件层面具体包括:一个或多个SM处理器核心、每个处理器核心的私有缓存(一级缓存)、所有处理器核心共享的二级缓存、缓存控制器、DRAM内存。其中二级缓存与一级缓存通过片上网络互联,从而使得所有的SM核可以共享二级缓存。每个内存控制器控制与其对应的DRAM分区的读写操作。

由于GPU本申的片上缓存容量有限,会有大量的片外数据访问DRAM,影响GPU的性能和能效,为了有效减少片外DRAM访问,以提高GPU的性能并降低能耗,本发明分析内存密集的GPU应用进行了分析,结果如图2所示。根据图2所示结果可知,GPU应用中存在大量的重复内存行,其中重复内存行可分为两种类别:(1)块内重复,即一个内存块中所有的数据元素(例如4字节粒度)都是相同的。例如,一个128字节的内存行存储了32个float类型的数据,该缓存行32个浮点数都相同。对于这种内存块,其是块内重复的。(2)块间重复,不同块地址的内存行可能是相同的,即块A和块B的数据是相同的,此时它们为块间重复。图中展示了应用负载数据写的重复数据占比,平均而言,39.3%的块是块内重复的,52.7%的块是块间重复的。其中对于某些负载,如sssp,其重复数据占比可达99.86%,几乎所有写入数据都是重复的。

此外,本发明通过对GPU应用的分析还发现:GPU对延迟不敏感,但对带宽敏感,当对二级缓存增加15个周期延迟后,性能下降0.73%,增加30个周期后,性能仅下降1.64%;GPU应用中,存在大量的只读数据,由于GPU片上缓存容量有限,随着数据的访问,这些只读数据将被反复从DRAM读取到片上读缓存,又被从片上读缓存中剔除。

基于以上分析,本发明从访存特性入手,针对负载特性以及GPU的性能特征,设计了相应的去重机制,消除重复数据读写以提升性能并减少能耗。本发明所设计的去重机制,会同时考虑块内重复数据块和块间重复数据块,对于块内重复数据,只需判断所有的指定粒度元素是否相同,相同则为块内重复块;对于块间重复数据块,需要计算数据块的哈希值,若该块的哈希值与参考数据块的哈希值相同,则可以认为该数据块为块间重复的。

在GPU中,片上数据以内存行(通常为128字节)为单位进行组织,本发明也以内存行作为去重操作的单位。在以下实施例中,若无特殊说明,数据块的大小与内存行的大小相一致。

块间重复数据块去重的核心逻辑是将重复数据块关联至参考数据块,该过程依赖于哈希值的计算结果。图3所示为两种哈希值的计算流程,其中,(a)所示为若哈希方式,由于弱哈希函数可能会导致哈希冲突,即哈希值相同,但是两个块并不相同,因此,该方式需要一个读操作来检验该块是否为重复的。(b)所示为强哈希方式,这种方式对于GPU内存块而言,不会产生哈希冲突,因此不会有额外的读操作,但是该方式会导致较长的哈希计算延迟。考虑到GPU对延迟不敏感,但对带宽敏感,为了将哈希检测的影响降到最低,本发明选择使用强哈希方式来计算数据块的哈希值,具体可使用MD5、SHA1、SHA2等哈希方式。

考虑到GPU处理的数据类型多为单精度浮点数,相应的数据长度为4字节,作为一种可选的实施方式,本实施例中,以4字节为粒度来判断块内重复数据块;相对来说,块内重复数据块的判断较为简单,也不涉及复杂且耗时的哈希计算,为了进一步降低去重机制所引入的开销,本发明针对GPU所设计的去重机制同时考虑了块内重复数据块和块间重复数据块,并且优先进行块内重复数据块的检测,以简化去重流程,并减少哈希计算,从而减缓重复数据块的判断延迟,减少对性能的影响。

为了便于上述去重机制的实现,本发明设计了相应的元数据管理方式,如图4所示,其中:

(a)为参考数据块表,用于记录参考数据块的信息;作为一种可选的实施方式,参考数据块表为大小固定的哈希桶,其中的每一个元素与一个参考数据块相对应,记录的信息包括参考数据块的哈希值、物理地址以及被引用计数,其中,哈希值通过上述强哈希算法计算,物理地址为参考数据块在片外DRAM中的存储地址,被引用计数为关联到该参考数据块的数据块的数量,其初始值为1;

(b)为地址映射表,用于记录各数据块的逻辑地址到物理地址的映射信息,可选地,以下实施例中,地址映射表中物理地址通过4字节进行存储,对于块内重复数据块,无需关联到参考数据块,且其需要存储的元素数据只有4字节,本发明将每个块内重复数据块的4字节元素存储到地址映射表的相应条目中,实现了地址映射表的复用;

(c)为类型表,用于记录各数据块的类型;本发明需要区分的数据块类型一共有四种,即块内重复数据块、参考数据块、块间重复数据块和非重复数据块,使用2比特即可完成类型标记,因此,本发明所设计的类型表中,每个数据块对应2比特的类型标记,可选地,类型标记方式如下:

00-块内重复数据块;01-参考数据块;10-块间重复数据块;11-非重复数据块。

以上元数据中,参考数据块表存放于内存控制器中,每个数据块的地址映射信息和类型信息,则记录于对应的数据块中,相应地,每个数据块中设置了地址元数据区和类型元数据区,分别用于记录数据块的地址映射信息和类型信息;同时,为了进一步优化GPU的性能,本发明还在内存控制器中维护了元数据缓存,并将预设时间段内访问频率高于预设阈值的地址映射信息和类型信息作为频繁访问的信息存放于该元数据缓存中。

以下为实施例。

实施例1:

一种减少GPU内存重复数据读写的方法,包括:写操作,用于处理来自二级缓存的写请求,其执行步骤如图5所示,具体如下:

(W1)判断待写入数据块中,所有B字节元素是否均相等,若是,则将其判断为块内重复数据块,记录该数据块的类型以及其中一个B字节元素,写请求处理结束;否则,转入步骤(W2);

可选地,本实施例中,B=4;应当说明的是,此处判断块内重复数据块的粒度设置仅为可选的实施方式,不应理解为对本发明的唯一限定,在实际应用中,可设置为其他值;

基于以上元数据管理方式,如图5所示,本实施例的步骤(W1)中,在判断待写入数据块为块内重复数据块时,记录该数据块的类型以及其中一个B字节元素,具体包括:

在该数据块的映射信息中记录4字节元素数据,并将该数据块的2比特类型元数据设置为00;同时,将该数据块的类型信息和地址映射信息缓存到元数据缓存区中;

(W2)判断待写入数据块是否与某个参考数据块相同,若是,则将其判定为块间重复数据块,记录该数据块的类型并将其逻辑地址映射到其所引用的参考数据块的物理地址,写请求处理结束;否则,转入步骤(W3);

参考数据块为已存储于DRAM中的部分数据块;

基于以上元数据管理方式,如图5所示,本实施例的步骤(W2)中,判断待写入数据块是否与某个参考数据块相同,具体包括:

通过强哈希算法计算待写入数据块的哈希值,并与参考数据块表中的哈希值进行比较,若存在相同的哈希值,则判定相应的参考数据块与待写入数据块相同;否则,判定待写入数据块与参考数据块均不相同;

并且,步骤(W2)中,记录块间重复数据块的类型并将其逻辑地址映射到其所引用的参考数据块的物理地址,具体包括:

在该数据块的映射信息中记录其所引用的参考数据块的物理地址,并将该数据块的2比特类型元数据设置为10;同时,将该数据块的类型信息和地址映射信息缓存到元数据缓存区中;

并且,步骤(W2)中,在记录块间重复数据块的类型并将其逻辑地址映射到其所引用的参考数据块的物理地址之后,还包括:

将参考数据块表中相应元素内记录的被引用计数加1;

(W3)判断待写入数据块是否可作为参考数据块,若是,则将该数据块的类型标记为参考数据块后,将其写入DRAM中,写请求处理结束;否则,将该数据块的类型标记为非重复数据块后,将其写入DRAM中,写请求处理结束;

基于以上元数据管理方式,本实施例的步骤(W3)中,判断待写入数据块是否可作为参考数据块,包括:

(W31)判断参考数据块表示否已满,若是,则转入步骤(W32);否则,判定待写入数据块可作为参考数据块,判断结束;

(W32)判断参考数据块表中是否存在被引用计数为1的元素,若是,则判定待写入数据块可作为参考数据块,判断结束;否则,判定待写入数据块不可作为参考数据块;

并且,步骤(W3)中,将参考数据块写入DRAM中之后,还包括:

在参考数据块表中为该参考数据块分配元素;若参考数据块表未满,则直接分配;否则,通过预设的替换算法(如LRU)选取一个被替换的元素,分配给该参考数据块;

将该参考数据块的哈希值、物理地址记录到所分配的元素中,并将该元素中的被引用计数初始化为1;

在该数据块的映射信息中记录其物理地址,并将该数据块的2比特类型元数据设置为01;同时,将该数据块的类型信息和地址映射信息缓存到元数据缓存区中;

并且,步骤(W3)中,将非重复数据块写入DRAM中之后,还包括:

在该数据块的映射信息中记录其物理地址,并将该数据块的2比特类型元数据设置为11;同时,将该数据块的类型信息和地址映射信息缓存到元数据缓存区中。

本实施例提供的减少GPU内存重复数据读写的方法,在处理来自二级缓存的写请求时,会先判断待写入数据块是否为重复数据块,对于块内重复数据块,仅记录其中的元素,对于块间重复数据块,则将其地址重映射到相应的参考数据块,由此能够有效减少对重复数据的写入;由于GPU应用中存在大量的重复内存行,平均而言,39.3%的块是块内重复的,52.7%的块是块间重复的,因此,本实施例通过对写操作进行优化减少重复数据的写入,能够有效减少对片外DRAM的写入,从而提升GPU的整体性能并减少能耗。

为了进一步优化GPU的性能,本实施例对用于处理来自于二级缓存的读请求的读操作流程也进行了优化,如图6所示,本实施例中,读操作的执行流程具体包括:

(R1)访问元数据缓存以获取被读取数据块的地址映射信息和类型信息,若命中,则转入步骤(R2);否则,访问DRAM以获取被读取数据块的地址映射信息和类型信息,之后转入步骤(R2);

(R2)判断被读取数据块的类型,若为块内重复数据块,即类型元数据为00,则从元数据缓存中获取该数据块的4字节元素并扩展为完整的数据块,之后将所得数据块返回,读请求处理结束;由于GPU的读操作粒度是32字节,因此,获取到4字节元素后,将其扩展为32字节即可;

若为块间重复数据块,即类型元数据为10,则从其地址映射信息中获取其所引用的参考数据块的物理地址,并转入步骤(R3);

若为参考数据块或非重复数据块,即类型元数据为01或11,则转入步骤(R4);

(R3)判断所引用的参考数据块是否被缓存于二级缓存中,若是,则读取该参考数据块后返回,读请求处理结束;否则,转入步骤(R4);

(R4)从DRAM中读取数据块后返回,读请求处理结束。

本实施例的读操作,在处理来自二级缓存的读请求时,会先判断数据块的类型,对于重复数据块,直接从元数据缓存中获取数据即可,无需访问片外DRAM;对于块间重复数据块,会先判断其所引用的参考数据块是否在二级缓存中,若在,则直接从二级缓存中读取数据即可,无需访问片外DRAM。因此,本实施例能够有效减少对片外DRAM的读取,有效提升读性能,并最终提高GPU的综合性能。

考虑到GPU应用中,存在大量的只读数据,为了进一步对GPU的读性能进行优化,作为一种优选的实施方式,本实施例还包括:

在内存控制器中维护只读缓存,用于缓存只读数据。

通过设置只读缓存,当只读数据需要从片上读缓存中剔除时,数据将被记录到只读缓存中,当该只读数据需要被再次访问时,无需访问DRAM,直接从只读缓存中读取即可,由此能够进一步减少片外DRAM的访问。

总体而言,本实施例基于GPU负载特性针对GPU内存设计的去重机制,并设计相应的元数据管理机制保证去重有效性,能够大大减少重复数据写,并大大减少片外读取,从而提升性能并降低能耗;经过试验论证,本实施例方法相较现有技术,能将性能提升20.96%,能耗减少12.23%。

实施例2:

一种内存控制器,包括:计算机可读存储介质和处理器;

计算机可读存储介质用于存储计算机程序;

处理器用于读取计算机可读存储介质中存储的计算机程序,执行上述实施例1提供的减少GPU内存重复数据读写的方法。

实施例3:

一种图形处理器,如图1所示,包括多个处理器核心,各处理器核心私有的一级缓存,所有处理器核心共享的二级缓存,以及用于互联所述一级缓存和所述二级缓存的片上互联网络;本实施例还包括:上述实施例2提供的内存控制器。

实施例4:

一种处理系统,如图1所示,包括:上述实施例3提供的图形处理器以及DRAM。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种存储数据的读写方法、装置及相关设备
  • 一种内存管理方法、内存管理装置及终端设备
  • 一种基于Spark内存技术对HBase数据库加速读写的方法
  • 一种共享内存数据读写的装置和方法
  • 一种读写过程中减少内存拷贝的方法和装置
  • 减少内存单元及相关结构的短沟道效应的方法
技术分类

06120116123596