首页 / 专利库 / 心理学与精神病学 / 感知 / 一种基于缺失感知的异构多核缓存替换方法

一种基于缺失感知的异构多核缓存替换方法

阅读:9发布:2021-04-12

专利汇可以提供一种基于缺失感知的异构多核缓存替换方法专利检索,专利查询,专利分析的服务。并且本 发明 公开一种基于缺失 感知 的异构多核缓存替换方法,包括:首选在异构多核的结构下,实现Ruby模式下的LRU缓存替换 算法 和LFU缓存替换算法;然后通过实时的、动态的比较两个替换算法的缺失数的大小,在LRU和LFU替换算法之间动态进行切换;最后在GPU应用程序所使用的缓存替换算法中, 修改 缓存 块 换入时或刚 访问 过时默认存放在的缓存队列中的最高 位置 ,将GPU应用程序访问时的缓存块的优先权值降低一位。采用本发明的技术方案,提高缓存利用率来以及提升系统的性能。,下面是一种基于缺失感知的异构多核缓存替换方法专利的具体信息内容。

1.一种基于缺失感知的异构多核缓存替换方法,其特征在于,包括如下步骤:
步骤1、在异构多核的结构下,实现Ruby模式下的LRU缓存替换算法
步骤2、在异构多核的结构下,实现LFU缓存替换算法;
步骤3、通过实时的、动态的比较两个替换算法的缺失数的大小,在LRU和LFU替换算法之间动态进行切换,具体包括:
步骤3.1、在LRU替换算法中增加用于记录LRU算法导致的缺失数的标识RMiss;
步骤3.2、在LFU替换算法中增加用于记录LFU算法导致的缺失数的标识FMiss;
步骤3.3、对控制缓存队列中缓存的查找、替换相关操作的主要类文件CacheMemory中添加一个标识符Flag,用于控制在应用程序运行过程中动态切换替换算法;
步骤3.4、为Flag设置初始值,在每一次缓存缺失时,判断此时Flag的值得出此时系统使用的替换算法,并对RMiss和FMiss进行相应的自增操作;
步骤3.5、通过RMiss和FMiss的比较,对Flag进行修改或者保持不变;
步骤3.6、以上3.1至3.5步,均是对缓存类的修改,需要将这些缓存块增加的属性传递给运行过程中的具体算法类;
步骤3.7,在具体替换算法类中,切换如何选取淘汰缓存块的规则;
步骤4、在GPU应用程序所使用的缓存替换算法中,修改缓存块换入时或刚访问过时默认存放在的缓存队列中的最高位置,将GPU应用程序访问时的缓存块的优先权值降低一位。
2.如权利要求1所述的基于缺失感知的异构多核缓存替换方法,其特征在于,步骤1具体包括:
步骤1.1、为缓存类中增加用于记录缓存块访问时间的指针变量,用于记录缓存队列中每一组每一路的缓存块的最近一次访问的时间;
步骤1.2、每一次访问缓存队列中的缓存块时或有新的缓存块到达缓存队列中时,修改缓存块的相应的访问时间的属性;
步骤1.3、当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问时间最小的缓存块进行替换,将新的缓存块放入缓存队列,并进行相应的访问时间等相关属性的初始化;。
步骤1.4、释放存放访存块访问时间的指针变量存放的内容,释放内存。
3.如权利要求1所述的基于缺失感知的异构多核缓存替换方法,其特征在于,步骤2具体包括:
步骤2.1、为缓存类中增加用于记录缓存块访问频率的指针变量,用于记录缓存队列中每一组每一路的缓存块的访问次数;
步骤2.2、每一次访问缓存队列中的缓存块时或有新的缓存块到达缓存队列中时,修改缓存块的相应的访问次数的属性;
步骤2.3、当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问次数最少的缓存块进行替换,将需要访问的新的缓存块放入缓存队列,并进行相应的访问时间和访问次数等相关属性的初始化;
步骤2.4、释放存放访存块访问次数的指针变量存放的内容,释放内存。

说明书全文

一种基于缺失感知的异构多核缓存替换方法

技术领域

[0001] 本发明属于计算机体系缓存系统结构领域,尤其涉及一种基于缺失感知的异构多核缓存替换方法。

背景技术

