一种基于人工神经网络的乱序处理器Cache访存性能评估方法
技术领域
本发明涉及一种基于人工神经网络的乱序处理器Cache访存性能评估方法,属于软硬件协同设计领域。
背景技术
基于硬件行为建模的硅前架构评估及设计空间探索可提供芯片设计指导意见,降低芯片设计迭代周期。Cache作为片上高速缓存对处理器访存性能影响较大,访问缺失会使处理器流水线产生气泡或引起流水线阻塞,降低处理器计算性能。另外,Cache占据大量芯片面积,消耗大量功耗,所以处理器设计需要更合理地设计Cache的组织结构。
近几年关于Cache访存性能的研究可以分成两个方向维度,一是减少目标应用程序在当前Cache结构中的访存缺失次数,二是减少访问命中时SRAM体响应时间以及访问缺失后的数据取回时间。统计Cache访存缺失次数的方法主要包含两种,一是基于重用距离分布的概率推算,二是基于堆栈距离分布的统计计数。重用距离指,针对同一Cacheline的两次连续访存请求之间存在的访存请求个数。堆栈距离指,针对同一Cacheline的两次连续访存请求之间的访存地址种类个数。重用距离与堆栈距离均需要从访存Trace流中提取。获取Trace流多以在二进制执行工具中软件插桩的方式来统计访存顺序流,或者也可以将重用距离、堆栈距离提取算法直接嵌入到二进制执行工具中。采用二进制执行工具的好处是可较为快速地提取出重用距离与堆栈距离分布,但缺点是获取的重用距离、堆栈距离分布均是按照访存指令顺序执行的结果统计。该方法不能直接应用于乱序处理器的Cache访存行为建模。
访存行为在乱序处理器中的乱序调度受四个因素影响。首先,访存地址运算会乱序执行。访存指令在转换成访存操作前需要计算访存地址。若计算所依赖的源操作数(寄存器)处于就绪状态,在无读写一致性问题且无MemoryBarrier指令嵌入时,地址计算操作可被调度。乱序调度的原因是由于优先进入流水线的指令,其计算资源未就绪。为了提升处理器指令吞吐率,故将计算资源已经就绪的指令优先调度。其次,TLB访问缺失引起会访存乱序发射。在地址计算完成后,访存地址会传输至TLB进行地址翻译,将虚拟地址转换成物理地址。因为TLB采取CAM或类Cache的访问结构,容量相对较小,无法将页表中所有的表项缓存在TLB中,所以地址转换过程中会产生TLB访问缺失现象。假如存在地址计算完成且TLB访问命中的访存请求,则乱序至前排发射。第三,地址转换过后,访存请求会通过Cache端口进入到Cache存储体中。由于端口数量有限,非阻塞发射访存请求会使Cache端口存在被填充满的情况。此时,所有就绪访存停止发射,待Cache端口处于非堵塞状态时重新恢复发射。在等待过程中,由于计算资源未就绪或TLB访问缺失等原因,被乱序至后排发射的访存请求此时已处于发射就绪状态。基于乱序调度机制遵循最老指令优先调度的原则,原本被打乱的访存序列存在恢复顺序执行逻辑的可能。
最后值得注意的是,即使得到访存乱序执行流,也不能将其直接应用于乱序处理器的Cache访存行为建模。这是因为处理器非阻塞发射访存请求,使得后续访问在前次访存还未完成的情况下被扔出。而顺序处理器必须等待前次访问完成后才能发出后续访问请求。
上述四种乱序影响,使得基于二进制执行工具提取的堆栈距离分布同乱序执行后的结果相比差异巨大,导致Cache访存行为预测精度不高。现有预测乱序处理器Cache访问缺失次数的方法采用全功能仿真模型,由于全仿真时间开销过大,该方法不利于快速评估Cache访存行为。所以本发明针对上述问题提出了一种基于神经网络的Cache性能评估方法,用于快速预测乱序处理器中Cache访存行为。
发明内容
发明目的:为了克服现有技术中存在的不足,本发明提供一种基于人工神经网络的乱序处理器Cache访存性能评估方法,该方法解决了利用二进制执行工具提取的堆栈距离分布在预测Cache访存行为上精度不高的问题。
技术方案:为实现上述目的,本发明采用的技术方案为:
一种基于人工神经网络的乱序处理器Cache访存性能评估方法,包括以下步骤:
步骤1,仿真获取目标程序执行时间前30%的访存乱序执行流;依据Gem5指令取指序号对乱序执行流进行重排序,获取访存顺序执行流;设计堆栈距离算法,分别对顺序执行流与乱序执行流提取堆栈距离分布,并作数据归一化;
步骤2,根据步骤1得到的乱序访存堆栈距离分布在Gem5中加入Cache访问缺失事件的判定逻辑,统计各项缺失事件次数;
步骤3,选取BP人工神经网络,依照经验公式调试获取合适的训练方法、网络层级数目以及各层级内的神经元个数;通过选定的BP人工神经网络对步骤1得到的归一化后的顺序访存堆栈距离分布与步骤2判断得到的不同的访问缺失事件间的映射关系进行拟合;
步骤4,利用Qemu运行目标程序得到目标程序顺序执行流,将目标程序顺序执行流导入步骤1设计的堆栈距离算法提取目标程序堆栈距离分布;
步骤5,将第4步获取的目标程序堆栈距离分布归一化后导入步骤3选取的BP人工神经网络,同时根据堆栈距离分布与不同的访问缺失事件间的映射关系预测目标程序在乱序处理器中的Cache访问缺失次数。
所述步骤1中堆栈距离算法的设计方法如下:堆栈距离指针对同一Cacheline的两次连续访存请求间的访存地址个数,通过红黑树与哈希表的组合计算堆栈距离;访存Trace包括2个模块,一是当前访存请求地址,二是当前访存请求序号SN;哈希表的个数为两个,分别为第一哈希表、第二哈希表,第一哈希表采用地址中Tag与Set位域作为索引,获取内容无效化标志以及前次同地址访存的序号;第二哈希表通过地址Set位域索引,获取指向红黑树的指针;红黑树中存储访存序号SN,并按照升序排列;通过在第一哈希表中索引到的SN号,在红黑树中找到存储位置,计算该位置与红黑树尾端的距离即为当前访存请求在CacheSet内的堆栈距离;通过在第一哈希表中索引到的SN号,在红黑树中找到存储位置,计算该位置与红黑树尾端的距离即为当前访存请求在CacheSet内的堆栈距离;完成堆栈距离计算后,将当前访存序号更新到在哈希表和红黑树中索引的SN处;当检测到写操作时,依据写地址找到第一个哈希表中对应的内容失效位置1。
优选的:对访存堆栈距离分布采取归一化的数据处理的方法;将堆栈距离超过100的所有分布合成一维。
所述步骤2中Gem5中Cache访问缺失事件的判定的方法:
访存缺失计数可通过在gem5中嵌入访存堆栈距离计算来判定。
冷缺失:若在第一哈希表中找不到当前访存请求地址,则判定为冷缺失。
竞争缺失:若在第一哈希表中找到当前访存请求地址且堆栈距离大于等于Cache组关联数目,则判定为竞争缺失。
一致性缺失:若在第一哈希表中找到当前访存请求地址且堆栈距离小于Cache组关联数,同时内容无效化标志为1,则判定为一致性缺失。
优选的:BP人工神经网络采用LevenbergMarquard训练方法。
优选的:BP神经网络的隐含层节点数目存在经验公式如下:
其中h为隐含层节点数目,m为输入层节点数目,n为输出层节点数目,a为1-10之间的调节常数。
优选的:所述BP神经网络采用双隐含层,第一隐含层采用8个神经单元,第二隐含层采用4个神经元。
有益效果:本发明提供的一种基于人工神经网络的乱序处理器Cache访存性能评估方法,相比现有技术,具有以下有益效果:
本发明提出的基于人工神经网络的乱序处理器Cache访存性能评估方法,可以避免精确获取乱序处理器Cache访存缺失次数时所需的全仿真过程。利用人工神经网络代替全仿真,加速了预测Cache访存行为的速度。
附图说明
图1为访存堆栈距离计算框图;
图2为神经网络训练输入与目标输出;
图3为神经网络层级图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
一种基于人工神经网络的乱序处理器Cache访存性能评估方法,包括以下步骤:
步骤1,仿真获取目标程序执行时间前30%的访存乱序执行流;依据Gem5指令取指序号对乱序执行流进行重排序,获取访存顺序执行流;设计堆栈距离算法分别对顺序执行流与乱序执行流提取堆栈距离分布,并对堆栈距离分布作数据归一化。
步骤2,根据步骤1得到的乱序访存堆栈距离分布在Gem5中加入Cache访问缺失事件的判定逻辑,统计各项缺失事件次数。
步骤3,选取BP人工神经网络,依照经验公式调试获取合适的训练方法、网络层级数目以及各层级内的神经元个数;通过选定的BP人工神经网络对步骤1得到的归一化后的顺序访存堆栈距离分布与步骤2判断得到的不同的访问缺失事件间的映射关系进行拟合。
步骤4,利用Qemu运行目标程序得到目标程序顺序执行流,将目标程序顺序执行流导入步骤1设计的堆栈距离算法提取目标程序的堆栈距离分布。
步骤5,将第4步获取的目标程序堆栈距离分布归一化后导入步骤3选取的BP人工神经网络,同时根据堆栈距离分布与不同的访问缺失事件间的映射关系预测目标程序在乱序处理器中的Cache访问缺失次数。
1、堆栈距离算法的设计
堆栈距离指,针对同一Cacheline的两次连续访存请求间的访存地址个数。本发明将红黑树与哈希表组合,设计算法计算堆栈距离。本发明采用的访存Trace包含2个模块,一是当前访存请求地址,二是当前访存请求序号SN。算法中包含两个哈希表,一是采用地址中Tag与Set位域作为索引,获取内容无效化标志以及前次同地址访存的序号。二是通过地址Set位域索引,获取指向红黑树的指针。利用Set位域索引是为了统计每个CacheSet内的访存堆栈距离。红黑树中存储访存序号SN,并按照升序排列。通过在第一个哈希表中索引到的SN号,在红黑树中找到存储位置,计算该位置与红黑树尾端的距离即为当前访存请求在CacheSet内的堆栈距离。完成堆栈距离计算后,将当前访存序号更新到在哈希表和红黑树中索引的SN处。当检测到写操作时,依据写地址找到第一个哈希表中对应的内容失效位置1。
2、Gem5访存缺失事件分类计数
访存缺失计数可通过在gem5中嵌入访存堆栈距离计算来判定。
访存缺失计数可通过在gem5中嵌入访存堆栈距离计算来判定。
冷缺失:若在第一哈希表中找不到当前访存请求地址,则判定为冷缺失。
竞争缺失:若在第一哈希表中找到当前访存请求地址且堆栈距离大于等于Cache组关联数目,则判定为竞争缺失。
一致性缺失:若在第一哈希表中找到当前访存请求地址且堆栈距离小于Cache组关联数,同时内容无效化标志为1,则判定为一致性缺失。
3、数据归一化与BP神经网络
在进行神经网络拟合前,需要将堆栈距离分布进行数据归一化处理。目的是为了消除数量级差异导致的模型训练无法迅速收敛。同时,堆栈距离可能出现过大的情况,导致模型输入维度过大。所以本发明将堆栈距离超过100的所有分布合成一维。需要注意的是,100维选取只是依照经验,具体维度上限选择可视实际情况而定。
BP网络是单向传播的多层前向网络,由输入层、输出层和隐含层组成,每层有若干个神经元(也称节点)。同层神经元间无耦合,节点的激活函数必须可微、非减。网络结构关系着网络的函数映射能力,也决定着网络解决问题的能力。而网络的输入层和输出层是与外界联系的接口,这两层的节点数一般由应用对象的实际问题决定,不能任意选取,因此整个网络结构中只有隐含层层数及其节点数目有待确定。
关于网络结构设计,即如何选取隐含层层数及其节点数,目前还没有确定的理论和方法。通过实验发现规律:当隐含层节点数取输入层节点数和输出层节点数之间的值时,尤其当靠近输入节点数时,网络收敛速度较快。隐含层节点数太少时,学习过程不收敛;但隐含层节点数太多时,网络映射能力增强,局部最小点越少,越容易收敛到全局最小点,却致使学习时间长,且网络容易训练过渡,此时导致网络不仅记住了学习样本一般特征而且记住了个别特征(如随机噪声)导致网络容错性降低。隐含层节点数目存在经验公式如下:
其中h为隐含层节点数目,m为输入层节点数目,n为输出层节点数目,a为1-10之间的调节常数。根据以上规律,本发明采用双隐含层,第一隐含层采用8个神经单元,第二隐含层采用4个神经元。训练方法采用LevenbergMarquard。
4、Qemu中堆栈距离提取与LRU-Cache访存行为预测
在Qemu中嵌入步骤1的堆栈距离算法,获取堆栈距离分布。将分布归一化后注入神经网络模型,预测乱序处理器中的LRU-Cache访存行为。
本实施例采用哈希表记录访问过的访存地址与对应的内容无效化标志。若产生访问缺失时,哈希表中无该地址的访问记录,表示该访存请求产生一次冷缺失(Coldmiss)。若哈希表中存有该地址记录且无内容无效化标志,表示该访存请求产生一次竞争缺失(Conflictmiss)。若哈希表中存有该地址记录,内容无效化标志为1,并且堆栈距离小于当前Cache组关联数,表示该访存请求产生一次一致性缺失(Coherencemiss)。此处的堆栈距离计算需要考虑非阻塞发射访存请求的影响,访存序列内容的更新需要在Cache命中或者Cache访问缺失且Cacheline重填的时刻进行。
本实施例在Gem5中获取访存乱序执行序列,并借助仿真模型CPU取指标号对乱序执行的访存序列进行重排序,导出访存顺序执行序列;通过将红黑树与哈希表结合,设计基于Cache组关联结构的访存堆栈距离提取算法,并利用该算法分别计算访存顺序执行与乱序执行的堆栈距离分布;当检测到写失效信号时,将哈希表中对应的内容无效标志置1,表示该地址存储内容已经无效化;将基于访存顺序执行提取的堆栈距离分布做数据归一化处理。同时,提取Gem5中不同类型访存缺失的次数;利用BP神经网络将归一化后的堆栈距离分布同访存缺失次数进行拟合;在Qemu中插入堆栈距离算法,提取堆栈距离分布并归一化;将归一化后分布导入神经网络预测Cache访存行为。
图1为访存堆栈距离计算框图。哈希表I用于判定当前访存是否会产生重用现象。当选取访存地址Tag与Set位域进行索引时,若返回内容非空,则表明产生一次重用现象。“Flag”为内容失效标志,“SN”代表该访存执行序号。哈希表11中的存储对象通过访存地址的Set位域索引,被索引内容为指向红黑树结构的指针。为了能够计算每个CacheSet内的堆栈距离,每个CacheSet将维护一个红黑树结构。红黑树中记录前次同地址访存请求的SN号,将哈希表I中所得的SN号去索引其在红黑树中的位置。由于红黑树中的内容是按照升序排序的,所以SN号存储位置到红黑树底端间距离为该访存的堆栈距离。
图2为神经网络训练输入与目标输出框图。访存顺序执行提取的堆栈距离分布需要经过3个阶段才能预测到miss数。图中每个椭圆表示一个堆栈距离分布被影响的阶段。X(Y)表示方式指的是不同的访存堆栈距离以及发生次数。例如,0(200)代表访存堆栈距离为0的情况发生200次。椭圆间的连线表征访存堆栈距离受乱序影响而变换的方向。2(198)在第一个椭圆H1中,堆栈距离可能会变为0,1,2或者是3。其结果就是访存堆栈距离为2的次数从198变成128,即2(198)变成2(128)。神经网络输入为H1,训练目标为gem5中提取的Cachemiss数。
图3为神经网络层级图。本发明依照隐含层节点数目经验公式:
采用双隐含层,第一隐含层采用8个神经单元,第二隐含层采用4个神经元。训练方法采用LevenbergMarquard。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。