Какой самый быстрый декомпрессор bzip2?

Какая реализация bzip2 имеет наибольшую скорость распаковки?

Существует http://bitbucket.org/james_taylor/seek-bzip2/src/tip/micro-bunzip.c, который утверждает

Оптимизация размера и скорости — Мануэль Новоа III ([email protected]). Более эффективное чтение кодов Хаффмана, оптимизированная функция read_bunzip() и различные другие настройки. В (ограниченных) тестах примерно на 20% быстрее, чем bzcat на x86 и примерно на 10% быстрее на ARM. Обратите внимание, что около 2/3 времени тратится в read_unzip() на обращение преобразования Берроуза-Уилера. Большая часть этого времени приходится на задержку из-за промахов кеша.

Многие промахи кэша могут быть оптимизированы с помощью некоторых методов, поэтому возможны еще более быстрые реализации.

Этот (seek-bzip2) также имеет интересную функцию простого поиска во входном файле.

Моя программа будет использовать вывод bzip2 и (теоретически) может делать это параллельно в разных частях файла. Таким образом, рассматриваются и параллельные реализации bzip2.

Спасибо.


person osgx    schedule 13.09.2010    source источник
comment
bzip2 0.1 является частью SpecCPU2000, поэтому разработчики компиляторов должны тщательно его изучить.   -  person osgx    schedule 13.09.2010


Ответы (3)


Немного http://lists.debian.org/debian-mentors/2009/02/msg00135.html сравнения. Рассматриваются параллельные версии.

Немного также есть http://realworldtech.com/forums/index.cfm?action=detail&id=98883&threadid=98430&roomid=2

ссылки взяты из версии Intel cilk-parallel bzip2 http://software.intel.com/en-us/articles/a-parallel-bzip2/

Кроме того, Intel bzip2 на базе ipp более хорош, а также пытается в IPP (с отрицательным эффектом) распараллелить некоторые внутренности bzip2 (без распаковки параллельных блоков) с openmp (intel KMP 5). При ограничении одним или двумя потоками 20 МБ/с распакованного потока реальны на 2.4 core2 (код ipp "v8")

Надеюсь это поможет.

person osgx    schedule 15.09.2010

Если у вас есть доступ к многопроцессорным машинам (многопроцессорную виртуальную машину легко запустить на Amazon EC2 или Digital Ocean) / машинам с большим объемом оперативной памяти, вам обязательно следует проверить PBZIP2:

PBZIP2 – это параллельная реализация компрессора файлов с блочной сортировкой bzip2, использующая потоки pthread и обеспечивающая почти линейное ускорение на машинах SMP


Для иллюстрации: сейчас я распаковываю большой 17-гигабайтный файл. bzip2 записывал распакованный файл со скоростью 10Мб/сек; PBZIP2 пишет сейчас со скоростью 160 Мб/сек. Я запускаю это так:

pbzip2 -v -d -k -m10000 file.bz2

т. е. -v подробно -d распаковать -k сохранить исходный файл -m1000 использовать 10 ГБ оперативной памяти

Он работает на машине с 64 ГБ ОЗУ и 20 ЦП в Digital Ocean, которая стоит 0,952 доллара в час. :-)

person Greg Sadetsky    schedule 26.03.2017
comment
Грег, можешь опубликовать результаты time pbzip2 или /usr/bin/time pbzip2, чтобы увидеть › 100% загрузку процессора? Может ли pbzip2 распаковывать параллельно любой файл bz2 или только файл, сжатый с помощью pbzip2? - person osgx; 26.03.2017
comment
Я почти уверен, что исходный файл не был сжат с помощью pbzip2. Насколько я понимаю, pbzip2 должен быть совместим с любым файлом bz2 (пожалуйста, подтвердите/опровергните). Распаковка заняла ~1 час, и, к сожалению, я не могу запустить ее сейчас, но я определенно видел (используя htop), что все 20 ЦП были загружены на ~100%. Извините за неудовлетворительный ответ. :-) - person Greg Sadetsky; 26.03.2017
comment
Грег, для лучшего ответа (вы уже показали, что возможны 20 ядер/потоков), вы можете сделать аналогичный тест с меньшим тестовым файлом (на меньшей машине). Я ожидаю, что файл, сжатый bzip2, не будет иметь параллельной распаковки, так как формат pbzip2 отличается: compression.ca/pbzip2 Формат данных PBZIP2 .. Файлы, сжатые с помощью pbzip2, разбиваются на части, и каждая отдельная часть сжимается. .. Файлы, сжатые с помощью pbzip2, также получат значительное ускорение при распаковке с помощью pbzip2. Файлы, сжатые с помощью bzip2, не получат ускорения - person osgx; 26.03.2017
comment
Ха! Очень интересно. Я обязательно посмотрю. Спасибо - person Greg Sadetsky; 27.03.2017

lbzip2 — хорошая альтернатива.

sudo apt install lbzip2

lbzip2 -d <archive>
person Flaviu    schedule 10.04.2021