[0002] 大数据时代的到来给海量数据处理带来了新的挑战,传统的多核架构难以满足大规模计算的需求,GPU和CPU在芯片上的结合是缓解大规模计算压的一种趋势。工业界通过整合不同类型的处理器于同一芯片上,形成了一个异构多核处理器架构。在CPU-GPU异构系统中,CPU主要负责执行串行的任务和逻辑控制,GPU在并行计算上具有很大的优势,通过在芯片上集成不同类型的处理器并充分发挥它们在各自应用场景下的性能优势,并充分利用各处理器核的性能优势对多种特定类型的任务进行加速,能够同时满足不同领域应用在芯片面积、计算性能、功耗等多方面的需求,因而被广泛应用于计算机体系结构领域。
[0003] Cache替换策略的目标是通过一定的规则来确定插入一个新的缓存到适当的位置,并确定合适的缓存块将其进行更换,以达到自己的性能指标。不合适的缓存管理和替换策略会对整个系统的性能产生不利的影响。在异构多核的情况下,每个核不仅拥有一个比较大的共享缓存外还拥有自己的私有缓存,这些不利的影响会被扩大。在多级存储架构下,最后一级Cache的容量不断增大,加上多个不同类型的核共享最后一级Cache资源,会引起大量的竞争冲突现象,大大的降低了Cache的命中率,因此替换算法的优劣在异构多核中越来越受到重视。尤其最近的研究显示,异构多核系统中最后一级Cache(Last Level Cache,LLC)呈现出更大容量及更高相联度的发展趋势,而且异构多核环境下的应用工作集远远大于Cache容量,影响了数据访问的局部性。
[0004] 缓存作为异构多核系统中重要的核间共享资源,是影响系统性能与功耗的主要部件。而Cache替换算法又是影响Cache性能的一个关键因素,因此实现一个有效的替换算法从而提高二级Cache的利用率成为优化系统性能的一个重要的指标。Cache替换策略的主要目标是使命中率最大化,减少缓存管理的开销。它在管理缓存数据方面起到了决定性的作用,所以为了获取缓存中内存使用效率的最大化,一个好的Cache替换策略可以在缓冲池中高效缓存频繁使用的数据块使得访问数据速度变快,从而提高了吞吐量和降低了响应时间。一个好的缓存算法可以在缓冲池中高效缓存频繁使用的数据块并提供对数据进行更快地访问,从而提高系统的吞吐量和缩短响应时间。
[0005] 针对GPU和CPU在内存访问上有不同的访问特征,其中最重要的一点是:GPU应用程序包含大量的线程,这导致了GPU应用程序比CPU应用程序访问缓存会更加频繁。随着片上CPU个数与GPU个数的增加,共享最后一级Cache的冲突问题也变得日益严峻,因此提出了面向不同类型应用程序的Cache替换策略的动态调整,通过牺牲缓存块优先权限的绝对公平为代价来提高系统的整体性能为目标的Cache替换策略优化算法

发明内容

