CN116028011A - 一种用于gpu数据库任意精度十进制数据的计算方法 - Google Patents
一种用于gpu数据库任意精度十进制数据的计算方法 Download PDFInfo
- Publication number
- CN116028011A CN116028011A CN202310322749.7A CN202310322749A CN116028011A CN 116028011 A CN116028011 A CN 116028011A CN 202310322749 A CN202310322749 A CN 202310322749A CN 116028011 A CN116028011 A CN 116028011A
- Authority
- CN
- China
- Prior art keywords
- decimal
- gpu
- precision
- database
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于数据库计算领域,公开了一种用于GPU数据库任意精度十进制数据的计算方法,包括以下内容:GPU数据库中任意精度十进制数据的表示和存储;GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,既可以选择多线程协同的计算模式,也可以选择单线程计算模式;GPU数据库中任意精度十进制数据运算的代码生成模板;GPU数据库中任意精度十进制数据运算中的对齐优化;GPU数据库中任意精度十进制数据运算中的常量优化;GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。其优点在于,解决了十进制表达式计算过程中对齐操作和常量计算对表达式计算性能的影响,提高了计算并行性,提升了计算性能。
Description
技术领域
本发明属于数据库计算领域,特别涉及一种用于GPU数据库任意精度十进制数据的计算方法。
背景技术
在科学数据库、金融数据处理以及几何数据处理等领域中,需要具备任意精度运算能力的数据库越来越成为它们的需求。同时,GPU数据库作为当前数据库领域的主要分支,其通过依靠GPU强大的计算能力和并行性能够快速处理数据库中的查询请求,提升执行效率。在数据库中,即时编译技术通过以数据为中心的代码生成具有更少指令和更好缓存驻留性的代码来优化查询。
当前数据库中的十进制数据运算或为高性能的低精度运算或为低性能的任意精度计算。为了解决GPU数据库中的任意精度的高性能计算问题,本发明设计一系列的优化策略并结合即时编译技术提升GPU数据库中任意精度的十进制数据类型的计算性能。
发明内容
为了解决GPU数据库具有任意精度的高性能计算问题,本发明提出了一种用于GPU数据库任意精度十进制数据的计算方法。
为达到上述目的,本发明的技术方案如下:
一种用于GPU数据库任意精度十进制数据的计算方法,包括以下内容:
1)GPU数据库中任意精度十进制数据的表示和存储;
(2)GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,既可以选择多线程协同的计算模式,也可以选择单线程计算模式;
(3)GPU数据库中任意精度十进制数据运算的代码生成模板;
(4)GPU数据库中任意精度十进制数据运算中的对齐优化;
(5)GPU数据库中任意精度十进制数据运算中的常量优化;
(6)GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。
优选的,实现GPU数据库中任意精度十进制数据的表示和存储方法如下:
(1.1)GPU数据库中任意精度十进制数据的表示包括属性部分和数值部分,定义形式为,属性部分包括符号信息,精度信息和运算中的报告信息;其中符号信息表示数字为正数还是负数,精度信息包括信息和信息,分别标记为和,表示数字去除小数点的十进制位数,表示数字小数点后的十进制位数;运算中的报告信息存储常见的除0错误;
数值部分为存储数字去除小数点和正负号的十进制数;数字的十进制表示为:
,
其中表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将的数值部分存储在了一个以32-bits为单位的数组中,符号信息和精度信息部分单独存放在其他字节中;对于精度信息中的Decimal,计算其所需最短的数组长度,数组长度的计算方式为:
,
(1.3)在非计算过程中, Decimal以字节对齐的方式进行存储,数值部分占用字节的大小的计算方式为:
,
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息,如果个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
优选的,单线程计算模式下,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法、模运算的方法如下:
(2.1)对于和类型间的加法或减法,首先根据精度信息中大小判断是否需要对齐,如果和不相等,那么需要进行对齐操作,对齐的计算方式为:
,
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作,如果数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号;
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘,遍历第一个因数的数值部分的数组和另一个因数的数值部分的数组,将数组的第个元素和数组的第个元素相乘得到结果,其中的低32-bits被累加到积的数值部分的数组的第个元素中,的高32-bits被累加到数组的第个元素中,积的符号由两个因数的符号进行异或操作得到;
(2.3)对于和 类型间的除法,首先根据预先设置的精度需求,将被除数左移位;之后利用指令寻找两个数字的数值部分最高比特位可以确定商的范围;最后利用二分查找的方式找到商的精确值;
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求;
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理,对于两个操作数 和,在满足来说,的精度计算方法为:
,
其中,除法中预设的精度需求默认设置为。
优选的,利用多线程协同的计算模式,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度为:
,
其中是线程组的大小,最后的线程得到的字长度小于等于;此外对于符号位则需要每个线程都获取到个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数;
(3.2)通过使用CUDA Warp-Level 级原语完成线程间的进/借位以及共享值和交换值操作;
(3.3)计算结束后每个线程保留结果 Decimal 数字的部分数值信息和全部属性信息。
优选的,实现GPU数据库中任意精度十进制数据运算中的对齐优化,方法如下:
(4.1)将二叉树中减法节点转换为加法节点;层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志;若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动;如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志;若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志;若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志;
(4.2)将修改后的表达式二叉树转变为表达式多叉树;若当前节点为加法节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连;
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的从小到大的顺序进行排列。
优选的,实现GPU数据库中任意精度十进制数据运算中的常量优化,方法如下:
(5.1)利用(4.2)获取到表达式多叉树后,遍历表达式多叉树,如果当前节点的孩子节点中存在多个常量,可提前对多个常量进行计算获取最终常量;
(5.2)最终常量的结果若为特殊值,根据操作符节点的类型进行剪枝优化;若为当前为加法节点且最终常量为非特殊值,则按照当前节点的孩子节点中与常量的精度相同或稍大的精度进行构造,并放在相应位置。
优选的,实现GPU数据库中任意精度十进制数据运算的代码生成模板的方法如下:
(6.1)计算表达式的精度信息,进而确定计算中每个线程需要的数值部分的长度;利用表达式二叉树和节点所涉及的列信息,结合(2.5)中的公式自下而上的计算从而获得结果的精度信息;根据结果的精度信息利用(1.2)求出计算过程中所需数值部分最小的数组的长度;
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为的Decimal类型数据表示的代码;根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码;
(6.3)生成表达式计算的代码;前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码,表达式的计算模式根据***的前期设置选择多线程协同/非多线程协同的计算模式;
(6.4)根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度,生成数值部分数组长度为的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码。同样根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
优选的,实现GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每个线程完成 个数字的聚合,之后依次完成线程内的聚合、块内的聚合以及块间的聚合;
(7.2)对于个大小为个数组长度的Decimal类型数字,每个线程块处理的数字的数量为,每个线程处理的数字的数量为,在线程块中数字首先被快速读取到共享内存中,然后进行聚合,根据不同型号的GPU信息,一个线程块最大的线程数量为,共享内存的大小为,其中每个线程启动的组数计算为:
,
由于共享内存的限制每个线程组处理的数量计算为:
,
每个块处理的数量计算为:
,
所以需要启动的线程块数为。
与现有技术相比,本申请优点如下:
(1)本发明构建了一种可以用于GPU数据库任意精度十进制数据的计算框架;
(2)本发明通过结合即时编译技术利用十进制数据类型的特点和GPU运算特点,解决了十进制表达式计算过程中对齐操作和常量计算对表达式计算性能的影响,提高了计算并行性,提升了计算性能;
(3)本发明通过GPU数据传输和高并行性的特点,实现了在完成任意精度计算的同时兼顾了高性能的需求。
附图说明
图1本申请模块图;
图2为本发明任意精度十进制数据计算表达式优化阶段的流程图;
图3为本发明任意精度十进制数据计算中代码生成阶段的流程图;
图4为本申请效果图。
具体实施方式
下面将结合本发明实施中的附图,对本发明实施中的技术方案进行清楚、完整地描述。
图1所述,一种用于GPU数据库任意精度十进制数据的计算方法,包括以下内容 :
(1)GPU数据库中任意精度十进制数据的表示和存储;
(2)GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算;既可以选择多线程协同计算模式,也可以选择单线程计算模式;
(3)GPU数据库中利用多线程协同的方法完成任意精度十进制数据间的加法、减法、乘法、除法和模运算;
(4)GPU数据库中任意精度十进制数据运算中的对齐优化;
(5)GPU数据库中任意精度十进制数据运算中的常量优化;
(6)GPU数据库中任意精度十进制数据运算的代码生成模板;
(7)GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。
GPU全称Graphics Processing Unit,为图形处理器。
为描述简单,后续描述中均采用数据库中的Decimal(十进制的)数据类型作为该方法的一种实现形式进行描述,实现内容(1)具体方法如下:
(1.1)GPU数据库中任意精度十进制数据的表示分为属性部分和数值部分,定义形式为;其属性部分包括符号信息、精度信息和运算中的报告信息。其数值部分存储数字去除小数点和正负号后的十进制数。属性部分中,符号信息表示数字为正数还是负数,精度信息中表示数字去除小数点的十进制位数,也被记作信息,表示数字小数点后的十进制位数,也被记作信息,(如十进制数据1.2 ,其等于2,等于1)运算中的报告信息存储常见的除0错误。数字的十进制表示为:
,
其中表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将的数值部分存储在了一个以 32-bits 为单位的数组中,符号和精度信息部分单独存放在其他字节中;对于精度信息中的Decimal,计算其所需最短的数组长度,数组长度的计算方式为:
,
(1.3)在非计算过程中,为了减少内存和磁盘上Decimal占用的空间,数值部分占用字节的大小的计算方式为:
,
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息,如果个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
单线程计算模式下,实现内容(2)具体方法如下:
(2.1)对于 和 类型间的加法或减法,首先根据精度信息中大小,判断是否需要对齐,如果和不相等那么需要进行对齐操作,对齐的计算方式为:
,
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作。在数值部分的加/减法中,利用、(或、)处理进/借位。如果需要数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号。
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘。遍历第一个因数的数值部分的数组和另一个因数的数值部分的数组,将数组的第个元素和数组的第个元素相乘得到结果,其中的低32-bits被累加到积的数值部分的数组的第个元素中,的高32-bits被累加到数组的第个元素中。在数值部分的乘法计算中通过使用和处理进位。积的符号由两个因数的符号进行异或操作得到。
(2.3)对于 和 类型间的除法,首先根据预先设置的精度需求,将被除数左移位(若想结果保留位小数则需要左移位,默认设置为)。之后利用指令寻找两个数字的数值部分最高比特位可以确定商的范围。最后利用二分查找的方式找到商的精确值。
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求。
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理。 对于两个操作数 和 在满足来说,的精度计算方法为:
,
其中,除法中预设的精度需求默认设置为。
单线程计算模式下,实现内容(2)具体方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度为:
,
其中是在非计算过程中Decimal数字在内存或磁盘上以字节为单位进行存储的大小,是线程组的大小,最后的线程得到的字长度小于等于;此外对于符号位则需要每个线程都获取到个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数。
(3.2)通过使用CUDA Warp-Level 级原语完成线程间的进/借位以及共享值和交换值等操作。
(3.3)计算结束后每个线程保留结果 Decimal 数字的部分数值信息和全部属性信息。
实现内容(4)具体方法如下:
(4.1)将二叉树中减法节点转换为加法节点。层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志。若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动。如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志。若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志。若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志。
(4.2)将修改后的表达式二叉树转变为表达式多叉树。若当前节点为加法节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连。
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的从小到大的顺序进行排列。
(4.4)将表达式多叉树转变为表达式二叉树。对于表达式多叉树的孩子节点,相邻的孩子节点重新构成一棵二叉树,最终将表达式多叉树转换为表达式二叉树。
图2所示,实现内容(5)具体方法如下:
(5.1)利用(4.2)获取到表达式多叉树后,遍历表达式多叉树,如果当前节点的孩子节点中存在多个常量,可提前对多个常量进行计算获取最终常量。
(5.2)最终常量的结果若为特殊值,如0,1等,根据操作符节点的类型进行剪枝优化。若为当前为加法节点且最终常量为非特殊值,则按照当前节点的孩子节点中与常量的精度相同或稍大的精度进行构造,并放在相应位置。
图2所示,表达式二叉树转表达式多叉树,包括(4.1)和(4.2),表达式优化包括(4.3)、(5.1)、(5.2),表达式多叉树转表达式二叉树包括(4.4)。
图3所示,实现内容(6)具体方法如下:
存储格式到表示格式的代码生成(6.1)-(6.2),内容如下,
(6.1)计算表达式的精度信息,进进而确定计算中每个线程需要的数值部分的长度。利用表达式二叉树和节点所涉及的列信息,结合(2.5)中的公式自下而上的计算从而获得结果的精度信息。根据结果的精度信息利用(1.2)求出计算过程中所需数值部分最小的数组的长度。
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为的Decimal类型数据表示的代码;根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
(6.3)表达式代码生成:生成表达式计算的代码。前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码。表达式的计算模式根据***的前期设置选择多线程协同/非多线程协同的计算模式。
(6.4)表示格式到存储格式的代码生成:根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度,生成数值部分数组长度为的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码。同样根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
实现内容(7)具体方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每个线程完成 个数字的聚合。之后依次完成线程内的聚合、块内的聚合以及块间的聚合。
(7.2)对于个大小为个数组长度的Decimal类型数字。每个线程块处理的数字的数量为,每个线程作为一个线程组,每个线程组处理的数字的数量为。在线程块中数字首先被快速读取到共享内存中,然后进行聚合。根据不同型号的GPU信息,一个线程块最大的线程数量为,共享内存的大小为,其中每个线程启动的组数计算为:
,
由于共享内存的限制每个线程组处理的数量计算为:
,
每个块处理的数量计算为:
,
所以需要启动的线程块数为。
图4所示,本方法相对于其他数据库的Decimal数据类型的实现在完成任意精度计算的同时兼顾了高性能的需求。指Decimal数据在计算过程中数值部分的所需要的字数,越高表示其数字精度高。在实验中,我们限制结果的的大小为2/4/8/16/32来表示不同精度下的运算。在不同的精度下通过执行表达式来测试方法的性能。实验结果表明,在低精度算术方面本方法实现了与具有低精度实现的数据库RateupDB相当的性能,且比具有高精度实现的数据库PostgreSQL更快。在高精度方面,本方法能够满足高精度计算的同时其性能优于PostgreSQL的实现,而RateupDB的实现则无法完成高精度的计算。
Claims (8)
1.一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,包括以下内容:
(1)GPU数据库中任意精度十进制数据的表示和存储;
(2)GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,既可以选择多线程协同的计算模式,也可以选择单线程计算模式;
(3)GPU数据库中任意精度十进制数据运算的代码生成模板;
(4)GPU数据库中任意精度十进制数据运算中的对齐优化;
(5)GPU数据库中任意精度十进制数据运算中的常量优化;
(6)GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。
2.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据的表示和存储方法如下:
(1.1)GPU数据库中任意精度十进制数据的表示包括属性部分和数值部分,定义形式为,属性部分包括符号信息、精度信息和运算中的报告信息;其中符号信息表示数字为正数还是负数,精度信息包括信息和信息,分别标记为和,表示数字去除小数点的十进制位数,表示数字小数点后的十进制位数;运算中的报告信息存储常见的除0错误;
数值部分为存储数字去除小数点和正负号的十进制数;数字的十进制表示为:
,
其中表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将的数值部分存储在了一个以32-bits为单位的数组中,符号信息和精度信息部分单独存放在其他字节中;对于精度信息中的Decimal,计算其所需最短的数组长度,数组长度的计算方式为:
,
(1.3)在非计算过程中, Decimal以字节对齐的方式进行存储,数值部分占用字节的大小的计算方式为:
,
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息,如果个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
3.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,单线程计算模式下,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法、模运算的方法如下:
(2.1)对于 和 类型间的加法或减法,首先根据精度信息中大小判断是否需要对齐,如果和不相等,那么需要进行对齐操作,对齐的计算方式为:
,
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作,如果数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号;
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘,遍历第一个因数的数值部分的数组和另一个因数的数值部分的数组,将数组的第个元素和数组的第个元素相乘得到结果,其中的低32-bits被累加到积的数值部分的数组的第个元素中,的高32-bits被累加到数组的第个元素中,积的符号由两个因数的符号进行异或操作得到;
(2.3)对于 和 类型间的除法,首先根据预先设置的精度需求,将被除数左移位;之后利用指令寻找两个数字的数值部分最高比特位可以确定商的范围;最后利用二分查找的方式找到商的精确值;
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求;
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理,对于两个操作数 和 在满足来说,的精度计算方法为:
,
其中,除法中预设的精度需求默认设置为。
4.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,利用多线程协同的计算模式,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度为:
,
其中是线程组的大小,最后的线程得到的字长度小于等于;此外对于符号位则需要每个线程都获取到个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数;
(3.2)通过使用CUDA Warp-Level 级原语完成线程间的进/借位以及共享值和交换值操作;
(3.3)计算结束后每个线程保留结果 Decimal 数字的部分数值信息和全部属性信息。
5.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据运算中的对齐优化,方法如下:
(4.1)将二叉树中减法节点转换为加法节点;层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志;若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动;如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志;若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志;若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志;
(4.2)将修改后的表达式二叉树转变为表达式多叉树;若当前节点为加法节节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连;
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的从小到大的顺序进行排列。
6.根据权利要求5所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据运算中的常量优化,方法如下:
(5.1)利用(4.2)获取到表达式多叉树后,遍历表达式多叉树,如果当前节点的孩子节点中存在多个常量,可提前对多个常量进行计算获取最终常量;
(5.2)最终常量的结果若为特殊值,根据操作符节点的类型进行剪枝优化;若为当前为加法节点且最终常量为非特殊值,则按照当前节点的孩子节点中与常量的精度相同或稍大的精度进行构造,并放在相应位置。
7.根据权利要求3所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据运算的代码生成模板的方法如下:
(6.1)计算表达式的精度信息,进而确定计算中每个线程需要的数值部分的长度;利用表达式二叉树和节点所涉及的列信息,结合(2.5)中的公式自下而上的计算从而获得结果的精度信息;根据结果的精度信息利用(1.2)求出计算过程中所需数值部分最小的数组的长度;
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为的Decimal类型数据表示的代码;根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码;
(6.3)生成表达式计算的代码;前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码,表达式的计算模式根据***的前期设置选择多线程协同/非多线程协同的计算模式;
(6.4)根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度,生成数值部分数组长度为的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码,同样根据***前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
8.根据权利要求2所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每个线程完成个数字的聚合,之后依次完成线程内的聚合、块内的聚合以及块间的聚合;
(7.2)对于个大小为个数组长度的Decimal类型数字,每个线程块处理的数字的数量为,每个线程处理的数字的数量为,在线程块中数字首先被快速读取到共享内存中,然后进行聚合,根据不同型号的GPU信息,一个线程块最大的线程数量为,共享内存的大小为,其中每个线程启动的组数计算为:
,
由于共享内存的限制每个线程组处理的数量计算为:
,
每个块处理的数量计算为:
,
所以需要启动的线程块数为。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310322749.7A CN116028011B (zh) | 2023-03-30 | 2023-03-30 | 一种用于gpu数据库任意精度十进制数据的计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310322749.7A CN116028011B (zh) | 2023-03-30 | 2023-03-30 | 一种用于gpu数据库任意精度十进制数据的计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116028011A true CN116028011A (zh) | 2023-04-28 |
CN116028011B CN116028011B (zh) | 2023-06-16 |
Family
ID=86072666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310322749.7A Active CN116028011B (zh) | 2023-03-30 | 2023-03-30 | 一种用于gpu数据库任意精度十进制数据的计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116028011B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110191755A1 (en) * | 2010-02-01 | 2011-08-04 | Bull Hn Information Systems Inc. | Method and apparatus providing COBOL decimal type arithmetic functions with improved performance |
JP2014056425A (ja) * | 2012-09-12 | 2014-03-27 | Nippon Telegr & Teleph Corp <Ntt> | データ管理装置、データ管理システム、処理割当方法および処理割当プログラム |
CN104699449A (zh) * | 2015-04-03 | 2015-06-10 | 中国科学院软件研究所 | 一种基于gmp的大整数加法和减法多核并行化实现方法 |
CN110069527A (zh) * | 2019-04-22 | 2019-07-30 | 电子科技大学 | 一种面向数据库的gpu和cpu异构加速方法 |
CN110120819A (zh) * | 2019-04-26 | 2019-08-13 | 矩阵元技术(深圳)有限公司 | 一种布尔电路编码方法、装置及*** |
CN110569312A (zh) * | 2019-11-06 | 2019-12-13 | 创业慧康科技股份有限公司 | 一种基于gpu的大数据快速检索***及其使用方法 |
CN112506935A (zh) * | 2020-12-21 | 2021-03-16 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备、存储介质及程序产品 |
-
2023
- 2023-03-30 CN CN202310322749.7A patent/CN116028011B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110191755A1 (en) * | 2010-02-01 | 2011-08-04 | Bull Hn Information Systems Inc. | Method and apparatus providing COBOL decimal type arithmetic functions with improved performance |
JP2014056425A (ja) * | 2012-09-12 | 2014-03-27 | Nippon Telegr & Teleph Corp <Ntt> | データ管理装置、データ管理システム、処理割当方法および処理割当プログラム |
CN104699449A (zh) * | 2015-04-03 | 2015-06-10 | 中国科学院软件研究所 | 一种基于gmp的大整数加法和减法多核并行化实现方法 |
CN110069527A (zh) * | 2019-04-22 | 2019-07-30 | 电子科技大学 | 一种面向数据库的gpu和cpu异构加速方法 |
CN110120819A (zh) * | 2019-04-26 | 2019-08-13 | 矩阵元技术(深圳)有限公司 | 一种布尔电路编码方法、装置及*** |
CN110569312A (zh) * | 2019-11-06 | 2019-12-13 | 创业慧康科技股份有限公司 | 一种基于gpu的大数据快速检索***及其使用方法 |
CN112506935A (zh) * | 2020-12-21 | 2021-03-16 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备、存储介质及程序产品 |
Non-Patent Citations (3)
Title |
---|
A. IOVANOVICI ET AL.: "Performance and power consumption investigation for execution of integer operations on CPU and GPU processors for multimedia applications", IEEE * |
ALIOUNE SCHURZ ET AL.: "G.A.M.E.: GPU-accelerated mixture elucidator", JOURNAL OF CHEMINFORMATICS, vol. 9, no. 50 * |
骆歆远;陈刚;伍赛;: "基于GPU加速的超精简型编码数据库***", 计算机研究与发展, no. 02, pages 362 - 376 * |
Also Published As
Publication number | Publication date |
---|---|
CN116028011B (zh) | 2023-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI784980B (zh) | 用於執行算術運算以累加浮點數的裝置及方法 | |
CN111213125B (zh) | 使用simd指令进行高效的直接卷积 | |
CN104838357B (zh) | 向量化方法、***及处理器 | |
CN106951211B (zh) | 一种可重构定浮点通用乘法器 | |
JP2018124681A (ja) | 演算処理装置、情報処理装置、方法、およびプログラム | |
US20160313976A1 (en) | High performance division and root computation unit | |
KR19980041798A (ko) | 영상처리를 위한 명령을 지원하는 모듈 계산구조 | |
JP2019057249A (ja) | 演算処理装置および演算処理方法 | |
CN103180820A (zh) | 用于执行浮点除法的方法和装置 | |
CN114090954A (zh) | 一种基于ft-2000+的整数矩阵乘法内核优化方法 | |
US11294634B2 (en) | Float division by constant integer | |
US9256434B2 (en) | Generalized bit manipulation instructions for a computer processor | |
CN112540946B (zh) | 可重构处理器及其上多种神经网络激活函数计算方法 | |
CN101295237A (zh) | 求商和余数的高速除法器 | |
CN116028011B (zh) | 一种用于gpu数据库任意精度十进制数据的计算方法 | |
JP2502836B2 (ja) | 除算回路の前処理装置 | |
US20130262541A1 (en) | Method and circuitry for square root determination | |
CN116258185A (zh) | 一种处理器、可变精度的卷积网络计算方法和计算设备 | |
CN115936965A (zh) | 应用于gpu的函数计算***、方法和装置 | |
CN103559312A (zh) | 一种基于gpu的旋律匹配并行化方法 | |
CN109062605A (zh) | 面向滑动窗口向量处理的方法及装置 | |
US6256656B1 (en) | Apparatus and method for extending computational precision of a computer system having a modular arithmetic processing unit | |
TWI753668B (zh) | 資訊處理裝置、電腦程式、記錄媒體及資訊處理方法 | |
US20230393855A1 (en) | Register based simd lookup table operations | |
Xu et al. | High-efficiency realization of SRT division on ternary optical computers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |