使用SIMD指令实现数据库运算(论文阅读笔记)

本文探讨了SIMD技术如何提升数据库操作的性能,包括扫描、聚合、索引操作和连接处理。SIMD指令允许在单一指令中并行处理多个数据元素,这在现代CPU中被广泛应用以加速多媒体应用程序。本文深入研究了数据库上下文中如何利用SIMD技术,并通过实验证明了其在加速数据库内部循环中的有效性。

摘要

现代cpu的指令允许在多个数据元素上并行执行基本操作。这些指令称为SIMD指令,因为它们将一条指令应用于多个数据元素。SIMD技术最初被内置到商业处理器中,以加速多媒体应用程序的性能。SIMD指令为数据库引擎的设计和实现提供了新的机会。我们研究了数据库上下文中的各种操作,并展示了如何使用SIMD指令加速操作的内部循环。使用SIMD指令有两个直接的性能好处:它允许一定程度的并行,这样多个操作就可以被一次执行。它通常还可以消除条件分支指令,来减少分支预测失败。

本文中我们考虑了最重要的数据库操作,包括顺序scan、aggregation、index索引操作和join。本文提出了通过SIMD指令实现这些操作的技术。研究表明,重新设计传统的查询处理算法可以更好地利用SIMD技术。我们的研究表明,使用并行度为4的SIMD,新算法的CPU时间比传统算法少10%到4倍以上。由于消除了分支错误预测的影响,得到了超线性的加速。

一、简介

在过去的几十年里,微处理器的性能经历了巨大的改进。现代cpu中的多执行管道推测执行提供了越来越多的阶段间和阶段内并行执行机会。另一个趋势是单指令多数据(SIMD-single instruction multiple data)技术提供的指令内并行执行的可用性的增加。SIMD指令通过在每一个指令中消费更多的数据减少了计算密集的循环。

SIMD指令被设计用来加速应用程序的性能,如运动视频,实时物理和图形。这样的应用程序在大型数字数组上执行重复的操作。数据库引擎也具有将重复操作应用于长序列记录的明显特征。数据库系统的CPU和内存性能已经成为某些数据库应用程序的性能瓶颈[4,11,28],人们对更充分地利用可用的架构重新产生了兴趣。例如,引用最近有很多关于数据库系统中CPU缓存行为的研究 [3, 6, 11, 18, 21, 22]。

本文认为,SIMD技术为数据库引擎的设计和实现提供了新的机遇。据我们所知,目前的数据库系统很少或没有使用SIMD特性。我们研究了数据库上下文中的各种操作,并展示了如何使用SIMD指令加速操作的内部循环。

我们实现了各种内部循环算法,并在奔腾4机器上评估了它们的性能。奔腾4有一个SIMD指令集,支持使用多达128位寄存器的SIMD操作。其他体系结构也有类似的SIMD指令集,可以支持并行处理多个数据元素,这里介绍的技术也适用于这些体系结构。我们之所以关注奔腾,是因为它的SIMD指令是最强大的主流商品处理器之一,包括128位SIMD寄存器和浮点SIMD操作。此外,这些SIMD指令将支持Intel的64位IA64平台,包括Itanium处理器。

SIMD指令显而易见的收益是并行化。如果我们能一次处理S个元素,我们可能希望接近速度S。使用SIMD指令的一个不太明显的好处是,在很多情况下,我们可以通过基于SIMD操作的结果实现算法来避免条件分支指令。条件分支指令在现代的流水线体系结构中是有问题的,因为如果它们被错误预测,指令管道必须被刷新,并且需要做各种其他的簿记工作来确保一致的操作。分支错误预测的开销可能非常大。通过避免这种错误预测,我们有时会观察到速度超过S。

我们的实现假设底层数据按列存储为固定长度数值的连续数组。一些系统,如Sybase IQ[2]、Compaq Infocharger[13]和Monet[5]使用这种列式方法。最近,PAX布局方案建议每个磁盘页面以类似[3]的方式按列进行组织。只要每个页面包含足够多的记录,对数组集合(每页一个数组)进行操作的CPU和内存性能应该与单个这样的数组上的性能相当。因此,我们的研究既适用于内存数据库,也适用于基于磁盘的数据库

本文中我们考虑了最重要的数据库操作,包括顺序scan、aggregation、index operations和join。我们提出了通过SIMD指令实现这些操作的技术。在某些场景下,SIMD的实现是简单的。在其他情况下,SIMD的实现是新颖的。我们验证了这些操作上的性能的显著提升是可实现的,只需为每个操作重写内部循环即可。这种重写可以用C而不是汇编语言完成,使用Intel的icc编译器提供的intrinsic

本文剩余部分的组织形式如下。我们在第2节中对相关工作进行了调查。在第3节中,我们将演示如何在扫描和聚合等常见数据处理操作中使用SIMD技术。在第4节中,我们将展示如何使用这些SIMD技术来提高数据库系统中常见索引结构的性能。在第5节中,我们学习join。第6节将简要讨论其他SIMD技术。我们在第7节结束。

二、SIMD技术概述

SIMD技术允许一个微指令同时对多个数据项进行操作。这对于处理大量数值数组(多媒体应用程序的典型特征)的应用程序尤其有效。

SIMD技术在不同的架构上有不同的风格,包括在Intel机器上的MMX,SSE和SSE2,SUN UltraSparc机器上的VIS和3DNow,Enhanced 3DNow!和AMD机器上的3DNow!Profes-sional。使用SIMD架构的其他供应商包括惠普、MIPS、DEC (Com- paq)、Cyrix和摩托罗拉。SIMD技术在不同架构下的详细比较,请参见[25]。

一些SIMD技术是有限的。例如,Sun的VIS不支持SIMD寄存器中的浮点值,并提供64位而不是128位的寄存器[27]。我们已经使用Sun的VIS进行了实验,但是发现如果我们需要至少32位的数据值,那么使用64位SIMD寄存器所启用的双向SIMD改进并不显著。

我们使用英特尔SSE技术芯片上可用的打包单精度浮点指令来说明SIMD指令的使用,如图1所示。其他架构也有类似的说明。

对于这个特定的指令,两个操作数都使用128位寄存器。每个源操作数包含4个32位单精度浮点值,目的操作数包含对每个操作数中相应值(X0和Y0, X1和Y1, X2和Y2, X3和Y3)并行执行的操作(OP)的结果。SIMD操作包括各种比较、算术、shuffle、转换和逻辑操作。

 

术语:一个基础的数字元素(integer或是floating point)被称为一个word。我们用S来代表可用的并行度,例如,一个SIMD寄存器中的word数量。在上图1中,S=4。一

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值