[0006] 本发明要解决的技术问题是,提供一种基于缺失感知的异构多核缓存替换方法。
[0007] 目前异构多核环境下采用的缓存替换策略主要是LRU算法,根据LRU的规则,被访问的数据块在经历一定的时间后若一直未被再次访问将被换出,若某一数据块被访问的频率很高,但是两次访问之间存在一定的时间差,那么这一数据块很有可能被频繁地换入换出,将造成系统性能的降低。显然,如果这一数据块一直存在于缓存中,缓存的利用率更高,可以提升系统的性能。针对这一缺陷,提出了在运行过程中动态地切换替换策略的优化方法。此外综合分析CPU应用程序和GPU应用程序的特征,考虑到在LLC的访问上,GPU应用程序占据了大量LLC空间,而CPU主要负责执行串行的任务和逻辑控制,导致CPU应用程序对Cache块的需求较GPU应用程序而言更为敏感,因此CPU应用程序在访问LLC时,应将它到达缓存队列中的的优先级别与GPU应用程序的优先级别有所区别,即CPU应用程序和GPU应用程序动态地非绝对公平地共享LLC。通过上述方法来提升异构多核环境下的整体系统性能。
[0008] 为达到上述目的,本发明采用以下技术方案。
[0009] 一种基于缺失感知的异构多核缓存替换方法包括如下步骤:
[0010] 步骤1、在异构多核的结构下,实现Ruby模式下的LRU缓存替换算法;
[0011] 步骤2、在异构多核的结构下,实现LFU缓存替换算法;
[0012] 步骤3、通过实时的、动态的比较两个替换算法的缺失数的大小,在LRU和LFU替换算法之间动态进行切换,具体包括:
[0013] 步骤3.1、在LRU替换算法中增加用于记录LRU算法导致的缺失数的标识RMiss;
[0014] 步骤3.2、在LFU替换算法中增加用于记录LFU算法导致的缺失数的标识FMiss;
[0015] 步骤3.3、对控制缓存队列中缓存块的查找、替换相关操作的主要类文件CacheMemory中添加一个标识符Flag,用于控制在应用程序运行过程中动态切换替换算法;
[0016] 步骤3.4、为Flag设置初始值,在每一次缓存缺失时,判断此时Flag的值得出此时系统使用的替换算法,并对RMiss和FMiss进行相应的自增操作;
[0017] 步骤3.5、通过RMiss和FMiss的比较,对Flag进行修改或者保持不变;
[0018] 步骤3.6、以上3.1至3.5步,均是对缓存类的修改,需要将这些缓存块增加的属性传递给运行过程中的具体算法类;
[0019] 步骤3.7,在具体替换算法类中,切换如何选取淘汰缓存块的规则;
[0020] 步骤4、在GPU应用程序所使用的缓存替换算法中,修改缓存块换入时或刚访问过时默认存放在的缓存队列中的最高位置,将GPU应用程序访问时的缓存块的优先权值降低一位。
[0021] 作为优选,步骤1具体包括:
[0022] 步骤1.1、为缓存类中增加用于记录缓存块访问时间的指针变量,用于记录缓存队列中每一组每一路的缓存块的最近一次访问的时间;
[0023] 步骤1.2、每一次访问缓存队列中的缓存块时或有新的缓存块到达缓存队列中时,修改缓存块的相应的访问时间的属性;
[0024] 步骤1.3、当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问时间最小的缓存块进行替换,将新的缓存块放入缓存队列,并进行相应的访问时间等相关属性的初始化;。
[0025] 步骤1.4、释放存放访存块访问时间的指针变量存放的内容,释放内存。
[0026] 作为优选,步骤2具体包括:
[0027] 步骤2.1、为缓存类中增加用于记录缓存块访问频率的指针变量,用于记录缓存队列中每一组每一路的缓存块的访问次数;
[0028] 步骤2.2、每一次访问缓存队列中的缓存块时或有新的缓存块到达缓存队列中时,修改缓存块的相应的访问次数的属性;
[0029] 步骤2.3、当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问次数最少的缓存块进行替换,将需要访问的新的缓存块放入缓存队列,并进行相应的访问时间和访问次数等相关属性的初始化;
[0030] 步骤2.4、释放存放访存块访问次数的指针变量存放的内容,释放内存。
[0031] 与现有技术相比,本发明具有以下优点:
[0032] 目前针对异构多核下Cache替换策略的研究主要是集中在LRU算法上,由于LRU缓存替换的规则中只考虑了缓存块进入缓存队列的新近访问时间,忽略了异构多核下GPU应用程序的访存特征是由缓存块的访问频率所主导的。此外,由于GPU应用程序和CPU应用程序对数据需求敏感度有较大的差别,GPU应用程序对缓存的依赖性远远低于CPU应用程序,即GPU应用程序对缓存的需求远远没有CPU应用程序对缓存的需求高。目前的共享Cache替换策略没有考虑到针对具有不同特征的CPU和GPU应用程序应该将他们的优先级分别对待,盲目的对这两类应用程序实施同样的Cache替换策略会导致缓存的利用率极大的降低,本文所提出的缓存替换优化方法在兼顾考虑缓存块新近访问时间和访问频率的同时降低了GPU应用程序在缓存链中的优先级,从而一定程度上提高了系统的整体性能。附图说明
[0033] 为使本发明的目的,方案更加通俗易懂,下面将结合附图对本发明进一步说明。
[0034] 图1为异构多核处理器系统的结构图,该异构多核处理器由多个CPU核心和多个GPU核心组成,每个核心都有自己的私有一级Cache,LLC在系统中的设置为L2级,在图1中表现为GPUL2Cache,这些CPU核心和GPU核心共享LLC和DRAM(Mem),并通过片上互连网络(network)模块进行通信;
[0035] 图2为基于缺失感知的动态缓存替换方法流程图
[0036] 图3为缓存替换算法优化后CPU应用程序的IPC平均提升度;
[0037] 图4为缓存替换算法优化后GPU应用程序的IPC平均提升度。

