float壓縮方式

float在捨棄一些精度和範圍的情況下,可以做些壓縮,節省存儲空間。本文介紹3種壓縮方式:fp16,Int8,fp block

float存儲格式

V = (-1) ^ s × M × 2 ^ E

(1)(-1)^s 表示符號位,當 s=0,V 爲正數;當 s=1,V 爲負數。

(2)M 表示有效數字,大於等於 1,小於 2,但整數部分的 1 不變,因此可以省略。

(3)2^E 表示指數位。

比如: 對於十進制的 5.25 對應的二進制爲:101.01,相當於:1.0101*2^2。所以,S 爲 0,M 爲 1.0101,E 爲 2。 

對於float 32位存儲,M爲23Bit,E爲8bit,s 1bit,具體存儲格式,見下圖:

則,我們可以計算出,float的值範圍爲:[-3.4*10^38,-1.18*10^-38]U[1.18*10^-38,3.4*10^38] 

fp16壓縮:

半精度浮點數 是一種被計算機使用的二進制浮點數據類型半精度浮點數使用2個字節(16位)來存儲。

IEEE 754-2008中,它被稱作binary16。這種數據類型只適合存儲對精度要求不高的數字,不適合用來計算。

IEEE 754 標準指定了一個 binary16 要有如下的格式:

  • Sign bit(符號位): 1 bit
  • Exponent width(指數位寬): 5 bits
  • Significand precision(尾數精度): 11 bits (有10位被顯式存儲)

按如下順序排列:

最大值爲:0 11110 1111111111=(-1)^0 * 2^15 * (1+1-2^-10)=65504

正數最小值爲:0 00001 0000000000=2^-14=6.10 * 10^-5

int8壓縮:

根據float的range,將int8 128bit,平均分,存儲float的值,精度損失與float的range範圍相關。

block fp壓縮:

針對多float的存儲做壓縮,統計系列數的最大指數(Exponent),並統一存儲一個指數,統計其他的小數位(Fraction),此壓縮適合於系列float值相差較少的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章