CN107038016B - 一种基于gpu的浮点数转换方法及装置 - Google Patents

一种基于gpu的浮点数转换方法及装置 Download PDF

Info

Publication number
CN107038016B
CN107038016B CN201710197617.0A CN201710197617A CN107038016B CN 107038016 B CN107038016 B CN 107038016B CN 201710197617 A CN201710197617 A CN 201710197617A CN 107038016 B CN107038016 B CN 107038016B
Authority
CN
China
Prior art keywords
floating
floating number
signless integer
set interval
converted
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
CN201710197617.0A
Other languages
English (en)
Other versions
CN107038016A (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.)
Guangzhou Kugou Computer Technology Co Ltd
Original Assignee
Guangzhou Kugou Computer Technology Co Ltd
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 Guangzhou Kugou Computer Technology Co Ltd filed Critical Guangzhou Kugou Computer Technology Co Ltd
Priority to CN201710197617.0A priority Critical patent/CN107038016B/zh
Publication of CN107038016A publication Critical patent/CN107038016A/zh
Application granted granted Critical
Publication of CN107038016B publication Critical patent/CN107038016B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/14Conversion to or from non-weighted codes
    • H03M7/24Conversion to or from floating-point codes

Abstract

本发明公开了一种基于GPU的浮点数转换方法及装置,属于计算机技术领域。所述方法包括:将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,所述第一浮点数为待转换的32位浮点数,所述预设区间为符号位和指数位均相同的浮点数组成的连续区间;将所述第二浮点数转换为目标无符号整数,所述目标无符号整数中与所述第一浮点数的符号位与指数位相对应位置上的值均为0;基于所述目标无符号整数,确定16位浮点数,以完成对所述第一浮点数的转换。本发明通过将待转换的32位浮点数转换到符号位和指数位均相同的预设区间内,并将相同的符号位和指数位去除,仅根据剩余的23位尾数来确定16位浮点数,减少了尾数损失,提高了精度。

Description

