2014-02-11 48 views
0

我正在尋找一個很好的無損壓縮算法,可以非常快速地壓縮/解壓縮少量的數據,如256浮點數介於0和1之間。我知道RLE,但也許有更好的東西。針對少量數據的良好無損壓縮算法?

背景是我正在使用CUDA處理體積數據(例如384³浮點數),而不是明確地存儲卷,我想將它分成8x8x4大小的塊並存儲壓縮塊。 CUDA內核(每個由8x8x4線程組成的塊)解壓縮相應的塊,對其進行處理並再次壓縮。

我很感激任何建議!

+1

384^3浮點數據只有226Mb左右。爲什麼要壓縮這樣一個小數據集? – talonmies

+0

爲了減少全局內存訪問的數量,理想情況下我想在1024³上工作。另外,在某些情況下,每個體素實際上有5-6個浮點數,因此它將在384³上約爲1Gb的數據。 – yon

+2

Cuda也支持16位浮點值,如果你可以將一半浮點數打包成32位類型,那麼整個內存的有效加倍就會比無損壓縮方案產生的計算花費少得多。 – talonmies

回答

3

一個很好的無損算法取決於您擁有的數量的類型float。 對於0到1之間的float,您可能具有幾乎相同的指數子值。 你知道float是一個符號,尾數和指數。 如果它們全部> 0,標誌總是相同的,不要存儲它。

包裝指數可以很好;那樣你就只需要存放mantissae之後。

0

您可能可以對數字進行排序,然後將它們存儲爲位置和差異。你可以將它們組裝成儘可能多的位。差異可以編碼爲只存儲分母的分數。