strongerHuang 發表於 2020-11-29 09:57:55
我們學過數學,都知道有理數和無理數,然後在有理數中有一類叫浮點數的數字,不知道大家對這些還有沒有印象?
在軟體編程的時候,我們也會用到浮點數,一種既包含小數又包含整數的數據類型。
下面就來講講關於浮點數中,單精度、雙精度、多精度和混合精度計算的區別。
1
關於圓周率 π我們提到圓周率 π 的時候,它有很多種表達方式,既可以用數學常數3.14159表示,也可以用一長串1和0的二進位長串表示。
圓周率 π 是個無理數,既小數位無限且不循環。因此,在使用圓周率進行計算時,人和計算機都必須根據精度需要將小數點後的數字四捨五入。
在小學的時候,小學生們可能只會用手算的方式計算數學題目,圓周率的數值也只能計算到小數點後兩位——3.14;而高中生使用圖形計算器可能會使圓周率數值排到小數點後10位,更加精確地表示圓周率。
在計算機科學中,這被稱為精度,它通常以二進位數字來衡量,而非小數。對於複雜的科學模擬,開發人員長期以來一直都依靠高精度數學來研究諸如宇宙大爆炸,或是預測數百萬個原子之間的相互作用。
數字位數越高,或是小數點後位數越多,意味著科學家可以在更大範圍內的數值內體現兩個數值的變化。藉此,科學家可以對最大的星系,或是最小的粒子進行精確計算。
但是,計算精度越高,意味著所需的計算資源、數據傳輸和內存存儲就越多。其成本也會更大,同時也會消耗更多的功率。
由於並非每個工作負載都需要高精度,因此 AI 和 HPC 研究人員可以通過混合或匹配不同級別的精度的方式進行運算,從而使效益最大化。
NVIDIA Tensor Core GPU 支持多精度和混合精度技術,能夠讓開發者優化計算資源並加快 AI 應用程式及其推理功能的訓練。
2
單精度、雙精度和半精度浮點格式之間的區別
IEEE 浮點算術標準是用來衡量計算機上以二進位所表示數字精度的通用約定。在雙精度格式中,每個數字佔用64位,單精度格式佔用32位,而半精度僅16位。要了解其中工作原理,我們可以拿圓周率舉例。
在傳統科學記數法中,圓周率表示為3.14 x100。但是計算機將這些信息以二進位形式存儲為浮點,即一系列的1和0,它們代表一個數字及其對應的指數,在這種情況下圓周率則表示為1.1001001 x 21。
在單精度32位格式中,1位用於指示數字為正數還是負數。指數保留了8位,這是因為它為二進位,將2進到高位。其餘23位用於表示組成該數字的數字,稱為有效數字。而在雙精度下,指數保留11位,有效位數為52位,從而極大地擴展了它可以表示的數字範圍和大小。
半精度則是表示範圍更小,其指數只有5位,有效位數只有10位。圓周率在每個精度級別表現如下:
3
多精度和混合精度計算的差異多精度計算意味著使用能夠以不同精度進行計算的處理器,在需要使用高精度進行計算的部分使用雙精度,並在應用程式的其他部分使用半精度或單精度算法。
混合精度(也稱為超精度)計算則是在單個操作中使用不同的精度級別,從而在不犧牲精度的情況下實現計算效率。
在混合精度中,計算從半精度值開始,以進行快速矩陣數學運算。但是隨著數字的計算,機器會以更高的精度存儲結果。
例如,如果將兩個16位矩陣相乘,則結果為32位大小。使用這種方法,在應用程式結束計算時,其累積得到結果,在準確度上可與使用雙精度算法運算得到的結果相媲美。
這項技術可以將傳統的雙精度應用程式加速多達25倍,同時減少了運行所需的內存、時間和功耗。它可用於 AI 和模擬 HPC 工作負載。
隨著混合精度算法在現代超級計算應用程式中的普及,HPC 專家 Jack Dongarra 提出了一個新的基準,即 HPL-AI,以評估超級計算機在混合精度計算上的性能。
混合精度計算主要用於現在很火人工智慧領域,感興趣的讀者可以上網搜索更多關於混合精度計算的內容。
責任編輯:lq
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