本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種基于gpu(graphicprocessingunit,圖形處理器)的浮點(diǎn)數(shù)轉(zhuǎn)換方法及裝置。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)的圖形處理能力變得越來(lái)越重要。其中,計(jì)算機(jī)的顯卡是影響計(jì)算機(jī)圖形處理能力的重要因素。通常,計(jì)算機(jī)的顯卡可以存儲(chǔ)諸如歸一化的顏色值或法線向量、隨機(jī)數(shù)等數(shù)據(jù),上述存儲(chǔ)的數(shù)據(jù)均具有一個(gè)共同的特點(diǎn),即位于區(qū)間[0,1]之間。顯卡可以通過(guò)32位浮點(diǎn)數(shù)來(lái)存儲(chǔ)上述數(shù)據(jù),但是,由于顯卡的顯存容量和帶寬的限制,顯卡的gpu經(jīng)常需要將32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)進(jìn)行存儲(chǔ)。
通常,一個(gè)二進(jìn)制數(shù)可以表示為a=m*2n,m為僅有一個(gè)整數(shù)位且整數(shù)位不為0的二進(jìn)制小數(shù)。將該二進(jìn)制數(shù)轉(zhuǎn)化為32位浮點(diǎn)數(shù)后,該32位浮點(diǎn)數(shù)的最高一位為符號(hào)位,用于指示該二進(jìn)制數(shù)的正負(fù)。從符號(hào)位的下一位起連續(xù)8位為指數(shù)位,該指數(shù)位為該二進(jìn)制數(shù)的指數(shù)n對(duì)應(yīng)的二進(jìn)制數(shù),剩余的23位為尾數(shù),尾數(shù)的左起第一位為m的小數(shù)部分的第一位,依次類推,當(dāng)m不足23位時(shí),不足的位數(shù)用0補(bǔ)足。
相關(guān)技術(shù)中,當(dāng)gpu將32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)時(shí),將32位浮點(diǎn)數(shù)的最高一位作為16位浮點(diǎn)數(shù)的最高一位,該最高一位即為16位浮點(diǎn)數(shù)的符號(hào)位,將32位浮點(diǎn)數(shù)的指數(shù)位中從右起的連續(xù)4位去除,剩余的4位作為16位浮點(diǎn)數(shù)的指數(shù)位,將32位浮點(diǎn)數(shù)的23位尾數(shù)從右起的連續(xù)12位去除,剩余的11位作為16位浮點(diǎn)數(shù)的尾數(shù)。
通過(guò)上述方法將32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)的過(guò)程中,由于將32位浮點(diǎn)數(shù)的尾數(shù)去除了12位,得到的16位浮點(diǎn)數(shù)中僅保留了11位的尾數(shù),因此,轉(zhuǎn)換得到的16位浮點(diǎn)數(shù)的精度遠(yuǎn)低于32位浮點(diǎn)數(shù)的精度,數(shù)據(jù)的精度損失較大。
技術(shù)實(shí)現(xiàn)要素:
為了解決相關(guān)技術(shù)中32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)時(shí),精度損失較大的問(wèn)題,本發(fā)明實(shí)施例提供了一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法及裝置。所述技術(shù)方案如下:
一方面,提供了一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法,所述方法包括:
將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),所述第一浮點(diǎn)數(shù)為待轉(zhuǎn)換的32位浮點(diǎn)數(shù),所述預(yù)設(shè)區(qū)間為符號(hào)位和指數(shù)位均相同的浮點(diǎn)數(shù)組成的連續(xù)區(qū)間;
將所述第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),所述目標(biāo)無(wú)符號(hào)整數(shù)中與所述第一浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位相對(duì)應(yīng)位置上的值均為0;
基于所述目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),以完成對(duì)所述第一浮點(diǎn)數(shù)的轉(zhuǎn)換。
可選地,所述將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),包括:
將所述第一浮點(diǎn)數(shù)與所述預(yù)設(shè)區(qū)間的最小值相加,得到所述第二浮點(diǎn)數(shù)。
可選地,所述將所述第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),包括:
將所述第二浮點(diǎn)數(shù)轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第一無(wú)符號(hào)整數(shù);
將所述預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);
計(jì)算所述第一無(wú)符號(hào)整數(shù)與所述第二無(wú)符號(hào)整數(shù)之間的差,得到所述目標(biāo)無(wú)符號(hào)整數(shù)。
可選地,所述基于所述目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),包括:
將所述目標(biāo)無(wú)符號(hào)整數(shù)中與所述第一浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相對(duì)應(yīng)位置上的連續(xù)9位數(shù)去除,得到剩余的23位數(shù);
將所述剩余的23位數(shù)中從左起的連續(xù)16位數(shù)確定為所述16位浮點(diǎn)數(shù)。
可選地,所述基于所述目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù)之后,還包括:
當(dāng)接收到還原指令時(shí),基于所述16位浮點(diǎn)數(shù),確定第三無(wú)符號(hào)整數(shù),所述還原指令用于指示將所述16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù);
基于所述預(yù)設(shè)區(qū)間,將所述第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),所述第四無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)與所述預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值相同;
將所述第四無(wú)符號(hào)整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù);
基于所述預(yù)設(shè)區(qū)間和所述第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),并將所述第四浮點(diǎn)數(shù)確定為將所述16位浮點(diǎn)數(shù)轉(zhuǎn)換后所得到的32位浮點(diǎn)數(shù)。
可選地,所述基于所述預(yù)設(shè)區(qū)間,將所述第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),包括:
將所述預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);計(jì)算所述第三無(wú)符號(hào)整數(shù)和所述第二無(wú)符號(hào)整數(shù)的和,得到所述第四無(wú)符號(hào)整數(shù);或者,
根據(jù)所述預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位,將所述第三無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)依此替換為所述符號(hào)位和所述指數(shù)位的值,得到所述第四無(wú)符號(hào)整數(shù)。
可選地,所述基于所述預(yù)設(shè)區(qū)間和所述第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),包括:
確定所述預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),得到第五浮點(diǎn)數(shù);
計(jì)算所述第三浮點(diǎn)數(shù)和所述第五浮點(diǎn)數(shù)之間的差,得到所述第四浮點(diǎn)數(shù)。
另一方面,提供了一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置,所述裝置包括:
第一轉(zhuǎn)換模塊,用于將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),所述第一浮點(diǎn)數(shù)為待轉(zhuǎn)換的32位浮點(diǎn)數(shù),所述預(yù)設(shè)區(qū)間為符號(hào)位和指數(shù)位均相同的浮點(diǎn)數(shù)組成的連續(xù)區(qū)間;
第二轉(zhuǎn)換模塊,用于將所述第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),所述目標(biāo)無(wú)符號(hào)整數(shù)中與所述第一浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位相對(duì)應(yīng)位置上的值均為0;
第一確定模塊,用于基于所述目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),以完成對(duì)所述第一浮點(diǎn)數(shù)的轉(zhuǎn)換。
可選地,所述第一轉(zhuǎn)換模塊包括:
運(yùn)算模塊,用于將所述第一浮點(diǎn)數(shù)與所述預(yù)設(shè)區(qū)間的最小值相加,得到所述第二浮點(diǎn)數(shù)。
可選地,所述第二轉(zhuǎn)換模塊包括:
第一轉(zhuǎn)換子模塊,用于將所述第二浮點(diǎn)數(shù)轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第一無(wú)符號(hào)整數(shù);
第二轉(zhuǎn)換子模塊,用于將所述預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);
第一計(jì)算子模塊,用于計(jì)算所述第一無(wú)符號(hào)整數(shù)與所述第二無(wú)符號(hào)整數(shù)之間的差,得到所述目標(biāo)無(wú)符號(hào)整數(shù)。
可選地,所述第一確定模塊包括:
去除子模塊,用于將所述目標(biāo)無(wú)符號(hào)整數(shù)中與所述第一浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相對(duì)應(yīng)位置上的連續(xù)9位數(shù)去除,得到剩余的23位數(shù);
第一確定子模塊,用于將所述剩余的23位數(shù)中從左起的連續(xù)16位數(shù)確定為所述16位浮點(diǎn)數(shù)。
可選地,所述裝置還包括:
第二確定模塊,用于當(dāng)接收到還原指令時(shí),基于所述16位浮點(diǎn)數(shù),確定第三無(wú)符號(hào)整數(shù),所述還原指令用于指示將所述16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù);
第三轉(zhuǎn)換模塊,用于基于所述預(yù)設(shè)區(qū)間,將所述第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),所述第四無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)與所述預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值相同;
第四轉(zhuǎn)換模塊,用于將所述第四無(wú)符號(hào)整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù);
第三確定模塊,用于基于所述預(yù)設(shè)區(qū)間和所述第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),并將所述第四浮點(diǎn)數(shù)確定為將所述16位浮點(diǎn)數(shù)轉(zhuǎn)換后所得到的32位浮點(diǎn)數(shù)。
可選地,所述第三轉(zhuǎn)換模塊包括:
第三轉(zhuǎn)換子模塊,用于將所述預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);第二計(jì)算子模塊,用于計(jì)算所述第三無(wú)符號(hào)整數(shù)和所述第二無(wú)符號(hào)整數(shù)的和,得到所述第四無(wú)符號(hào)整數(shù);或者,
替換子模塊,用于根據(jù)所述預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位,將所述第三無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)依此替換為所述符號(hào)位和所述指數(shù)位的值,得到所述第四無(wú)符號(hào)整數(shù)。
可選地,所述第三確定模塊包括:
第二確定子模塊,用于確定所述預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),得到第五浮點(diǎn)數(shù);
第三計(jì)算子模塊,用于計(jì)算所述第三浮點(diǎn)數(shù)和所述第五浮點(diǎn)數(shù)之間的差,得到所述第四浮點(diǎn)數(shù)。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:在本發(fā)明實(shí)施例中,將待轉(zhuǎn)換的32位浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),由于該預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,因此,可以將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位相對(duì)應(yīng)的位置上的值均為0,之后,可以根據(jù)該目標(biāo)無(wú)符號(hào)整數(shù)中剩余23位不為0的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),這樣,相較于相關(guān)技術(shù)中,只能獲取32位浮點(diǎn)數(shù)的23位尾數(shù)中的11位作為16位浮點(diǎn)數(shù)的尾數(shù),本發(fā)明實(shí)施例轉(zhuǎn)換得到的16位浮點(diǎn)數(shù)的尾數(shù)位數(shù)增加,精度提高。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法的流程圖;
圖2是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法的流程圖;
圖3a是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置結(jié)構(gòu)示意圖;
圖3b是本發(fā)明實(shí)施例提供的第二轉(zhuǎn)換模塊的結(jié)構(gòu)示意圖;
圖3c是本發(fā)明實(shí)施例提供的第一確定模塊的結(jié)構(gòu)示意圖;
圖3d是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置結(jié)構(gòu)示意圖;
圖3e是本發(fā)明實(shí)施例提供的第三轉(zhuǎn)換模塊的結(jié)構(gòu)示意圖;
圖3f是本發(fā)明實(shí)施例提供的第三確定模塊的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
在對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)的解釋說(shuō)明之前,先對(duì)本發(fā)明實(shí)施例的應(yīng)用場(chǎng)景予以介紹。通常,計(jì)算機(jī)的顯卡需要存儲(chǔ)的數(shù)據(jù),如歸一化的顏色值或者法線向量以及隨機(jī)數(shù)等,均具有一個(gè)共同特點(diǎn),即這些數(shù)據(jù)均位于區(qū)間[0,1]之間。顯卡可以通過(guò)32位浮點(diǎn)數(shù)存儲(chǔ)這些位于區(qū)間[0,1]之間的數(shù)據(jù),但是由于顯卡的顯存容量和帶寬限制,顯卡的gpu可以將上述數(shù)據(jù)對(duì)應(yīng)的32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)進(jìn)行存儲(chǔ),這樣,原本存儲(chǔ)一個(gè)32位浮點(diǎn)數(shù)的空間可以存儲(chǔ)兩個(gè)16位浮點(diǎn)數(shù),在顯存容量一定的情況下,能夠存儲(chǔ)的數(shù)據(jù)增多。
相關(guān)技術(shù)中,將32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)之后,該16位浮點(diǎn)數(shù)仍然保存了1位的符號(hào)位,4位的指數(shù)位,也即是,該16位浮點(diǎn)數(shù)中只有11位的尾數(shù),而轉(zhuǎn)換之前的32位浮點(diǎn)數(shù)包括23位的尾數(shù),也就是說(shuō),轉(zhuǎn)換后得到的16位浮點(diǎn)數(shù)損失了12位尾數(shù)。由于損失了12位尾數(shù),轉(zhuǎn)換后得到的16位浮點(diǎn)數(shù)的精度較轉(zhuǎn)換之前的32位浮點(diǎn)數(shù)將大大降低。
為了解決上述問(wèn)題,本發(fā)明實(shí)施例提供了一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法,在該方法中,可以將32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),得到第二浮點(diǎn)數(shù),由于預(yù)設(shè)區(qū)間內(nèi)的所有浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,所以,可以將該第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位相對(duì)應(yīng)的位置上的值均為0,之后,可以根據(jù)該目標(biāo)無(wú)符號(hào)整數(shù)中剩余23位不為0的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),這樣,轉(zhuǎn)換后得到的16位浮點(diǎn)數(shù)可以不包含有符號(hào)位和指數(shù)位,也即是該16位浮點(diǎn)數(shù)可以全部為尾數(shù),相較于相關(guān)技術(shù)中,轉(zhuǎn)換后的16位浮點(diǎn)數(shù)中尾數(shù)只保留原23位尾數(shù)的11位,本發(fā)明實(shí)施例中確定的16位浮點(diǎn)數(shù)保留了32位浮點(diǎn)數(shù)的23位尾數(shù)中的16位,尾數(shù)損失減少,精度提高。
圖1是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法的流程圖,該方法可以用于計(jì)算機(jī)中,如圖1,該方法包括:
步驟101:將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),該第一浮點(diǎn)數(shù)為待轉(zhuǎn)換的32位浮點(diǎn)數(shù),該預(yù)設(shè)區(qū)間為符號(hào)位和指數(shù)位均相同的浮點(diǎn)數(shù)組成的連續(xù)區(qū)間。
步驟102:將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位相對(duì)應(yīng)位置上的值均為0。
步驟103:基于該目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),以完成對(duì)第一浮點(diǎn)數(shù)的轉(zhuǎn)換。
在本發(fā)明實(shí)施例中,將待轉(zhuǎn)換的32位浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),由于該預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,因此,可以將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位相對(duì)應(yīng)的位置上的值均為0,之后,可以根據(jù)該目標(biāo)無(wú)符號(hào)整數(shù)中剩余23位不為0的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),這樣,相較于相關(guān)技術(shù)中,只能獲取32位浮點(diǎn)數(shù)的23位尾數(shù)中的11位作為16位浮點(diǎn)數(shù)的尾數(shù),本發(fā)明實(shí)施例轉(zhuǎn)換得到的16位浮點(diǎn)數(shù)的尾數(shù)位數(shù)增加,精度提高。
可選地,將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),包括:
將第一浮點(diǎn)數(shù)與預(yù)設(shè)區(qū)間的最小值相加,得到第二浮點(diǎn)數(shù)。
可選地,將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),包括:
將第二浮點(diǎn)數(shù)轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第一無(wú)符號(hào)整數(shù);
將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);
計(jì)算第一無(wú)符號(hào)整數(shù)與第二無(wú)符號(hào)整數(shù)之間的差,得到目標(biāo)無(wú)符號(hào)整數(shù)。
可選地,基于目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),包括:
將目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相對(duì)應(yīng)位置上的連續(xù)9位數(shù)去除,得到剩余的23位數(shù);
將剩余的23位數(shù)中從左起的連續(xù)16位數(shù)確定為16位浮點(diǎn)數(shù)。
可選地,基于目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù)之后,還包括:
當(dāng)接收到還原指令時(shí),基于16位浮點(diǎn)數(shù),確定第三無(wú)符號(hào)整數(shù),還原指令用于指示將16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù);
基于預(yù)設(shè)區(qū)間,將第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),第四無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)與預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值相同;
將第四無(wú)符號(hào)整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù);
基于預(yù)設(shè)區(qū)間和第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),并將第四浮點(diǎn)數(shù)確定為將16位浮點(diǎn)數(shù)轉(zhuǎn)換后所得到的32位浮點(diǎn)數(shù)。
可選地,基于預(yù)設(shè)區(qū)間,將第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),包括:
將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);計(jì)算第三無(wú)符號(hào)整數(shù)和第二無(wú)符號(hào)整數(shù)的和,得到第四無(wú)符號(hào)整數(shù);或者,
根據(jù)預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位,將第三無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)依此替換為符號(hào)位和指數(shù)位的值,得到第四無(wú)符號(hào)整數(shù)。
可選地,基于預(yù)設(shè)區(qū)間和第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),包括:
確定預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),得到第五浮點(diǎn)數(shù);
計(jì)算第三浮點(diǎn)數(shù)和第五浮點(diǎn)數(shù)之間的差,得到第四浮點(diǎn)數(shù)。
上述所有可選技術(shù)方案,均可按照任意結(jié)合形成本發(fā)明的可選實(shí)施例,本發(fā)明實(shí)施例對(duì)此不再一一贅述。
圖2是本發(fā)明實(shí)施例提供的一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法的流程圖,該方法可以用于計(jì)算機(jī)的gpu中,如圖2所示,該方法包括:
步驟201:將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),該第一浮點(diǎn)數(shù)為待轉(zhuǎn)換的32位浮點(diǎn)數(shù),該預(yù)設(shè)區(qū)間為符號(hào)位和指數(shù)位均相同的浮點(diǎn)數(shù)組成的連續(xù)區(qū)間。
通常,在很多應(yīng)用場(chǎng)景下,計(jì)算機(jī)顯卡所要存儲(chǔ)的數(shù)據(jù)均是位于區(qū)間[0,1]之間的數(shù)據(jù),如果將該位于區(qū)間[0,1]之間的數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的二進(jìn)制數(shù),并將該二進(jìn)制數(shù)表示為a=m*2n的形式,那么,就可以看出位于區(qū)間[0,0.5]之間的數(shù)據(jù)對(duì)應(yīng)的n均是相等的,位于區(qū)間[0.5,1]之間的數(shù)據(jù)對(duì)應(yīng)的n也均是相等的,但是位于區(qū)間[0,0.5]之間的數(shù)據(jù)對(duì)應(yīng)的n與位于區(qū)間[0.5,1]之間的數(shù)據(jù)對(duì)應(yīng)的n是不同的。因此,gpu可以將位于區(qū)間[0,1]之間的數(shù)據(jù)對(duì)應(yīng)的32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),該預(yù)設(shè)區(qū)間內(nèi)的所有數(shù)據(jù)對(duì)應(yīng)的n全部相同,也即是,該預(yù)設(shè)區(qū)間內(nèi)的所有數(shù)據(jù)的浮點(diǎn)數(shù)的指數(shù)位均相同。這樣,當(dāng)將位于區(qū)間[0,1]之間的數(shù)據(jù)對(duì)應(yīng)的32位浮點(diǎn)數(shù)全部轉(zhuǎn)換到預(yù)設(shè)區(qū)間后,得到的浮點(diǎn)數(shù)的指數(shù)位也均相同。另外,由于位于區(qū)間[0,1]之間的數(shù)據(jù)均為正數(shù),也即是,位于區(qū)間[0,1]之間的數(shù)據(jù)對(duì)應(yīng)的浮點(diǎn)數(shù)的符號(hào)位是全部相同的,因此,在將該區(qū)間[0,1]之間的數(shù)據(jù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間時(shí),該預(yù)設(shè)區(qū)間內(nèi)的數(shù)據(jù)對(duì)應(yīng)的浮點(diǎn)數(shù)的符號(hào)位也應(yīng)該相同,這樣,當(dāng)區(qū)間[0,1]之間的數(shù)據(jù)對(duì)應(yīng)的浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間之后,才能保證得到的浮點(diǎn)數(shù)的符號(hào)位是相同的。
其中,當(dāng)gpu將區(qū)間[0,1]之間的數(shù)據(jù)對(duì)應(yīng)的任一32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi)時(shí),該待轉(zhuǎn)換的32位浮點(diǎn)數(shù)即為第一浮點(diǎn)數(shù),gpu可以將該第一浮點(diǎn)數(shù)與預(yù)設(shè)區(qū)間的最小值相加,得到第二浮點(diǎn)數(shù)。其中,該預(yù)設(shè)區(qū)間可以為[2k,2k+1],k等于0或者k為大于0的整數(shù)。
需要說(shuō)明的是,當(dāng)k等于0或者k為大于0的任一整數(shù)時(shí),預(yù)設(shè)區(qū)間[2k,2k+1]內(nèi)的數(shù)據(jù)對(duì)應(yīng)的浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位均是相同的。例如,當(dāng)k等于0時(shí),該預(yù)設(shè)區(qū)間為[1,2],將該預(yù)設(shè)區(qū)間[1,2]內(nèi)的數(shù)據(jù)表示為a=m*2n的形式時(shí),n均為127,將n轉(zhuǎn)換為二進(jìn)制數(shù),為01111111,也即是,該預(yù)設(shè)區(qū)間[1,2]內(nèi)的數(shù)據(jù)對(duì)應(yīng)的32位浮點(diǎn)數(shù)的指數(shù)位均為01111111。并且,由于預(yù)設(shè)區(qū)間[1,2]內(nèi)的數(shù)據(jù)均為正數(shù),因此,對(duì)應(yīng)的32位浮點(diǎn)數(shù)的符號(hào)位均為0。
另外,當(dāng)k取值越大時(shí),該預(yù)設(shè)區(qū)間的范圍就越大,也即是,該預(yù)設(shè)區(qū)間內(nèi)的包含的數(shù)據(jù)就越多。在顯卡的顯存容量固定的情況下,當(dāng)存儲(chǔ)的預(yù)設(shè)區(qū)間內(nèi)的數(shù)據(jù)越多,精度損失也就越大,因此,當(dāng)k等于0,預(yù)設(shè)區(qū)間為[1,2]時(shí),將第一浮點(diǎn)數(shù)轉(zhuǎn)換到該預(yù)設(shè)區(qū)間[1,2]內(nèi),得到的16位浮點(diǎn)數(shù)的精度最高。在本發(fā)明實(shí)施例的以下步驟中,將主要以預(yù)設(shè)區(qū)間[1,2]為例對(duì)本發(fā)明實(shí)施例提供的浮點(diǎn)數(shù)轉(zhuǎn)換方法進(jìn)行解釋說(shuō)明。
可選地,當(dāng)?shù)玫降诙↑c(diǎn)數(shù)之后,gpu還可以計(jì)算第二浮點(diǎn)數(shù)與2-16對(duì)應(yīng)的浮點(diǎn)數(shù)的和,并將得到的和通過(guò)步驟202-203轉(zhuǎn)換成16位浮點(diǎn)數(shù),這樣,得到的16位浮點(diǎn)數(shù)將是經(jīng)過(guò)四舍五入的浮點(diǎn)數(shù)。
基于上述描述,由于將位于區(qū)間[0,1]之間的數(shù)據(jù)的32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi)得到的第二浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,不同之處僅在于剩余的23位尾數(shù),因此,如果gpu按照相關(guān)技術(shù)將轉(zhuǎn)換到該預(yù)設(shè)區(qū)間內(nèi)的32位浮點(diǎn)數(shù)轉(zhuǎn)換成16位浮點(diǎn)數(shù),得到的所有16位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位也均是相同,在這種情況下,計(jì)算機(jī)的顯卡存儲(chǔ)該16位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位對(duì)于識(shí)別該16位浮點(diǎn)數(shù)沒有任何作用,也即是,相關(guān)技術(shù)中計(jì)算機(jī)的顯卡存儲(chǔ)該16位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位是對(duì)顯存容量的一種浪費(fèi)?;谏鲜隹紤],本發(fā)明實(shí)施例將通過(guò)步驟202和步驟203,去除第二浮點(diǎn)數(shù)中的符號(hào)位和指數(shù)位,根據(jù)第二浮點(diǎn)數(shù)的23位尾數(shù)來(lái)確定16位浮點(diǎn)數(shù)。
步驟202:將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位相對(duì)應(yīng)位置上的值均為0。
基于步驟201中的描述,當(dāng)gpu將待轉(zhuǎn)換的第一浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),得到第二浮點(diǎn)數(shù)之后,可以將該第二浮點(diǎn)數(shù)轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第一無(wú)符號(hào)整數(shù);將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);計(jì)算第一無(wú)符號(hào)整數(shù)與第二無(wú)符號(hào)整數(shù)之間的差,得到目標(biāo)無(wú)符號(hào)整數(shù)。
其中,由于后續(xù)需要根據(jù)第二浮點(diǎn)數(shù)的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),而獲取該第二浮點(diǎn)數(shù)的尾數(shù)的操作需要通過(guò)無(wú)符號(hào)整數(shù)的運(yùn)算來(lái)實(shí)現(xiàn),因此,當(dāng)?shù)玫降诙↑c(diǎn)數(shù)之后,首先可以將該第二浮點(diǎn)數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為無(wú)符號(hào)整數(shù),從而得到第一無(wú)符號(hào)整數(shù)。之后,由于預(yù)設(shè)區(qū)間的最小值的32位浮點(diǎn)數(shù)的23位尾數(shù)均為0,而位于最高位的1位符號(hào)位和符號(hào)位之后的連續(xù)8位指數(shù)位的值,與第二浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位是相同的,也即是,與第一無(wú)符號(hào)整數(shù)的高9位的值相同的,因此,gpu可以將該預(yù)設(shè)區(qū)間的最小值也轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù),從而將該第一無(wú)符號(hào)整數(shù)和該第二無(wú)符號(hào)整數(shù)相減,得到高9為均為0、且剩余的23位與第二浮點(diǎn)數(shù)的尾數(shù)相同的目標(biāo)無(wú)符號(hào)整數(shù)。
需要說(shuō)明的是,gpu可以通過(guò)intrinsic(內(nèi)建)函數(shù)floatasunit,將第二浮點(diǎn)數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為無(wú)符號(hào)整數(shù),從而得到第一無(wú)符號(hào)整數(shù)。之后,gpu可以通過(guò)無(wú)符號(hào)整數(shù)加減法運(yùn)算,計(jì)算第一無(wú)符號(hào)整數(shù)和第二無(wú)符號(hào)整數(shù)之間的差,從而得到高9位全部為0的目標(biāo)無(wú)符號(hào)整數(shù)。
當(dāng)然,為了操作簡(jiǎn)便,減少運(yùn)算過(guò)程,gpu也可以在得到第一無(wú)符號(hào)整數(shù)之后,直接將該第一無(wú)符號(hào)整數(shù)的高9位全部設(shè)置為0。
步驟203:基于該目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),以完成對(duì)第一浮點(diǎn)數(shù)的轉(zhuǎn)換。
當(dāng)確定目標(biāo)無(wú)符號(hào)整數(shù)之后,由于該目標(biāo)無(wú)符號(hào)整數(shù)的高9位為0,剩余的連續(xù)23位的值與第二浮點(diǎn)數(shù)的尾數(shù)相同,因此,gpu可以將該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相對(duì)應(yīng)位置上的連續(xù)9位數(shù)去除,得到剩余的23位數(shù);將剩余的23位數(shù)中從左起的連續(xù)16位數(shù)確定為16位浮點(diǎn)數(shù)。這樣,確定得到的16位浮點(diǎn)數(shù)中的16位數(shù)將全部為第二浮點(diǎn)數(shù)的尾數(shù),而不存在符號(hào)位和指數(shù)位。相較于現(xiàn)有技術(shù)中確定的16位浮點(diǎn)數(shù)僅包括32位浮點(diǎn)數(shù)的11位尾數(shù),提高了精度。
可選地,當(dāng)確定16位浮點(diǎn)數(shù)之后,gpu可以將任一無(wú)符號(hào)整數(shù)的高16位或者是低16位替換為該16位浮點(diǎn)數(shù)進(jìn)行保存,也即是,對(duì)于一個(gè)32位的無(wú)符號(hào)整數(shù),將保存有兩個(gè)16位浮點(diǎn)數(shù)。
例如,假設(shè)目標(biāo)無(wú)符號(hào)整數(shù)為u,任一無(wú)符號(hào)整數(shù)為d,那么,gpu可以通過(guò)置換指令prmt.b32d,d,u,0x3265,將目標(biāo)無(wú)符號(hào)整數(shù)的剩余23位數(shù)中從左起的連續(xù)16位保存在d的低16位中。
通過(guò)步驟201-203,gpu將位于區(qū)間[0,1]之間的浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),將該預(yù)設(shè)區(qū)間內(nèi)的32位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位去除,并根據(jù)剩余的23位尾數(shù)確定得到16點(diǎn)數(shù)。之后,當(dāng)計(jì)算機(jī)的顯卡需要使用該16位浮點(diǎn)數(shù)時(shí),可以將該16位浮點(diǎn)數(shù)再還原為32位浮點(diǎn)數(shù)。在本發(fā)明實(shí)施例中,gpu可以通過(guò)步驟204-207,將16位浮點(diǎn)數(shù)換位為32位浮點(diǎn)數(shù)。
步驟204:當(dāng)接收到還原指令時(shí),基于該16位浮點(diǎn)數(shù),確定第三無(wú)符號(hào)整數(shù),該還原指令用于指示將該16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù)。
當(dāng)計(jì)算機(jī)的顯卡需要使用該16位浮點(diǎn)數(shù)時(shí),可以將該轉(zhuǎn)換后的16位浮點(diǎn)數(shù)再還原為32位浮點(diǎn)數(shù)。因此,當(dāng)gpu接收到還原指令時(shí),可以將32位全部為0的無(wú)符號(hào)整數(shù)的左起第10位開始的連續(xù)16位替換為該16位浮點(diǎn)數(shù),從而得到第三無(wú)符號(hào)整數(shù),該第三無(wú)符號(hào)整數(shù)的高9位均為0。
步驟205:基于預(yù)設(shè)區(qū)間,將第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),該第四無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)與該預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值相同。
由于第三無(wú)符號(hào)整數(shù)的高9位為0,也即是,第三無(wú)符號(hào)整數(shù)中與32位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位對(duì)應(yīng)的位置上的值均為0,因此,在將該第三無(wú)符號(hào)整數(shù)還原為32位浮點(diǎn)數(shù)時(shí),需要使該第三無(wú)符號(hào)整數(shù)的高9位的值還原為該16位浮點(diǎn)數(shù)轉(zhuǎn)換前對(duì)應(yīng)的32位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值,從而得到第四無(wú)符號(hào)整數(shù)。
其中,gpu可以將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);之后,計(jì)算該第三無(wú)符號(hào)整數(shù)和第二無(wú)符號(hào)整數(shù)的和,得到第四無(wú)符號(hào)整數(shù);或者,gpu可以根據(jù)預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位,將該第三無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)依此替換為符號(hào)位和所述指數(shù)位的值,得到第四無(wú)符號(hào)整數(shù)。
需要說(shuō)明的是,由于預(yù)設(shè)區(qū)間的最小值的符號(hào)位和指數(shù)位與該16位浮點(diǎn)數(shù)轉(zhuǎn)換前對(duì)應(yīng)的在該預(yù)設(shè)區(qū)間內(nèi)的32位浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相同,同時(shí),該預(yù)設(shè)區(qū)間的最小值的23位尾數(shù)均為0,因此,可以將該預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為第二無(wú)符號(hào)整數(shù),并計(jì)算該第二無(wú)符號(hào)整數(shù)和第三無(wú)符號(hào)整數(shù),這樣,第三無(wú)符號(hào)整數(shù)的23位尾數(shù)與第二無(wú)符號(hào)整數(shù)的23位均為0的尾數(shù)相加后,保持不變,而第三無(wú)符號(hào)整數(shù)的均為0的高9位與第二無(wú)符號(hào)整數(shù)的高9位相加,得到的高9位的值將與預(yù)設(shè)區(qū)間的最小值的符號(hào)位和指數(shù)位的值相同。因此,將第二無(wú)符號(hào)整數(shù)和第三無(wú)符號(hào)整數(shù)相加后,得到的第四無(wú)符號(hào)整數(shù)的高9位與預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相同,尾數(shù)部分的高16位即為16位浮點(diǎn)數(shù),剩余的低7位為0,也即是,該低7位即為將第一浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)時(shí)損失的7位尾數(shù)。
步驟206:將該第四無(wú)符號(hào)整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù)。
當(dāng)確定第四無(wú)符號(hào)整數(shù)之后,將該第四無(wú)符號(hào)整數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為浮點(diǎn)數(shù),從而得到第三浮點(diǎn)數(shù)。其中,gpu可以根據(jù)intrinsic函數(shù)unitasfloat將第四無(wú)符號(hào)整數(shù)解析為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù)。
步驟207:基于該預(yù)設(shè)區(qū)間和第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),并將該第四浮點(diǎn)數(shù)確定為將16位浮點(diǎn)數(shù)轉(zhuǎn)換后所得到的32位浮點(diǎn)數(shù)。
由于第三浮點(diǎn)數(shù)是預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),也即是,該第三浮點(diǎn)數(shù)是區(qū)間[0,1]內(nèi)的浮點(diǎn)數(shù)對(duì)應(yīng)的預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),因此,gpu還需要將該預(yù)設(shè)區(qū)間內(nèi)的第三浮點(diǎn)數(shù)還原到區(qū)間[0,1]。
其中,gpu可以確定該預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),得到第五浮點(diǎn)數(shù);計(jì)算該第三浮點(diǎn)數(shù)和所述第五浮點(diǎn)數(shù)之間的差,得到第四浮點(diǎn)數(shù)。由于將第一浮點(diǎn)數(shù)轉(zhuǎn)換至預(yù)設(shè)區(qū)間內(nèi),是將該第一浮點(diǎn)數(shù)加上預(yù)設(shè)區(qū)間的最小值得到的第二浮點(diǎn)數(shù),因此,當(dāng)將該預(yù)設(shè)區(qū)間的第三浮點(diǎn)數(shù)還原到區(qū)間[0,1]時(shí),需要將該第三浮點(diǎn)數(shù)減去預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),從而得到位于區(qū)間[0,1]內(nèi)的第四位浮點(diǎn)數(shù),該第四浮點(diǎn)數(shù)即為將16位浮點(diǎn)數(shù)轉(zhuǎn)換后得到的32位浮點(diǎn)數(shù)。
在本發(fā)明實(shí)施例中,gpu可以將待轉(zhuǎn)換的位于區(qū)間[0,1]之間的32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),得到第二浮點(diǎn)數(shù),由于預(yù)設(shè)區(qū)間內(nèi)的所有浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,所以,可以將該第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位相對(duì)應(yīng)的位置上的值均為0,之后,可以根據(jù)該目標(biāo)無(wú)符號(hào)整數(shù)中剩余23位不為0的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),這樣,轉(zhuǎn)換后得到的16位浮點(diǎn)數(shù)可以不包含有符號(hào)位和指數(shù)位,也即是該16位浮點(diǎn)數(shù)可以全部為尾數(shù),相較于相關(guān)技術(shù)中,轉(zhuǎn)換后的16位浮點(diǎn)數(shù)中尾數(shù)只保留原23位尾數(shù)的11位,本發(fā)明實(shí)施例中確定的16位浮點(diǎn)數(shù)保留了32位浮點(diǎn)數(shù)的23位尾數(shù)中的16位,尾數(shù)損失減少,精度提高。
參見圖3a,本發(fā)明實(shí)施例提供了一種基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置300,該裝置300包括:
第一轉(zhuǎn)換模塊301,用于將第一浮點(diǎn)數(shù)轉(zhuǎn)換為預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù),得到第二浮點(diǎn)數(shù),第一浮點(diǎn)數(shù)為待轉(zhuǎn)換的32位浮點(diǎn)數(shù),預(yù)設(shè)區(qū)間為符號(hào)位和指數(shù)位均相同的浮點(diǎn)數(shù)組成的連續(xù)區(qū)間;
第二轉(zhuǎn)換模塊302,用于將第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位相對(duì)應(yīng)位置上的值均為0;
第一確定模塊303,用于基于目標(biāo)無(wú)符號(hào)整數(shù),確定16位浮點(diǎn)數(shù),以完成對(duì)第一浮點(diǎn)數(shù)的轉(zhuǎn)換。
可選地,第一轉(zhuǎn)換模塊301包括:
運(yùn)算子模塊,用于將第一浮點(diǎn)數(shù)與預(yù)設(shè)區(qū)間的最小值相加,得到第二浮點(diǎn)數(shù)。
可選地,參見圖3b,第二轉(zhuǎn)換模塊302包括:
第一轉(zhuǎn)換子模塊3021,用于將第二浮點(diǎn)數(shù)轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第一無(wú)符號(hào)整數(shù);
第二轉(zhuǎn)換子模塊3022,用于將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);
第一計(jì)算子模塊3023,用于計(jì)算第一無(wú)符號(hào)整數(shù)與第二無(wú)符號(hào)整數(shù)之間的差,得到目標(biāo)無(wú)符號(hào)整數(shù)。
可選地,參見圖3c,第一確定模塊303包括:
去除子模塊3031,用于將目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位相對(duì)應(yīng)位置上的連續(xù)9位數(shù)去除,得到剩余的23位數(shù);
第一確定子模塊3032,用于將剩余的23位數(shù)中從左起的連續(xù)16位數(shù)確定為16位浮點(diǎn)數(shù)。
可選地,參見圖3d,該裝置300還包括:
第二確定模塊304,用于當(dāng)接收到還原指令時(shí),基于16位浮點(diǎn)數(shù),確定第三無(wú)符號(hào)整數(shù),還原指令用于指示將16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù);
第三轉(zhuǎn)換模塊305,用于基于預(yù)設(shè)區(qū)間,將第三無(wú)符號(hào)整數(shù)轉(zhuǎn)換為第四無(wú)符號(hào)整數(shù),第四無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)與預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位的值相同;
第四轉(zhuǎn)換模塊306,用于將第四無(wú)符號(hào)整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),得到第三浮點(diǎn)數(shù);
第三確定模塊307,用于基于預(yù)設(shè)區(qū)間和第三浮點(diǎn)數(shù),確定第四浮點(diǎn)數(shù),并將第四浮點(diǎn)數(shù)確定為將16位浮點(diǎn)數(shù)轉(zhuǎn)換后所得到的32位浮點(diǎn)數(shù)。
可選地,參見圖3e,第三轉(zhuǎn)換模塊305包括:
第三轉(zhuǎn)換子模塊3051,用于將預(yù)設(shè)區(qū)間的最小值轉(zhuǎn)換為無(wú)符號(hào)整數(shù),得到第二無(wú)符號(hào)整數(shù);第二計(jì)算子模塊,用于計(jì)算第三無(wú)符號(hào)整數(shù)和第二無(wú)符號(hào)整數(shù)的和,得到第四無(wú)符號(hào)整數(shù);或者,
替換子模塊3052,用于根據(jù)預(yù)設(shè)區(qū)間內(nèi)的浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位,將第三無(wú)符號(hào)整數(shù)從左起的連續(xù)9位數(shù)依此替換為符號(hào)位和指數(shù)位的值,得到第四無(wú)符號(hào)整數(shù)。
可選地,參見圖3f,第三確定模塊307包括:
第二確定子模塊3071,用于確定預(yù)設(shè)區(qū)間的最小值對(duì)應(yīng)的浮點(diǎn)數(shù),得到第五浮點(diǎn)數(shù);
第三計(jì)算子模塊3072,用于計(jì)算第三浮點(diǎn)數(shù)和第五浮點(diǎn)數(shù)之間的差,得到第四浮點(diǎn)數(shù)。
綜上所述,在本發(fā)明實(shí)施例中,gpu可以將待轉(zhuǎn)換的位于區(qū)間[0,1]之間的32位浮點(diǎn)數(shù)轉(zhuǎn)換到預(yù)設(shè)區(qū)間內(nèi),得到第二浮點(diǎn)數(shù),由于預(yù)設(shè)區(qū)間內(nèi)的所有浮點(diǎn)數(shù)的符號(hào)位和指數(shù)位均相同,所以,可以將該第二浮點(diǎn)數(shù)轉(zhuǎn)換為目標(biāo)無(wú)符號(hào)整數(shù),該目標(biāo)無(wú)符號(hào)整數(shù)中與第一浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位相對(duì)應(yīng)的位置上的值均為0,之后,可以根據(jù)該目標(biāo)無(wú)符號(hào)整數(shù)中剩余23位不為0的尾數(shù)來(lái)確定16位浮點(diǎn)數(shù),這樣,轉(zhuǎn)換后得到的16位浮點(diǎn)數(shù)可以不包含有符號(hào)位和指數(shù)位,也即是該16位浮點(diǎn)數(shù)可以全部為尾數(shù),相較于相關(guān)技術(shù)中,轉(zhuǎn)換后的16位浮點(diǎn)數(shù)中尾數(shù)只保留原23位尾數(shù)的11位,本發(fā)明實(shí)施例中確定的16位浮點(diǎn)數(shù)保留了32位浮點(diǎn)數(shù)的23位尾數(shù)中的16位,尾數(shù)損失減少,精度提高。
需要說(shuō)明的是:上述實(shí)施例提供的基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置在進(jìn)行浮點(diǎn)數(shù)轉(zhuǎn)換時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,在實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換裝置與基于gpu的浮點(diǎn)數(shù)轉(zhuǎn)換方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見方法實(shí)施例,這里不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。