赞
踩
这是一篇比较短的文章(文章链接),主要讲述的是如何使用FPGA来加速数据库系统中等值连接(equi-join)中的一种算法——哈希连接。
数据库在完成连接操作时一般会有三种算法作为候选:hash、merge-sort、nested loop,有关这几种算法之间的工作方式可以自行检索。本文做的工作就是面向hash连接算法提出了一种基于FPGA的硬件加速器,来提升数据库连接操作的性能。
这部分首先介绍了连接操作的重要性,以及连接操作的性质:连接操作是一种资源密集型任务,也就是说开展连接操作需要耗费大量的CPU计算资源,所以现在越来越倾向于将连接操作使用硬件加速来完成。
随后这部分内容简要回顾了三种连接算法的工作过程,并指出影响哈希连接性能的主要原因就是存在hash碰撞,从而造成了不良的数据分布。
1.设计了一种通用的FPGA加速哈希连接体系结构,用于解决哈希冲突,这种体系结构不需要同步和重新处理数据。
2.使用了一种基于布谷鸟哈希的方式来提升哈希表的内存利用率(布谷鸟哈希的简介),并动用了一小部分SRAM来挖掘算法中的并行性以提升吞吐率。
3.打破了原有存在的必须在哈希函数的鲁棒性和哈希连接性能之间权衡的窘境。
这部分回顾了相关工作,并简单分析了它们的不足,以及这篇工作的出发点。
这部分简单对用在本文中的布谷鸟哈希做了简单介绍,并对提出的专用于连接的加速器架构进行了概览。本部分约定如下假设:
这部分首先对布谷鸟哈希做了一个简单的介绍,并举了一个简单的例子。
这里不再对原文进行翻译,而是援引来自Wikipedia上的介绍:
Cuckoo Hashing是计算机编程中的一个方案,用于解决表中散列函数值的哈希碰撞,具有最坏情况的常量查找时间。这个名字源于一些杜鹃的行为,杜鹃小鸟在孵化时将另一个鸡蛋推到巢中;类似地,将新密钥插入Cuckoo散列表中可以将较旧的密钥推向表格中的不同位置。
布谷鸟哈希其实就是同时使用两个hash函数来解决冲突,它的常见操作有如下几个:
最后给出论文中的举例,作为对布谷鸟哈希插入过程的一个理解。
这一部分用来介绍本文提出的加速器架构。加速器的整体概览如下所示:
构建阶段加速器控制器主要完成的工作如下:
我们要做的事情就是将第一个表(小表)中的每一个元组插入到
这一部分就是将第二个表与第一个表进行匹配和连接的过程,控制器会将第二个表路由到正确的bucket,并行进行8个槽的搜索,每个槽内的操作就是将冲突链表中的每一项都与第二个表的元组进行逐一比较,一旦发现匹配,就立即导出连接结果。
实验使用的平台是Xilinx Zynq UltraScale ZCU102,1个哈希表2个哈希函数,每个bucket有4个槽,12bit的哈希函数,16bit的地址指针,实验的结果如下所示:
结论可以总结为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。