现代硬件架构下的Parallel Hash Join算法2

原文链接

论文Cagri Balkesen, Jens Teubner, Gustavo Alonso, M. Tamer Özsu: Main-memory hash joins on multi-core CPUs: Tuning to the underlying hardware. ICDE 2013: 362-373

1. 前言

影响哈希连接算法的因素主要有两点:一是cache命中率,因为CPU在cache中读取数据的速度远高于在内存中读取数据的速度,所以希望在处理数据时可以尽量可以在cache中找到想要的数据,而不希望过多地访问内存;二是多线程带来的同步代价,线程同步需要使用锁机制来保证数据的一致性,而使用锁会带来较大的开销。

当前主流的哈希连接算法主要有两类:一类算法对硬件参数不敏感,即无论在什么硬件环境下,算法的参数都是一样,无需对参数进行调整。这类算法的代表就是在本章另一篇文档Parallel Hash Join #1中提到的不分区的哈希连接算法。这类算法的支持者认为,现代的硬件已经能够很好地隐藏cache丢失带来的影响,而为了减少cache丢失而使用的分区操作会增加线程同步的代价,因此不关心硬件条件的不分区哈希连接算法,比对硬件参数敏感的有分区哈希连接算法更高效。而另一些研究者对此持相反观点,他们认为当前硬件仍然需要仔细考虑cache命中率对算法性能的影响,对硬件参数敏感的有分区哈希连接算法更加高效。

针对以上争议,本文通过实验的方式比较不同条件下各种哈希算法的性能,讨论不关心硬件参数(Hardware-Oblivious)的哈希连接算法,和对硬件参数敏感(Hardware-Conscious)的哈希连接算法的优劣。

2. 哈希连接算法

2.1 Hardware-oblivious hash join

Hardware-oblivious hash join顾名思义就是其不需要根据硬件环境的变化来调整算法参数。在本章另一篇文档Parallel Hash Join #1中提到的no partitioning hash join就属于这一类算法,不分区的哈希连接算法分为两个阶段:build和probe。在build阶段,所有线程同步构建一张哈希表。在probe阶段,所有线程共同工作,在哈希表中找到与S表中元组相匹配的桶。不分区的哈希连接算法如图2.1所示。

           

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值