哈希游戏- 哈希游戏平台- 哈希游戏官方网站
本发明涉及计算机数据库及基础算法移植的技术领域,具体涉及一种使用SIMD加速数据库哈希操作并移植到ARM平台的方法。本发明的方法包括,根据基础的哈希查询算法,改造实现基于SIMD技术的哈希查询方法,根据基础的哈希建表算法,改造实现基于SIMD技术的哈希建表方法,自定义SIMD转换库,实现从SSE指令集和AVX指令集,向Neon指令集的转换模块ATN,并提供快捷的转换过程。其流程如图1所示。该方法通过充分利用CPU计算能力,提高了哈希查询和哈希建表操作的执行速度。该方法通过自定义转换库,减少了开发人员的操作复杂度和编码量。
[0002]随着互联网发展水平的不断进步,数据规模越发庞大,各类企业开始借助大数据和人工智能等新兴技术不断提升治理和决策的现代化水平。传统的关系型数据库,大多采用行式存储数据,同时为了兼顾ACID,其查询速度并没有太大优势,更适合实时更新和删除频繁的场景。但数据的快速增长,和对于数据分析实时性的高要求,导致传统关系型数据库不再满足其使用要求。当前,基于联机分析处理(OLAP)技术的数据库,由于其天然采用列式进行存储,更适合在读多写少的场景使用。
[0004]数据库的查询过程大致可以分为以下几步,SQL连接器、SQL解析器、查询优化器、存储引擎、返回查询结果。目前业界出现的优化方案,大多主要针对查询优化器和执行引擎两个方面进行优化。查询优化器的优化,主要是为查询制定更合理的查询路径。而存储引擎方面的优化,则可以分为两个部分,一个方向是Compilation方面的优化,即以数据为中心的汇编生成,另一个方向是基于SIMD技术的向量化方案。总体来说,两者各有优劣,前者会有更少的物化生成,所以更适合计算密集型场景,后者在访问大型哈希表进行聚合查询时表现更优,所以更适合在访存密集型场景。
[0032] (1)自定义实现函数。ATN模块的主要实现方式,是在ARM环境中将AVX和SSE指令集函数视为ARM中的自定义内联函数,然后使用Neon的指令集函数进行对应函数的实现。具体举例的说,__m128i_mm_and_si 128( )函数是X86的AVX指令集函数,在ARM中不可用。本发明中,将此函数在ARM中视为一个自定义内联函数,内部使用Neon指令集的vandq_s32( )函数进行构造实现。最终使得__m128i_mm_and_si128( )函数在X86和ARM上实现的效果完全相同。
[0065] 说明,输入变量a和b都是128位,输出是一个union结构的变量。本质上讲__m128i_mm_and_si 128( )函数是AVX指令集的函数,无法在ARM上使用,其目的是输入两个128位的变量,返回128位对应位置的二进制与的结果。所以,本实施例使用ARM中的Neon指令集函数vandq_s32( )进行相应实现。使得__m128i_mm_and_si128( )函数的效果在X86和ARM中的实现效果相同。