CN116028011B - 一种用于gpu数据库任意精度十进制数据的计算方法 - Google Patents

一种用于gpu数据库任意精度十进制数据的计算方法 Download PDF

Info

Publication number
CN116028011B
CN116028011B CN202310322749.7A CN202310322749A CN116028011B CN 116028011 B CN116028011 B CN 116028011B CN 202310322749 A CN202310322749 A CN 202310322749A CN 116028011 B CN116028011 B CN 116028011B
Authority
CN
China
Prior art keywords
decimal
precision
gpu
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.)
Active
Application number
CN202310322749.7A
Other languages
English (en)
Other versions
CN116028011A (zh
Inventor
肖梦白
李欣
于东晓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong University
Original Assignee
Shandong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong University filed Critical Shandong University
Priority to CN202310322749.7A priority Critical patent/CN116028011B/zh
Publication of CN116028011A publication Critical patent/CN116028011A/zh
Application granted granted Critical
Publication of CN116028011B publication Critical patent/CN116028011B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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数据库任意精度十进制数据的计算方法。
为达到上述目的,本发明的技术方案如下:
一种用于GPU数据库任意精度十进制数据的计算方法,包括以下内容:
1)GPU数据库中任意精度十进制数据的表示和存储;
(2)GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,既可以选择多线程协同的计算模式,也可以选择单线程计算模式;
(3)GPU数据库中任意精度十进制数据运算的代码生成模板;
(4)GPU数据库中任意精度十进制数据运算中的对齐优化;
(5)GPU数据库中任意精度十进制数据运算中的常量优化;
(6)GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。
优选的,实现GPU数据库中任意精度十进制数据的表示和存储方法如下:
(1.1)GPU数据库中任意精度十进制数据的表示包括属性部分和数值部分,定义形式为
Figure SMS_2
,属性部分包括符号信息/>
Figure SMS_6
,精度信息和运算中的报告信息;其中符号信息/>
Figure SMS_9
表示数字为正数还是负数,精度信息包括/>
Figure SMS_3
信息和/>
Figure SMS_4
信息,分别标记为
Figure SMS_7
和/>
Figure SMS_8
,/>
Figure SMS_1
表示数字去除小数点的十进制位数,/>
Figure SMS_5
表示数字小数点后的十进制位数;运算中的报告信息存储常见的除0错误;
数值部分为存储数字去除小数点和正负号的十进制数;数字
Figure SMS_10
的十进制表示为:
Figure SMS_11
其中
Figure SMS_12
表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将
Figure SMS_13
的数值部分/>
Figure SMS_14
存储在了一个以32-bits为单位的数组中,符号信息/>
Figure SMS_15
和精度信息部分单独存放在其他字节中;对于精度信息中/>
Figure SMS_16
的Decimal,计算其所需最短的数组长度,数组长度/>
Figure SMS_17
的计算方式为:
Figure SMS_18
(1.3)在非计算过程中, Decimal以字节对齐的方式进行存储,数值部分占用字节的大小
Figure SMS_19
的计算方式为:
Figure SMS_20
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息
Figure SMS_21
,如果/>
Figure SMS_22
个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
优选的,单线程计算模式下,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法、模运算的方法如下:
(2.1)对于
Figure SMS_23
和/>
Figure SMS_24
类型间的加法或减法,首先根据精度信息中/>
Figure SMS_25
大小判断是否需要对齐,如果/>
Figure SMS_26
和/>
Figure SMS_27
不相等,那么需要进行对齐操作,对齐的计算方式为:
Figure SMS_28
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作,如果数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号;
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘,遍历第一个因数的数值部分的数组
Figure SMS_31
和另一个因数的数值部分的数组/>
Figure SMS_36
,将数组/>
Figure SMS_41
的第/>
Figure SMS_30
个元素和数组/>
Figure SMS_33
的第/>
Figure SMS_37
个元素相乘得到结果/>
Figure SMS_39
,其中/>
Figure SMS_32
的低32-bits被累加到积的数值部分的数组/>
Figure SMS_35
的第/>
Figure SMS_38
个元素中,/>
Figure SMS_40
的高32-bits被累加到数组/>
Figure SMS_29
的第/>
Figure SMS_34
个元素中,积的符号由两个因数的符号进行异或操作得到;
(2.3)对于
Figure SMS_42
和 />
Figure SMS_43
类型间的除法,首先根据预先设置的精度需求,将被除数左移/>
Figure SMS_44
位;之后利用/>
Figure SMS_45
指令寻找两个数字的数值部分最高比特位可以确定商的范围;最后利用二分查找的方式找到商的精确值;
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求;
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理,对于两个操作数
Figure SMS_46
和/>
Figure SMS_47
,在满足/>
Figure SMS_48
来说,
Figure SMS_49
的精度计算方法为:
Figure SMS_50
其中,除法中预设的精度需求默认设置为
Figure SMS_51
优选的,利用多线程协同的计算模式,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度
Figure SMS_52
为:
Figure SMS_53
其中
Figure SMS_54
是线程组的大小,最后的线程得到的字长度小于等于/>
Figure SMS_55
;此外对于符号位则需要每个线程都获取到/>
Figure SMS_56
个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数;
(3.2)通过使用CUDA Warp-Level 级原语完成线程间的进/借位以及共享值和交换值操作;
(3.3)计算结束后每个线程保留结果 Decimal 数字的部分数值信息和全部属性信息。
优选的,实现GPU数据库中任意精度十进制数据运算中的对齐优化,方法如下:
(4.1)将二叉树中减法节点转换为加法节点;层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志;若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动;如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志;若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志;若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志;
(4.2)将修改后的表达式二叉树转变为表达式多叉树;若当前节点为加法节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连;
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的
Figure SMS_57
从小到大的顺序进行排列。
优选的,实现GPU数据库中任意精度十进制数据运算中的常量优化,方法如下:
(5.1)利用(4.2)获取到表达式多叉树后,遍历表达式多叉树,如果当前节点的孩子节点中存在多个常量,可提前对多个常量进行计算获取最终常量;
(5.2)最终常量的结果若为特殊值,根据操作符节点的类型进行剪枝优化;若为当前为加法节点且最终常量为非特殊值,则按照当前节点的孩子节点中与常量的精度相同或稍大的精度进行构造,并放在相应位置。
优选的,实现GPU数据库中任意精度十进制数据运算的代码生成模板的方法如下:
(6.1)计算表达式的精度信息,进而确定计算中每个线程需要的数值部分的长度;利用表达式二叉树和节点所涉及的列信息,结合(2.5)中的公式自下而上的计算从而获得结果的精度信息;根据结果的精度信息利用(1.2)求出计算过程中所需数值部分最小的数组的长度
Figure SMS_58
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为
Figure SMS_59
的Decimal类型数据表示的代码;根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码;
(6.3)生成表达式计算的代码;前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码,表达式的计算模式根据系统的前期设置选择多线程协同/非多线程协同的计算模式;
(6.4)根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度
Figure SMS_60
,生成数值部分数组长度为/>
Figure SMS_61
的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码。同样根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
优选的,实现GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每
Figure SMS_62
个线程完成 />
Figure SMS_63
个数字的聚合,之后依次完成线程内的聚合、块内的聚合以及块间的聚合;
(7.2)对于
Figure SMS_65
个大小为/>
Figure SMS_67
个数组长度的Decimal类型数字,每个线程块处理的数字的数量为/>
Figure SMS_69
,每/>
Figure SMS_66
个线程处理的数字的数量为/>
Figure SMS_68
,在线程块中数字首先被快速读取到共享内存中,然后进行聚合,根据不同型号的GPU信息,一个线程块最大的线程数量为/>
Figure SMS_70
,共享内存的大小为/>
Figure SMS_71
,其中每个线程启动的组数/>
Figure SMS_64
计算为:
Figure SMS_72
由于共享内存的限制每个线程组处理的数量
Figure SMS_73
计算为:
Figure SMS_74
每个块处理的数量
Figure SMS_75
计算为:
Figure SMS_76
所以需要启动的线程块数为
Figure SMS_77
与现有技术相比,本申请优点如下:
(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数据库中任意精度十进制数据的表示分为属性部分和数值部分,定义形式为
Figure SMS_78
;其属性部分包括符号信息、精度信息和运算中的报告信息。其数值部分存储数字去除小数点和正负号后的十进制数。属性部分中,符号信息/>
Figure SMS_82
表示数字为正数还是负数,精度信息中/>
Figure SMS_84
表示数字去除小数点的十进制位数,也被记作/>
Figure SMS_80
信息,/>
Figure SMS_83
表示数字小数点后的十进制位数,也被记作/>
Figure SMS_85
信息,(如十进制数据1.2 ,其/>
Figure SMS_86
等于2,/>
Figure SMS_79
等于1)运算中的报告信息存储常见的除0错误。数字/>
Figure SMS_81
的十进制表示为:
Figure SMS_87
其中
Figure SMS_88
表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将
Figure SMS_89
的数值部分/>
Figure SMS_90
存储在了一个以 32-bits 为单位的数组中,符号和精度信息部分单独存放在其他字节中;对于精度信息中/>
Figure SMS_91
的Decimal,计算其所需最短的数组长度,数组长度/>
Figure SMS_92
的计算方式为:
Figure SMS_93
(1.3)在非计算过程中,为了减少内存和磁盘上Decimal占用的空间,数值部分占用字节的大小
Figure SMS_94
的计算方式为:
Figure SMS_95
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息,如果
Figure SMS_96
个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
单线程计算模式下,实现内容(2)具体方法如下:
(2.1)对于
Figure SMS_97
和 />
Figure SMS_98
类型间的加法或减法,首先根据精度信息中/>
Figure SMS_99
大小,判断是否需要对齐,如果/>
Figure SMS_100
和/>
Figure SMS_101
不相等那么需要进行对齐操作,对齐的计算方式为:
Figure SMS_102
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作。在数值部分的加/减法中,利用
Figure SMS_103
、/>
Figure SMS_104
(或/>
Figure SMS_105
、/>
Figure SMS_106
)处理进/借位。如果需要数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号。
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘。遍历第一个因数的数值部分的数组
Figure SMS_107
和另一个因数的数值部分的数组/>
Figure SMS_111
,将数组/>
Figure SMS_115
的第/>
Figure SMS_108
个元素和数组/>
Figure SMS_113
的第/>
Figure SMS_118
个元素相乘得到结果/>
Figure SMS_121
,其中/>
Figure SMS_109
的低32-bits被累加到积的数值部分的数组/>
Figure SMS_112
的第/>
Figure SMS_116
个元素中,/>
Figure SMS_119
的高32-bits被累加到数组/>
Figure SMS_110
的第/>
Figure SMS_114
个元素中。在数值部分的乘法计算中通过使用/>
Figure SMS_117
和/>
Figure SMS_120
处理进位。积的符号由两个因数的符号进行异或操作得到。
(2.3)对于
Figure SMS_123
和 />
Figure SMS_125
类型间的除法,首先根据预先设置的精度需求,将被除数左移/>
Figure SMS_128
位(若想结果保留/>
Figure SMS_124
位小数则需要左移/>
Figure SMS_126
位,/>
Figure SMS_127
默认设置为/>
Figure SMS_129
)。之后利用/>
Figure SMS_122
指令寻找两个数字的数值部分最高比特位可以确定商的范围。最后利用二分查找的方式找到商的精确值。
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求。
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理。 对于两个操作数
Figure SMS_130
和 />
Figure SMS_131
在满足/>
Figure SMS_132
来说,
Figure SMS_133
的精度计算方法为:
Figure SMS_134
其中,除法中预设的精度需求默认设置为
Figure SMS_135
单线程计算模式下,实现内容(2)具体方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度
Figure SMS_136
为:
Figure SMS_137
其中
Figure SMS_138
是在非计算过程中Decimal数字在内存或磁盘上以字节为单位进行存储的大小,/>
Figure SMS_139
是线程组的大小,最后的线程得到的字长度小于等于/>
Figure SMS_140
;此外对于符号位则需要每个线程都获取到/>
Figure SMS_141
个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数。
(3.2)通过使用CUDA Warp-Level 级原语完成线程间的进/借位以及共享值和交换值等操作。
(3.3)计算结束后每个线程保留结果 Decimal 数字的部分数值信息和全部属性信息。
实现内容(4)具体方法如下:
(4.1)将二叉树中减法节点转换为加法节点。层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志。若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动。如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志。若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志。若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志。
(4.2)将修改后的表达式二叉树转变为表达式多叉树。若当前节点为加法节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连。
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的
Figure SMS_142
从小到大的顺序进行排列。
(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)求出计算过程中所需数值部分最小的数组的长度
Figure SMS_143
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为
Figure SMS_144
的Decimal类型数据表示的代码;根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
(6.3)表达式代码生成:生成表达式计算的代码。前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码。表达式的计算模式根据系统的前期设置选择多线程协同/非多线程协同的计算模式。
(6.4)表示格式到存储格式的代码生成:根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度
Figure SMS_145
,生成数值部分数组长度为/>
Figure SMS_146
的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码。同样根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
实现内容(7)具体方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每
Figure SMS_147
个线程完成 />
Figure SMS_148
个数字的聚合。之后依次完成线程内的聚合、块内的聚合以及块间的聚合。
(7.2)对于
Figure SMS_149
个大小为/>
Figure SMS_152
个数组长度的Decimal类型数字。每个线程块处理的数字的数量为/>
Figure SMS_154
,每/>
Figure SMS_151
个线程作为一个线程组,每个线程组处理的数字的数量为/>
Figure SMS_153
。在线程块中数字首先被快速读取到共享内存中,然后进行聚合。根据不同型号的GPU信息,一个线程块最大的线程数量为/>
Figure SMS_155
,共享内存的大小为/>
Figure SMS_156
,其中每个线程启动的组数/>
Figure SMS_150
计算为:
Figure SMS_157
由于共享内存的限制每个线程组处理的数量
Figure SMS_158
计算为:
Figure SMS_159
每个块处理的数量
Figure SMS_160
计算为:
Figure SMS_161
所以需要启动的线程块数为
Figure SMS_162
图4所示,本方法相对于其他数据库的Decimal数据类型的实现在完成任意精度计算的同时兼顾了高性能的需求。
Figure SMS_163
指Decimal数据在计算过程中数值部分的所需要的字数,
Figure SMS_164
越高表示其数字精度高。在实验中,我们限制结果的/>
Figure SMS_165
的大小为2/4/8/16/32来表示不同精度下的运算。在不同的精度下通过执行/>
Figure SMS_166
表达式来测试方法的性能。实验结果表明,在低精度算术方面本方法实现了与具有低精度实现的数据库RateupDB相当的性能,且比具有高精度实现的数据库PostgreSQL更快。在高精度方面,本方法能够满足高精度计算的同时其性能优于PostgreSQL的实现,而RateupDB的实现则无法完成高精度的计算。

Claims (6)

1.一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,包括以下内容:
(1)GPU数据库中任意精度十进制数据的表示和存储;
(2)GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,既可以选择多线程协同的计算模式,也可以选择单线程计算模式;
(3)GPU数据库中任意精度十进制数据运算的代码生成模板;
(4)GPU数据库中任意精度十进制数据运算中的对齐优化;
(4.1)将二叉树中减法节点转换为加法节点;层序遍历表达式二叉树,如果当前节点为减法且没有取反标志,那么当前节点变为加法节点其右孩子设置取反标志;若当前节点为除减法外的其他操作符节点且没有取反标志则无需改动;如果当前节点为加法,且具有取反标志则其孩子节点都设置取反标志;若当前节点为减法节点且具有取反标志,那么当前节点变为加法节点其左孩子节点设置取反标志;若当前节点为加法和减法以外的其他操作符节点且有取反标志,则对其左孩子节点设置取反标志;
(4.2)将修改后的表达式二叉树转变为表达式多叉树;若当前节点为加法节点或乘法节点,递归遍历其左右孩子节点,如果孩子节点的类型与当前节点的类型相同,则将孩子节点的子节点与当前节点直接相连;
(4.3)遍历表达式多叉树,对加法节点的孩子节点进行对齐调度;当遍历到加法节点时,将其孩子节点按照Decimal精度信息中的s从小到大的顺序进行排列;
(5)GPU数据库中任意精度十进制数据运算中的常量优化;
(5.1)利用(4.2)获取到表达式多叉树后,遍历表达式多叉树,如果当前节点的孩子节点中存在多个常量,可提前对多个常量进行计算获取最终常量;
(5.2)最终常量的结果若为特殊值,可根据操作符节点的类型进行剪枝优化;若为当前为加法节点且最终常量为非特殊值,则按照当前节点的孩子节点中与常量的精度相同或稍大的精度进行构造,并放在相应位置;
(6)GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作。
2.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据的表示和存储方法如下:
(1.1)GPU数据库中任意精度十进制数据的表示包括属性部分和数值部分,定义形式为Decimal(p,s),
属性部分包括符号信息sign、精度信息和运算中的报告信息;其中符号信息sign表示数字为正数还是负数,精度信息包括precison信息和scale信息,分别标记为p和s,p表示数字去除小数点的十进制位数,s表示数字小数点后的十进制位数;运算中的报告信息存储常见的除0错误;
数值部分为存储数字去除小数点和正负号的十进制数;数字n的十进制表示为:
n=(-1)sign×v×10-s
其中v表示数字的数值部分;
(1.2)计算过程中,Decimal存储在寄存器中,将Decimal(p,s)的数值部分v存储在了一个以32-bits为单位的数组中,符号信息sign和精度信息部分单独存放在其他字节中;对于精度信息中p的Decimal,计算其所需最短的数组长度,数组长度Lw的计算方式为:
Figure QLYQS_1
(1.3)在非计算过程中,Decimal以字节对齐的方式进行存储,数值部分占用字节的大小Lb的计算方式为:
Figure QLYQS_2
每一列的精度信息都被存储在列的属性数据中,只存储一次即可;对于符号信息sign,如果Lb个字节的最高字节的最高比特无用的情况下则将符号放在最高字节的最高比特位,反之,字节数加1,将符号放在新加字节的最高位。
3.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,单线程计算模式下,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法、模运算的方法如下:
(2.1)对于Decimal1(p1,s1)和Decimal2(p2,s2)类型间的加法或减法,首先根据精度信息中s大小判断是否需要对齐,如果s1和s2不相等,那么需要进行对齐操作,对齐的计算方式为:
Figure QLYQS_3
之后根据两个数字的符号信息决定对两个数字的数值部分进行相加或相减操作,如果数值部分相减则需要对两个数的数值部分进行比较从而确定结果的符号;
(2.2)对于Decimal数据类型间的乘法,则是将两个数字的数值部分进行相乘,遍历第一个因数的数值部分的数组v1和另一个因数的数值部分的数组v2,将数组v1的第i个元素和数组v2的第j个元素相乘得到结果prod,其中prod的低32-bits被累加到积的数值部分的数组vans的第i+j个元素中,prod的高32-bits被累加到数组vans的第i+j+1个元素中,积的符号由两个因数的符号进行异或操作得到;
(2.3)对于Decimal1(p1,s1)和Decimal2(p2,s2)类型间的除法,首先根据预先设置的精度需求,将被除数左移t位;之后利用bfind指令寻找两个数字的数值部分最高比特位可以确定商的范围;最后利用二分查找的方式找到商的精确值;
(2.4)取模运算只针对于Decimal整数之间进行运算,根据两个数字的数值部分的最高比特位确定商的范围后,利用二分查找的方式找到精确的商,最后利用被除数减去商乘以除数得到的余数即为所求;
(2.5)在计算过程中为了防止溢出,方法中对运算结果的精度做了扩大处理,对于两个操作数Decimal1(p1,s1)和Decimal2(p2,s2)在满足s1≥s2来说,Decimalans(pans,sans)的精度计算方法为:
Figure QLYQS_4
其中,除法中预设的精度需求默认设置为s2+4。
4.根据权利要求1所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,利用多线程协同的计算模式,实现GPU数据库中任意精度十进制数据间的加法、减法、乘法、除法和模运算,方法如下:
(3.1)首先需要将Decimal数据类型的操作数协同加载到一个线程组中,每个线程最大得到的Decimal数字数值部分的字长度lt为:
Figure QLYQS_5
其中Lb是在非计算过程中Decimal数字在内存或磁盘上以字节为单位进行存储的大小,TPI是线程组的大小,最后的线程得到的字长度小于等于lt
此外对于符号位则需要每个线程都获取到Lb个字节的最高字节的最高比特位,若为1则表示该值为负数,若为0则表示该值为正数;
(3.2)通过使用CUDA Warp-Level级原语完成线程间的进/借位以及共享值和交换值操作;
(3.3)计算结束后每个线程保留结果Decimal数字的部分数值信息和全部属性信息。
5.根据权利要求3所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中任意精度十进制数据运算的代码生成模板的方法如下:
(6.1)计算表达式的精度信息,进而确定计算中每个线程需要的数值部分的长度;利用表达式二叉树和节点所涉及的列信息,结合(2.5)中的公式自下而上的计算从而获得结果的精度信息;根据结果的精度信息利用(1.2)求出计算过程中所需数值部分最小的数组的长度Lminw
(6.2)生成将以字节为单位存储的Decimal数据构造为数值部分数组长度为Lminw的Decimal类型数据表示的代码;根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码;
(6.3)生成表达式计算的代码;前序遍历表达式二叉树,将表达式二叉树转换为中缀表达式,将其转化为CUDA C代码,表达式的计算模式根据系统的前期设置选择多线程协同/非多线程协同的计算模式;
(6.4)根据结果精度利用(1.2)求出结果以字节为单位存储的最小长度Lminb,生成数值部分数组长度为Lminw的Decimal类型数据的表示转换为以字节为单位存储的Decimal存储的代码,同样根据系统前期设置的多线程协同/非多线程协同的计算模式生成相应的转换代码。
6.根据权利要求2所述的一种用于GPU数据库任意精度十进制数据的计算方法,其特征在于,实现GPU数据库中利用多线程协同的方法完成十进制数据列的聚合操作方法如下:
(7.1)对于多线程聚合首先将数据分散到不同的块内,每个块内的每TPI个线程完成nt个数字的聚合,之后依次完成线程内的聚合、块内的聚合以及块间的聚合;
(7.2)对于N个大小为Lw个数组长度的Decimal类型数字,每个线程块处理的数字的数量为nT,每TPI个线程处理的数字的数量为nt,在线程块中数字首先被快速读取到共享内存中,然后进行聚合,根据不同型号的GPU信息,一个线程块最大的线程数量为Tmax,共享内存的大小为Mshare,其中每个线程启动的组数Ng计算为:
Figure QLYQS_6
由于共享内存的限制每个线程组处理的数量nt计算为:
Figure QLYQS_7
每个块处理的数量nT计算为:
nT=nt×Ng
所以需要启动的线程块数为
Figure QLYQS_8
CN202310322749.7A 2023-03-30 2023-03-30 一种用于gpu数据库任意精度十进制数据的计算方法 Active CN116028011B (zh)

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 CN116028011A (zh) 2023-04-28
CN116028011B true 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 (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699449A (zh) * 2015-04-03 2015-06-10 中国科学院软件研究所 一种基于gmp的大整数加法和减法多核并行化实现方法
CN110569312A (zh) * 2019-11-06 2019-12-13 创业慧康科技股份有限公司 一种基于gpu的大数据快速检索系统及其使用方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8856759B2 (en) * 2010-02-01 2014-10-07 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> データ管理装置、データ管理システム、処理割当方法および処理割当プログラム
CN110069527B (zh) * 2019-04-22 2021-05-14 电子科技大学 一种面向数据库的gpu和cpu异构加速方法
CN110120819B (zh) * 2019-04-26 2023-07-21 矩阵元技术(深圳)有限公司 一种布尔电路编码方法、装置及系统
CN112506935B (zh) * 2020-12-21 2023-08-29 北京百度网讯科技有限公司 数据处理方法、装置、电子设备、存储介质及程序产品

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699449A (zh) * 2015-04-03 2015-06-10 中国科学院软件研究所 一种基于gmp的大整数加法和减法多核并行化实现方法
CN110569312A (zh) * 2019-11-06 2019-12-13 创业慧康科技股份有限公司 一种基于gpu的大数据快速检索系统及其使用方法

Also Published As

Publication number Publication date
CN116028011A (zh) 2023-04-28

Similar Documents

Publication Publication Date Title
TWI784980B (zh) 用於執行算術運算以累加浮點數的裝置及方法
CN111213125B (zh) 使用simd指令进行高效的直接卷积
JP6540725B2 (ja) 演算処理装置、方法、およびプログラム
CN106951211B (zh) 一种可重构定浮点通用乘法器
US20160313976A1 (en) High performance division and root computation unit
CN103180820A (zh) 用于执行浮点除法的方法和装置
JP2019057249A (ja) 演算処理装置および演算処理方法
EP3769208B1 (en) Stochastic rounding logic
JPH06250823A (ja) ポピュレーション・カウントの計算装置
CN101295237A (zh) 求商和余数的高速除法器
JP2502836B2 (ja) 除算回路の前処理装置
CN116028011B (zh) 一种用于gpu数据库任意精度十进制数据的计算方法
CN112540946A (zh) 可重构处理器及其上多种神经网络激活函数计算方法
CN116795324A (zh) 混合精度浮点乘法装置和混合精度浮点数处理方法
WO2023116400A1 (zh) 向量运算方法、向量运算器、电子设备和存储介质
CN103559312B (zh) 一种基于gpu的旋律匹配并行化方法
CN115936965A (zh) 应用于gpu的函数计算系统、方法和装置
CN114090592A (zh) 一种数据处理方法、装置、设备及可读存储介质
KR20080016803A (ko) 큰 수 곱셈 방법 및 디바이스
WO2019127480A1 (zh) 用于处理数值数据的方法、设备和计算机可读存储介质
Xu et al. High-efficiency realization of SRT division on ternary optical computers
US20230393855A1 (en) Register based simd lookup table operations
Santambrogio et al. A new compact SD2 positive integer triangular array division circuit
CN115586922A (zh) 一种存储与计算格式解耦的SpMV混合精度优化方法
KR20230152414A (ko) 페이지랭크 희소행렬 곱셈 연산을 위한 연산 장치 및 방법

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