Платим блогерам
Редакция
Новости Software fin
Насколько быстрее многопоточный алгоритм LZMA2? Насколько хуже сжимает в сравнении с проверенным временем LZMA?

Выпуск тестовой версии 7-Zip 9.28 Alpha стал в некотором смысле событием — теперь сжатие во вторую версию фирменного формата LZMA2 используется по умолчанию. Новый метод сжатия LZMA2 появился в финальной версии 7-Zip 9.20 полтора года назад, но до сих пор использовалась проверенная временем первая версия LZMA, а на LZMA2 требовалось переключаться вручную.

Главное отличие LZMA2 — поддержка до 16 исполняемых потоков против всего 2 в LZMA. Также известно, что улучшение досталось не бесплатно — из-за проблем согласования потоков LZMA2 имеет немного меньшую эффективностью сжатия. Не исключено, что переход на LZMA2 связан с недавним выходом WinRAR 4.20, где была значительно повышена эффективность работы на многоядерных процессорах. Активация эффективного многоядерного алгоритма в 7-Zip как раз и может быть «симметричным ответом».

Кроме того, увеличение числа потоков в LZMA2 пропорционально повышает требования к свободной оперативной памяти. Суммирование дополнительных потоков при большом размере словаря в максимальных режимах сжатия может вылиться в неприличные цифры потребления памяти (по крайней мере, при текущих объёмах ОЗУ в «среднем компьютере»). Для первоначального же алгоритма LZMA потребление памяти ограничивается двумя нижними строчками, то есть не превышает 709 МБ.

Теория теорией, а хочется видеть реальные цифры, для чего было проведено экспресс-тестирование на подходящем для этого компьютере. Разогнанный четырехъядерный процессор Core i7 860 поддерживает виртуальную многоядерность Hyper Threading, предлагая в сумме 8 потоков. 8 гигабайт быстрой памяти DDR3 на частоте 1866 МГц позволяют тестировать с достаточно большими объёмами словаря сжатия. Системный SSD избавляет от влияния активности ОС, для снижения влияния дисковой системы архивация проводилась с одного физического HDD (7200 об/мин) на аналогичный. Использовалась актуальная Windows 7 SP1 x64 и максимально эффективные 64-разрядные версии архиваторов. Лишние приложения/процессы отключались, повторяемость результатов при сжатии данных вышла высокой.

В качестве данных были взяты 6 дистрибутивов драйвера GeForce 301.42 WHQL. Дистрибутивы были извлечены, причём внутри драйвера были дополнительно распакованы сжатые в CAB файлы. Много похожих файлов, повторяющиеся крупные дистрибутивы внутри, исполняемые файлы и DLL-библиотеки — отличный полигон для сравнения эффективности сжатия современных архиваторов. Задача взята из реальной жизни — длительное хранение и транспортировка дистрибутивов драйверов для всех возможных операционных систем и моделей видеокарт. Исходный размер данных составил 1719 МБ, всего 1631 файл.

Действительно, процесс сжатия существенно ускорился, выигрыш в 2,3-2,8 раз радует глаз. Причём сжатие степени «Ультра» теперь производится быстрее, чем раньше «Скоростное».

Проверим, изменилось ли что на распаковке и — сюрприз! Многопоточный LZMA2 ещё и распаковывается почти вдвое быстрее. К сожалению, повторяемость результатов при распаковке вышла недостаточной, так что других далекоидущих выводов сделать нельзя — при распаковке скорость разных архиваторов сравнима.

А теперь проверим, насколько велики потери в степени сжатия. Как видим, различие минимально, на примере этого конкретного набора данных разница не превысила 1% (причём в скоростном режиме LZMA2 даже победил):

Забегая вперёд, в двух словах сравним последние версии 7-Zip и WinRAR. Новейший 7-Zip 9.28 Alpha с LZMA2  в режимах скоростного и обычного сжатия оказался примерно вдвое медленнее нового WinRAR 4.20, демонстрируя небольшой выигрыш в размере архива. В режиме Ultra проигрыш по времени сжатия сохраняется, зато сжатие 7-Zip оказалось существенно эффективнее.

Итак, алгоритм сжатия LZMA2 действительно предпочтителен в многопоточном окружении, будучи заметно быстрее и при сжатии, и при распаковке. Однако системам с 4 ГБ оперативной памяти и числом процессорных потоков более 4-х при максимальной степени сжатия «Ультра» может не хватить объёма ОЗУ, в таких специфических ситуациях придётся жертвовать скоростью (уменьшать число потоков либо  переключаться на первую версию LZMA) или сжатием (уменьшать степень сжатия и размер словаря). Для бескомпромиссной же степени сжатия выбирайте проверенный временем LZMA — двухпоточный, медленный и эффективный.

7-Zip 9.28 Alpha (Windows, open source, 7-zip.org )

  • x86 — 7z928.exe (1,1 МБ)
  • x64 — 7z928-x64.msi (1,4 МБ)
Telegram-канал @overclockers_news - теперь в новом формате. Подписывайся, чтобы быть в курсе всех новостей!
Показать комментарии (19)

Сейчас обсуждают