openmp实现Nopartition_hashjoin与Radix_Partition_hashjoin

本文探讨了如何使用OpenMP对Nopartition_hashjoin和Radix_Partition_hashjoin进行并行优化。首先介绍了OpenMP的基本思想,强调了从串行逻辑出发并灵活运用for、Master和section等指令的重要性。在Nopartition_hashjoin中,通过在桶链法的hash表上加锁来实现互斥访问,同时利用归约变量进行探测。而在Radix_Partition_hashjoin中,通过基数划分和两步聚簇划分,结合工作队列和锁机制,实现了高效的并行Join操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章分为两部分:

1. OpenMP的使用心得;

2. 两个算法;

个人理解,OpenMP就是面向对已有的串行逻辑的代码进行并行优化,完成代码应首先从串行可行性出发,然后进行并行优化;由于个人是在Pthread代码的基础上进行OpenMP的改写,首先直接照搬Pthread的逻辑,发现这样的效果并不是很好。

应该灵活使用 for /Master/section 等它已经提供的编译指导语句,进行并行优化。


Nopartition_hashjoin: 创建hash表,探测

创建hash表: hash表采用桶链法,在多线程创建hash表的过程中,在每个桶上加锁,实现互斥访问

探测: 对hash表进行探测的过程,顺序遍历另一个表,按得到的hash值进行探测,这里加个for编译指导语句,设一个match的+归约变量


Radix_Partition_hashjoin:  1.基数划分 2.按划分好的块进行Join

基数划分:实现过程中,基数划分分成两步,对于总共要进行Hash的位,分成两部分

1.按照一部分进行聚簇划分 

2.对于聚好的簇创建工作任务,即,由于在连接列上已经按照Hash进行聚簇划分了,各个工作任务之间是互相独立的

3.进行2-pass的划分的原因是:贴合硬件的TLB和cache设计

4.采用工作队列的方式进行工作分配,体现在第二次划分(part_queue)和最后的join(join_queue)

5.在每个队列中设置锁,实现队列的互斥访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值