一种基于GPU的浮点数转换方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种基于GPU(Graphic Processing Unit,图形处理器)的浮点数转换方法及装置。
背景技术
随着计算机技术的发展,计算机的图形处理能力变得越来越重要。其中,计算机的显卡是影响计算机图形处理能力的重要因素。通常,计算机的显卡可以存储诸如归一化的颜色值或法线向量、随机数等数据,上述存储的数据均具有一个共同的特点,即位于区间[0,1]之间。显卡可以通过32位浮点数来存储上述数据,但是,由于显卡的显存容量和带宽的限制,显卡的GPU经常需要将32位浮点数转换为16位浮点数进行存储。
通常,一个二进制数可以表示为a=m*2n,m为仅有一个整数位且整数位不为0的二进制小数。将该二进制数转化为32位浮点数后,该32位浮点数的最高一位为符号位,用于指示该二进制数的正负。从符号位的下一位起连续8位为指数位,该指数位为该二进制数的指数n对应的二进制数,剩余的23位为尾数,尾数的左起第一位为m的小数部分的第一位,依次类推,当m不足23位时,不足的位数用0补足。
相关技术中,当GPU将32位浮点数转换为16位浮点数时,将32位浮点数的最高一位作为16位浮点数的最高一位,该最高一位即为16位浮点数的符号位,将32位浮点数的指数位中从右起的连续4位去除,剩余的4位作为16位浮点数的指数位,将32位浮点数的23位尾数从右起的连续12位去除,剩余的11位作为16位浮点数的尾数。
通过上述方法将32位浮点数转换为16位浮点数的过程中,由于将32位浮点数的尾数去除了12位,得到的16位浮点数中仅保留了11位的尾数,因此,转换得到的16位浮点数的精度远低于32位浮点数的精度,数据的精度损失较大。
发明内容
为了解决相关技术中32位浮点数转换为16位浮点数时,精度损失较大的问题,本发明实施例提供了一种基于GPU的浮点数转换方法及装置。所述技术方案如下:
一方面,提供了一种基于GPU的浮点数转换方法,所述方法包括:
将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,所述第一浮点数为待转换的32位浮点数,所述预设区间为符号位和指数位均相同的浮点数组成的连续区间;
将所述第二浮点数转换为目标无符号整数,所述目标无符号整数中与所述第一浮点数的符号位与指数位相对应位置上的值均为0;
基于所述目标无符号整数,确定16位浮点数,以完成对所述第一浮点数的转换。
可选地,所述将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,包括:
将所述第一浮点数与所述预设区间的最小值相加,得到所述第二浮点数。
可选地,所述将所述第二浮点数转换为目标无符号整数,包括:
将所述第二浮点数转换为无符号整数,得到第一无符号整数;
将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;
计算所述第一无符号整数与所述第二无符号整数之间的差,得到所述目标无符号整数。
可选地,所述基于所述目标无符号整数,确定16位浮点数,包括:
将所述目标无符号整数中与所述第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
将所述剩余的23位数中从左起的连续16位数确定为所述16位浮点数。
可选地,所述基于所述目标无符号整数,确定16位浮点数之后,还包括:
当接收到还原指令时,基于所述16位浮点数,确定第三无符号整数,所述还原指令用于指示将所述16位浮点数转换为32位浮点数;
基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,所述第四无符号整数从左起的连续9位数与所述预设区间内的浮点数的符号位和指数位的值相同;
将所述第四无符号整数转换为浮点数,得到第三浮点数;
基于所述预设区间和所述第三浮点数,确定第四浮点数,并将所述第四浮点数确定为将所述16位浮点数转换后所得到的32位浮点数。
可选地,所述基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,包括:
将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;计算所述第三无符号整数和所述第二无符号整数的和,得到所述第四无符号整数;或者,
根据所述预设区间内的浮点数的符号位和指数位,将所述第三无符号整数从左起的连续9位数依此替换为所述符号位和所述指数位的值,得到所述第四无符号整数。
可选地,所述基于所述预设区间和所述第三浮点数,确定第四浮点数,包括:
确定所述预设区间的最小值对应的浮点数,得到第五浮点数;
计算所述第三浮点数和所述第五浮点数之间的差,得到所述第四浮点数。
另一方面,提供了一种基于GPU的浮点数转换装置,所述装置包括:
第一转换模块,用于将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,所述第一浮点数为待转换的32位浮点数,所述预设区间为符号位和指数位均相同的浮点数组成的连续区间;
第二转换模块,用于将所述第二浮点数转换为目标无符号整数,所述目标无符号整数中与所述第一浮点数的符号位与指数位相对应位置上的值均为0;
第一确定模块,用于基于所述目标无符号整数,确定16位浮点数,以完成对所述第一浮点数的转换。
可选地,所述第一转换模块包括:
运算模块,用于将所述第一浮点数与所述预设区间的最小值相加,得到所述第二浮点数。
可选地,所述第二转换模块包括:
第一转换子模块,用于将所述第二浮点数转换为无符号整数,得到第一无符号整数;
第二转换子模块,用于将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;
第一计算子模块,用于计算所述第一无符号整数与所述第二无符号整数之间的差,得到所述目标无符号整数。
可选地,所述第一确定模块包括:
去除子模块,用于将所述目标无符号整数中与所述第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
第一确定子模块,用于将所述剩余的23位数中从左起的连续16位数确定为所述16位浮点数。
可选地,所述装置还包括:
第二确定模块,用于当接收到还原指令时,基于所述16位浮点数,确定第三无符号整数,所述还原指令用于指示将所述16位浮点数转换为32位浮点数;
第三转换模块,用于基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,所述第四无符号整数从左起的连续9位数与所述预设区间内的浮点数的符号位和指数位的值相同;
第四转换模块,用于将所述第四无符号整数转换为浮点数,得到第三浮点数;
第三确定模块,用于基于所述预设区间和所述第三浮点数,确定第四浮点数,并将所述第四浮点数确定为将所述16位浮点数转换后所得到的32位浮点数。
可选地,所述第三转换模块包括:
第三转换子模块,用于将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;第二计算子模块,用于计算所述第三无符号整数和所述第二无符号整数的和,得到所述第四无符号整数;或者,
替换子模块,用于根据所述预设区间内的浮点数的符号位和指数位,将所述第三无符号整数从左起的连续9位数依此替换为所述符号位和所述指数位的值,得到所述第四无符号整数。
可选地,所述第三确定模块包括:
第二确定子模块,用于确定所述预设区间的最小值对应的浮点数,得到第五浮点数;
第三计算子模块,用于计算所述第三浮点数和所述第五浮点数之间的差,得到所述第四浮点数。
本发明实施例提供的技术方案带来的有益效果是:在本发明实施例中,将待转换的32位浮点数转换为预设区间内的浮点数,得到第二浮点数,由于该预设区间内的浮点数的符号位和指数位均相同,因此,可以将第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的指数位和符号位相对应的位置上的值均为0,之后,可以根据该目标无符号整数中剩余23位不为0的尾数来确定16位浮点数,这样,相较于相关技术中,只能获取32位浮点数的23位尾数中的11位作为16位浮点数的尾数,本发明实施例转换得到的16位浮点数的尾数位数增加,精度提高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于GPU的浮点数转换方法的流程图;
图2是本发明实施例提供的一种基于GPU的浮点数转换方法的流程图;
图3A是本发明实施例提供的一种基于GPU的浮点数转换装置结构示意图;
图3B是本发明实施例提供的第二转换模块的结构示意图;
图3C是本发明实施例提供的第一确定模块的结构示意图;
图3D是本发明实施例提供的一种基于GPU的浮点数转换装置结构示意图;
图3E是本发明实施例提供的第三转换模块的结构示意图;
图3F是本发明实施例提供的第三确定模块的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本发明实施例进行详细的解释说明之前,先对本发明实施例的应用场景予以介绍。通常,计算机的显卡需要存储的数据,如归一化的颜色值或者法线向量以及随机数等,均具有一个共同特点,即这些数据均位于区间[0,1]之间。显卡可以通过32位浮点数存储这些位于区间[0,1]之间的数据,但是由于显卡的显存容量和带宽限制,显卡的GPU可以将上述数据对应的32位浮点数转换为16位浮点数进行存储,这样,原本存储一个32位浮点数的空间可以存储两个16位浮点数,在显存容量一定的情况下,能够存储的数据增多。
相关技术中,将32位浮点数转换为16位浮点数之后,该16位浮点数仍然保存了1位的符号位,4位的指数位,也即是,该16位浮点数中只有11位的尾数,而转换之前的32位浮点数包括23位的尾数,也就是说,转换后得到的16位浮点数损失了12位尾数。由于损失了12位尾数,转换后得到的16位浮点数的精度较转换之前的32位浮点数将大大降低。
为了解决上述问题,本发明实施例提供了一种基于GPU的浮点数转换方法,在该方法中,可以将32位浮点数转换到预设区间内,得到第二浮点数,由于预设区间内的所有浮点数的符号位和指数位均相同,所以,可以将该第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的指数位和符号位相对应的位置上的值均为0,之后,可以根据该目标无符号整数中剩余23位不为0的尾数来确定16位浮点数,这样,转换后得到的16位浮点数可以不包含有符号位和指数位,也即是该16位浮点数可以全部为尾数,相较于相关技术中,转换后的16位浮点数中尾数只保留原23位尾数的11位,本发明实施例中确定的16位浮点数保留了32位浮点数的23位尾数中的16位,尾数损失减少,精度提高。
图1是本发明实施例提供的一种基于GPU的浮点数转换方法的流程图,该方法可以用于计算机中,如图1,该方法包括:
步骤101:将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,该第一浮点数为待转换的32位浮点数,该预设区间为符号位和指数位均相同的浮点数组成的连续区间。
步骤102:将第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的符号位与指数位相对应位置上的值均为0。
步骤103:基于该目标无符号整数,确定16位浮点数,以完成对第一浮点数的转换。
在本发明实施例中,将待转换的32位浮点数转换为预设区间内的浮点数,得到第二浮点数,由于该预设区间内的浮点数的符号位和指数位均相同,因此,可以将第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的指数位和符号位相对应的位置上的值均为0,之后,可以根据该目标无符号整数中剩余23位不为0的尾数来确定16位浮点数,这样,相较于相关技术中,只能获取32位浮点数的23位尾数中的11位作为16位浮点数的尾数,本发明实施例转换得到的16位浮点数的尾数位数增加,精度提高。
可选地,将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,包括:
将第一浮点数与预设区间的最小值相加,得到第二浮点数。
可选地,将第二浮点数转换为目标无符号整数,包括:
将第二浮点数转换为无符号整数,得到第一无符号整数;
将预设区间的最小值转换为无符号整数,得到第二无符号整数;
计算第一无符号整数与第二无符号整数之间的差,得到目标无符号整数。
可选地,基于目标无符号整数,确定16位浮点数,包括:
将目标无符号整数中与第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
将剩余的23位数中从左起的连续16位数确定为16位浮点数。
可选地,基于目标无符号整数,确定16位浮点数之后,还包括:
当接收到还原指令时,基于16位浮点数,确定第三无符号整数,还原指令用于指示将16位浮点数转换为32位浮点数;
基于预设区间,将第三无符号整数转换为第四无符号整数,第四无符号整数从左起的连续9位数与预设区间内的浮点数的符号位和指数位的值相同;
将第四无符号整数转换为浮点数,得到第三浮点数;
基于预设区间和第三浮点数,确定第四浮点数,并将第四浮点数确定为将16位浮点数转换后所得到的32位浮点数。
可选地,基于预设区间,将第三无符号整数转换为第四无符号整数,包括:
将预设区间的最小值转换为无符号整数,得到第二无符号整数;计算第三无符号整数和第二无符号整数的和,得到第四无符号整数;或者,
根据预设区间内的浮点数的符号位和指数位,将第三无符号整数从左起的连续9位数依此替换为符号位和指数位的值,得到第四无符号整数。
可选地,基于预设区间和第三浮点数,确定第四浮点数,包括:
确定预设区间的最小值对应的浮点数,得到第五浮点数;
计算第三浮点数和第五浮点数之间的差,得到第四浮点数。
上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。
图2是本发明实施例提供的一种基于GPU的浮点数转换方法的流程图,该方法可以用于计算机的GPU中,如图2所示,该方法包括:
步骤201:将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,该第一浮点数为待转换的32位浮点数,该预设区间为符号位和指数位均相同的浮点数组成的连续区间。
通常,在很多应用场景下,计算机显卡所要存储的数据均是位于区间[0,1]之间的数据,如果将该位于区间[0,1]之间的数据转换为对应的二进制数,并将该二进制数表示为a=m*2n的形式,那么,就可以看出位于区间[0,0.5]之间的数据对应的n均是相等的,位于区间[0.5,1]之间的数据对应的n也均是相等的,但是位于区间[0,0.5]之间的数据对应的n与位于区间[0.5,1]之间的数据对应的n是不同的。因此,GPU可以将位于区间[0,1]之间的数据对应的32位浮点数转换到预设区间内,该预设区间内的所有数据对应的n全部相同,也即是,该预设区间内的所有数据的浮点数的指数位均相同。这样,当将位于区间[0,1]之间的数据对应的32位浮点数全部转换到预设区间后,得到的浮点数的指数位也均相同。另外,由于位于区间[0,1]之间的数据均为正数,也即是,位于区间[0,1]之间的数据对应的浮点数的符号位是全部相同的,因此,在将该区间[0,1]之间的数据转换到预设区间时,该预设区间内的数据对应的浮点数的符号位也应该相同,这样,当区间[0,1]之间的数据对应的浮点数转换到预设区间之后,才能保证得到的浮点数的符号位是相同的。
其中,当GPU将区间[0,1]之间的数据对应的任一32位浮点数转换到预设区间内时,该待转换的32位浮点数即为第一浮点数,GPU可以将该第一浮点数与预设区间的最小值相加,得到第二浮点数。其中,该预设区间可以为[2k,2k+1],k等于0或者k为大于0的整数。
需要说明的是,当k等于0或者k为大于0的任一整数时,预设区间[2k,2k+1]内的数据对应的浮点数的指数位和符号位均是相同的。例如,当k等于0时,该预设区间为[1,2],将该预设区间[1,2]内的数据表示为a=m*2n的形式时,n均为127,将n转换为二进制数,为01111111,也即是,该预设区间[1,2]内的数据对应的32位浮点数的指数位均为01111111。并且,由于预设区间[1,2]内的数据均为正数,因此,对应的32位浮点数的符号位均为0。
另外,当k取值越大时,该预设区间的范围就越大,也即是,该预设区间内的包含的数据就越多。在显卡的显存容量固定的情况下,当存储的预设区间内的数据越多,精度损失也就越大,因此,当k等于0,预设区间为[1,2]时,将第一浮点数转换到该预设区间[1,2]内,得到的16位浮点数的精度最高。在本发明实施例的以下步骤中,将主要以预设区间[1,2]为例对本发明实施例提供的浮点数转换方法进行解释说明。
可选地,当得到第二浮点数之后,GPU还可以计算第二浮点数与2-16对应的浮点数的和,并将得到的和通过步骤202-203转换成16位浮点数,这样,得到的16位浮点数将是经过四舍五入的浮点数。
基于上述描述,由于将位于区间[0,1]之间的数据的32位浮点数转换到预设区间内得到的第二浮点数的符号位和指数位均相同,不同之处仅在于剩余的23位尾数,因此,如果GPU按照相关技术将转换到该预设区间内的32位浮点数转换成16位浮点数,得到的所有16位浮点数的符号位和指数位也均是相同,在这种情况下,计算机的显卡存储该16位浮点数的符号位和指数位对于识别该16位浮点数没有任何作用,也即是,相关技术中计算机的显卡存储该16位浮点数的符号位和指数位是对显存容量的一种浪费。基于上述考虑,本发明实施例将通过步骤202和步骤203,去除第二浮点数中的符号位和指数位,根据第二浮点数的23位尾数来确定16位浮点数。
步骤202:将第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的符号位与指数位相对应位置上的值均为0。
基于步骤201中的描述,当GPU将待转换的第一浮点数转换到预设区间内,得到第二浮点数之后,可以将该第二浮点数转换为无符号整数,得到第一无符号整数;将预设区间的最小值转换为无符号整数,得到第二无符号整数;计算第一无符号整数与第二无符号整数之间的差,得到目标无符号整数。
其中,由于后续需要根据第二浮点数的尾数来确定16位浮点数,而获取该第二浮点数的尾数的操作需要通过无符号整数的运算来实现,因此,当得到第二浮点数之后,首先可以将该第二浮点数的数据类型转换为无符号整数,从而得到第一无符号整数。之后,由于预设区间的最小值的32位浮点数的23位尾数均为0,而位于最高位的1位符号位和符号位之后的连续8位指数位的值,与第二浮点数的符号位和指数位是相同的,也即是,与第一无符号整数的高9位的值相同的,因此,GPU可以将该预设区间的最小值也转换为无符号整数,得到第二无符号整数,从而将该第一无符号整数和该第二无符号整数相减,得到高9为均为0、且剩余的23位与第二浮点数的尾数相同的目标无符号整数。
需要说明的是,GPU可以通过intrinsic(内建)函数float as unit,将第二浮点数的数据类型转换为无符号整数,从而得到第一无符号整数。之后,GPU可以通过无符号整数加减法运算,计算第一无符号整数和第二无符号整数之间的差,从而得到高9位全部为0的目标无符号整数。
当然,为了操作简便,减少运算过程,GPU也可以在得到第一无符号整数之后,直接将该第一无符号整数的高9位全部设置为0。
步骤203:基于该目标无符号整数,确定16位浮点数,以完成对第一浮点数的转换。
当确定目标无符号整数之后,由于该目标无符号整数的高9位为0,剩余的连续23位的值与第二浮点数的尾数相同,因此,GPU可以将该目标无符号整数中与第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;将剩余的23位数中从左起的连续16位数确定为16位浮点数。这样,确定得到的16位浮点数中的16位数将全部为第二浮点数的尾数,而不存在符号位和指数位。相较于现有技术中确定的16位浮点数仅包括32位浮点数的11位尾数,提高了精度。
可选地,当确定16位浮点数之后,GPU可以将任一无符号整数的高16位或者是低16位替换为该16位浮点数进行保存,也即是,对于一个32位的无符号整数,将保存有两个16位浮点数。
例如,假设目标无符号整数为u,任一无符号整数为d,那么,GPU可以通过置换指令prmt.b32d,d,u,0x3265,将目标无符号整数的剩余23位数中从左起的连续16位保存在d的低16位中。
通过步骤201-203,GPU将位于区间[0,1]之间的浮点数转换到预设区间内,将该预设区间内的32位浮点数的符号位和指数位去除,并根据剩余的23位尾数确定得到16点数。之后,当计算机的显卡需要使用该16位浮点数时,可以将该16位浮点数再还原为32位浮点数。在本发明实施例中,GPU可以通过步骤204-207,将16位浮点数换位为32位浮点数。
步骤204:当接收到还原指令时,基于该16位浮点数,确定第三无符号整数,该还原指令用于指示将该16位浮点数转换为32位浮点数。
当计算机的显卡需要使用该16位浮点数时,可以将该转换后的16位浮点数再还原为32位浮点数。因此,当GPU接收到还原指令时,可以将32位全部为0的无符号整数的左起第10位开始的连续16位替换为该16位浮点数,从而得到第三无符号整数,该第三无符号整数的高9位均为0。
步骤205:基于预设区间,将第三无符号整数转换为第四无符号整数,该第四无符号整数从左起的连续9位数与该预设区间内的浮点数的符号位和指数位的值相同。
由于第三无符号整数的高9位为0,也即是,第三无符号整数中与32位浮点数的符号位和指数位对应的位置上的值均为0,因此,在将该第三无符号整数还原为32位浮点数时,需要使该第三无符号整数的高9位的值还原为该16位浮点数转换前对应的32位浮点数的符号位和指数位的值,从而得到第四无符号整数。
其中,GPU可以将预设区间的最小值转换为无符号整数,得到第二无符号整数;之后,计算该第三无符号整数和第二无符号整数的和,得到第四无符号整数;或者,GPU可以根据预设区间内的浮点数的符号位和指数位,将该第三无符号整数从左起的连续9位数依此替换为符号位和所述指数位的值,得到第四无符号整数。
需要说明的是,由于预设区间的最小值的符号位和指数位与该16位浮点数转换前对应的在该预设区间内的32位浮点数的符号位和指数位相同,同时,该预设区间的最小值的23位尾数均为0,因此,可以将该预设区间的最小值转换为第二无符号整数,并计算该第二无符号整数和第三无符号整数,这样,第三无符号整数的23位尾数与第二无符号整数的23位均为0的尾数相加后,保持不变,而第三无符号整数的均为0的高9位与第二无符号整数的高9位相加,得到的高9位的值将与预设区间的最小值的符号位和指数位的值相同。因此,将第二无符号整数和第三无符号整数相加后,得到的第四无符号整数的高9位与预设区间内的浮点数的符号位和指数位相同,尾数部分的高16位即为16位浮点数,剩余的低7位为0,也即是,该低7位即为将第一浮点数转换为16位浮点数时损失的7位尾数。
步骤206:将该第四无符号整数转换为浮点数,得到第三浮点数。
当确定第四无符号整数之后,将该第四无符号整数的数据类型转换为浮点数,从而得到第三浮点数。其中,GPU可以根据intrinsic函数unit as float将第四无符号整数解析为浮点数,得到第三浮点数。
步骤207:基于该预设区间和第三浮点数,确定第四浮点数,并将该第四浮点数确定为将16位浮点数转换后所得到的32位浮点数。
由于第三浮点数是预设区间内的浮点数,也即是,该第三浮点数是区间[0,1]内的浮点数对应的预设区间内的浮点数,因此,GPU还需要将该预设区间内的第三浮点数还原到区间[0,1]。
其中,GPU可以确定该预设区间的最小值对应的浮点数,得到第五浮点数;计算该第三浮点数和所述第五浮点数之间的差,得到第四浮点数。由于将第一浮点数转换至预设区间内,是将该第一浮点数加上预设区间的最小值得到的第二浮点数,因此,当将该预设区间的第三浮点数还原到区间[0,1]时,需要将该第三浮点数减去预设区间的最小值对应的浮点数,从而得到位于区间[0,1]内的第四位浮点数,该第四浮点数即为将16位浮点数转换后得到的32位浮点数。
在本发明实施例中,GPU可以将待转换的位于区间[0,1]之间的32位浮点数转换到预设区间内,得到第二浮点数,由于预设区间内的所有浮点数的符号位和指数位均相同,所以,可以将该第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的指数位和符号位相对应的位置上的值均为0,之后,可以根据该目标无符号整数中剩余23位不为0的尾数来确定16位浮点数,这样,转换后得到的16位浮点数可以不包含有符号位和指数位,也即是该16位浮点数可以全部为尾数,相较于相关技术中,转换后的16位浮点数中尾数只保留原23位尾数的11位,本发明实施例中确定的16位浮点数保留了32位浮点数的23位尾数中的16位,尾数损失减少,精度提高。
参见图3A,本发明实施例提供了一种基于GPU的浮点数转换装置300,该装置300包括:
第一转换模块301,用于将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,第一浮点数为待转换的32位浮点数,预设区间为符号位和指数位均相同的浮点数组成的连续区间;
第二转换模块302,用于将第二浮点数转换为目标无符号整数,目标无符号整数中与第一浮点数的符号位与指数位相对应位置上的值均为0;
第一确定模块303,用于基于目标无符号整数,确定16位浮点数,以完成对第一浮点数的转换。
可选地,第一转换模块301包括:
运算子模块,用于将第一浮点数与预设区间的最小值相加,得到第二浮点数。
可选地,参见图3B,第二转换模块302包括:
第一转换子模块3021,用于将第二浮点数转换为无符号整数,得到第一无符号整数;
第二转换子模块3022,用于将预设区间的最小值转换为无符号整数,得到第二无符号整数;
第一计算子模块3023,用于计算第一无符号整数与第二无符号整数之间的差,得到目标无符号整数。
可选地,参见图3C,第一确定模块303包括:
去除子模块3031,用于将目标无符号整数中与第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
第一确定子模块3032,用于将剩余的23位数中从左起的连续16位数确定为16位浮点数。
可选地,参见图3D,该装置300还包括:
第二确定模块304,用于当接收到还原指令时,基于16位浮点数,确定第三无符号整数,还原指令用于指示将16位浮点数转换为32位浮点数;
第三转换模块305,用于基于预设区间,将第三无符号整数转换为第四无符号整数,第四无符号整数从左起的连续9位数与预设区间内的浮点数的符号位和指数位的值相同;
第四转换模块306,用于将第四无符号整数转换为浮点数,得到第三浮点数;
第三确定模块307,用于基于预设区间和第三浮点数,确定第四浮点数,并将第四浮点数确定为将16位浮点数转换后所得到的32位浮点数。
可选地,参见图3E,第三转换模块305包括:
第三转换子模块3051,用于将预设区间的最小值转换为无符号整数,得到第二无符号整数;第二计算子模块,用于计算第三无符号整数和第二无符号整数的和,得到第四无符号整数;或者,
替换子模块3052,用于根据预设区间内的浮点数的符号位和指数位,将第三无符号整数从左起的连续9位数依此替换为符号位和指数位的值,得到第四无符号整数。
可选地,参见图3F,第三确定模块307包括:
第二确定子模块3071,用于确定预设区间的最小值对应的浮点数,得到第五浮点数;
第三计算子模块3072,用于计算第三浮点数和第五浮点数之间的差,得到第四浮点数。
综上所述,在本发明实施例中,GPU可以将待转换的位于区间[0,1]之间的32位浮点数转换到预设区间内,得到第二浮点数,由于预设区间内的所有浮点数的符号位和指数位均相同,所以,可以将该第二浮点数转换为目标无符号整数,该目标无符号整数中与第一浮点数的指数位和符号位相对应的位置上的值均为0,之后,可以根据该目标无符号整数中剩余23位不为0的尾数来确定16位浮点数,这样,转换后得到的16位浮点数可以不包含有符号位和指数位,也即是该16位浮点数可以全部为尾数,相较于相关技术中,转换后的16位浮点数中尾数只保留原23位尾数的11位,本发明实施例中确定的16位浮点数保留了32位浮点数的23位尾数中的16位,尾数损失减少,精度提高。
需要说明的是:上述实施例提供的基于GPU的浮点数转换装置在进行浮点数转换时,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于GPU的浮点数转换装置与基于GPU的浮点数转换方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种基于图形处理器GPU的浮点数转换方法,其特征在于,所述方法包括:
将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,所述第一浮点数为待转换的32位浮点数,所述预设区间为符号位和指数位均相同的浮点数组成的连续区间;
将所述第二浮点数转换为目标无符号整数,所述目标无符号整数中与所述第一浮点数的符号位与指数位相对应位置上的值均为0;
基于所述目标无符号整数,确定16位浮点数,以完成对所述第一浮点数的转换,所述16位浮点数为所述目标无符号整数中除与所述第一浮点数的符号位与指数位相对应位置上的数之外的剩余数中的连续16位数。
2.如权利要求1所述的方法,其特征在于,所述将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,包括:
将所述第一浮点数与所述预设区间的最小值相加,得到所述第二浮点数。
3.如权利要求1所述的方法,其特征在于,所述将所述第二浮点数转换为目标无符号整数,包括:
将所述第二浮点数转换为无符号整数,得到第一无符号整数;
将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;
计算所述第一无符号整数与所述第二无符号整数之间的差,得到所述目标无符号整数。
4.如权利要求1所述的方法,其特征在于,所述基于所述目标无符号整数,确定16位浮点数,包括:
将所述目标无符号整数中与所述第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
将所述剩余的23位数中从左起的连续16位数确定为所述16位浮点数。
5.如权利要求1-4任一所述的方法,其特征在于,所述基于所述目标无符号整数,确定16位浮点数之后,还包括:
当接收到还原指令时,基于所述16位浮点数,确定第三无符号整数,所述还原指令用于指示将所述16位浮点数转换为32位浮点数;
基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,所述第四无符号整数从左起的连续9位数与所述预设区间内的浮点数的符号位和指数位的值相同;
将所述第四无符号整数转换为浮点数,得到第三浮点数;
基于所述预设区间和所述第三浮点数,确定第四浮点数,并将所述第四浮点数确定为将所述16位浮点数转换后所得到的32位浮点数。
6.如权利要求5所述的方法,其特征在于,所述基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,包括:
将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;计算所述第三无符号整数和所述第二无符号整数的和,得到所述第四无符号整数;或者,
根据所述预设区间内的浮点数的符号位和指数位,将所述第三无符号整数从左起的连续9位数依此替换为所述符号位和所述指数位的值,得到所述第四无符号整数。
7.如权利要求5所述的方法,其特征在于,所述基于所述预设区间和所述第三浮点数,确定第四浮点数,包括:
确定所述预设区间的最小值对应的浮点数,得到第五浮点数;
计算所述第三浮点数和所述第五浮点数之间的差,得到所述第四浮点数。
8.一种基于GPU的浮点数转换装置,其特征在于,所述装置包括:
第一转换模块,用于将第一浮点数转换为预设区间内的浮点数,得到第二浮点数,所述第一浮点数为待转换的32位浮点数,所述预设区间为符号位和指数位均相同的浮点数组成的连续区间;
第二转换模块,用于将所述第二浮点数转换为目标无符号整数,所述目标无符号整数中与所述第一浮点数的符号位与指数位相对应位置上的值均为0;
第一确定模块,用于基于所述目标无符号整数,确定16位浮点数,以完成对所述第一浮点数的转换,所述16位浮点数为所述目标无符号整数中除与所述第一浮点数的符号位与指数位相对应位置上的数之外的剩余数中的连续16位数。
9.如权利要求8所述的装置,其特征在于,所述第一转换模块包括:
运算子模块,用于将所述第一浮点数与所述预设区间的最小值相加,得到所述第二浮点数。
10.如权利要求8所述的装置,其特征在于,所述第二转换模块包括:
第一转换子模块,用于将所述第二浮点数转换为无符号整数,得到第一无符号整数;
第二转换子模块,用于将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;
第一计算子模块,用于计算所述第一无符号整数与所述第二无符号整数之间的差,得到所述目标无符号整数。
11.如权利要求8所述的装置,其特征在于,所述第一确定模块包括:
去除子模块,用于将所述目标无符号整数中与所述第一浮点数的符号位和指数位相对应位置上的连续9位数去除,得到剩余的23位数;
第一确定子模块,用于将所述剩余的23位数中从左起的连续16位数确定为所述16位浮点数。
12.如权利要求8-11任一所述的装置,其特征在于,所述装置还包括:
第二确定模块,用于当接收到还原指令时,基于所述16位浮点数,确定第三无符号整数,所述还原指令用于指示将所述16位浮点数转换为32位浮点数;
第三转换模块,用于基于所述预设区间,将所述第三无符号整数转换为第四无符号整数,所述第四无符号整数从左起的连续9位数与所述预设区间内的浮点数的符号位和指数位的值相同;
第四转换模块,用于将所述第四无符号整数转换为浮点数,得到第三浮点数;
第三确定模块,用于基于所述预设区间和所述第三浮点数,确定第四浮点数,并将所述第四浮点数确定为将所述16位浮点数转换后所得到的32位浮点数。
13.如权利要求12所述的装置,其特征在于,所述第三转换模块包括:
第三转换子模块,用于将所述预设区间的最小值转换为无符号整数,得到第二无符号整数;第二计算子模块,用于计算所述第三无符号整数和所述第二无符号整数的和,得到所述第四无符号整数;或者,
替换子模块,用于根据所述预设区间内的浮点数的符号位和指数位,将所述第三无符号整数从左起的连续9位数依此替换为所述符号位和所述指数位的值,得到所述第四无符号整数。
14.如权利要求12所述的装置,其特征在于,所述第三确定模块包括:
第二确定子模块,用于确定所述预设区间的最小值对应的浮点数,得到第五浮点数;
第三计算子模块,用于计算所述第三浮点数和所述第五浮点数之间的差,得到所述第四浮点数。
CN201710197617.0A 2017-03-29 2017-03-29 一种基于gpu的浮点数转换方法及装置 Active CN107038016B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710197617.0A CN107038016B (zh) 2017-03-29 2017-03-29 一种基于gpu的浮点数转换方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710197617.0A CN107038016B (zh) 2017-03-29 2017-03-29 一种基于gpu的浮点数转换方法及装置

