CN102460392B - 对多线程应用的杂凑表执行并行的重杂凑 - Google Patents
对多线程应用的杂凑表执行并行的重杂凑 Download PDFInfo
- Publication number
- CN102460392B CN102460392B CN200980159762.3A CN200980159762A CN102460392B CN 102460392 B CN102460392 B CN 102460392B CN 200980159762 A CN200980159762 A CN 200980159762A CN 102460392 B CN102460392 B CN 102460392B
- Authority
- CN
- China
- Prior art keywords
- bucket
- hash
- heavy
- thread
- barrel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Punching Or Piercing (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
在一个实施例中,本发明包括一种用于为同时被多个线程所共享的杂凑表分配第二数量的桶的方法,其中所述第二数量的桶被逻辑映射到第一数量的桶中对应的一个母桶,并且公布杂凑表的更新容量以完成所述分配,而并不执行任何重杂凑,以使得该重杂凑能够在稍后根据需要以每个桶为基础来执行。描述并要求保护了其它的实施例。
Description
背景技术
杂凑表是在诸如数据库、搜索引擎、统计处理和动态脚本语言的多种应用中的基本构成块。杂凑表是一族将键(key)与值相关联的容器。杂凑表使用其杂凑值以及容器的当前容量来计算存储在表的条目中的项目的放置位置,所述条目即桶(bucket)。然而,容器通常需要动态增加容量,这意味着附加存储块的重新分配或分配。所以,增加的容量导致了项目放置的无效并且需要项目被移动到新的地方,这通常被称作重杂凑(rehashing)。
对于杂凑表的已知并行算法而言,在线程决定重新设定容器的大小时,该线程阻止(即,临时停止)对该表的一些(或者甚至全部)并行操作,直至该线程完成了重新设定大小和重杂凑的处理二者。这导致了并行性的降低,并且因此导致了性能降低。另一个问题在于,具有重新设定大小的操作的运行时间和复杂度明显不同于没有重新设定大小的相同操作。
附图说明
图1是依据本发明一个实施例的用于更新杂凑表的方法的流程图。
图2A是依据本发明一个实施例的桶的框图。
图2B是图示依据本发明一个实施例的新桶分配的框图。
图2C是图示依据本发明一个实施例的新桶分配的框图。
图3是依据本发明实施例的用于执行查找/重杂凑的方法的流程图。
图4是依据本发明一个实施例的系统的框图。
具体实施方式
实施例可以被用来对并行的杂凑表执行并行的重新设定大小以及根据需要按桶进行的重杂凑,所述并行的杂凑表是由可以在多处理器系统的一个或多个核心上执行的一个或多个线程所访问的共享存储器,所述多处理器系统诸如具有一个或多个多核处理器的系统。可应用于杂凑表的是,其中桶可以存储一组项目。为了简明,假设表的初始容量是2的幂。项目的杂凑值除以容量的余数给出了存储该项目的桶的索引。在一些实施例中经过简化,桶的索引也可以通过以下公式来计算
等式(1)
其中hash是通过杂凑计算所获得的杂凑值,在所述杂凑计算中,键被应用于生成该杂凑值的杂凑函数,并且“&”表示二进制表示的逐比特的与(AND)。在一个实施例中,容量可以以杂凑表的桶的数量为单位,但是本发明的范围并不局限于此。
为了增加容量,依据本发明实施例的算法可以分配像现有桶那么多的桶并且保留旧桶,因此使得桶数加倍。每个新桶被逻辑映射到一个现有桶(母桶)上,除了最高位保持为值1之外,所述现有桶具有包括与新桶索引中相同的值(即,比特集)的索引。例如,如果一个桶的索引为二进制表示的00101101,则母桶的相应索引为00001101。也就是说,母桶的索引可以如下获得:
等式(2)
其中<<表示将二进制的左侧操作数移位由右侧操作数所指定的比特数。
在许多实现中,特定的新桶可以具有其它新桶作为母桶。如以下所描述的,导致它的分配在一些实现中可以被组合为单个存储器请求。
现在参见图1,示出了依据本发明一个实施例的用于更新杂凑表的方法的流程图。如图1所示,方法10可以通过确定杂凑表中所需要增加的空间来开始(框20)。虽然本发明的范围并不局限于此,但是可以基于所述表的负载因数来进行这样的确定,例如在当杂凑表中所存储的数据量达到预定阈值时出现针对新数据对的插入操作时由系统软件进行,所述预定阈值例如是总表量的特定百分比。当然,可以在其它实施例中使用确定所需要增加的空间的其它方式。例如,用户可以在对保留操作的调用中指定一定数量的桶。
一旦进行了这样的确定,控制进行至框30,在那里可以分配一定数量的新桶。更具体地,可以对应于杂凑表中桶的当前数量而分配一定数量的桶。以这种方式,分配给所述表的桶的数量被加倍。在一个实施例中,调用分配器以获得所需的存储器量并且将桶初始化为新的空桶。接着,可以公布该新的空间(框40)。虽然本发明的范围并不局限于此,但是公布可以经由对包含容量值的变量的更新来进行。在一个实施例中,该更新可以经由带有针对“容量”变量的释放操作(或原子写)的存储来进行。可替换地,这样的更新可以针对与容量值减1相对应的掩码(mask)。因此,通过分配新桶并且公布该新空间,完成分配而无需将存在于原始桶中的数据完全重杂凑到新桶中。也就是说,分配是独立于重杂凑进行的并且通过公布新空间而完成。新公布的空间中的每个桶最初被标记为未重杂凑(non-rehashed)。
现在参见图2A,示出了依据本发明一个实施例的桶的框图。如图2A所示,桶100可以包括数据,即包括键和项目对的数据部分110,所述键和项目对在这里一般性地称作数据对。数据部分110可以可选地直接(嵌入)和间接(例如,通过指针)包含有限的对集合(阵列)。此外,存在控制信息120。控制信息120中可以包括各种信息,例如包括诸如互斥量(mutex)的同步对象(a),可以包括诸如标志、计数器等的各种信息的控制字段(b),以及重杂凑状态字段(c),所述重杂凑状态字段可以包括指示给定桶是否已经被重杂凑以及一定数量的重杂凑等级(如以下所描述的,该一定数量的重杂凑等级可以被用于一对多方法)的各种信息。
现在参见图2B,示出了图示依据本发明实施例的新桶分配的框图。如图2B所示,存在多个现有桶200a-200n。作为示例,每个这样的桶可以依据图2A的桶100。在重新分配操作时,新桶被逻辑映射到母桶,从而产生新的空桶210a-210n的集合。如所看到的,该分配是针对已经存在的相同数量的桶。这些新桶中的每一个被逻辑映射到一个母桶并且例如在其控制信息120中被标记为未重杂凑,诸如图2A所示的重杂凑字段(c)。
在其它情况下,至少一些新桶可以被映射到如图2C所示的其它新桶。因此,图2C是图2B的子集,并且图2C描述了两种单独的可能性:(1)母桶也可以是未重杂凑的;以及(2)分配可以被组合。如所看到的,新的空桶210a-210n映射到现有的桶200a-200n。继而,附加的新的空桶220a-220n也映射到现有的桶200a-200n。此外,其它新的空桶230a-230n映射到新的空桶210a-210n。注意,以桶210a开始并且以桶30n结束的新的空桶可以是组合分配的相连存储空间,桶的数量可以一次性被翻若干倍,例如,桶的数量可以被乘以因数4。
在分配和公布了新的容量值之后,任何的查找操作都使用新的容量值来计算桶的索引。在公布了新的容量之后,任何浏览新桶的操作都应当首先浏览(多个)母桶并且可选地(但是最终)将其(它们的)内容重杂凑到(多个)新桶中。因此,重杂凑的工作可以被延迟并且划分到容器内的后续操作上。使用新容量值所计算的索引可以指向被标记为未重杂凑的桶。如果是这样,则查找操作可以进行至首先浏览母桶、外祖母桶等,直至找到被重杂凑的桶或所需要的键。当找到所需信息时,可以将查找结果返回给请求方。再进一步,可以进行(被处理桶的)按桶的重杂凑。这样的重杂凑可以被称作懒惰重杂凑,因为不是花费时间和成本在重新分配时对整个表执行完全的重杂凑,而是可以响应于查找请求(根据需要)进行单独的桶的重杂凑。可替换地,这样的重杂凑可以通过外部(用户)请求来进行。
因此,可选地(但是最终地),在该路线上的所有项目可以通过将数据对移动到(多个)新桶中而被重杂凑,如果这些数据对属于那里的话。为此可能有不同的策略。作为示例,可以使用两个状态来标识桶,重杂凑和未重杂凑。在该实现中,为重杂凑操作提供专门的拥有方(owner)。为此,线程使用相互排斥的同步来闭锁桶,从而没有其它的线程能够在操作期间访问该桶并且因此应当等待。
可以添加第三状态,即“部分重杂凑”状态,从而其它线程能够同时访问正被重杂凑的新桶或者参与同一母桶的重杂凑。三状态实现的主要目的是对线程进行解锁,否则所述线程就必须等到桶被另一线程重杂凑为止。
对于两状态逻辑而言,可以执行两个桶(例如,母桶和下一个继承桶)之间的递归重杂凑,或者母桶被重杂凑到所有未重杂凑的继承桶中的一对多方法。对于两状态的递归重杂凑算法而言,一个状态变量(例如,存在于图2A的控制信息120中)可以被给予状态NEW(新)(空的未重杂凑)、EMPTY(空)(但是被重杂凑)和FILLED(填满)(被重杂凑)。例如,指向数据对的指针可以代表所有三个状态并且仍然指代所述数据。注意,一对多的实现使用桶数据结构中表示桶有一定数量的重杂凑等级(容量)的附加成员。
现在参见图3,示出了依据本发明实施例的用于执行查找/重杂凑的方法的流程图。该流程图意在示出对应于一对一(递归)和一对多方法的高级示图,可以实现其中任一种方法并且其二者都将在以下进一步描述。查找请求可以针对仅寻找(find-only)操作或插入操作。为了便于讨论,将对寻找操作进行描述。如图3所示,方法300可以通过为查找请求计算桶索引和地址来开始(框305)。例如,与所请求的数据对相关联的键可以被提供给杂凑函数,所述杂凑函数生成杂凑值,所述杂凑值连同杂凑表容量一起可以被用来获得索引并由此获得存储器中的地址。接下来,可以确定该查找请求是否是针对未重杂凑的空桶(菱形框310)。如果不是,则可以通过访问被编入索引的桶并且向请求方提供(多个)数据对来执行该查找(框315)。注意,如以下进一步描述的,可以在该步骤期间执行附加操作,如同步、在桶中进行搜索、检查竞争条件以及可选地重新开始整个查找操作(如果检测到竞争)。
如果相反地确定了该查找请求是针对未重杂凑的桶,则控制进行至框320。在框320,可以计算母桶的索引和地址。如以上所讨论的,在一些实现中,可以依据等式2来计算这样的索引。在计算出索引时,其可以被用来访问母桶。可以对该被访问的桶进行检查以确定其是否被重杂凑或者包括所请求的数据对(菱形框330)。该确定可以部分基于该桶的重杂凑状态。如果找到被重杂凑的桶,则可以对桶进行同步(框340),并且可以将数据对返回至请求方(框350)。否则,控制回到框320,以进行该循环的下一次迭代。框340处的同步可以包括在执行任意搜索或重杂凑操作之前闭锁感兴趣的桶。注意,在框350,是否重杂凑的决定可以取决于给定算法,所述算法可以提供根据需要重杂凑、部分重杂凑或者通过专门的线程进行重杂凑。如果执行了重杂凑,则可以在执行重杂凑时更新一个或多个桶的重杂凑状态。对于一对多方法而言,母桶和所有新桶的状态都被改变。注意,在重杂凑之后的这一点,母桶可以被剥离一些对以便将它们移动到继承桶中(并且对于一对多方法而言状态被改变)。
由于桶永远不会同时被解除分配或移动,所以一些非阻止(non-blocking)或无闭锁的算法可以被用来访问桶和嵌入的数据。以这种方式,使用杂凑表的应用的性能和可扩展性可以被提高。
由于多个线程访问作为共享资源的杂凑表,可能出现重杂凑查找的竞争条件。如果没有找到键,则也可能在对桶进行重杂凑的同时该键被移动。为了确保不存在键,可以将当前的容量与曾用来计算桶索引的初始容量进行比较。如果它们不相等,则接下来可以确定利用这些值所计算的桶索引是否不同(两个比较可以减少为这最后一个)。如果是,并且如果最接近的继承桶已经或正在被重杂凑,则应当重新开始查找(以便确保不存在键)。注意,如果容量已经被增大到不止2倍,则可能不仅仅存在一个继承桶。作为竞争条件的一个示例,考虑并行环境中可能的以下顺序:
表1
1.线程1:获得当前容量并且计算桶索引(X)以用于查找操作。
2.线程2:完成新桶的分配并且公布新的容量。
3.线程3:获得新的容量值并且开始将桶(X)重杂凑到新的空间(Y)中。
4.线程1:继续在桶(X)中搜索项目且无法找到该项目。但是这并不意味着项目并不存在于整个表中,原因在于该项目可能因为并行的增长(2)和重杂凑(3)而被移动(到Y)。
现在参见表2,示出了用于依据本发明实施例确定存在竞争条件的伪代码示例,即用于检查是否可能发生重杂凑冲突的示例算法。
表2
在一个实施例中,可以使用具有三个函数的两状态递归重杂凑算法,所述三个函数即lookup(查找)函数、getbucket(获得桶)函数,所述getbuckt函数执行同步并且调用第三个函数,即rehashing(重杂凑)函数。现在参见表3,示出了这种两状态递归重杂凑算法的伪代码。
表3
lookup(查找):
1.计算给定键的杂凑值
2.获得当前容量值并且(使用杂凑和容量)计算桶索引
3.调用:Getbucket(获得桶)以便读取
4.在该桶中搜索键
a.如果找到:释放该桶并且返回数据
5.没有找到:检查重杂凑竞争(例如,依据表2)
a.如果没有竞争发生:[可以执行插入操作或者]释放桶并返回
b.检测到竞争:释放桶并且转向(2)
Getbucket(获得桶)(针对读写闭锁的实现)
1.计算/获得桶地址
2.获得桶的状态
a.如果NEW(未被重杂凑):试图获取对桶的独占访问(某个线程必须成功)
如果失败:转向(3)
b.被获取:如果桶的状态仍然是NEW(双重检查),调用:Rehashbucket(对桶重杂凑)并返回
3.获取对桶的指定访问
Getbucket(获得桶)(针对仅相互排斥的闭锁的实现)
1.使用杂凑值和容量值计算桶地址
2.获取对桶的(独占)访问
3.获得桶的状态
a.如果NEW(未被重杂凑):调用Rehashbucket(对桶重杂凑)
Rehashbucket(对桶重杂凑):(其由于“获得桶(Getbucket)”算法而在独占闭锁下执行)
1.将新桶标记为重杂凑
2.计算母桶的索引
3.调用:Getparentbucket(获得母桶)以便读取
4.对于母桶中的每个数据项:
a.计算杂凑值
b.检查项目是否应当被移动到新桶,如果是:
i.如果有必要,将母桶升级为独占访问
(如果闭锁被中断以进行升级,则从(4)重新开始)
ii.将项目从母桶移动到新桶中
注意,Rehashbucket函数和Getbucket函数之间的交叉引用意味着该算法是递归的。还注意到,依据本发明实施例的并行重杂凑算法并不需要特定的闭锁算法,相反其仅声明了同步等级。例如,“获得桶以便读取”可以意味着获取独占闭锁、共享(读取方)闭锁的任意实际使用,或者甚至是仅使用版本计数器(针对非阻止读取操作)。
在又一个实施例中,可以使用一对多方法。表4是一对多算法的伪代码表示。
表4
Lookup(查找):
1.计算给定键的杂凑值
2.获得当前容量值并且(使用杂凑和容量)计算桶索引和地址
3.获得桶的状态,如果该桶未被重杂凑(新的):
a.找出最接近的被重杂凑的根(母/外祖母等)桶
b.试图获取对该根桶的独占访问直至获取到或者新桶的状态变为“重杂凑”
如果状态改变:如果有必要则释放闭锁并且转向(4)
c.调用:Rehashbucket(对桶重杂凑)
4.获取对桶的指定访问
5.在该桶中搜索键
d.如果找到:释放该桶并且返回数据
6.没有找到:检查重杂凑竞争(例如,依据表2)
e.如果没有发生竞争:[可以执行插入操作或者]释放桶并返回
f.检测到竞争:释放桶并转向(2)
Rehashbucket(对桶重杂凑):(其在独占闭锁下执行)
1.对于根桶以及其所有继承桶中的每一个:
a.将容量值存储到重杂凑等级字段(并且因此将该桶标记为重杂凑)
2.对于根桶中的每个数据项:
b.计算杂凑值
c.检查项目是否应当被移动到新桶,如果是:
i.将项目从母桶移动到适当的新桶
实施例可以在实验室中针对联合的容器以代码来实施。因此,在各个实施例中,不是闭锁整个容器(或者容器的一部分)以进行更新,而是分配可以分配与已经存在的一样多的桶并且保留旧桶,因此使得桶的数量翻倍。每个新桶被标记为未重杂凑并且被逻辑映射到具有相同索引的已有桶(母桶)。在一些实施例中,该分配也可以被组合到一次公布中并且可以使用单个存储器请求。因此,依据本发明实施例的重新设定大小并不损害并行性,原因在于其既不使已有桶无效也不闭锁已有桶。
实施例可以在许多不同类型的系统中实现。现在参见图4,示出了依据本发明实施例的系统的框图。如图4所示,多处理器系统500是点对点的互连系统,并且包括经由点对点互连550进行耦合的第一处理器570和第二处理器580。如图4所示,处理器570和580的每一个可以是多核处理器,包括第一和第二处理器核心(即处理器核心574a和574b以及处理器核心584a和584b),但是潜在地在这些处理器中可以存在多得多的核心。所述处理器核心可以执行依据以上所描述的本发明实施例可以对系统存储器中所存储的杂凑表进行访问的各种线程。
仍然参见图4,第一处理器570进一步包括存储器控制器集线器(MCH)572以及点对点(P-P)接口576和578。类似地,第二处理器580包括MCH582以及P-P接口586和588。如图4所示,MCH572和582将处理器耦合到各自的存储器,即存储器532和存储器534,它们可以是本地连接到各自处理器的主存储器(例如,动态随机访问存储器(DRAM))的一部分,并且它们可以存储一个或多个杂凑表,所述一个或多个杂凑表可以依据本发明的实施例被并行地重杂凑。第一处理器570和第二处理器580可以分别经由P-P互连552和554耦合到芯片组590。如图4所示,芯片组590包括P-P接口594和598。
此外,芯片组590包括接口592以通过P-P互连539将芯片组590与高性能图形引擎538相耦合。而芯片组590又可以经由接口596耦合到第一总线516。如图3所示,各种输入/输出(I/O)设备514可以连同总线桥518一起耦合到第一总线516,所述总线桥518将第一总线516耦合到第二总线520。各种设备可以耦合到第二总线520,例如包括键盘/鼠标522、通信设备526和数据存储单元528,在一个实施例中,所述数据存储单元528诸如磁盘驱动器或可以包括代码530的其它大容量存储设备。此外,音频I/O524可以耦合到第二总线520。
实施例可以以代码实现并且可以存储在存储介质上,所述存储介质具有存储于其上的指令,所述指令可以被用来对系统编程以执行该指令。所述存储介质可以包括但不限于任意类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW),以及磁-光盘、半导体设备,诸如只读存储器(ROM)、诸如动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)的随机访问存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁或光卡,或者用于存储电子指令的任意其它类型的介质。
虽然已经关于有限数量的实施例对本发明进行了描述,但是本领域技术人员将会意识到来自这些实施例的多种修改和变化。所附权利要求意在覆盖落入本发明真实精神和范围之内的所有这些修改和变化。
Claims (20)
1.一种用于更新杂凑表的方法,包括:
为同时被多个线程所共享的杂凑表分配第二数量的桶,所述杂凑表具有第一数量的桶,桶的第二数量至少等于桶的第一数量并且第二数量的桶中的每一个被逻辑映射到第一或第二数量的桶中对应的一个母桶;并且
公布包括第一和第二数量的桶的杂凑表的更新容量,其中所述分配通过公布所述更新容量而完成而不对所述第一数量的桶的内容执行任何重杂凑。
2.如权利要求1所述的方法,进一步包括执行检查而并不闭锁桶以确定是否需要重杂凑。
3.如权利要求1所述的方法,进一步包括随后在对存在于第一数量的桶的第一桶中的数据对执行查找操作时,将该第一桶的内容重杂凑到第二数量的桶的第二桶。
4.如权利要求1所述的方法,进一步包括使用所述更新容量计算桶索引,使用所述桶索引访问桶,确定该桶没有被重杂凑,并且使用所述更新容量递归地计算母桶的母桶索引,直至找到该桶被逻辑映射到的、被重杂凑的根桶。
5.如权利要求4所述的方法,进一步包括在搜索查找请求的数据对时或之前将被重杂凑的根桶的内容的至少一部分重杂凑到所述桶中。
6.如权利要求5所述的方法,进一步包括在根桶仅有一部分内容被重杂凑时对部分重杂凑指示符进行置位。
7.如权利要求4所述的方法,进一步包括在桶中搜索查找请求的数据对并返回该数据对,并且不对桶的内容进行重杂凑。
8.如权利要求1所述的方法,进一步包括响应于由第一线程进行的查找操作,在所述第一数量的桶的第一桶中没有找到所请求的数据对,将杂凑表容量的当前值与在针对该查找操作确定桶索引时所使用的杂凑表容量的值相比较,并且如果当前值和该值不同,则计算最接近的继承桶的索引,访问最接近的继承桶并且确定该最接近的继承桶的重杂凑状态。
9.如权利要求8所述的方法,进一步包括如果重杂凑状态没有指示新的未重杂凑状态则重新开始查找操作。
10.如权利要求1所述的方法,进一步包括将多次分配组合为针对第二数量的桶的单次分配。
11.如权利要求1所述的方法,进一步包括公布多次分配并且一次性公布针对该多次分配的更新容量。
12.一种用于检查是否可能发生重杂凑冲突的设备,包括:
用于对同时被多个线程所共享的杂凑表执行查找操作的部件,其包括用于使用该杂凑表的第一容量值计算该杂凑表的第一桶的桶索引的组件,用于使用所述桶索引访问所述第一桶的组件,并且用于确定所述第一桶不包括所述查找操作的数据对的组件;
用于将所述杂凑表容量的当前容量值与第一容量值进行比较的部件,并且如果当前容量值和第一值不同,则使用当前容量值计算更新的桶索引;并且
如果更新的桶索引和所述桶索引不同,则计算下一个继承桶索引,访问对应于所述更新的桶索引的下一个继承桶,并且确定该下一个继承桶的重杂凑状态,其中指示该下一个继承桶已经或正在被重杂凑的重杂凑状态表示发生了重杂凑冲突。
13.如权利要求12所述的设备,其中所述设备进一步包括用于如果重杂凑状态没有指示新的状态则重新开始查找操作的部件。
14.如权利要求12所述的设备,其中所述设备进一步包括用于在查找操作期间访问杂凑表的桶的同时对该桶进行重杂凑的部件。
15.如权利要求12所述的设备,其中所述查找操作由第一线程执行,并且所述杂凑表在第一线程获得用于计算的第一容量值并且第三线程在第一线程访问第一桶之前开始对第一桶进行重杂凑之后由第二线程进行扩展。
16.一种用于更新杂凑表的系统,包括:
微处理器,其包括均执行一个或多个线程的第一核心和第二核心,其中第一线程用于向同时被多个线程所共享的杂凑表分配第二数量的桶,所述杂凑表之前具有第一数量的桶,所述桶的第二数量至少等于桶的第一数量,其中第二数量的桶中的每一个被逻辑映射到第一数量的桶中对应的一个母桶或第二数量的桶中对应的一个母桶;并且公布包括第一和第二数量的桶的杂凑表的更新容量,其中第一线程用于通过公布所述更新容量而完成所述分配而不对所述第一数量的桶的内容执行任何重杂凑,并且第二线程用于对第一数量的桶的第一桶执行查找操作而不检查闭锁变量以确定是否需要重杂凑;和
共享存储器,其耦合到所述微处理器以存储所述杂凑表,所述杂凑表要被所述多个线程中的至少一些同时访问。
17.如权利要求16所述的系统,其中第三线程用于在针对所述第一桶中所存在的数据对执行查找操作时将第一数量的桶的第一桶的内容重杂凑到第二数量的桶的第二桶中。
18.如权利要求16所述的系统,其中第二线程用于使用更新容量计算第二数量的桶中的桶的桶索引,使用所述桶索引访问该桶,确定该桶没有被重杂凑,并且递归地计算所述桶被逻辑映射到的母桶的母桶索引,直至找到被重杂凑的根桶。
19.如权利要求18所述的系统,其中所述第二线程用于在搜索查找请求的数据对时或之前将被重杂凑的根桶的内容的至少一部分重杂凑到所述桶中。
20.如权利要求19所述的系统,其中所述第二线程用于在根桶仅有一部分内容被重杂凑时对根桶的部分重杂凑指示符进行置位。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/RU2009/000169 WO2010117294A1 (en) | 2009-04-08 | 2009-04-08 | Performing concurrent rehashing of a hash table for multithreaded applications |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102460392A CN102460392A (zh) | 2012-05-16 |
CN102460392B true CN102460392B (zh) | 2016-04-27 |
Family
ID=42936410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980159762.3A Expired - Fee Related CN102460392B (zh) | 2009-04-08 | 2009-04-08 | 对多线程应用的杂凑表执行并行的重杂凑 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9563477B2 (zh) |
JP (1) | JP5401676B2 (zh) |
KR (1) | KR101367450B1 (zh) |
CN (1) | CN102460392B (zh) |
RU (1) | RU2517238C2 (zh) |
SG (1) | SG175109A1 (zh) |
WO (1) | WO2010117294A1 (zh) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8539199B2 (en) * | 2010-03-12 | 2013-09-17 | Lsi Corporation | Hash processing in a network communications processor architecture |
US9461930B2 (en) | 2009-04-27 | 2016-10-04 | Intel Corporation | Modifying data streams without reordering in a multi-thread, multi-flow network processor |
US9444757B2 (en) | 2009-04-27 | 2016-09-13 | Intel Corporation | Dynamic configuration of processing modules in a network communications processor architecture |
US8515965B2 (en) | 2010-05-18 | 2013-08-20 | Lsi Corporation | Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors |
US8606791B2 (en) * | 2011-06-17 | 2013-12-10 | Microsoft Corporation | Concurrently accessed hash table |
US8812555B2 (en) * | 2011-06-18 | 2014-08-19 | Microsoft Corporation | Dynamic lock-free hash tables |
US8549518B1 (en) | 2011-08-10 | 2013-10-01 | Nutanix, Inc. | Method and system for implementing a maintenanece service for managing I/O and storage for virtualization environment |
US9747287B1 (en) * | 2011-08-10 | 2017-08-29 | Nutanix, Inc. | Method and system for managing metadata for a virtualization environment |
US9652265B1 (en) | 2011-08-10 | 2017-05-16 | Nutanix, Inc. | Architecture for managing I/O and storage for a virtualization environment with multiple hypervisor types |
US9009106B1 (en) | 2011-08-10 | 2015-04-14 | Nutanix, Inc. | Method and system for implementing writable snapshots in a virtualized storage environment |
US8601473B1 (en) | 2011-08-10 | 2013-12-03 | Nutanix, Inc. | Architecture for managing I/O and storage for a virtualization environment |
US8850130B1 (en) | 2011-08-10 | 2014-09-30 | Nutanix, Inc. | Metadata for managing I/O and storage for a virtualization |
US8863124B1 (en) | 2011-08-10 | 2014-10-14 | Nutanix, Inc. | Architecture for managing I/O and storage for a virtualization environment |
US20130080481A1 (en) * | 2011-09-27 | 2013-03-28 | Sybase, Inc. | Extreme large space allocation |
US9772866B1 (en) | 2012-07-17 | 2017-09-26 | Nutanix, Inc. | Architecture for implementing a virtualization environment and appliance |
FI124397B (en) * | 2013-01-04 | 2014-08-15 | Tellabs Oy | A method and apparatus for defining a paging system for a network element of a software configurable network |
US9317548B2 (en) | 2013-01-30 | 2016-04-19 | International Business Machines Corporation | Reducing collisions within a hash table |
US9311359B2 (en) | 2013-01-30 | 2016-04-12 | International Business Machines Corporation | Join operation partitioning |
US9519668B2 (en) * | 2013-05-06 | 2016-12-13 | International Business Machines Corporation | Lock-free creation of hash tables in parallel |
US9471710B2 (en) | 2013-06-14 | 2016-10-18 | International Business Machines Corporation | On-the-fly encoding method for efficient grouping and aggregation |
US9367556B2 (en) | 2013-06-14 | 2016-06-14 | International Business Machines Corporation | Hashing scheme using compact array tables |
US10503716B2 (en) * | 2013-10-31 | 2019-12-10 | Oracle International Corporation | Systems and methods for generating bit matrices for hash functions using fast filtering |
US10250519B2 (en) | 2014-05-21 | 2019-04-02 | Oracle International Corporation | System and method for supporting a distributed data structure in a distributed data grid |
WO2015179092A1 (en) * | 2014-05-21 | 2015-11-26 | Oracle International Corporation | System and method for supporting a distributed data structure in a distributed data grid |
US9405699B1 (en) | 2014-08-28 | 2016-08-02 | Dell Software Inc. | Systems and methods for optimizing computer performance |
US9672248B2 (en) | 2014-10-08 | 2017-06-06 | International Business Machines Corporation | Embracing and exploiting data skew during a join or groupby |
US9922064B2 (en) | 2015-03-20 | 2018-03-20 | International Business Machines Corporation | Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables |
US10303791B2 (en) | 2015-03-20 | 2019-05-28 | International Business Machines Corporation | Efficient join on dynamically compressed inner for improved fit into cache hierarchy |
US10650011B2 (en) | 2015-03-20 | 2020-05-12 | International Business Machines Corporation | Efficient performance of insert and point query operations in a column store |
US10831736B2 (en) | 2015-03-27 | 2020-11-10 | International Business Machines Corporation | Fast multi-tier indexing supporting dynamic update |
US10108653B2 (en) | 2015-03-27 | 2018-10-23 | International Business Machines Corporation | Concurrent reads and inserts into a data structure without latching or waiting by readers |
US9401959B1 (en) * | 2015-12-18 | 2016-07-26 | Dropbox, Inc. | Network folder resynchronization |
US10255208B2 (en) * | 2016-03-04 | 2019-04-09 | Toshiba Memory Corporation | Data transfer apparatus and data transfer system |
US10467103B1 (en) | 2016-03-25 | 2019-11-05 | Nutanix, Inc. | Efficient change block training |
US10467390B1 (en) | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
WO2021050883A1 (en) * | 2019-09-12 | 2021-03-18 | Oracle International Corporation | Accelerated building and probing of hash tables using symmetric vector processing |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7287131B1 (en) * | 2003-03-21 | 2007-10-23 | Sun Microsystems, Inc. | Method and apparatus for implementing a fully dynamic lock-free hash table |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3164257B2 (ja) * | 1993-02-02 | 2001-05-08 | 日本電信電話株式会社 | 索引方法 |
US6115802A (en) * | 1995-10-13 | 2000-09-05 | Sun Mircrosystems, Inc. | Efficient hash table for use in multi-threaded environments |
GB9811574D0 (en) * | 1998-05-30 | 1998-07-29 | Ibm | Indexed file system and a method and a mechanism for accessing data records from such a system |
US6427039B1 (en) * | 1999-01-25 | 2002-07-30 | Massachusetts Institute Of Technology | Wavelength shifting and optical switching |
US6578083B2 (en) * | 1999-02-05 | 2003-06-10 | Pluris, Inc. | Method for monitoring data flow at a node on a network facilitating data transfer on at least one link having at least one class of service |
US6578131B1 (en) * | 1999-04-27 | 2003-06-10 | Microsoft Corporation | Scaleable hash table for shared-memory multiprocessor system |
US6915296B2 (en) * | 2002-10-29 | 2005-07-05 | Agere Systems Inc. | Incremental reorganization for hash tables |
US7277897B2 (en) * | 2003-08-01 | 2007-10-02 | Oracle International Corporation | Dynamic reassignment of data ownership |
US7702628B1 (en) * | 2003-09-29 | 2010-04-20 | Sun Microsystems, Inc. | Implementing a fully dynamic lock-free hash table without dummy nodes |
US7669241B2 (en) | 2004-09-30 | 2010-02-23 | Alcatel-Lucent Usa Inc. | Streaming algorithms for robust, real-time detection of DDoS attacks |
US20060075486A1 (en) | 2004-10-01 | 2006-04-06 | Paul Lin | Self-contained token device for installing and running a variety of applications |
US7464103B2 (en) * | 2004-10-29 | 2008-12-09 | Microsoft Corporation | Multi-level nested open hashed data stores |
JP4768009B2 (ja) * | 2005-03-11 | 2011-09-07 | ロックソフト リミテッド | データ・クラスタを使用する冗長性の少ないデータを格納する方法 |
RU71016U1 (ru) * | 2006-05-10 | 2008-02-20 | Алексей Юрьевич Попов | Электронная вычислительная машина с многими потоками команд и одним потоком данных |
US20080021908A1 (en) | 2006-07-20 | 2008-01-24 | Barrett Alan Trask | Synchronization and dynamic resizing of a segmented linear hash table |
US7809916B1 (en) * | 2007-09-28 | 2010-10-05 | Oracle America, Inc. | Method for dynamically refining locks in resizable concurrent hashing |
US8392368B1 (en) * | 2010-08-27 | 2013-03-05 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
-
2009
- 2009-04-08 CN CN200980159762.3A patent/CN102460392B/zh not_active Expired - Fee Related
- 2009-04-08 RU RU2011144807/08A patent/RU2517238C2/ru not_active IP Right Cessation
- 2009-04-08 WO PCT/RU2009/000169 patent/WO2010117294A1/en active Application Filing
- 2009-04-08 SG SG2011073145A patent/SG175109A1/en unknown
- 2009-04-08 US US13/260,438 patent/US9563477B2/en not_active Expired - Fee Related
- 2009-04-08 KR KR1020117026459A patent/KR101367450B1/ko not_active IP Right Cessation
- 2009-04-08 JP JP2012504646A patent/JP5401676B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7287131B1 (en) * | 2003-03-21 | 2007-10-23 | Sun Microsystems, Inc. | Method and apparatus for implementing a fully dynamic lock-free hash table |
Non-Patent Citations (1)
Title |
---|
Split-Ordered Lists--Lock-free Extensible Hash Tables;Ori Shalev,Nir Shavit;《Journal of the ACM》;20060531;第53卷;第379-405页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102460392A (zh) | 2012-05-16 |
WO2010117294A1 (en) | 2010-10-14 |
RU2517238C2 (ru) | 2014-05-27 |
US9563477B2 (en) | 2017-02-07 |
SG175109A1 (en) | 2011-11-28 |
US20120036134A1 (en) | 2012-02-09 |
KR20120014141A (ko) | 2012-02-16 |
RU2011144807A (ru) | 2013-05-20 |
JP5401676B2 (ja) | 2014-01-29 |
KR101367450B1 (ko) | 2014-02-25 |
JP2012523610A (ja) | 2012-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102460392B (zh) | 对多线程应用的杂凑表执行并行的重杂凑 | |
US10810179B2 (en) | Distributed graph database | |
US9183048B2 (en) | System and method for implementing scalable contention-adaptive statistics counters | |
CN103226561A (zh) | 基于兄弟组的内容可寻址存储 | |
US8250583B2 (en) | Workflow processing system and method with federated database system support | |
US20150278924A1 (en) | Purchase price optimization for prescription product purchase orders | |
CN103959257A (zh) | 用于持久性指针管理的软件转换后备缓冲器 | |
CN103886109B (zh) | 一种实现数据库行锁的方法及装置 | |
US8812492B2 (en) | Automatic and dynamic design of cache groups | |
CN103544153A (zh) | 一种基于数据库的数据更新方法和系统 | |
CN111221840B (zh) | 数据处理方法及装置、数据缓存方法、存储介质、系统 | |
US20120011512A1 (en) | Minimizing overhead in resolving operating system symbols | |
CN101405703B (zh) | 在区域性存储器系统中创建引用的方法、装置及其系统 | |
CN112379971A (zh) | 应用容器管理方法、装置及设备 | |
CN113010265A (zh) | Pod的调度方法、调度器、存储插件及系统 | |
CN104573112B (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN105190560A (zh) | 用于实现numa感知统计计数器的系统和方法 | |
CN109542925A (zh) | 数据库访问系统、方法、设备及多用户商城系统 | |
US10379973B2 (en) | Allocating storage in a distributed storage system | |
CN110333944B (zh) | 话单数据业务处理方法及设备 | |
US7380174B2 (en) | Variable writing through a fixed programming interface | |
CN116561374B (zh) | 基于半结构化存储的资源确定方法、装置、设备及介质 | |
CN115269207B (zh) | 一种用于vCPE网元分配资源的方法和系统 | |
US20230121052A1 (en) | Resource resettable deep neural network accelerator, system, and method | |
CN117407402A (zh) | 数据更新方法、装置、电子设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160427 Termination date: 20210408 |