访问哈希表的装置和方法_3

文档序号:8487844阅读:来源:国知局
方式进行访问,本发明实施例对此不作具体限定。
[0054] 在该实施例中,第二确定模块126还可用于当主哈希表缓存和公共冲突缓存中均 不存在命中的哈希表项时,确定所述哈希表缓存中不存在命中的哈希表项;否则,确定所述 哈希表缓存中存在命中的哈希表项。
[0055] 在该实施例中,哈希表缓存不但包括用于存储哈希表项的主哈希缓存,还包括用 于存储冲突表项的公共冲突缓存,这样可以提高哈希表缓存的冲突处理能力,哈希冲突处 理能力的提升必然会降低处理器访存的次数,提高哈希操作的效率。
[0056] 可选地,作为一个实施例,主哈希表缓存包括N路缓存,N路缓存之间组相连,其中 N路缓存中的每个缓存行的tag字段包括:第一字段和第二字段,所述每个缓存行的第一 字段为所述每个缓存行存储的哈希表项对应的哈希地址的高位字段,所述每个缓存行的第 二字段为所述每个缓存行存储的哈希表项对应的关键字,第二确定模块126可具体用于: 以目标哈希地址的低位字段为索引,从N路缓存中的每路缓存中选出对应的缓存行,得到N 个缓存行;将N个缓存行中的每个缓存行的第一字段与目标哈希地址的高位字段进行比较 (比如,同时比较该N个缓存行的第一字段与目标哈希地址的高位字段),其中N个缓存行 的第一字段与目标哈希地址的高位字段长度相等;当N个缓存行中的每个缓存行的第一字 段与目标哈希地址的高位字段均不相同时,确定主哈希表缓存中不存在命中的哈希表项; 当N个缓存行中存在第一字段与目标哈希地址的高位字段相同的目标缓存行时,比较目标 缓存行的第二字段与访问请求包括的关键字是否相同;当目标缓存行的第二字段与访问请 求包括的关键字相同时,确定主哈希表缓存中存在命中的哈希表项;当目标缓存行的第二 字段与访问请求包括的关键字不相同时,确定主哈希表缓存中不存在命中的哈希表项。
[0057] 应理解,本发明实施例的主哈希表缓存的tag字段由哈希地址的高位字段和关键 字组成,这样的判断逻辑与现有技术相比,能够节省指令的开销。具体而言,现有技术通过 哈希地址计算得到要访问的哈希表项在内存中的虚拟地址,通过访存指令取得key,再通过 比较指令进行比较。与现有技术相比,本发明实施例可以直接使用一条指令完成在哈希表 缓存中查找特定的哈希表项并比较key (哈希地址高位的比较是为了在缓存中查找特定的 哈希表项),从而节省了指令的开销。
[0058] 可选地,作为一个实施例,公共冲突缓存包括全相连结构(或者公共冲突缓存采 用全相连结构),公共冲突缓存的缓存行的tag字段包括第三字段和第四字段,第三字段 为公共冲突缓存的缓存行存储的哈希表项对应的哈希地址,第四字段为公共冲突缓存的缓 存行存储的哈希表项对应的关键字,第二确定模块126具体用于:比较目标哈希地址与公 共冲突缓存中的每个缓存行的tag字段;当公共冲突缓存中各缓存行的tag字段与目标哈 希地址均不相同时,确定公共冲突缓存中不存在命中的哈希表项;当公共冲突缓存中存在 tag字段与目标哈希地址相同的目标缓存行时,比较目标缓存行的第四字段与访问请求包 括的关键字;当目标缓存行的第四字段与访问请求包括的关键字相同时,确定公共冲突缓 存中存在命中的哈希表项;当目标缓存行的第四字段与访问请求包括的关键字不相同时, 确定公共冲突哈希缓存中不存在命中的哈希表项。
[0059] 可选地,作为一个实施例,访问请求包括写请求,访问请求中还包括待写入的数 据,第一访问模块127可具体用于:当哈希表缓存中存在命中的哈希表项时,将待写入的数 据写入哈希表缓存中的命中的哈希表项所在缓存行的data字段。
[0060] 可选地,作为一个实施例,访问请求包括读请求,第一访问模块127可具体用于: 当哈希表缓存中存在命中的哈希表项时,读取哈希表缓存中的命中的哈希表项所在缓存行 的data字段的内容。
[0061] 可选地,作为一个实施例,装置100还可包括第二访问模块,第二访问模块具体用 于:当哈希表缓存中不存在命中的哈希表项时,将当前正在执行的访问请求的下一条指令 的地址写入地址寄存器,并跳转至用于访问内存的指令所在的地址,其中,地址寄存器位于 处理器中,用于存储处理器执行的指令的地址;根据访问内存的指令,访问内存;第二访问 模块还可用于:当内存访问完毕之后,跳转回地址寄存器中记录的上述下一条指令的地址, 并执行所述下一条指令(或者继续执行访问请求流程中未执行完的流程)。
[0062] 上述地址寄存器也可称为哈希表返回地址寄存器(Hash Table Return Address Register,HTRAR),用于存储当前正在执行的哈希表缓存的访问请求的指令的下一条指令 的地址,目的是实现跳转功能。具体而言,哈希表缓存的访问请求的指令和访问内存的指 令可以是分别存储在两个位置的不同指令,当哈希表缓存的访问请求的指令执行过程中发 现哈希表缓存中不存在命中的哈希表项时,将哈希表缓存的访问请求的下一条指令存储到 HTRAR中,跳转到访问内存的指令的首地址,开始进行内存访问,当内存访问结束时,再跳转 回来继续执行哈希表缓存的访问请求的下一条指令。需要说明的是,本发明实施例对跳转 回来继续执行的哈希表缓存的访问请求的指令的下一条指令不作具体限定,可以根据实际 情况设定。例如,当上述内存访问请求为写请求时,跳转回来后可以将写入内存的数据写入 哈希表缓存中,或者直接结束。
[0063] 下面结合具体例子,更加详细地描述本发明实施例。应注意,图2至图10的例子 仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所例示的 具体数值或具体场景。本领域技术人员根据所给出的图2至图10的例子,显然可以进行各 种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。
[0064] 总体来说,在本实施例中,在处理器内部实现一个用于缓存哈希表项的快速缓存 部件:哈希表缓存,并添加扩展指令集,提供操作哈希表快速缓存的指令。应理解,应用程 序创建的哈希表仍然存储在内存当中,HTC中缓存的可以是内存哈希表的一个子集。扩展 指令集包括读、写哈希表的执行令,该读、写哈希表的指令将首先尝试在HTC中快速命中待 读、写的项,如果命中,快速返回;不命中,继续访问内存。应用程序中对哈希表的操作将通 过编译器(或解释器加虚拟机)翻译成上述扩展指令集中的指令。
[0065] 图2是本发明实施例的系统框架的示例图。如图2所示,本发明实施例的方案应 用在通用的微处理器上,并对微处理器的体系结构做适当扩展。图中的扩展部分包括HTC、 HTRAR、以及扩展指令集中的各指令。首先,在微处理器内部设计一个HTC ;增加一个地址寄 存器HTRAR,该地址寄存器用来保存访问内存中的哈希表后的返回地址,即用来保存访问内 存中的哈希表后的下一条指令的地址,后面介绍指令时再做详细介绍。扩展指令集,增加 HTR、HTW、HTCW以及HTRET四条指令来操作哈希表以及哈希表缓存。
[0066] 首先,整个哈希表可以是由应用程序在内存中建立的。通用的一级缓存、二级缓存 (或称Llcache和L2cache)中可能会缓存一定的哈希表的数据,这是通过硬件预取(或软 件预取)方式,将哈希表数据看做普通数据,以缓存行大小为单位,取到缓存中的。HTC中也 保存哈希表的缓存数据,这些数据是通过我们扩展的指令,以哈希表项为单位取到HTC中 的。
[0067]接下来,依次介绍扩展的几条指令:
[0068] 1、对哈希表的写入操作指令:htw
[0069]指令格式:htw rs, label
[0070] 指令描述:将固定寄存器r0的内容,作为key,固定寄存器rl的内容作为value, rs寄存器(rs寄存器是除r0和rl之外的任意寄存器)的内容作为哈希地址,写HTC。
[0071] 指令操作:使用哈希地址查找HTC,如果命中,直接将rl寄存器的值写入data字 段,脏位置1 ;如果没有命中,将htw的下一条指令的地址保存到HTRAR中,跳转到label处, 访问内存,label可以是访问内存操作的指令所在地址的首地址,或者指向该首地址的指 针,处理器根据该label的指示能够找到访问内存的指令在存储器中的位置,并从该位置 开始读取访问内存的指令,从而实现对内存的访问。
[0072] 2、对哈希表的读取操作指令:htr
[0073] 指令格式:htr rs, label
[0074] 指令描述:将固定寄存器r0的内容,作为key,rs寄存器的内容作为哈希地址,查 找HTC。如果HTC命中,将找到的value值存放到固定寄存器rl中,否则,跳转到label处 执行。
[0075] 指令操作:使用哈希地址查找HTC,如果在HTC中命中,将data字段写入到rl寄 存器;如果没有命中,跳转到标号处继续执行,并将htr下一条指令的地址保存到HTRAR寄 存器中。
[0076] 3、对HTC写入操作的指令:htcw
[0077] 指令格式:htcw rs
[0078] 指令描述:将固定寄存器rO,rl的内容分别作为key和value写入到rs指定的哈 希地址对应的HTC中。
[0079] 指令操作:根据哈希地址找到HTC中存放该哈希表项的位置,如果该位置仍有空 闲项,将key和value写入HTC,否则根据替换策略替换出一项再写入HTC。
[0080] 4、内存访问完成后的返回指令:htret
[0081] 指令格式:htret
[0082] 指令描述:与htw、htr配合使用,当htw或htr指令执行后跳转到label处执行完 成后,使用该指令返回htw或htr的下一条指令继续执行。
[0083] 指令操作:读取HTRAR中保存的返回地址,跳转到该
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1