现代硬件架构下的Parallel hash join算法

本文探讨了在多核CPU背景下,内存中的并行哈希连接算法设计与性能评估。文章介绍了存储体系、线程同步对算法性能的影响,并详细阐述了非阻塞式与阻塞式分区策略,包括共享分区与独立分区的优缺点。实验结果显示,现代硬件架构下不分区的哈希连接算法由于避免了同步开销,往往表现优于有分区的算法。
摘要由CSDN通过智能技术生成

原文链接

读论文 Spyros Blanas, Yinan Li, Jignesh M. Patel: Design and evaluation of main memory hash join algorithms for multi-core CPUs. SIGMOD Conference 2011: 37-48

1. 背景

如今硬件发展非常迅速,摩尔定律指出”集成电路上可容纳的晶体管数目,约每隔两年就会增加一倍“。虽然目前硬件性能的增长速度稍稍放缓,但是仍具有较大的发展潜力。随着硬件的不断发展,内存越来越便宜,将全部数据存放在内存中进行处理变得可能。同时,处理器的并行能力也日益增长,CPU的核数越来越多。基于此背景,研究新型处理器架构下的并行哈希连接算法变得非常有意义。

2. 介绍

2.1 存储体系

计算机的存储体系呈现一种金字塔型,金字塔底层的是容量大、价格便宜但是速度慢的存储设备;顶层是速度快,但是容量小、价格昂贵的存储设备。中央处理器(CPU)、缓存(Cache)和内存(Memory)分别位于金字塔的前3层,处理数据的速度自顶向下依次递减,容量依次递增,如图2.1所示。

                   图2.1 存储体系的金字塔结构

当CPU请求数据时,会在Cache中先查看是否存在请求的数据。若存在请求数据,则将数据返回给CPU,称该过程为Cache命中;若Cache中不存在请求的数据,则需要从内存中查找,称该过程为Cache丢失。由于访问Cache的速度远高于访问内存的速度,因此我们希望Cache命中数越多越好。

2.2 线程同步

多核处理器的优势在于,它能使用多个线程同时对数据进行处理,加快程序执行的速度。然而,多个线程可能对同一个内存地址进行读写操作,这可能会导致数据不一致等问题。为了解决这些问题,需要引入线程同步机制,保证每块内存区域在一个时刻只能被一个线程修改。线程同步会带来很多额外的代价,例如线程通信、锁的竞争等。

2.3 影响性能的因素

对于内存中的并行哈希连接算法来说,影响其性能的因素主要有两点:一是在连接操作时,需要从内存中读取相应数据,由于访问Cache的速度远高于访问内存的速度,因此希望在CPU读取数据时,Cache丢失越少越好;二是利用多线程并行加速算法,必然要考虑同步的代价,我们希望同步量越少越好。综上,设计并行哈希连接算法主要综合考虑Cache丢失和同步这两种代价。

3. 哈希连接

并行的哈希连接算法主要有分区(Partition)、构建哈希表(Build)以及探测(Probe)三个操作,其中分区操作不是所有的哈希连接算法锁必须的。事实上,关于在现代硬件架构上分区操作是否有益于哈希连接具有较大的争论。分区操作的目的是减少Cache丢失,一种观点认为,现代的硬件架构很好地屏蔽了cache丢失带来的影响,而分区操作会引入很多不必要的同步代价,并且分区数的多少对算法性能影响较大,这使得分区的哈希连接算法鲁棒性不够强,因此哈希连接算法要舍弃分区这一操作;另一种观点则持有相反的态度,支持该观点的学者认为,Cache丢失仍然是影响算法性能的重要因素,因此在设计算法时仍然需要分区来减少cache丢失。关于这两种观点的具体内容,我们将在接下来的章节详细叙述。

3.1 Partition

分区(Partition)操作是将数据利用哈希函数划分到不同区域上的操作,这一操作的目的是减少算法在Probe阶段的cache丢失

分区操作可以分为非阻塞式分区(Non-blocking Partitioning)和阻塞式分区(Blocking Partitioning)两种。Non-blocking Partitioning只扫描一遍关系表R,对于每个元组,计算好该元组所在的分区后直接将数据写入该分区。而Blocking Partitioning则需要多次扫描关系表R,计算好每个分区的大小,以及所有元组所在的分区后,统一将数据写入对应位置。

3.1.1 非阻塞式分区

非阻塞式分区(Non-blocking Partitioning)的好处是其只需要扫描一次关系表R,但是由于将R中元组写入分区的过程是并发的,在将元组写入对应分区时各线程需要同步,这会带来额外的代价。
非阻塞式分区方法有两种实现方法,一种是共享分区法(Shared Partition),另一种是独立分区法(Private Partition)。

共享分区

共享分区(Shared Partition)算法首先会创建p个分区,所有线程对所有数据同步进行分区操作(此处分区p的数量和Cache大小有关,目的是使针对于每个分区建立的哈希表能够存入CPU的Cache中以减小Build阶段Ca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值