具体实施方式

[0038] 为使本发明的目的,技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。
[0039] 本发明所涉及的是基于缺失感知的异构多核缓存替换算法,以一个具有两个CPU核心、四个GPU核心,每个核心均拥有各自的L1Cache但共享一个L2Cache的异构处理器为例,如图1所示。运行的CPU测试程序是单线程的SPEC CPU2006,GPU应用程序为Rodinia。每一个workload由一个CPU测试程序和一个GPU应用程序组成。在模拟器中,使用的是一致性协议为:X86_VI_hammer_GPU。该协议中CPU和GPU拥有各自的L1Cache,共同访问L2Cache。
[0040] 本发明提供一种基于缺失感知的异构多核缓存替换方法,首先进行LRU和LFU算法的实现,为两个算法分别添加记录各自缺失数的成员属性RMiss和FMiss。为了在系统的运行过程中动态的实时的在两个算法之间进行动态的切换,在系统的缓存类中加入了Flag标识,当选择LRU替换算法时导致的RMiss超过了选择LFU替换算法时导致的FMiss时,动态地切换到LFU替换算法,反之同理。这种优化兼顾考虑了缓存块的访问时间新近度和缓存块的访问频率。此外,考虑到GPU应用程序对缓存的需求远远没有CPU应用程序对缓存的需求高,可以通过在访问具体缓存块时,区分这个请求是具体来自GPU还是CPU,如果是GPU应用程序在则降低该缓存块插入缓存链中的优先级。通过这两个方案提升异构多核系统的整体性能。具体步骤如下:
[0041] 步骤1,在异构多核的结构下,目前使用的模拟器为gem5-gpu,其中针对CPU应用程序的运行是使用的伪LRU算法,故第一步应该实现Ruby模式下的LRU缓存替换算法。
[0042] 步骤1.1,为缓存类AbstractReplacementPolicy类中增加用于记录缓存块访问时间的类型为Tick的指针变量**m_last_ref_ptr,用于记录缓存队列中每一组每一路的缓存块的最近一次访问的时间。同时在相应类的构造函数内,为其进行初始化:**m_last_ref_ptr=NULL。
[0043] 步骤1.2,每一次访问缓存队列中的缓存块时,修改缓存块的相应的访问时间的属性。每一个替换算法中都拥有各自的touch()函数,用来表示命中缓存队列中缓存块之后进行的相应的操作,需要在各替换算法的touch()函数中,对访问的具体的组具体的索引值的缓存块的位置上的指针变量进行访问时间的赋值:m_last_ref_ptr[set][index]=time。
[0044] 步骤1.3,当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问时间最小的缓存块进行替换,需要在缓存替换算法中的getVictim()函数内,对缓存队列中的缓存块按照访问时间大小的顺序进行排列,将访问时间最小的,即筛选出存在访存队列中但最久未被访问的缓存块进行淘汰。将新的缓存块放入缓存队列,并进行相应的访问时间等相关属性的初始化。
[0045] 步骤1.4,在对应的缓存替换算法类中的析构函数内释放存放访存块访问时间的指针变量存放的内容,通过delete[]m_last_ref_ptr来释放内存。
[0046] 步骤2,在异构多核的结构下,实现LFU缓存替换算法。
[0047] 步骤2.1,为缓存类AbstractReplacementPolicy中增加用于记录缓存块访问频率的类型为int的指针变量**m_count_ref_ptr的指针变量,用于记录缓存队列中每一组每一路的缓存块的访问次数。
[0048] 步骤2.2,每一次访问缓存队列中的缓存块时或有新的缓存块到达缓存队列中时,修改缓存块的相应的访问次数的属性。需要在各替换算法的touch()函数中,对访问的具体的组具体的索引值的缓存块的位置上的指针变量进行访问次数的递增操作:m_count_ref_ptr[set][index]+=1。
[0049] 步骤2.3,当要访问的缓存块不存在当前的缓存队列的时候,从当前的缓存队列中选择出访问次数最少的缓存块进行替换,需要在缓存替换算法中的getVictim()函数内,对缓存队列中的缓存块按照访问频率大小的顺序进行排列,将访问次数最少的,即筛选出存在访存队列中但最不经常被使用的缓存块进行淘汰。将需要访问的新的缓存块放入缓存队列,并进行相应的访问时间和访问次数等相关属性的初始化:m_count_ref_ptr[set][index]=1和m_last_ref_ptr[set][index]=time;。
[0050] 步骤2.4,在对应的缓存替换算法类中的析构函数内释放存放访存块访问次数的指针变量存放的内容,通过delete[]m_count_ref_ptr来释放内存。
[0051] 步骤3,通过实时的、动态的比较两个替换算法的缺失数的大小,在LRU和LFU替换算法之间动态进行切换,如图2所示。
[0052] 步骤3.1,在LRU替换算法中增加用于记录LRU算法导致的缺失数的标识RMiss,在PseudoLRUPolicy和LRUPolicy类的父类文件AbstractReplacementPolicy中增加int型变量int RMiss。同时,基于面向对象的思想对它进行getter和setter函数的添加。
[0053] 步骤3.2,在LFU替换算法中增加用于记录LFU算法导致的缺失数的标识FMiss,在AbstractReplacementPolicy中增加int型变量int FMiss。同时,基于面向对象的思想对它进行getter和setter函数的添加。
[0054] 步骤3.3,对控制缓存队列中缓存块的查找、替换等相关操作的主要类文件CacheMemory中添加一个标识符Flag。用于控制在应用程序运行过程中动态切换替换算法。
[0055] 1)Flag=0;使用LRU算法;
[0056] 2)Flag=1;使用LFU算法;
[0057] 3)对它进行getter和setter函数的添加
[0058] 步骤3.4,为Flag设置初始值。在每一次缓存缺失时,判断此时Flag的值得出此时系统使用的替换算法,并对RMiss和FMiss进行相应的自增操作。
[0059] 步骤3.5,通过RMiss和FMiss的比较,对Flag进行修改或者保持不变,具体情况为:当RMiss小于或等于FMiss时,将Flag赋值为0;当RMiss大于FMiss时,将Flag赋值为1。
[0060] 步骤3.6,通过在AbstractReplacementPolicy类中定义的CacheMemory的实例*m_cache,可以将上述对缓存类的修改传递至AbstractReplacementPolicy类的子类即各个替换算法具体实现类中去。
[0061] 步骤3.7,在具体替换算法类中,当传递过来的Flag值为0时,系统使用LRU替换算法的规则选取淘汰块;当传递过来的Flag值为1时,系统使用LFU替换算法的规则选取淘汰块。
[0062] 步骤4,在GPU应用程序所使用的缓存替换算法中,具体的实现类是LRUPolicy类,在touch()函数中修改缓存块换入时或刚访问过时默认存放在的缓存队列中的最高位置。将GPU应用程序访问时的缓存块的优先权值降低一位。
[0063] 下面根据实验结果再做具体的分析:
[0064] 如图3所示,我们评估了不同工作集下CPU应用程序的IPC提升比率,缓存替换算法优化后CPU应用程序的IPC平均提升6.8%,尤其对CPU应用程序perlbench而言,在组合backprop进行测试时,达到了IPC提升9.1%的效果。可以说明我们的优化方法对PERL编程语言领域有着重要的意义。如图4所示,我们评估了不同工作集下GPU应用程序的IPC提升比率,缓存替换算法优化后GPU应用程序的IPC平均提升7.0%,尤其对GPU应用程序guassian而言,在组合lbm进行测试时,达到了IPC提升7.5%的效果。可以说明我们的优化方法对流体动力学领域的研究有着重要的意义。实验结果表明,本文所述的异构多核架构下基于缺失感知的缓存替换算法优化方法对系统的性能提升有着重要的影响。
[0065] 本发明的基于缺失感知的异构多核缓存替换方法,异构多核架构下,缓存作为异构多核系统中重要的核间共享资源,是影响系统性能与功耗的主要部件。目前异构多核环境下Cache替换策略的实现都是线程盲目的,对缓存的利用率较低。而GPU应用程序和CPU应用程序具有各自的特性,CPU主要负责执行串行的任务和逻辑控制,GPU在并行计算上具有很大优势,导致CPU应用程序对Cache块的需求较GPU应用程序而言更为敏感。针对这一特点,可以在算法中增加对线程优先级的考虑,使CPU应用程序和GPU应用程序动态地非绝对公平地共享LLC。此外,通过动态地选择适合现有运行状态的替换策略,在考虑Cache块的新近访问时间的同时兼顾Cache块访问频率这一因素,从而提高缓存利用率来进一步提升系统的性能。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