访问哈希表的装置和方法

文档序号:8487844阅读:358来源:国知局
访问哈希表的装置和方法【
技术领域
】[0001]本发明涉及计算机领域,更为具体地,涉及一种访问哈希表的装置和方法。【
背景技术
】[0002]随着大数据时代的到来,分布式计算在给我们带来大量机遇的同时,也带来了许多挑战。如何获取海量的数据信息,如何从海量的数据信息中挖掘出有更价值的信息,如何构建高效、稳定的大数据处理平台和分布式计算平台都是亟待解决的问题。[0003]无论是传统的数据库系统,还是新兴的大数据处理平台,它们中的许多都是基于键-值(key-value)对的数据模型构建的,其中,键也称关键字。例如,各种关系型数据库系统,HadoopMapreduce、HadoopDryad等分布式处理平台,MemcachecURedis等内存计算系统均是采用键-值的数学模型而构建的。哈希表(hashtable)是存储键-值对的一种很重要的数据结构。哈希表一般建立在内存中,对哈希表的大量操作意味着处理器的大量的访存操作。而对内存的访问恰是制约处理器性能的瓶颈,从而可知,对哈希表的操作是这一类平台上的应用的瓶颈。[0004]现有技术中,中央处理器(CPU,CentralProcessingUnit)-般包括LI缓存和L2缓存,而哈希数据与其他类型的数据共用这些通用缓存,这样会经常出现通用缓存中的哈希数据被其他类型的数据替换掉的现象,使得通用缓存中的哈希数据的命中率低,此时CPU不得不再次进行访存操作,重新从内存中读取被替换掉的哈希数据,导致系统效率低下。【
发明内容】[0005]本发明实施例提供一种访问哈希表的装置和方法,以提高哈希表访问的效率。[0006]第一方面,提供一种访问哈希表的装置,所述装置包括:获取模块,用于获取访问请求,所述访问请求包括关键字;第一确定模块,用于根据所述获取模块获取的所述关键字,确定目标哈希地址;第二确定模块,用于根据所述第一确定模块确定的所述目标哈希地址,确定哈希表缓存中是否存在命中的哈希表项,所述哈希表缓存位于通用的处理器中,且所述哈希表缓存专门用于缓存内存中的哈希表的至少部分哈希表项,其中,所述哈希表缓存的每个缓存行用于缓存所述哈希表的一个哈希表项;第一访问模块,用于当所述第二确定模块确定所述哈希表缓存中存在命中的哈希表项时,访问所述哈希表缓存中命中的哈希表项。[0007]结合第一方面,在第一方面的一种实现方式中,所述哈希表缓存包括主哈希表缓存和公共冲突缓存,所述公共冲突缓存用于存放所述至少部分哈希表项中的冲突表项,所述第二确定模块具体用于:根据所述目标哈希地址,确定所述主哈希表缓存中是否存在命中的哈希表项;和/或根据所述目标哈希地址,确定所述公共冲突缓存中是否存在命中的哈希表项。[0008]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述主哈希表缓存包括N路缓存,所述N路缓存之间组相连,其中所述N路缓存中的每个缓存行的tag字段包括:第一字段和第二字段,所述每个缓存行的第一字段为所述每个缓存行存储的哈希表项对应的哈希地址的高位字段,所述每个缓存行的第二字段为所述每个缓存行存储的哈希表项对应的关键字,所述第二确定模块具体用于:以所述目标哈希地址的低位字段为索引,从所述N路缓存中的每路缓存中选出对应的缓存行,得到N个缓存行;将所述N个缓存行中的每个缓存行的第一字段与所述目标哈希地址的高位字段进行比较;当所述N个缓存行中的每个缓存行的第一字段与所述目标哈希地址的高位字段均不相同时,确定所述主哈希表缓存中不存在命中的哈希表项;当所述N个缓存行中存在第一字段与所述目标哈希地址的高位字段相同的目标缓存行时,比较所述目标缓存行的第二字段与所述访问请求包括的关键字是否相同;当所述目标缓存行的第二字段与所述访问请求包括的关键字相同时,确定所述主哈希表缓存中存在命中的哈希表项;当所述目标缓存行的第二字段与所述访问请求包括的关键字不相同时,确定所述主哈希表缓存中不存在命中的哈希表项。[0009]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述公共冲突缓存包括全相连结构,所述公共冲突缓存的缓存行的目标tag字段包括第三字段和第四字段,所述第三字段为所述公共冲突缓存的缓存行存储的哈希表项对应的哈希地址,所述第四字段为所述公共冲突缓存的缓存行存储的哈希表项对应的关键字,所述第二确定模块具体用于:比较所述目标哈希地址与所述公共冲突缓存中的每个缓存行的tag字段;当所述公共冲突缓存中各缓存行的tag字段与所述目标哈希地址均不相同时,确定所述公共冲突缓存中不存在命中的哈希表项;当所述公共冲突缓存中存在tag字段与所述目标哈希地址相同的目标缓存行时,比较所述目标缓存行的第四字段与所述访问请求包括的关键字;当所述目标缓存行的第四字段与所述访问请求包括的关键字相同时,确定所述公共冲突缓存中存在命中的哈希表项;当所述目标缓存行的第四字段与所述访问请求包括的关键字不相同时,确定所述公共冲突哈希缓存中不存在命中的哈希表项。[0010]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述访问请求包括写请求,所述访问请求中还包括待写入的数据,所述第一访问模块具体用于:当所述哈希表缓存中存在命中的哈希表项时,将所述待写入的数据写入所述哈希表缓存中的命中的哈希表项所在缓存行的data字段。[0011]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述访问请求包括读请求,所述第一访问模块具体用于:当所述哈希表缓存中存在命中的哈希表项时,读取所述哈希表缓存中的命中的哈希表项所在缓存行的data字段的内容。[0012]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,还包括:第二访问模块,用于当所述第二确定模块确定所述哈希表缓存中不存在命中的哈希表项时,根据所述目标哈希地址访问所述内存中的哈希表项。[0013]结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述第二访问模块具体用于:当所述哈希表缓存中不存在命中的哈希表项时,将当前正在执行的访问请求的下一条指令的地址写入地址寄存器,并跳转至用于访问内存的指令所在的地址,其中,所述地址寄存器位于所述处理器中,用于存储所述处理器执行的指令的地址;根据所述访问内存的指令,访问所述内存;所述第二访问模块还用于:当所述内存访问完毕之后,跳转回所述地址寄存器中记录的所述下一条指令的地址,并执行所述下一条指令。[0014]第二方面,提供一种访问哈希表的方法,所述方法包括:获取访问请求,所述访问请求包括关键字;根据所述关键字,确定目标哈希地址;根据所述目标哈希地址,确定所述哈希表缓存中是否存在命中的哈希表项,所述哈希表缓存位于通用的处理器中,且所述哈希表缓存专门用于缓存内存中的哈希表的至少部分哈希表项,其中,所述哈希表缓存的每个缓存行用于缓存所述哈希表的一个哈希表项;当所述哈希表缓存中存在命中的哈希表项时,访问所述哈希表缓存中命中的哈希表项。[0015]结合第二方面,在第二方面的一种实现方式中,所述哈希表缓存包括主哈希表缓存和公共冲突缓存,所述公共冲突缓存用于存放所述至少部分哈希表项中的冲突表项,所述根据所述目标哈希地址,确定所述哈希表缓存中是否存在命中的哈希表项,包括:根据所述目标哈希地址,确定所述主哈希表缓存中是否存在命中的哈希表项;和/或根据所述目标哈希地址,确定所述公共冲突缓存中是否存在命中的哈希表项。[0016]结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述主哈希表缓存包括N路缓存,所述N路缓存之间组相连,其中所述N路缓存中的每个缓存行的tag字段包括:第一字段和第二字段,所述每个缓存行的第一字段为所述每个缓存行存储的哈希表项对应的哈希地址的高位字段,所述每个缓存行的第二字段为所述每个缓存行存储的哈希表项对应的关键字,所述根据所述目标哈希地址,确定所述主哈希表缓存中是否存在命中的哈希表项,包括:以所述目标哈希地址的低位字段为索引,从所述N路缓存中的每路缓存中选出对应的缓存行,得到N个缓存行;将所述N个缓存行中的每个缓存行的第一字段与所述目标哈希地址的高位字段进行比较;当所述N个缓存行中的每个缓存行的第一字段与所述目标哈希地址的高位字段均不相同时,确定所述主哈希表缓存中不存在命中的哈希表项;当所述N个缓存行中存在第一字段与所述目标哈希地址的高位字段相同的目标缓存行时,比较所述目标缓存行的第二字段与所述访问请求包括的关键字是否相同;当所述目标缓存行的第二字段与所述访问请求包括的关键字相同时,确定所述主哈希表缓存中存在命中的哈希表项;当所述目标缓存行的第二字段与所述访问请求包括的关键字不相同时,确定所述主哈希表缓存中不存在命中的哈希表项。[0017]结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述公共冲突缓存包括全相连结构,所述公共冲突缓存的缓存行的tag字段包括第三字段和第四字段,所述第三字段为所述公共冲突缓存的缓存行存储的哈希表项对应的哈希地址,所述第四字段为所述公共冲突缓存的缓存行存储的哈希表项对应的关键字,所述根据所述目标哈希地址,确定所述公共冲突缓存中是否存在命中的哈希表项,包括:比较所述目标哈希地址与所述公共冲突缓存中的每个缓存行的tag字段;当所述公共冲突缓存中各缓存行的tag字段与所述目标哈希地址均不相同时,确定所述公共冲突缓存中不存在命中的哈希表项;当所述公共冲突缓存中存在tag字段与所述目标哈希地址相同的目标缓存行时,比较所述目标缓存行的第四字段与所述访问请求包括的关键当前第1页1 2 3 4 5 
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1