本发明属于硬件数据预取领域,具体涉及一种能同时支持多种区域大小的硬件数据预取方法。
背景技术:
::1、冯诺依曼架构面临着严重的处理器-内存速度差距问题,一次内存访问的延时可以高达数百个时钟周期。为了缓解这个问题,处理器中采用高速缓存来存储过去一段时间内访问的数据。如果要访问的数据在高速缓存中,就可以在几个时钟周期内获得。但如果要访问的数据不在高速缓存中,即高速缓存缺失,就需要等待数据从内存中取回。现如今,应用的数据量和代码量不断地增加,已经远远超过了高速缓存的容量。通过增加高速缓存容量来优化性能的传统方法已经难以维系,因为这会导致高速缓存的访问时间增加和芯片占用面积增大等问题。2、硬件数据预取技术是一种优化内存访问延迟的有效方法。它通过硬件来记录历史的访存信息,并从中学习出一些特征。利用这些特征,可以预测未来将要访问的内存地址。对这些被预测为将要访问的内存地址发出预取请求,将这些数据提前从下级存储设备中加载到目标缓存结构上。如果预测正确,那么在真正需要用到数据时,就可以在高速缓存中命中,从而缩短了内存访问时间。3、足迹预取器是一类可行且有效的硬件数据预取技术。这类预取器通常采用一个向量来记录一个内存区域在过去一段时间内的访问足迹。每当访问了一个新的内存区域时,会根据访问的特征找到过往记录的一个向量,并根据这个向量来对这个区域中相应的数据块发出预取。4、sms(spatial memory streaming)和bingo是最接近本发明的两种技术方案。他们都采用位向量来表示内存区域的访问足迹,其中每一比特表示这个区域内一个数据块的访问情况。若为“1”,则表示已访问;若为“0”,则表示未访问。下面将分别介绍这两种技术。5、sms包括三个表,分别是过滤表(filter table,ft)、累加表(accumulationtable,at)和模式历史表(pattern history table,pht)。这三个表本质上都是组相连的高速缓存。ft用来过滤那些只访问了一个数据块的内存区域。at用来持续地记录程序对内存区域的访问足迹。pht用来存储at记录完成的向量。下面描述sms的工作原理。在每次访问一个新的内存区域后,会将该区域的信息记录到ft中。在访问了这个区域的第二个数据块后,会将这个区域的相关信息从ft中转移到at中,并由at负责持续记录该区域的访问足迹。在两种情况下,这个区域视为记录完成:(1)属于这个区域的数据块被从缓存中置换出;(2)该区域的表项在at中被置换出。每个at记录完成的访问足迹(即向量),都会和这个区域的触发事件关联在一起,以<触发事件,访问足迹>的形式存储在pht中。触发事件由触发访问(对内存区域的第一次访问)的信息构成。sms采用触发访问的指令地址(pc)和访问地址偏移(offset)来构造触发事件(pc|offset)。sms的预测过程如下:每次访问一个新的内存区域后,会根据触发事件查找pht,然后根据找到的访问足迹对这个新的内存区域进行预取。6、bingo在sms的基础上,改进了pht的设计。它的pht同时采用了两种触发事件,记为(pc|offset+pc|address)。具体来说,它的pht采用触发访问的指令地址和访问的数据块地址偏移作为索引(pc|offset),采用触发访问的指令地址和访问的数据块地址作为标记(pc|address)。这种技术,在每次插入表项时,会先用(pc|offset)计算出要插入的组号,然后将数据插入这个组,并用(pc|address)作为该表项的标记部分。这种技术,在每次查找时,会首先根据触发访问的指令地址和访问地址(pc|address)来查找pht。如果查找成功,则根据找到的访问足迹预取。如果查找失败,会再根据触发访问的指令地址和访问地址偏移(pc|offset)查找pht。这时,可能会查找到多个访问足迹。再综合这些访问足迹,采用投票的方法来产生出最终的结果。7、sms和bingo等现有的足迹预取器都只能对一种固定大小的内存区域进行记录和预取。对于不同的应用程序或者同一个应用程序的不同阶段,由于数据结构大小或程序访问行为不同,它们适合采用的区域大小是不同的。只采用一种固定的区域大小,会降低预取器的优化性能;同时,还会使预取器的存储开销增大。技术实现思路1、鉴于上述,本发明的目的是提供一种能同时支持多种区域大小的硬件数据预取方法,通过设置的硬件预取架构和区域大小检测切换机制来实现同时对多种大小的内存区域进行硬件数据预取。2、为实现上述发明目的,本发明实施例提供了一种能同时支持多种区域大小的硬件数据预取方法,包括以下步骤:3、预先设计一种同时支持多种区域大小设置的硬件预取架构,每种区域包含各自的表ft、at和pht,其中,ft的每个表项形式为<区域号,(指令地址,触发访问偏移)>,at的每个表项形式为<区域号,(指令地址,触发访问偏移,访问足迹向量)>,pht的每个表项形式为<触发事件,访问足迹向量>,并在表ft和at之间设计用于检测是否对区域大小进行增大的扩展单元eu,在表at和pht之间设计用于检测是否对区域大小进行缩小的收缩单元su,所有区域大小共用一个预取缓冲区pb,pb采用所支持的最大区域大小,用于暂存已预测但还未发出预取请求的访问足迹向量;4、接收处理器中的高速缓存发送的每次内存访问的指令地址和访问的数据块地址,基于接收的指令地址和数据块地址并采用硬件预取架构预测要访问的数据块地址并发送至高速缓存,以供高速缓存提前从下层存储设备上加载数据;5、还接收处理器中的高速缓存发送的每次被置换出的数据块地址,基于接收的被置换出的数据块地址并采用硬件预取架构进行地址处理。6、优选地,基于接收的指令地址和数据块地址并采用硬件预取架构预测要访问的数据块地址并发送至高速缓存,包括:7、并行查找所有区域包含的at,即根据当前访问的数据块地址和每个at的区域大小计算出每个区域对应的区域号后,根据区域号查找at,针对每个查找成功的at表项,更新访问足迹向量,即根据数据块地址在查找成功的at表项对应区域下的偏移,将访问足迹向量对应的比特置于1;8、当所有at都查找失败时,并行查找所有区域大小包含的ft,即根据每种区域大小下的区域号查找所有的ft,针对每个查找成功的ft表项,判断偏移是否相等,即判断比较当前访问的数据块地址在查找成功区域下的偏移和查找成功的ft表项中存储的偏移是否相等,当偏移相等时,查找pb并发送预测访问的数据块地址;当判断偏移不相等时,将本次访问的偏移和ft表项的信息发送到eu,并执行区域大小增大检测步骤后,查找pb并发送预测访问的数据块地址;9、当所有ft都查找失败时,执行触发访问处理步骤后,查找pb并发送预测访问的数据块地址。10、优选地,所述查找pb并发送预测访问的数据块地址,包括:根据最大区域大小的区域号查找pb,根据查找到的还未发出预取请求的访问足迹向量,将相应的访问足迹向量对应的预测访问的数据块地址发送给高速缓存。11、优选地,所述区域大小增大检测步骤,包括:12、b1,构造at表项,即构造出一个当前所在区域大小下的at表项,记为entry1,at表项中的区域号、指令地址,触发访问偏移都直接采用所收到的ft表项中的信息,at表项中的访问足迹向量是根据本次访问的偏移和ft表项中的偏移来初始化的,用来表示对这个区域的前两次访问;13、b2,判断当前所属区域在最高层时,跳转到b5.1,否则继续执行b3;14、b3,计算可合并区域号并查找at,其中可合并区域号为:对entry1的区域号的最低位进行取反操作得到的区域号,具体会计算出可合并区号后,根据可合并区域号查找当前所在区域大小下的at;15、b4,判断当前所在区域大小下的at查找成功时,跳转到b5.2,对当前区域大小进行增大处理,否则执行b5.1,不改变当前区域大小;16、b5.1,不改变区域大小插入当前at,即不改变当前区域的区域大小,直接将b1所构造出的表项entry1插入到当前区域大小下的at中,然后跳转到b8;17、b5.2,读取内容并删除表项,即将查找到的at表项内容读取到eu中,记为entry2,并在at中将该表项删除;18、b6,合并两个at表项entry1和entry2并构造区域大小更大的at表项entry3;19、b7,构造出的entry3插入到比当前所在区域大小大一层的at;20、b8,判断是否有表项被置换出,即判断对at的插入操作是否导致原有的at表项被置换出,若有表项被置换出,则执行b9,否则直接结束;21、b9,进行区域大小缩小检测步骤,即将被置换出的at表项entry4发送到相同区域大小下的收缩单元su,并进行区域大小缩小检测步骤。22、优选地,所述合并两个at表项entry1和entry2并构造区域大小更大的at表项entry3,包括:23、entry3中的区域号由entry1的区域号右移一位得到;entry3中的指令地址采用entry2的指令地址,entry3中的触发访问偏移和访问足迹向量会根据entry2的区域号的最低位来分为两种情况来设置;24、情况一、若entry2的区域号最低位为0,则entry3的触发访问偏移=entry2的触发访问偏移,entry3的访问足迹向量将按照(entry2,entry1)的顺序将二者的访问足迹向量拼接得到;25、情况二、若entry2的区域号最低位为1,则entry3的触发访问偏移=entry2的触发访问偏移+entry2的访问足迹向量的宽度l,entry3的访问足迹向量将按照(entry1,entry2)的顺序将二者的访问足迹向量拼接得到。26、优选地,所述区域大小缩小检测步骤,包括:27、c1,判断当前是否处在区域大小的最低层,若处在最低一层,则跳转到c9,否则继续执行c2;28、c2,判断entry4中的访问足迹向量是否前一半全0或者后一半全0。如果是,,检测的部分全部为0,则跳转到c7,否则继续执行c3;29、c3,计算触发事件并查找pht,即查找本层pht中是否存储和entry4具有相同触发事件的表项,具体包括:如果采用(pc|offset+pc|address)或(pc|address)作为触发事件:根据entry4中的区域号和触发访问偏移计算出entry4的触发访问的数据块地址,然后根据entry4中的指令地址和计算出的数据块地址查找当前区域大小下的pht;如果采用(pc|offset)作为触发事件:根据entry4中的指令地址和触发访问偏移查找当前区域大小下的pht;30、c4,判断pht是否查找成功,如果查找失败,则不改变entry4的区域大小设置,跳转至c9,如果查找成功,则继续执行c5;31、c5,读取访问足迹并计算半区预测正确值;32、c6,判断半区预测正确值与预设阈值t的大小关系,如果半区预测正确值>=t,则不改变entry4的区域大小设置,并跳转至c9,如果半区预测正确值<t,则继续执行c7;33、c7,缩小区域大小并构造新表项entry5;34、c8,将新表项entry5插入更低一层pht并删除本层相关信息,并结束;35、c9,将表项entry4插入本层pht,并结束。36、优选地,所述读取访问足迹并计算半区预测正确值,包括:37、将从pht中查找到的表项中存储的访问足迹向量读取到su中,记为vector1;记entry4中的访问足迹向量为vector2;38、先对vector1和vector2进行按位异或操作,得到vector3;39、根据entry4中的触发访问偏移所在区域对vector3进行裁剪得到vector4,如果entry4的触发访问位于前一半区域,则保留vector3的后一半,反之,如果entry4的触发访问位于后一半区域,则保留vector3的前一半;40、统计vector4中0的个数,即为所求的半区预测正确值。41、优选地,所述缩小区域大小并构造新表项entry5,包括:42、根据entry4中的触发访问偏移,分为两种情况来计算entry5的区域号、触发访问偏移和访问足迹向量:43、一、如果entry4的触发访问偏移<l/2,则entry5的区域号=entry4的区域号*2;entry5的触发访问偏移=entry4的触发访问偏移;entry5的访问足迹向量为vector1的前一半;44、二、如果entry4的触发访问偏移>=l/2,则entry5的区域号=entry4的区域号*2+1;entry5的触发访问偏移=entry4的触发访问偏移–l/2;entry5的访问足迹向量为vector1的后一半。45、优选地,所述触发访问处理步骤,包括:46、d1,查找所有pht,即根据当前访问并行地查找所有pht;47、d2,判断是否存在pht查找成功,若有查找成功的,则继续执行d3,否则,所有的pht都查找失败,跳转至d5;48、d3,选择查找结果,包括:选择查找结果与pht采用的触发事件相关,如果采用设计(pc|offset)或(pc|address),则最多只会有一个pht查找成功,直接选择结果;如果采用(pc|offset+pc|address),则可能有多个pht查找成功,需要从中选择一个结果,每个查找成功的pht都有两种可能的结果:结果一、通过指令地址和触发访问地址查找成功。即pc和address查找成功;结果二、通过指令地址和触发访问偏移查找成功即pc和offset查找成功,对应的选择方法如下:如果有pht出现结果一,则直接选择该pht的结果,否则,如果有多个pht出现结果二,则以默认地方式选择一个pht,如果只有一个pht出现结果二,则选择该pht的结果;49、d4,将查找的结果更新到pb中的对应位置,包括:记d3中选中的结果在第i层,本次访问在区域大小ri下的区域号为rn(i),在区域大小r(n-1)下的区域号为rn(n-1),首先计算区域偏移ro,ro=rn(i)%(2^(n-1-i)),然后根据rn(n-1)查找pb,看是否已经存在关于rn(n-1)的表项,若存在,则将表项中的访问足迹向量下标在[ro*li,ro*li+li)范围内的li比特,更新为d3中选中结果的访问足迹向量的li比特,若不存在,则插入一个新表项<区域号,访问足迹向量>,其中新表现中的区域号为rn(n-1),访问足迹向量为一个l(n-1)比特的向量,[ro*li,ro*li+li)部分为d3中选中结果的访问足迹向量,其余部分为0;50、d5,分配新ft表项,如果d2中全部查找失败,则随机选择一个区域大小的ft来分配新表项,否则,在d3选择的区域大小下的ft中分配一个新表项。新ft表项中的区域号和(指令地址,触发访问偏移)根据当前内存访问和新表项的区域大小计算得出。51、优选地,所述基于接收的被置换出的数据块地址并采用硬件预取架构进行地址更新,包括:52、e1,删除ft中相关表项,即首先计算出每个区域大小下的区域号,然后并行地查找所有的ft,并将所有查找成功的表项都设置为无效;53、e2,查找所有at,依据e1中计算的区域号并行地查找所有的at,并将所有查找成功的表项置为无效,并发送到其所在的区域大小下的收缩单元su,并进行区域大小缩小检测步骤。54、与现有技术相比,本发明具有的有益效果至少包括:55、本发明能够更加充分的利用硬件资源;同时根据应用程序的访问特征,自适应地选择更加合适的区域大小。总的来说,本发明能使用更少的硬件开销实现更好的预取效果,提升应用程序的性能。当前第1页12当前第1页12