【技术实现步骤摘要】
【国外来华专利技术】使用水平聚合SIMD指令对d
‑
堆进行向量化的方法
[0001]本公开涉及维护数据结构,并且更具体地,涉及对数据结构中的数据进行聚合、存储和移除。
技术介绍
[0002]堆(heap)是包含节点的优先级队列数据结构,这些节点具有两个保存单个值的子节点,通常经由树结构反映。这种数据结构的关键特征是在对数时间(logarithmic time)内添加/移除单个元素,以及在常数时间(constant time)内找到其索引元素中的最小/最大元素的能力。最常见的堆类型是始终返回堆中最小的索引元素的最小堆(min
‑
heap)和始终返回堆中最大的索引元素的最大堆(max
‑
heap)。
[0003]许多堆是如此之大,以至于使用堆的算法(例如,图算法(graph algorithm))的运行时间的很大一部分都花在堆操作上。因此,需要高效的堆实现方式。
[0004]d
‑
堆(d
‑
heap)是二叉堆(binary heap)的泛化(generalization),d
‑
堆具有与由d的值所定义的一样多的子节点,这些子节点包含由d的值定义的多个值。d
‑
堆使用树对其元素进行索引。d
‑
堆是用于快速插入操作的最佳数据结构,因为附加的子节点减少了基础树的深度(depth)并且使得当新值被插入到堆中时需要较少的比较来恢复堆属性。
[0005]但是,d
‑
堆中 ...
【技术保护点】
【技术特征摘要】
【国外来华专利技术】1.一种方法,包括:对存储在存储器中的堆执行pop操作;其中,所述堆包括多个节点;其中,所述多个节点中的每个节点包括D个槽,D为大于1的整数,其中所述D个槽中的每个槽存储D个键值中的键值,其中所述每个节点的D个槽被连续地存储在所述存储器的存储器地址空间内;其中,所述多个节点包括根节点和多个父节点,所述多个节点中的每个父节点具有D个子节点,所述D个子节点中的每个子节点是所述每个父节点中的相应父槽的孩子并且存储比存储在所述相应父槽中的键值更大的键值;其中,在堆上执行pop操作包括:在所述根节点上执行SIMD操作,以生成第一最小键值以及所述根节点中保持所述第一最小键值的第一槽的第一索引;将堆中的值复制到所述第一槽中。2.如权利要求1所述的方法,其中,将堆中的值复制到所述第一槽中包括将堆中的最末端的值复制到所述第一槽中;其中,所述第一槽是第一子槽的父槽;其中,所述方法还包括:在第一子节点上执行SIMD操作,以生成第二最小键值以及所述第一子节点中包含所述第二最小键值的第二槽的第二索引;确定所述第二最小键值小于存储在所述第一槽中的所述第一最小键值;以及响应于确定所述第二最小键值小于所述第一最小键值,在所述第一槽和所述第二槽之间交换所述第一最小键值和所述第二最小键值。3.如权利要求2所述的方法,还包括:在所述第一子节点的第二子节点上执行SIMD操作,以生成第三最小键值以及所述第二子节点的所述第二子节点中包含所述第三最小键值的第三槽的第三索引;确定所述第三最小键值是否小于存储在所述第二槽中的所述第二最小键值;以及当所述第三最小键值小于存储在所述第二槽中的所述第二最小键值时,在所述第二槽和所述第三槽之间交换所述第二最小键值和所述第三最小键值。4.如权利要求1所述的方法,还包括:通过至少执行以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:在所述根节点上执行SIMD操作以生成特定最小键值;以及返回所述特定最小键值,作为存储在所述堆中的所述最小键值。5.如权利要求1所述的方法,还包括:通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:在所述根节点上执行SIMD操作以生成特定最小键值;生成所述特定最小键值的补码;以及返回所述补码,作为存储在所述堆中的所述最大值。6.如权利要求1所述的方法,还包括:
通过至少以下各项操作来执行返回存储在所述堆中的最小键值的特定操作:在所述根节点上执行SIMD操作以生成特定最小键值;通过改变所述特定最小键值的符号来生成特定值;以及返回所述特定值,作为存储在所述堆中的所述最小键值。7.如权利要求1所述的方法,还包括:其中,所述堆被存储在第一阵列中,其中,所述第一阵列包括多个堆级别,其中所述多个堆级别中的第一堆级别存储所述根节点,其中所述多个堆级别中的在所述第一堆级别之后的每个特定堆级别利用所述存储器的地址空间来连续地存储所述多个堆级别中在所述每个特定堆级别之前的堆级别的所有子节点。8.如权利要求7所述的方法,其中所述第一阵列的每个元素对应于所述多个节点中的一个相应槽;有效载荷阵列的每个有效载荷元素对应于所述第一阵列的一个元素并且对应于所述多个节点中与所述第一阵列的所述一个元素对应的一个相应槽;并且其中,所述方法还包括:响应于确定所述第二最小键值小于所述第一最小键值,在所述有效载荷阵列元素中分别与所述第一槽和所述第二槽对应的一对元素之间交换值。9.如权利要求6所述的方法,还包括:为所述第一阵列分配附加的存储器以向所述堆添加键值,以及将所述键值存储在所述附加存储器中。10.如权利要求1所述的方法,其中:一组指针中的每个指针指向存储所述多个节点中的相应节点的存储器地址;并且其中,在对所述根节点执行SIMD操作之前,所述一组指针中的相应指针指向所述根节点,以将所述根节点加载到由所述根节点上的所述SIMD操作使用的寄存器中。11.如权利要求1所述的方法,还包括:通过至少以下各项操作来执行返回存储在所述堆中的最大键值的特定操作:在所述根节点上执行SIMD操作以生成第一最大键值以及根节点中保持所述第一最大键值的第一槽的第一索引;以及返回所述第一最大键值,作为存储在所述堆中的所述最大键值。12.如权利要求1所述的方法,还包括一个或多个非暂态存储介质,所述一个或多个非暂态存储介质存储指令序列,所述指令序列在由一个或多个处理器执行时使得:对存储在存储器中的堆执行pop操作;其中,所述堆包括多个节点;其中,所述多个节点中的每个节点包括D个槽,D为大于1的整数,其中所述D个槽中的每个槽存储D个键值中的键值,其中所述每个节点的D个槽被连续地存储在所述存储器的存储器地址空间内;其中,所述多个节点包括根节点和多个父节点,所述多个节点中的每...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。