是根据本发明的实施方式的哈希表900的图例。如在下文中更详细的描述的,例如,可在图6的存储设备620和图7的存储设备720中实现哈希表900。哈希表900包含两个存储区:第一区910和第二区960。在本发明的一个实施方式中,相比第一区910,第二区960可具有较小的存储容量。例如,相比第一区910,第二区960可包含较少的存储条目。相比第一区910,第二区960还可包含较少的用于每个条目的状态比特。与此相反,相比第二区960中的每一个条目,第一区910中的每个条目可能需要更大的数据格式(例如,数据比特数量)。例如,第一区910中的每个条目可包含HMM信息,而第二区960的每个条目可包含状态或标志位信息。
[0088]鉴于第一区910和第二区960的上述特性,可在数据模式系统中实现这些存储区,以获得例如更快、更便宜、更节省功率的实现。例如,可在分开的存储设备(或芯片)上实现第一区910和第二区960,其中与第一区910的存储设备相比,将第二区960实现在具有更快的访问时间的更小的存储设备上。因此,可通过首先在第二区960中处理信息以在访问第一区910之前确定第一区910的信息是否有效且确定其是否已被处理过来提高系统性能。实现哈希表900的语音识别系统因此可以限制其必须访问第一区910的次数。基于本文的说明,本领域的普通技术人员将意识到可将哈希表900实现在其他系统上。这些其他系统在本发明的范围和精神之内。
[0089]在本发明的实施方式中,在DRAM设备中实现第一区910并在SRAM设备中实现第二区960。如本领域的普通技术人员将理解的,SRAM设备具有比DRAM设备更快的访问时间(例如,读取和写入访问时间)。然而,与SRAM设备相比,DRAM设备具有更小的芯片占位面积,以及在以更高的存储密度生产时的更便宜的成本。因此,在SRAM和DRAM设备之间的权衡中,实现哈希表900的系统获取例如以SRAM设备的速度优势来最小化对较慢的DRAM设备的访问次数,同时仍然利用DRAM设备的尺寸小和成本低的优势,以存储系统使用的大多数的数据。
[0090]参考图9,根据本发明的实施方式,如虚线915。-9157所示,第一区910的每个条目对应第二区960的一个条目。即,与第二区960中的条目有关的索引值具有与第一区910中其对应条目相同的索引,从而使第一区910和第二区960之间具有相对于第一区910中存储的数据的一对一的映射。在一个实施方式中,第一区910中的每个条目都包含数据和关于溢出数据的存储位置的信息。在一个实施方式中,如果将要存储在第一区910的数据太大而无法存储在单个条目中,那么将多出的数据存到溢出段970中。这允许哈希表900保持第二区960和第一区910之间的映射。在另一个实施方式中,溢出段170是可选的并在第一区910中未被分配存储空间。
[0091]可用多种方式组织第一区910中的条目。例如,第一区910中的每个条目可包含如在图9中示出的弧数据920、分数930、溢出指针940和溢出长度950。根据本发明的实施方式,数据920可表示被语音识别应用使用的HMM信息,例如,在图5的ACP 500中使用的HMM信息等。在一个实施方式中,弧数据920包含HMM ID。分数930包含用于HMM的当前状态分数,即,用于当前处理的状态的HMM状态分数。溢出指针940可指向第一区910的溢出段970中的存储位置,其存储不能在第一区910的条目中存储的数据930的任何部分。溢出长度950可被用于标识多少额外的数据被存储到第一区910的特定条目的溢出段970中。
[0092]在一个实施方式中,第二区960中的每个哈希条目包含多个状态比特,状态比特指示是否需要访问第一区910的对应条目和在第一区910的对应条目中存储的信息是否需要更进一步的处理。例如,在语音识别的环境中,如图9所示的,对于第二区960中的每一个条目,可以存储两个比特。在一个实施方式中,第一比特(在本文中还被称为“有效比特980”)可指示第一区910中的对应条目是否有效(例如,数据位于用于特定数据帧的哪个存储位置)。根据本发明的实施方式,第二比特(在本文中还被称为“打分比特的比特990”)可指出第一区910中的对应条目是否已经针对特定数据帧被打分(例如,HMM状态分数)。
[0093]B.哈希表规程
[0094]图10、11和12是根据本发明的实施方式的哈希表过程的图例。图10是哈希表搜索过程1000的图例。图11是哈希表插入过程1100的图例。图12是哈希表剩余有效过程1200的图例。
[0095]i.哈希表搜索规程
[0096]例如,可使用图5的ACP 500实施哈希表搜索过程1000。哈希表搜索过程1000包含数据接收步骤1002、哈希键产生步骤1004、查看有效比特步骤1006、未找到步骤1008、数据读取步骤1010、比较步骤1012、设置打分比特步骤1014、处理数据步骤1016和增量器步骤 1018。
[0097]在数据接收步骤1002中,将迭代计数设置为“0”,并接收数据(例如,通过图5的ACP 500)。参考图5的ACP 500,这个数据可以是表示较大的帧的一部分的声音的一个或多个特征矢量和补充列表中的弧数据。在一个实施方式中,来自补充列表的弧数据包含HMM信息,其中从外部计算设备(例如,经由图5的I/O总线505与ACP 500进行通信的CPU)向ACP 500提供补充列表。
[0098]在哈希键产生步骤1004中,通过在弧数据(来自步骤1002)上执行哈希函数来产生哈希键,其中哈希键提供哈希表索引。在一个实施方式中,哈希表指的是在上文中关于图7的HMM产生器710描述的有效列表。在一个实施方式中,将哈希表(或有效列表)存储在图6的存储设备620中。根据本发明的实施方式,将哈希函数实施在来自补充列表的弧数据上,其中哈希函数的结果提供哈希表索引,通过该索引对应弧数据。
[0099]在一个实施方式中,可将哈希函数拆分成两个单独的哈希函数。以下公式中示出包含两个单独的哈希函数的哈希函数的示例:
[0100]H(x) = (HI (x)+i*H2 (x))模 p
[0101]第一哈希函数HI (x)基于来自补充列表的弧数据产生第一临时值。第二哈希函数H2(x)基于弧数据产生第二临时值,其中第二哈希函数H2(x)与计数i相乘。计数i可表示计算过的哈希函数H(X)的次数。根据本发明的实施方式,如上述公式所示,结合了两个哈希函数的结果,以在哈希表中产生索引。
[0102]在一个实施方式中,可以如此设计哈希函数,从而当散列数据时(例如,来自补充列表的弧数据),将结果随机分布在整个哈希表上。这种类型的设计的许多好处中的一个好处是,当将数据存储到哈希表中时的冲突数量的减少,从而提高如下文中讨论的哈希表搜索过程1000和哈希表插入过程1100的速度和效率。例如,第一哈希函数HI (X)可将数据随机地分布在整个哈希表上,从而减少数据被分配到同一个存储索引。这减少存储被散列的数据所需的总时间。第二哈希函数H2(X)可创建用于确定下一个哈希索引的随机步骤,如果发生冲突,减轻连续冲突的影响。这减少在冲突的情况下找到可用的存储索引的时间。
[0103]在查看有效比特的步骤1006中,从图9的第二区960读取诸如有效比特980等状态比特。这个状态比特标识在第一区910中的对应条目是否有效。在一个实施方式中,如果在条目中存储了用于当前数据帧的数据,那么第一区910中的条目是有效的;否则,如果没有数据,那么条目是无效的。查看有效比特的步骤1006确定有效比特是否被设置(即,第一区910的对应条目包含用于当前数据帧的数据)或是被清除(即,第一区910中的对应条目不包含用于这个帧的数据)。
[0104]在第二区960中存储有效比特(例如,有效比特980)提供至少两个好处,其中有效比特指示第一区910中的对应条目是否有效。首先,当第一区910具有比第二区960慢的访问时间时,第二区960的有效比特提供确定是否需要访问第一区910的快速方式。第二,通过将有效比特单独地存储在具有更快的访问时间的存储设备(例如,SRAM设备)中,存储设备可通过访问包含第二区960的较快的存储设备并清除第二区960中的所有有效比特来快速使两个存储器(例如,图6的存储设备620和图7的存储设备770)中的条目无效。例如,当哈希表需要准备好接收用于新的数据帧的数据的时候,这是有用的。例如,参考图5的ACP 500,一旦计算了用于数据帧的HMM状态分数,这允许ACP 500快速使整个表无效,以便为新的数据帧做准备。
[0105]如果用于这个迭代的索引在第二区960中的有效比特被清除(例如,第一区910中的对应条目不包含数据),那么过程1000继续进行到未找到步骤1008。在未找到步骤1008中,过程1000指示在哈希表中未找到数据。
[0106]参考图10,在检查有效比特步骤1006中,如果用于这个迭代的索引在第二区960中的条目指示该条目是有效的(例如,第一区910的对应条目包含数据),那么过程1000继续进行到存储数据读取步骤1010。从该索引在第一区910中的对应条目读取存储数据。在一个实施方式中,由于从弧数据创建哈希键的性质,其中具有两种设置有效比特的情况。第一,例如,图5的ACP 500可能已接收用于先前帧的弧数据。如果这样,弧数据将产生与先前接收的弧数据相同的哈希键并被存储到相同的哈希条目中。第二,在第一哈希迭代中或在连续迭代中可能接收产生相同哈希键的不同弧数据。处理之前,必须确定当前弧数据是否已被存储到表条目中或不同弧数据是否被存储到表条目中。因此,在比较步骤1012处,将存储弧数据与接收弧数据进行比较。
[0107]参考图10,如果存储弧数据与接收弧数据不同,那么过程1000返回到步骤1004,以便执行哈希函数的另一个迭代。在这种情况下,所接收的弧数据与所存储的弧数据不同;然而,当被哈希函数处理时,所接收的弧数据产生与所存储的数据相同的键。为了创建用于接收的弧数据的不同哈希键,过程1000继续进行增量器步骤1018,其中增加迭代计数i。
[0108]如果存储的弧数据与接收的弧数据相同,那么过程1000继续进行到设置打分比特步骤1014,其中针对该索引设置第二区960中的打分比特990。过程1000然后继续进行到处理数据步骤1016,在其中处理数据并为其打分。
[0109]i1.哈希表插入规程
[0110]例如,可使用图5的ACP 500实施哈希表插入过程1100。哈希表插入过程1100包含数据接收步骤1102、哈希键产生步骤1104、查看有效比特步骤1106、写入数据步骤1108、设置有效比特步骤1110和增量器步骤1112。
[0111]以分别与上文中描述的数据接收步骤1002和哈希产生步骤1004相同的方式,数据接受步骤1102和哈希产生步骤1104接收数据并产生哈希键。
[0112]在查看有效比特的步骤1106中,从图9的第二区960读取诸如有效比特980等