Хороший алгоритм сжатия без потерь для небольшого объема данных?

Я ищу хороший алгоритм сжатия без потерь, который может очень быстро сжимать / распаковывать небольшие объемы данных, такие как 256 операций с плавающей точкой, которые находятся между 0 и 1. Я знаю RLE, но, возможно, есть что-то лучше.

Фоном является то, что я работаю с объемными данными (например, 384³ с плавающей запятой) с помощью CUDA, и вместо явного хранения объема я хочу разделить его на блоки размером 8x8x4 и сохранить сжатые блоки. Ядра CUDA (каждый блок, состоящий из потоков 8x8x4) распаковывает соответствующий блок, работает с ним и сжимает его снова.

Я благодарен за любые предложения!

2 ответа

Хороший алгоритм без потерь зависит от типа float количество у вас есть. За float от 0 до 1, вы можете иметь почти одинаковое значение в подвал. Вы знаете float это знак, мантисса и показатель степени. Если они все>0, знак всегда один и тот же, не храните его.

Упаковка показателей вместе может быть хорошей; таким образом, вы должны хранить мантиссу только после.

Возможно, вы сможете отсортировать числа, а затем сохранить их как положение и разницу. Вы можете упаковать их в столько битов, сколько вам нужно. Разница может быть закодирована как дробь, где вы храните только знаменатель.

Другие вопросы по тегам