Выпуск библиотеки сжатия LZHAM 1.0, нацеленной на создание более быстрой альтернативы LZMA

Следом за анонсированным алгоритмом сжатия ZSTD, Рич Гелдрих (Rich Geldreich), работавший в компании Valve, принимавший участие в разработке ряда известных компьютерных игр и развивающий несколько проектов по сжатию текстур (crunch, miniz, picojpeg), представил первый стабильный релиз собственной системы сжатия LZHAM 1.0, созданной в рамках проекта по разработке эффективного кодека для сжатия ресурсов, поставляемых в составе игровых приложений. Код реализации LZHAM написан на языке С++ и поставляется под лицензией MIT.

Из особенностей LZHAM отмечается поддержка патчей (delta-изменений), позволяющих распространять изменения без перепаковки уже сжатых файлов. Для повышения эффективности сжатия в LZHAM могут использоваться таблицы сопоставления, размером дл 64 Кб, а также словари, размером до 500 Мб. LZHAM также опционально предоставляет средства для сжатия с распараллеливанием вычислений в несколько потоков.

Начиная с выпуска LZHAM 1.0 формат закодированных данных не будет меняться, что гарантирует совместимость с будущими выпусками. При этом совместимость формата с ранее представленными альфа-версиями не гарантируется. Официально поддерживаются платформы x86/x64 Linux, iOS, OSX и Windows x86/x64, следующим шагом станет поддержка Android.

LZHAM предназначен для достижения как можно более высокой степени сжатия и обеспечения высокой скорости распаковки, за счёт требующей интенсивных вычислений стадии сжатия. По уровню сжатия и скорости упаковки реализация LZHAM сравнима с LZMA, но по скорости распаковки опережает LZMA в 1.5-8 раз (но медленнее zlib). Упаковка производится достаточно медленно и требует больших ресурсов, что ограничивает алгоритм применением для областей, в которых необходимо часто и очень быстро распаковывать один раз упакованные данные. Из ограничений также отмечается плохая эффективность при сжатии небольших порций данных, не превышающих 10 Кб.

Попытки сравнения LZHAM с ZSTD Рич Гелдрих прокомментировал тем, что данные методы нацелены на разные области применения и занимают разные ниши. LZHAM ориентирован на обеспечение максимально возможного уровня сжатия, в то время как ZSTD пытается найти оптимальный баланс между эффективностью и скоростью. Обе системы поддерживают совместимый с zlib API. По эффективности сжатия LZHAM опережает ZSTD, а по скорости декодирования немного отстаёт от ZSTD. По скорости кодирования LZHAM в 8 раз отстаёт от ZSTD и не может использоваться для сжатия потоков на лету, подходя лишь для offline-применения. При этом Рич Гелдрих намерен перейти на использование созданного автором ZSTD кода обработки энтропии FSE (Finite State Entropy), реализация которого значительно проще.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.