CN112930526B - 使用水平聚合SIMD指令对d-堆进行向量化的方法 - Google Patents
使用水平聚合SIMD指令对d-堆进行向量化的方法 Download PDFInfo
- Publication number
- CN112930526B CN112930526B CN201980071575.3A CN201980071575A CN112930526B CN 112930526 B CN112930526 B CN 112930526B CN 201980071575 A CN201980071575 A CN 201980071575A CN 112930526 B CN112930526 B CN 112930526B
- Authority
- CN
- China
- Prior art keywords
- key value
- heap
- slot
- node
- minimum key
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000000295 complement effect Effects 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims 1
- 238000004891 communication Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 239000013598 vector Substances 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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 or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Executing Machine-Instructions (AREA)
Abstract
通过对d‑堆进行向量化并跨取回操作利用水平聚合SIMD指令来维护d‑堆属性并加快取回操作(诸如top或pop)的技术。通过将d‑堆存储在包含最开始侧和最末端侧的连续存储器阵列中来对d‑堆进行向量化。水平聚合SIMD指令用于聚合向量化的d‑堆的值。因此,减少了在d‑堆的单个节点内找到最大键值或最小键值所需的比较次数,从而加快了取回操作。
Description
技术领域
本公开涉及维护数据结构,并且更具体地,涉及对数据结构中的数据进行聚合、存储和移除。
背景技术
堆(heap)是包含节点的优先级队列数据结构,这些节点具有两个保存单个值的子节点,通常经由树结构反映。这种数据结构的关键特征是在对数时间(logarithmic time)内添加/移除单个元素,以及在常数时间(constant time)内找到其索引元素中的最小/最大元素的能力。最常见的堆类型是始终返回堆中最小的索引元素的最小堆(min-heap)和始终返回堆中最大的索引元素的最大堆(max-heap)。
许多堆是如此之大,以至于使用堆的算法(例如,图算法(graph algorithm))的运行时间的很大一部分都花在堆操作上。因此,需要高效的堆实现方式。
d-堆(d-heap)是二叉堆(binary heap)的泛化(generalization),d-堆具有与由d的值所定义的一样多的子节点,这些子节点包含由d的值定义的多个值。d-堆使用树对其元素进行索引。d-堆是用于快速插入操作的最佳数据结构,因为附加的子节点减少了基础树的深度(depth)并且使得当新值被插入到堆中时需要较少的比较来恢复堆属性。
但是,d-堆中诸如top(取顶)和pop(弹出)之类的取回(retrieval)操作需要附加的比较以便在单个节点内找到最大或最小键值。这些比较的运行时间不仅很高,而且需要附加的计算资源,从而导致与常规的二叉堆相比,执行比较的花销更高。
因此,期望维持d-堆属性并减轻与d-堆的维护和取回操作所需的附加比较相关联的成本和时间的技术。
本文所讨论的是通过对d-堆进行向量化以及跨多个d-堆取回函数而利用水平聚合SIMD指令,从而高效地维持d-堆属性、加速d-堆的取回操作的方法。
本部分中描述的方法是可以采用的方法,但不一定是先前已经设想或采用的方法。因此,除非另有说明,否则不应仅由于将本部分中所述的任何方法包括在本部分中而认为其有资格作为现有技术。
附图说明
在附图中:
图1是描绘根据本发明的实施例的d-堆的图。
图2是描绘根据本发明的实施例的线性化(linearized)的向量化d-堆的图。
图3A至图3B是描绘用于在d-堆上执行pop操作的处理的流程图。
图4是描绘可以在本发明的实施例中使用的计算机系统的图。
图5是描绘可以在其上实现本发明的实施例的软件系统的图。
具体实施方式
在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将清楚的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地使本发明模糊。
总体概述
提供了用于通过对d-堆进行向量化并跨多个取回操作利用水平聚合SIMD指令来维持d-堆属性并加快取回操作(诸如top或pop)的技术。如本文所述,存储器是(在地址空间内)连续的,并且包含槽(slot)的阵列,这些槽形成阵列中最开始的空间和最末端的空间。d-堆包含多个节点,这些节点包括D个槽,其中该D个槽中的每个槽存储D个键值中的键值,其中每个槽是阵列的元素。该多个节点包括根节点和多个父节点,每个父节点包含D个子节点,并且每个子节点是每个父节点中的相应父槽的孩子,并且存储比存储在相应父槽中的键值更大的键值。
在一个实施例中,堆的该多个节点包括多个级别,该多个级别包括根级别和非根级别。存储器中的槽阵列跨D个槽来存储d-堆的节点,其中根级别被存储在阵列的最开始D槽处的D槽中,并且非根级别连续地跨D个槽被存储,直到阵列的最末端的D槽。作为结果,d-堆被向量化,从而允许将节点内的键值被连续地存储在阵列中。从这里开始,向量化的d-堆采用水平聚合SIMD指令来最小化取回操作所需的比较次数。
在实施例中,堆以完整的二叉树的形式表示,其中该树的所有级别都完全用节点填充,并且在树的最后一个级别没有被填充的情况下,那么最后一个级别的节点填充树的最开始一侧。在另一个实施例中,堆被表示为基于指针的树(pointer-based tree)或没有任何指针的隐式数据结构,其中根节点被存储在存储器的阵列的第一个位置,该根节点的子节点被存储在存储器的阵列的第二个和第三个位置,并且每个后续级别的节点紧接在形成这些节点的上一级的父节点的后面而被存储在存储器的阵列内。
在实施例中,隐式二叉堆被配置为被存储在存储器中的阵列中,其中所有键值被存储在该阵列中,并且键值在堆内的位置被用于计算包含该键值的节点的位置以及该节点的父节点和子节点的位置。阵列的第一个位置表示根节点,阵列的第二个位置和第三个位置表示根节点的子节点,依此类推。
d-堆概述
如本文所述,d-堆是优先级队列数据结构,其包含可以被视为完整d-元树中的节点的项的阵列。与二叉堆相反,对于超过计算机高速缓存存储器尺寸的堆尺寸,d-堆通常运行更快,因为与二叉堆相比,它们导致更少的高速缓存未命中(cache miss)和虚拟存储器页面错误。
通过利用包括JAVA、C++、OBJECTIVE-C或任何其它合适的编程环境的容器数据结构的任何编程语言来实现d-堆。
如本文所述,d-堆是优先级队列数据结构,其在树结构中包含多个节点,其中每个节点包含d个值并且具有多达d个后继/子节点。该多个节点包括包含D个槽的父节点和子节点,其中该D个槽中的每个槽存储D的键值。
在一个实施例中,d-堆被连续存储在存储器阵列中,该阵列具有槽元素,这些槽元素包含最开始的空间和最末端的空间。d-堆的多个节点包括D个槽,D是大于1的整数,其中D个槽中的每个槽存储键值,其中D个槽被连续存储在存储器的存储器地址空间内。每个父节点具有D个子节点,并且每个子节点是相应父槽的孩子,其存储比存储在相应父槽中的任何键值更大的键值。通过以下方式在d-堆上执行pop操作:对根节点执行SIMD操作,以生成第一最小键值以及根节点中保持第一最小键值的第一槽(其是子槽的父槽)的第一索引。d-堆中的最末端值被复制到根节点中的该第一槽中,并对根节点的子节点执行SIMD操作,以生成第二最小键值以及该子节点的包含第二最小键值的槽中的第二索引。如果第二最小键值小于第一最小键值,那么这些键值被交换。
在一个实施例中,包括根级别的节点和一个或多个非根级别的节点的堆被存储在存储器阵列中。该阵列的每个元素保持d-堆的节点,其中根节点被存储在阵列的最开始元素中,并且非根级别紧接在根节点之后被连续存储在相应的连续阵列元素中。根节点的D个槽被存储在阵列的最开始的空间中,并且非根级别的每个D槽被连续存储在阵列的元素中,紧接在存储根节点的D槽之后。
在一个实施例中,堆被存储在包括多个堆级别的存储器中的阵列中,在第一堆级别之后,该阵列用每个特定堆级别的存储器的地址空间来连续地存储每个前一堆级别的所有子节点。如本文所述,堆级别是组织堆的元素的机制,并按照堆级别与根节点的距离来定义。根节点形成堆级别0,在堆级别0中,根节点是唯一的节点,根节点的孩子形成堆级别1,并且每个随后的级别包含每个相应父节点的子节点。
为了说明清楚的示例,图1图示了仅包含2个堆级别(根级别12和非根级别14)的d-堆10。其它实施例可以实现任何数量的堆级别,除了包含根节点的第一堆级别之外,每个堆级别中包含包括D个槽的D个子节点。
SIMD概述
存在单指令多数据(SIMD)体系架构,以允许具有多个处理元件的计算机同时对多个数据点执行相同的操作。SIMD体系架构可以主要执行“垂直(vertical)”操作,在这些操作中,并行且独立地对多个单独的操作数(operand)中的对应元素进行操作。
与传统的垂直SIMD指令不同,水平SIMD指令跨SIMD寄存器的各元素执行。水平聚合SIMD指令具有聚合单个向量的值的水平聚合SIMD指令的子类,从而允许定位寄存器中的最大和最小键值。
SIMD指令允许一次对多个数据元素执行的相同操作的执行对齐(executionalignment)。在一个实施例中,存储在堆的D槽中的键值被向量化和对齐,使得水平SIMD指令被施加在多个节点上,以便执行取回操作来找到堆的节点内的最小值和最大值。
使用水平聚合SIMD指令对d-堆进行向量化
在跨存储器的槽阵列连续存储的d-堆中,存储在节点的D个槽中的键值被连续在存储器中,并且对于在d-堆上的取回操作所需的许多比较,可以将控制依赖性(controldependency)最小化,从而提高操作的速度。
现代微处理器和计算机体系架构,诸如SSE4.1,被配置为执行媒体指令,该媒体指令包括识别数字值的水平最小集及其在寄存器中的对应位置。例如,PHMINPOSUW指令使用16位幅值比较器阵列,使用最小值函数将值聚合到向量中,并找到该最小向量值的值和位置。该指令还将目的地的最低无符号16位值设置为源中的该最小无符号16位值,并且将倒数第二个无符号16位值设置为该字在源中的索引。这样的指令作为Intel SSE4.1的一部分被引入,并且在所有现代x86处理器中都可用。
虽然PHMINPOSUW当前是唯一的水平聚合SIMD指令,但是尽管有此当前限制,仍可以获得针对各种数据类型的最小堆和最大堆。
对d-堆取回操作使用水平聚合SIMD指令的方法引起的改进包括从d-堆读取单个元素需要取回的高速缓存行更少、用于增长和收缩向量化的d-堆的更高效的存储器管理策略,以及为了在d-堆的单个节点内找到最大或最小键值执行更少的比较。
d-堆实现方式概述
图1是描绘实施例中的示例d-堆10的图,其中D的值为4。d-堆10在树结构中包括多个节点,该多个节点包括在根级别12处的多个父节点和在非根级别14处的多个子节点。每个节点包含D个槽和多个键值16,其中每个D槽存储D键值。根级别12中的父节点包含根节点,并且每个父节点具有作为相应父槽的孩子的一个或多个子节点。虽然仅描绘了两个级别12-14,但是d-堆10可以支持多得多的非根级别。同样,虽然图1描绘了包含整数的多个键字段16,但是d-堆10支持各种原始数据类型,包括但不限于有符号整数、无符号整数、单精度浮点等。在无符号整数的情况下,每当将键值插入/推送到有符号整数向量化堆中,就切换符号位,并且当从堆中取回该键值时,符号位就被切换回来。因此,负键值在正键值之前被返回,从而产生无符号比较指令的正确结果。
在一个实施例中,d-堆10被配置为被存储在连续存储器中的槽阵列中,其中每个槽是阵列的元素。阵列被配置为分配用于添加和存储键值的附加存储器,并且阵列的每个元素可以对应于d-堆10的节点的一个相应槽。图2是描绘了向量化的d-堆10的图,其中在根级别12处的根节点的D个槽中的每个键值被连续存储在连续空间22中,并且在非根级别14的D个槽中的每个键值被连续存储在连续空间24中,该连续空间24紧接在在连续空间22中存储根节点的键值之后;因此,对d-堆10进行向量化,其中根级别12中的根节点的前四个槽内的四个键值填充最开始的槽阵列26,并且非根级别14的节点的D个槽内的键值填充剩余的槽28。在实施例中,父节点的键值被连续存储在存储器阵列的第一组槽元素中,在第一组槽元素之后将子节点的键值连续存储在存储器阵列的第二组槽元素中。填充槽阵列的这个处理继续,直到d-堆10的每个节点的键值填充了阵列的槽为止;因此,形成了最开始的一侧和最末端的一侧。例如,如果根节点的槽包含键值20,那么键值20被存储在连续空间22的最开始槽202内,而非根级别14的最末端子节点18的键字段值被存储在连续空间24的最末端槽206内。
有效载荷实现方式
根据实施例,堆与有效载荷阵列一起被存储。有效载荷阵列与堆的阵列(“堆阵列”)对齐。即,有效载荷阵列的第一个槽存储用于堆阵列中的第一个槽的有效载荷,有效载荷阵列的第二个槽存储用于堆阵列中的第二个槽的有效载荷,依此类推。根据实施例,有效载荷阵列中的槽存储指向存储有效载荷数据的存储器地址的指针。
有效载荷阵列被维护以使得维持有效载荷阵列与堆阵列之间的对齐。因此,当在父槽与该父槽的子节点中的子槽之间交换键值时,在有效载荷阵列中,该父槽的相应槽与该子槽中的相应槽被交换。
指针实现方式
在实施例中,使用基于指针的表示来表示d-堆。每个节点包括用于键值的D个槽(“键值槽”)和用于指针的D个槽(“指针槽”)。键值槽和指针槽被连续存储在存储器地址空间内,其中键值槽被连续存储在存储器的地址空间内,使得键值槽可以作为高速缓存行或高速缓存行的连续部分而被加载到存储器中。
每个键值槽对应于相应的指针槽,该相应的指针槽基于键值槽的地址以偏移量存储。存储在相应指针槽中的指针指向子节点。
用于基于指针的表示的pop操作至少包括以下内容。对于存储在父节点中的父槽中的给定键值,通过使用存储在父槽的父节点中的相应指针槽处的指针来遍历到子节点。存储在子节点的键值槽中的键值被加载到SIMD寄存器中。执行SIMD操作以生成键值当中的最小键值及其索引。然后将该最小键值与父槽中的给定键值进行比较。如果该最小键值小于父槽中的键值,那么在父槽与由该索引识别的子槽之间交换键值,依此类推。
处理概述
图3A至图3B是描绘用于跨d-堆10的pop操作使用水平聚合SIMD指令的处理300的流程图。可以在包含流传输SIMD扩展(SSE)的任何现代x86处理器中执行处理300。x86处理器体系架构允许这些指令在包含寄存器的独立寄存器集上进行操作,这些寄存器包含八个正被比较的16位值。在处理300期间确定关于d-堆10是否具有足够的存储器来容纳新的推送/插入的项目,如果没有足够的存储器,那么将d-堆10的尺寸加倍(double)并且将额外分配的存储器初始化为无符号16位值的最大值。例如,如果当前节点仅包含一个键值以及一个或多个空槽,那么将这些空槽初始化为最大值,因此PHMINPOSUW将始终返回当前节点中的第一个键值。
在一个实施例中,新项目被推送/插入到d-堆10的最末端堆级别中,存储在阵列的最末端槽中,并且,包含d-堆的尺寸的计数器增加1。插入的项目向上遍历d-堆10的堆级别,直到插入的项目达到根级别12或插入的项目的父键值小于该项目为止。
在框302处,从第一寄存器读取根节点的内容,诸如d-堆10的根级别12中的根节点内的键值,并将其加载到第二寄存器中。执行水平SIMD指令,该指令对根节点的键值进行向量化并生成最小键值以及指示该最小键值的位置的根节点的索引。可以通过以下方式返回此最小键值:在根节点上执行SIMD操作以生成最小键值并将其作为存储在d-堆10中的最小键值返回。PHMINPOSUW指令始终返回小于当前节点的所有其它键值的第一个键值。PHMINPOSUW指令还可以用于执行top操作,在该操作中,根级别12的键值被加载到第二寄存器中,在根节点上执行SIMD操作,并且最高堆级别中根级别12的第一个键值被返回。
在一个实施例中,在最高堆级别中的根节点上执行水平SIMD指令以生成最大键值以及指示该最大键值的位置的根节点的索引,其作为存储在d-堆10中的最大键值被返回。
在框304处,在连续空间24的最末端的槽206中表示的、在非根级别14内的子节点18的最末端槽内的键值被复制到连续空间22的由第一索引识别的最开始的槽202中。
在框306处,在连续空间24的最末端的槽206中表示的、子节点18的最末端的槽内的键值被最大键值覆写,该最大键值是无符号的16位值。在d-堆10仅包含一个节点的情况下,根级别12的最末端的槽内的键值是从d-堆10弹出的项。
在框308处,向下遍历到包含所返回索引的槽的节点,以确定当前节点的最小键值是否大于当前节点的子节点中包含的任何键值。
在框310处,在最小键交换之后,进入循环,并加载当前节点(其包含父槽)的子节点的内容。在312处,在当前节点(其包含父槽)的子节点上执行SIMD操作,以生成最小键和指示该最小键在当前父节点的该子节点中位于何处的索引。在314处,确定由SIMD操作返回的最小键值是否小于当前父槽中的键值。如果否,那么发生框316,其中从d-堆10弹出的键值作为最小键值返回。如果是,那么发生框318,其中存储在包含父槽的节点中的最小键值与当前节点(其包含父槽)的子节点的最小键值被交换,并且发生框320,其中当前节点的子节点变为当前父节点,从而循环回到框316,其中当前父节点的子节点被加载。循环继续,直到没有用于向下遍历的非根级别的其它子节点,或者当前槽中没有比与该槽相关联的子节点的键值更大的键值。
有符号整数值和最大值实现方式
在没有可用的用于有符号数据类型的水平聚合SIMD指令的情况下,通过以下方式来支持无符号比较指令:每当键值被插入(对d-堆执行的推送操作)到有符号整数d-堆中时,将符号位切换为其补码(complement),并且每当从d-堆中取回键值(对d-堆执的pop操作)时,将符号位切换回来。可以使用或重用从无符号整数d-堆派生的函数以获得有符号整数d-堆的实现。例如,可以通过以下方式为有符号整数d-堆实现无符号整数d-堆的插入和取回操作:针对其相应函数切换符号位,并在必要时将符号位切换回来。
类似的方法可以用于完成诸如逆转顺序和返回键值以及实现最大d-堆之类的任务。为了实现最大d-堆,每当键值被插入到d-堆中时,就加载键值的符号位的补码,并且每当从d-堆取回键值时,就返回该补码的补码。
在一个实施例中,执行与在最小d-堆上使用的水平SIMD指令相反的比较指令,这对根节点的键值进行向量化,并生成最大键值以及指示最大键值的位置的根节点的索引。可以通过如下方式返回此最大键值:在根节点上执行SIMD操作以生成最大键值并将其作为存储在d-堆10中的最大键值而返回。PHMAXPOSUW指令始终返回比当前节点的所有其它键值大的第一个键值。
d-堆存储器管理
由于需要分配足够的连续存储器来容纳堆的所有项目,因此要么在创建堆期间一次分配存储器,要么在堆的生命周期内动态分配存储器。因此,根据本发明的实施例,提供了在堆的生命周期内最小化重新分配的次数的方法。在此,提出了一种指数增长分配策略,其中堆为8个项目分配存储器(单个128位向量),并且当堆需要更多存储器时,堆的尺寸被加倍。
根据本发明的实施例,通过以下方式来管理向量化的d-堆的存储器:存储第一计数器以及第二计数器,第一计数器包含堆内的项目的尺寸/数量,第二计数器解释当前分配的存储器区域中能够存储多少项目。如果第一计数器超过第二计数器,那么第二计数器和堆的存储器被加倍。作为对照,如果第一计数器达到第二计数器的一半,那么堆的存储器将缩减。
硬件概述
根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备(诸如被持久地编程为执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为根据固件、存储器、其它存储装置或组合中的程序指令执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合,以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、联网设备或者结合硬连线和/或程序逻辑以实现这些技术的任何其它设备。
例如,图4是图示可以在其上实现本公开的实施例的计算机系统400的框图。计算机系统400包括总线402或用于传送信息的其它通信机制,以及与总线402耦合以处理信息的硬件处理器404。硬件处理器404可以是例如通用微处理器。
计算机系统400还包括耦合到总线402的主存储器406,诸如随机存取存储器(RAM)或其它动态存储设备,用于存储将由处理器404执行的信息和指令。主存储器406还可以用于存储在执行由处理器404执行的指令期间的临时变量或其它中间信息。当存储在处理器404可访问的非暂态存储介质中时,这些指令使计算机系统400成为被定制以执行指令中指定的操作的专用机器。
计算机系统400还包括耦合到总线402的只读存储器(ROM)408或其它静态存储设备,用于存储用于处理器404的静态信息和指令。提供了存储设备410(诸如磁盘、光盘或固态驱动器)并将其耦合到总线402,用于存储信息和指令。
计算机系统400可以经由总线402耦合到显示器412(诸如阴极射线管(CRT)),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备414耦合到总线402,用于将信息和命令选择传送到处理器404。另一种类型的用户输入设备是光标控件416(诸如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器404并用于控制显示器412上的光标移动。这种输入设备通常在两个轴上具有两个自由度,第一轴(例如,x)和第二轴(例如,y),这允许设备指定平面中的位置。
计算机系统400可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑(它们与计算机系统相结合,使计算机系统400成为或将计算机系统400编程为专用机器)来实现本文所述的技术。根据一个实施例,响应于处理器404执行包含在主存储器406中的一个或多个指令的一个或多个序列,计算机系统400执行所述的技术。这些指令可以从另一个存储介质(诸如存储设备410)读入到主存储器406中。包含在主存储器406中的指令序列的执行使得处理器404执行本文所述的处理步骤。在替代实施例中,可以使用硬连线的电路系统代替软件指令或与软件指令组合。
如本文使用的术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固体驱动器,诸如存储设备410。易失性介质包括动态存储器,诸如主存储器406。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。
存储介质不同于传输介质但可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线402的导线。传输介质也可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些。
各种形式的介质可以参与将一个或多个指令的一个或多个序列传送到处理器404以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统400本地的调制解调器可以在电话线上接收数据并使用红外发送器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路系统可以将数据放在总线402上。总线402将数据传送到主存储器406,处理器404从主存储器406取回并执行指令。由主存储器2406接收的指令可以可选地在由处理器404执行之前或之后存储在存储设备410上。
计算机系统400还包括耦合到总线402的通信接口418。通信接口418提供耦合到网络链路420的双向数据通信,其中网络链路420连接到本地网络422。例如,通信接口418可以是集成服务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或者提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口418可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何此类实现中,通信接口418都发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。
网络链路420通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路420可以提供通过本地网络422到主计算机424或到由互联网服务提供商(ISP)426操作的数据设备的连接。ISP 426进而通过全球分组数据通信网络(现在通常称为“互联网”428)提供数据通信服务。本地网络422和互联网428都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路420上并通过通信接口418的信号(其将数字数据携带到计算机系统400和从计算机系统400携带数字数据)是传输介质的示例形式。
计算机系统400可以通过(一个或多个)网络、网络链路420和通信接口418发送消息和接收数据,包括程序代码。在互联网示例中,服务器430可以通过互联网428、ISP 426、本地网络422和通信接口418发送对应用程序的所请求代码。
接收到的代码可以在被接收到时由处理器404执行,和/或存储在存储设备410或其它非易失性存储器中以供稍后执行。
软件概述
图5是可以用于控制计算机系统400的操作的软件系统500的框图。软件系统500及其组件,包括它们的连接、关系和函数,仅仅是示例性的,并且不意味着限制(一个或多个)示例实施例的实现。适于实现(一个或多个)示例实施例的其它软件系统可以具有不同的组件,包括具有不同的连接、关系和函数的组件。
提供软件系统500用于指导计算机系统400的操作。可以存储在系统存储器(RAM)406和固定存储装置(例如,硬盘或闪存)410上的软件系统500包括内核或操作系统(OS)510。
OS 510管理计算机操作的低级方面,包括管理进程的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。表示为502A、502B、502C...502N的一个或多个应用可以被“加载”(例如,从固定存储装置410传送到存储器406中)以供系统400执行。意图在系统400上使用的应用或其它软件也可以被存储为可下载的计算机可执行指令集,例如,用于从互联网位置(例如,Web服务器、app商店或其它在线服务)下载和安装。
软件系统500包括图形用户界面(GUI)515,用于以图形(例如,“点击”或“触摸手势”)方式接收用户命令和数据。进而,这些输入可以由系统500根据来自操作系统510和/或(一个或多个)应用502的指令来操作。GUI 515还用于显示来自OS 510和(一个或多个)应用502的操作结果,用户可以提供附加的输入或终止会话(例如,注销)。
OS 510可以直接在系统500的裸硬件520(例如,(一个或多个)处理器404)上执行。可替代地,管理程序或虚拟机监视器(VMM)530可以插入在裸硬件520和OS 510之间。在这个配置中,VMM 530充当OS 510与系统400的裸硬件520之间的软件“缓冲”或虚拟化层。
VMM 530实例化并运行一个或多个虚拟机实例(“客户机”)。每个客户机包括“客户”操作系统(诸如OS 510),以及被设计为在客户操作系统上执行的一个或多个应用(诸如(一个或多个)应用502)。VMM 530向客户操作系统呈现虚拟操作平台并管理客户操作系统的执行。
在一些实例中,VMM 530可以允许客户操作系统(OS)如同它直接在系统400的裸硬件520上运行一样运行。在这些实例中,被配置为直接在裸硬件520上执行的客户操作系统的相同版本也可以在VMM 530上执行而无需修改或重新配置。换句话说,VMM 530可以在一些情况下向客户操作系统提供完全硬件和CPU虚拟化。
在其它实例中,客户操作系统可以被专门设计或配置为在VMM 530上执行以提高效率。在这些实例中,客户操作系统“意识到”它在虚拟机监视器上执行。换句话说,VMM 530可以在一些情况下向客户操作系统提供半虚拟化。
给出上述基本计算机硬件和软件是为了说明可以用于实现(一个或多个)示例实施例的基本底层计算机组件。但是,(一个或多个)示例实施例不必限于任何特定的计算环境或计算设备配置。代替地,根据本公开,(一个或多个)示例实施例可以在本领域技术人员鉴于本公开将理解为能够支持本文给出的(一个或多个)示例实施例的特征和函数的任何类型的系统体系架构或处理环境中实现。
Claims (22)
1.一种计算机实现的方法,包括:
对存储在存储器中的堆执行pop操作;
其中,所述堆包括多个节点;
其中,所述多个节点中的每个节点包括D个槽,D为大于1的整数,其中所述D个槽中的每个槽存储D个键值中的键值,其中所述每个节点的D个槽被连续地存储在所述存储器的存储器地址空间内;
其中,所述多个节点包括根节点和多个父节点,所述根节点具有所述多个节点中的D个子节点,其中所述根节点的所述D个子节点中的每个子节点是所述根节点中的相应父槽的孩子,其中存储在所述每个子节点的槽中的每个键值大于存储在所述根节点中的所述相应父槽中的键值;
所述多个节点中的每个父节点具有D个子节点,其中所述每个父节点的所述D个子节点中的每个子节点是所述每个父节点中的相应父槽的孩子,其中,存储在所述每个子节点的槽中的每个键值大于存储在所述每个父节点中的所述相应父槽中的键值;
其中,在堆上执行pop操作包括:
在所述根节点上执行单指令多数据SIMD操作,以生成第一最小键值以及所述根节点中保持所述第一最小键值的第一槽的第一索引;
将堆中最末端的槽中的键值复制到所述第一槽中;
其中,所述第一槽是第一子节点的父槽;
在所述第一子节点上执行SIMD操作,以生成第二最小键值以及所述第一子节点中包含所述第二最小键值的第二槽的第二索引;
确定所述第二最小键值小于存储在所述第一槽中的所述第一最小键值;以及
响应于确定所述第二最小键值小于所述第一最小键值,在所述第一槽和所述第二槽之间交换所述第一最小键值和所述第二最小键值。
2.如权利要求1所述的方法,还包括:
在所述第一子节点的第二子节点上执行SIMD操作,以生成第三最小键值以及所述第二子节点的所述第二子节点中包含所述第三最小键值的第三槽的第三索引;
确定所述第三最小键值是否小于存储在所述第二槽中的所述第二最小键值;以及
当所述第三最小键值小于存储在所述第二槽中的所述第二最小键值时,在所述第二槽和所述第三槽之间交换所述第二最小键值和所述第三最小键值。
3.如权利要求1所述的方法,还包括:
通过至少执行以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;以及
返回所述特定最小键值,作为存储在所述堆中的所述最小键值。
4.如权利要求1所述的方法,还包括:
通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;
生成所述特定最小键值的补码;以及
返回所述补码,作为存储在所述堆中的所述最大键值。
5.如权利要求1所述的方法,还包括:
通过至少以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;
通过改变所述特定最小键值的符号来生成特定值;以及
返回所述特定值,作为存储在所述堆中的所述最小键值。
6.如权利要求1所述的方法,还包括:
其中,所述堆被存储在第一阵列中,
其中,所述第一阵列包括多个堆级别,其中所述多个堆级别中的第一堆级别存储所述根节点,其中所述多个堆级别中的在所述第一堆级别之后的每个特定堆级别利用所述存储器的地址空间来连续地存储所述多个堆级别中在所述每个特定堆级别之前的堆级别的所有子节点。
7.如权利要求6所述的方法,其中
所述第一阵列的每个元素对应于所述多个节点中的一个相应槽;
有效载荷阵列的每个有效载荷元素对应于所述第一阵列的一个元素并且对应于所述多个节点中与所述第一阵列的所述一个元素对应的一个相应槽;并且
其中,所述方法还包括:响应于确定所述第二最小键值小于所述第一最小键值,在所述有效载荷阵列元素中分别与所述第一槽和所述第二槽对应的一对元素之间交换值。
8.如权利要求6所述的方法,还包括:
为所述第一阵列分配附加的存储器以向所述堆添加键值,以及
将所述键值存储在所述附加存储器中。
9.如权利要求1所述的方法,其中:
一组指针中的每个指针指向存储所述多个节点中的相应节点的存储器地址;并且
其中,在对所述根节点执行SIMD操作之前,所述一组指针中的相应指针指向所述根节点,以将所述根节点加载到由所述根节点上的所述SIMD操作使用的寄存器中。
10.如权利要求1所述的方法,还包括:
通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:
在所述根节点上执行SIMD操作以生成第一最大键值以及根节点中保持所述第一最大键值的第一槽的第一索引;以及
返回所述第一最大键值,作为存储在所述堆中的所述最大键值。
11.一个或多个非暂态存储介质,所述一个或多个非暂态存储介质存储指令序列,所述指令序列在由一个或多个处理器执行时使得:
对存储在存储器中的堆执行pop操作;
其中,所述堆包括多个节点;
其中,所述多个节点中的每个节点包括D个槽,D为大于1的整数,其中所述D个槽中的每个槽存储D个键值中的键值,其中所述每个节点的D个槽被连续地存储在所述存储器的存储器地址空间内;
其中,所述多个节点包括根节点和多个父节点,所述根节点具有所述多个节点中的D个子节点,其中所述根节点的所述D个子节点中的每个子节点是所述根节点中的相应父槽的孩子,其中存储在所述每个子节点的槽中的每个键值大于存储在所述根节点中的所述相应父槽中的键值;
所述多个节点中的每个父节点具有D个子节点,其中所述每个父节点的所述D个子节点中的每个子节点是所述每个父节点中的相应父槽的孩子,其中,存储在所述每个子节点的槽中的每个键值大于存储在所述每个父节点中的所述相应父槽中的键值;
其中,在堆上执行pop操作包括:
在所述根节点上执行单指令多数据SIMD操作,以生成第一最小键值以及所述根节点中保持所述第一最小键值的第一槽的第一索引;
将堆中最末端的槽中的键值复制到所述第一槽中;
其中,所述第一槽是第一子节点的父槽;
在所述第一子节点上执行SIMD操作,以生成第二最小键值以及所述第一子节点中包含所述第二最小键值的第二槽的第二索引;
确定所述第二最小键值小于存储在所述第一槽中的所述第一最小键值;以及
响应于确定所述第二最小键值小于所述第一最小键值,在所述第一槽和所述第二槽之间交换所述第一最小键值和所述第二最小键值。
12.如权利要求11所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
在所述第一子节点的第二子节点上执行SIMD操作,以生成第三最小键值以及所述第二子节点的所述第二子节点中包含所述第三最小键值的第三槽的第三索引;
确定所述第三最小键值是否小于存储在所述第二槽中的所述第二最小键值;以及
当所述第三最小键值小于存储在所述第二槽中的所述第二最小键值时,在所述第二槽和所述第三槽之间交换所述第二最小键值和所述第三最小键值。
13.如权利要求11所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
通过至少执行以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;以及
返回所述特定最小键值,作为存储在所述堆中的所述最小键值。
14.如权利要求11所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
通过至少以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:
通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;
生成所述特定最小键值的补码;以及
返回所述补码,作为存储在所述堆中的所述最大键值。
15.如权利要求11所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
通过至少以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:
在所述根节点上执行SIMD操作以生成特定最小键值;
通过改变所述特定最小键值的符号来生成特定值;以及
返回所述特定值,作为存储在所述堆中的所述最小键值。
16.如权利要求11所述的一个或多个非暂态存储介质,其中,所述堆被存储在第一阵列中,其中,所述第一阵列包括多个堆级别,其中所述多个堆级别中的第一堆级别存储所述根节点,其中所述多个堆级别中的在所述第一堆级别之后的每个特定堆级别利用所述存储器的地址空间来连续地存储所述多个堆级别中在所述每个特定堆级别之前的堆级别的所有子节点。
17.如权利要求16所述的一个或多个非暂态存储介质,
其中,所述第一阵列的每个元素对应于所述多个节点中的一个相应槽;
有效载荷阵列的每个有效载荷元素对应于所述第一阵列的一个元素并且对应于所述多个节点中与所述第一阵列的所述一个元素对应的一个相应槽;并且
其中,所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:响应于确定所述第二最小键值小于所述第一最小键值,在所述有效载荷阵列元素中分别与所述第一槽和所述第二槽对应的一对元素之间交换值。
18.如权利要求16所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
为所述第一阵列分配附加的存储器以向所述堆添加键值,以及
将所述键值存储在所述附加存储器中。
19.如权利要求11所述的一个或多个非暂态存储介质,其中:
一组指针中的每个指针指向存储所述多个节点中的相应节点的存储器地址;并且
其中,在对所述根节点执行SIMD操作之前,所述一组指针中的相应指针指向所述根节点,以将所述根节点加载到由所述根节点上的所述SIMD操作使用的寄存器中。
20.如权利要求11所述的一个或多个非暂态存储介质,其中所述指令序列包括在由一个或多个处理器执行时还使得执行以下操作的指令:
通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:
在所述根节点上执行SIMD操作以生成第一最大键值以及根节点中保持所述第一最大键值的第一槽的第一索引;以及
返回所述第一最大键值,作为存储在所述堆中的所述最大键值。
21.一种电子系统,包括:
一个或多个处理器;以及
包括指令的一个或多个非暂态存储介质,所述指令在由所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1-10中任一项所述的方法。
22.一种计算机程序产品,所述计算机程序产品包括指令,所述指令在由所述一个或多个处理器执行时,使得所述一个或多个处理器执行如权利要求1-10中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/139,226 US11169804B2 (en) | 2018-09-24 | 2018-09-24 | Method for vectorizing d-heaps using horizontal aggregation SIMD instructions |
US16/139,226 | 2018-09-24 | ||
PCT/US2019/052343 WO2020068611A1 (en) | 2018-09-24 | 2019-09-23 | Method for vectorizing d-heaps using horizontal aggregation simd instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112930526A CN112930526A (zh) | 2021-06-08 |
CN112930526B true CN112930526B (zh) | 2024-04-16 |
Family
ID=68208334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980071575.3A Active CN112930526B (zh) | 2018-09-24 | 2019-09-23 | 使用水平聚合SIMD指令对d-堆进行向量化的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11169804B2 (zh) |
EP (1) | EP3857383B1 (zh) |
CN (1) | CN112930526B (zh) |
WO (1) | WO2020068611A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11016778B2 (en) | 2019-03-12 | 2021-05-25 | Oracle International Corporation | Method for vectorizing Heapsort using horizontal aggregation SIMD instructions |
US11573793B2 (en) | 2020-03-18 | 2023-02-07 | Oracle International Corporation | Lazy push strategies for vectorized D-Heaps |
US11580013B2 (en) * | 2020-10-30 | 2023-02-14 | Nutanix, Inc. | Free space management in a block store |
US20230109463A1 (en) * | 2021-09-20 | 2023-04-06 | Oracle International Corporation | Practical method for fast graph traversal iterators on delta-logged graphs |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102473104A (zh) * | 2009-08-19 | 2012-05-23 | 国际商业机器公司 | 插入用于优化的simd代码的操作-和-指示指令 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287494A (en) | 1990-10-18 | 1994-02-15 | International Business Machines Corporation | Sorting/merging tree for determining a next tournament champion in each cycle by simultaneously comparing records in a path of the previous tournament champion |
US5850538A (en) | 1997-04-23 | 1998-12-15 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Priority queues for computer simulations |
US6259988B1 (en) * | 1998-07-20 | 2001-07-10 | Lockheed Martin Corporation | Real-time mission adaptable route planner |
US6952696B1 (en) * | 2000-11-28 | 2005-10-04 | Altera Corporation | Data structure and method for sorting using heap-supernodes |
WO2003107222A1 (en) | 2002-06-13 | 2003-12-24 | Cerisent Corporation | Parent-child query indexing for xml databases |
US8010953B2 (en) * | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
US7702644B2 (en) | 2007-01-25 | 2010-04-20 | Ludi Labs, Inc. | Data management system and method to host applications and manage storage, finding and retrieval of typed items with support for tagging, connections, and situated queries |
US8819079B2 (en) | 2007-02-02 | 2014-08-26 | Rogers Family Trust | System and method for defining application definition functionality for general purpose web presences |
CN201363474Y (zh) | 2009-02-20 | 2009-12-16 | 厦门科际精密器材有限公司 | 一种结构改进的电磁线性阀 |
US8327109B2 (en) * | 2010-03-02 | 2012-12-04 | Advanced Micro Devices, Inc. | GPU support for garbage collection |
US8387057B2 (en) | 2010-12-16 | 2013-02-26 | Intel Corporation | Fast and linearizable concurrent priority queue via dynamic aggregation of operations |
US8832674B2 (en) * | 2011-02-24 | 2014-09-09 | Software Ag Usa, Inc. | Off-heap direct-memory data stores, methods of creating and/or managing off-heap direct-memory data stores, and/or systems including off-heap direct-memory data store |
US10095556B2 (en) * | 2012-12-20 | 2018-10-09 | Georgia State University Research Foundation, Inc. | Parallel priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications |
US9275110B2 (en) | 2013-03-01 | 2016-03-01 | Paraccel Llc | Disk-based hash join process |
US9659045B2 (en) | 2013-11-08 | 2017-05-23 | Oracle International Corporation | Generic indexing for efficiently supporting ad-hoc query over hierarchically marked-up data |
JP5950285B2 (ja) * | 2013-12-19 | 2016-07-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム |
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 |
US20170017683A1 (en) | 2015-07-13 | 2017-01-19 | 28msec | Systems And Methods For Storing And Interacting With Data From Heterogeneous Data Sources |
US10467243B2 (en) | 2015-08-26 | 2019-11-05 | Oracle International Corporation | Efficient in-memory DB query processing over any semi-structured data formats |
US10157193B2 (en) | 2016-03-03 | 2018-12-18 | International Business Machines Corporation | Switching between a non-partitioned hash join and a partitioned hash join based on an amount of available memory |
US11775523B2 (en) | 2016-06-24 | 2023-10-03 | Teradata Us, Inc. | Hash table structure for optimizing hash join operations in a relational database system |
US20180211046A1 (en) | 2017-01-26 | 2018-07-26 | Intel Corporation | Analysis and control of code flow and data flow |
US11157478B2 (en) | 2018-12-28 | 2021-10-26 | Oracle International Corporation | Technique of comprehensively support autonomous JSON document object (AJD) cloud service |
US11016778B2 (en) | 2019-03-12 | 2021-05-25 | Oracle International Corporation | Method for vectorizing Heapsort using horizontal aggregation SIMD instructions |
-
2018
- 2018-09-24 US US16/139,226 patent/US11169804B2/en active Active
-
2019
- 2019-09-23 WO PCT/US2019/052343 patent/WO2020068611A1/en active Search and Examination
- 2019-09-23 CN CN201980071575.3A patent/CN112930526B/zh active Active
- 2019-09-23 EP EP19786410.1A patent/EP3857383B1/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102473104A (zh) * | 2009-08-19 | 2012-05-23 | 国际商业机器公司 | 插入用于优化的simd代码的操作-和-指示指令 |
Non-Patent Citations (1)
Title |
---|
SIMD数据置换操作的自动生成和优化;陈向;沈立;李家文;;计算机科学(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
WO2020068611A1 (en) | 2020-04-02 |
CN112930526A (zh) | 2021-06-08 |
US20200097288A1 (en) | 2020-03-26 |
EP3857383B1 (en) | 2022-06-22 |
EP3857383A1 (en) | 2021-08-04 |
US11169804B2 (en) | 2021-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112930526B (zh) | 使用水平聚合SIMD指令对d-堆进行向量化的方法 | |
Häner et al. | 5 petabyte simulation of a 45-qubit quantum circuit | |
US8881159B2 (en) | Constant time worker thread allocation via configuration caching | |
US11513806B2 (en) | Method for vectorizing heapsort using horizontal aggregation SIMD instructions | |
US10671696B2 (en) | Enhancing hybrid quantum-classical algorithms for optimization | |
US11630864B2 (en) | Vectorized queues for shortest-path graph searches | |
US11573793B2 (en) | Lazy push strategies for vectorized D-Heaps | |
US20200117689A1 (en) | Multi-Source Breadth-First Search (Ms-Bfs) Technique And Graph Processing System That Applies It | |
CN114175640B (zh) | 向量化的散列表 | |
US11205030B2 (en) | Avoiding data exchange in gate operation for quantum computing gates on a chip | |
US20240086359A1 (en) | Dynamic allocation of arithmetic logic units for vectorized operations | |
US10637480B1 (en) | Multi-control quantum state inversion gate | |
US20220283879A1 (en) | Resilient adaptive biased locking in multi-thread concurrent program execution | |
US11238043B2 (en) | Automatic quantum searching of object databases | |
US11379232B2 (en) | Method for generic vectorized d-heaps | |
US10958588B2 (en) | Reliability processing of remote direct memory access | |
US11231935B2 (en) | Vectorized sorted-set intersection using conflict-detection SIMD instructions | |
US10671550B1 (en) | Memory offloading a problem using accelerators | |
US10936320B1 (en) | Efficient performance of inner loops on a multi-lane processor | |
Black et al. | Algorithms and data structures for new models of computation | |
US20220066816A1 (en) | Work stealing for concurrent marking garbage collection with finger pointer | |
US11392350B2 (en) | Parallel generation of pseudorandom number sequences using multiple generators with brined initial states | |
US20210073176A1 (en) | Method, device, and computer program product for managing index of storage system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |