我們學(xué)過數(shù)學(xué),都知道有理數(shù)和無理數(shù),然后在有理數(shù)中有一類叫浮點(diǎn)數(shù)的數(shù)字,不知道大家對這些還有沒有印象?
在軟件編程的時(shí)候,我們也會用到浮點(diǎn)數(shù),一種既包含小數(shù)又包含整數(shù)的數(shù)據(jù)類型。
下面就來講講關(guān)于浮點(diǎn)數(shù)中,單精度、雙精度、多精度和混合精度計(jì)算的區(qū)別。
1
關(guān)于圓周率 π我們提到圓周率 π 的時(shí)候,它有很多種表達(dá)方式,既可以用數(shù)學(xué)常數(shù)3.14159表示,也可以用一長串1和0的二進(jìn)制長串表示。
圓周率 π 是個(gè)無理數(shù),既小數(shù)位無限且不循環(huán)。因此,在使用圓周率進(jìn)行計(jì)算時(shí),人和計(jì)算機(jī)都必須根據(jù)精度需要將小數(shù)點(diǎn)后的數(shù)字四舍五入。
在小學(xué)的時(shí)候,小學(xué)生們可能只會用手算的方式計(jì)算數(shù)學(xué)題目,圓周率的數(shù)值也只能計(jì)算到小數(shù)點(diǎn)后兩位——3.14;而高中生使用圖形計(jì)算器可能會使圓周率數(shù)值排到小數(shù)點(diǎn)后10位,更加精確地表示圓周率。
在計(jì)算機(jī)科學(xué)中,這被稱為精度,它通常以二進(jìn)制數(shù)字來衡量,而非小數(shù)。對于復(fù)雜的科學(xué)模擬,開發(fā)人員長期以來一直都依靠高精度數(shù)學(xué)來研究諸如宇宙大爆炸,或是預(yù)測數(shù)百萬個(gè)原子之間的相互作用。
數(shù)字位數(shù)越高,或是小數(shù)點(diǎn)后位數(shù)越多,意味著科學(xué)家可以在更大范圍內(nèi)的數(shù)值內(nèi)體現(xiàn)兩個(gè)數(shù)值的變化。借此,科學(xué)家可以對最大的星系,或是最小的粒子進(jìn)行精確計(jì)算。
但是,計(jì)算精度越高,意味著所需的計(jì)算資源、數(shù)據(jù)傳輸和內(nèi)存存儲就越多。其成本也會更大,同時(shí)也會消耗更多的功率。
由于并非每個(gè)工作負(fù)載都需要高精度,因此 AI 和 HPC 研究人員可以通過混合或匹配不同級別的精度的方式進(jìn)行運(yùn)算,從而使效益最大化。
NVIDIA Tensor Core GPU 支持多精度和混合精度技術(shù),能夠讓開發(fā)者優(yōu)化計(jì)算資源并加快 AI 應(yīng)用程序及其推理功能的訓(xùn)練。
2
單精度、雙精度和半精度浮點(diǎn)格式之間的區(qū)別
IEEE 浮點(diǎn)算術(shù)標(biāo)準(zhǔn)是用來衡量計(jì)算機(jī)上以二進(jìn)制所表示數(shù)字精度的通用約定。在雙精度格式中,每個(gè)數(shù)字占用64位,單精度格式占用32位,而半精度僅16位。要了解其中工作原理,我們可以拿圓周率舉例。
在傳統(tǒng)科學(xué)記數(shù)法中,圓周率表示為3.14 x100。但是計(jì)算機(jī)將這些信息以二進(jìn)制形式存儲為浮點(diǎn),即一系列的1和0,它們代表一個(gè)數(shù)字及其對應(yīng)的指數(shù),在這種情況下圓周率則表示為1.1001001 x 21。
在單精度32位格式中,1位用于指示數(shù)字為正數(shù)還是負(fù)數(shù)。指數(shù)保留了8位,這是因?yàn)樗鼮槎M(jìn)制,將2進(jìn)到高位。其余23位用于表示組成該數(shù)字的數(shù)字,稱為有效數(shù)字。而在雙精度下,指數(shù)保留11位,有效位數(shù)為52位,從而極大地?cái)U(kuò)展了它可以表示的數(shù)字范圍和大小。
半精度則是表示范圍更小,其指數(shù)只有5位,有效位數(shù)只有10位。圓周率在每個(gè)精度級別表現(xiàn)如下:
3
多精度和混合精度計(jì)算的差異多精度計(jì)算意味著使用能夠以不同精度進(jìn)行計(jì)算的處理器,在需要使用高精度進(jìn)行計(jì)算的部分使用雙精度,并在應(yīng)用程序的其他部分使用半精度或單精度算法。
混合精度(也稱為超精度)計(jì)算則是在單個(gè)操作中使用不同的精度級別,從而在不犧牲精度的情況下實(shí)現(xiàn)計(jì)算效率。
在混合精度中,計(jì)算從半精度值開始,以進(jìn)行快速矩陣數(shù)學(xué)運(yùn)算。但是隨著數(shù)字的計(jì)算,機(jī)器會以更高的精度存儲結(jié)果。
例如,如果將兩個(gè)16位矩陣相乘,則結(jié)果為32位大小。使用這種方法,在應(yīng)用程序結(jié)束計(jì)算時(shí),其累積得到結(jié)果,在準(zhǔn)確度上可與使用雙精度算法運(yùn)算得到的結(jié)果相媲美。
這項(xiàng)技術(shù)可以將傳統(tǒng)的雙精度應(yīng)用程序加速多達(dá)25倍,同時(shí)減少了運(yùn)行所需的內(nèi)存、時(shí)間和功耗。它可用于 AI 和模擬 HPC 工作負(fù)載。
隨著混合精度算法在現(xiàn)代超級計(jì)算應(yīng)用程序中的普及,HPC 專家 Jack Dongarra 提出了一個(gè)新的基準(zhǔn),即 HPL-AI,以評估超級計(jì)算機(jī)在混合精度計(jì)算上的性能。
混合精度計(jì)算主要用于現(xiàn)在很火人工智能領(lǐng)域,感興趣的讀者可以上網(wǎng)搜索更多關(guān)于混合精度計(jì)算的內(nèi)容。
責(zé)任編輯:lq
-
編程
+關(guān)注
關(guān)注
90文章
3716瀏覽量
97198 -
浮點(diǎn)數(shù)
+關(guān)注
關(guān)注
0文章
62瀏覽量
16419 -
單精度
+關(guān)注
關(guān)注
0文章
8瀏覽量
2418
原文標(biāo)題:單精度、雙精度、多精度和混合精度計(jì)算的區(qū)別是什么?
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式中的浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)換為字節(jié)類型的三種方法
ADC分辨率與精度的區(qū)別是什么
浮點(diǎn)指令(三)
E203添加浮點(diǎn)數(shù)方法:FPU控制邏輯
浮點(diǎn)指令(二:雙精度)
蜂鳥E203擴(kuò)展浮點(diǎn)指令設(shè)計(jì)(2)
浮點(diǎn)指令(一:單精度)
蜂鳥E203擴(kuò)展浮點(diǎn)指令設(shè)計(jì)(1)
浮點(diǎn)指令(七:寄存器)
RVF單精度浮點(diǎn)指令集擴(kuò)展介紹(2)
IEEE 754浮點(diǎn)算術(shù)標(biāo)準(zhǔn)(1)
使用Simulink自動(dòng)生成浮點(diǎn)運(yùn)算HDL代碼(Part 1)
RVF單精度浮點(diǎn)指令集擴(kuò)展介紹(1)
risc-v中浮點(diǎn)運(yùn)算單元的使用及其設(shè)計(jì)考慮
大彩講堂:VisualHMI-LUA教程-獲取設(shè)置單精度浮點(diǎn)數(shù)函數(shù)的應(yīng)用
單精度、雙精度和半精度浮點(diǎn)格式之間的區(qū)別
評論