Publications (2)

Publication Number Publication Date
CN107038016A CN107038016A (zh) 2017-08-11
CN107038016B true CN107038016B (zh) 2019-11-15

Family

ID=59533374

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710197617.0A Active CN107038016B (zh) 2017-03-29 2017-03-29 一种基于gpu的浮点数转换方法及装置

Country Status (1)

Country Link
CN (1) CN107038016B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408028B (zh) * 2018-09-21 2021-03-05 东软集团股份有限公司 浮点数运算方法、装置及存储介质
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
CN112711440A (zh) * 2019-10-25 2021-04-27 安徽寒武纪信息科技有限公司 用于转换数据类型的转换器、芯片、电子设备及其方法
CN113791756B (zh) * 2021-09-18 2022-12-23 中科寒武纪科技股份有限公司 转数方法、存储介质、装置及板卡

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631391B1 (en) * 1999-04-09 2003-10-07 Fuji Xerox Co., Ltd. Parallel computer system and parallel computing method
CN101432689A (zh) * 2006-05-05 2009-05-13 高通股份有限公司 精度受控的迭代算术逻辑单元
CN101533596A (zh) * 2008-02-06 2009-09-16 佳能株式会社 图像信号处理装置和图像信号处理方法
CN101551740A (zh) * 2008-03-31 2009-10-07 株式会社日立制作所 嵌入控制装置
CN102122240A (zh) * 2011-01-20 2011-07-13 东莞市泰斗微电子科技有限公司 一种数据类型转换电路
CN103729864A (zh) * 2013-12-18 2014-04-16 珠海金山网络游戏科技有限公司 一种三维模型的压缩存储方法及系统
CN105094744A (zh) * 2015-07-28 2015-11-25 成都腾悦科技有限公司 一种可变浮点数据微处理器
CN106502626A (zh) * 2016-11-03 2017-03-15 北京百度网讯科技有限公司 数据处理方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009017849A1 (en) * 2008-03-11 2009-02-05 Phybit Pte. Ltd. Method and system for creating fixed-point software code

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631391B1 (en) * 1999-04-09 2003-10-07 Fuji Xerox Co., Ltd. Parallel computer system and parallel computing method
CN101432689A (zh) * 2006-05-05 2009-05-13 高通股份有限公司 精度受控的迭代算术逻辑单元
CN101533596A (zh) * 2008-02-06 2009-09-16 佳能株式会社 图像信号处理装置和图像信号处理方法
CN101551740A (zh) * 2008-03-31 2009-10-07 株式会社日立制作所 嵌入控制装置
CN102122240A (zh) * 2011-01-20 2011-07-13 东莞市泰斗微电子科技有限公司 一种数据类型转换电路
CN103729864A (zh) * 2013-12-18 2014-04-16 珠海金山网络游戏科技有限公司 一种三维模型的压缩存储方法及系统
CN105094744A (zh) * 2015-07-28 2015-11-25 成都腾悦科技有限公司 一种可变浮点数据微处理器
CN106502626A (zh) * 2016-11-03 2017-03-15 北京百度网讯科技有限公司 数据处理方法和装置

Also Published As

Publication number Publication date
CN107038016A (zh) 2017-08-11

Similar Documents

Publication Publication Date Title
CN107038016B (zh) 一种基于gpu的浮点数转换方法及装置
CN103180820A (zh) 用于执行浮点除法的方法和装置
CN106951211B (zh) 一种可重构定浮点通用乘法器
KR940008615B1 (ko) 고기수제산기
CN107305484B (zh) 一种非线性函数运算装置及方法
CN106940638A (zh) 一种快速、低功耗和省面积的二进制原码加/减法运算单元的硬件架构
CN113377332B (zh) 一种基于线性分段的softmax硬件实现方法
US8155469B2 (en) Filter circuit, image processing circuit, and filtering method
KR100847934B1 (ko) 스케일링된 정수를 사용하는 부동 소수점 연산
JP2822399B2 (ja) 対数関数演算装置
CN112232499A (zh) 卷积神经网络加速器
CN114816335B (zh) 一种忆阻器阵列符号数乘法实现方法、装置及设备
CN113126954A (zh) 浮点数乘法计算的方法、装置和算术逻辑单元
JP2020098469A (ja) 演算処理装置および演算処理装置の制御方法
CN115146769A (zh) 一种基于范围可寻址查找表计算tanh函数的数字电路模块
WO2021039164A1 (ja) 情報処理装置、情報処理システム及び情報処理方法
CN109558109B (zh) 数据运算装置及相关产品
CN109582279B (zh) 数据运算装置及相关产品
CN111313906A (zh) 一种浮点数的转换电路
CN111930670A (zh) 异构智能处理量化装置、量化方法、电子设备及存储介质
CN111310909A (zh) 一种浮点数转换电路
CN116127261B (zh) 处理器中矩阵乘累加方法、装置及电子设备
CN110069240A (zh) 定点与浮点数据计算方法及装置
CN113222158B (zh) 一种量子态的获得方法及装置
CN102724432B (zh) 一种基于sse2的图像混合处理方法

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 510660 Guangzhou City, Guangzhou, Guangdong, Whampoa Avenue, No. 315, self - made 1-17

Applicant after: Guangzhou KuGou Networks Co., Ltd.

Address before: 510000 B1, building, No. 16, rhyme Road, Guangzhou, Guangdong, China 13F

Applicant before: Guangzhou KuGou Networks Co., Ltd.

GR01 Patent grant
GR01 Patent grant