LINUX.ORG.RU

ZXC 0.8.0 и 0.8.1

 , zxc, , ,


2

3

Состоялся выпуск 0.8.0 библиотеки и кроссплатформенной консольной утилиты ZXC (github.com), реализующих высокопроизводительное многопоточное асимметричное сжатие без потерь и оптимизированное для игровых ресурсов, прошивок и пакетов приложений.

Декларируется на 40%+ более быстрая распаковка, чем LZ4 на ARM64, с лучшими коэффициентами сжатия.

Проект написан на языке C и распространяется по лицензии BSD 3.

Список изменений:

  • Версия формата теперь 5, «ломающая» совместимость:
    • Реализовано смещение LZ (+1) на уровне формата для устранения потенциальных векторов атаки с нулевым смещением.
    • Контрольные суммы заголовков теперь используют алгоритм Marsaglia xorshift.
  • Новая стратегия хеширования LZ77 и оптимизация конфигурации хеш-таблиц обеспечивают значительное повышение производительности на различных архитектурах, особенно при высоких уровнях сжатия.
  • Значительные улучшения для уровней сжатия 3–5, демонстрирующие увеличение скорости сжатия на 33–43 % как на архитектурах x86_64, так и на ARM64.
  • Заметные улучшения для более быстрых уровней сжатия (1 и 2), с увеличением скорости на 10-18% на x86_64 и ~8-10% на ARM64.
  • Переработана обработка и коды ошибок. Python-враппер теперь предоставляет доступ к этим константам ошибок C для обеспечения улучшенной и нативной отчетности об ошибках.
  • Размер ZXC_BLOCK_SIZE больше не ограничивается 1 МБ. Формат файла ZXC теперь официально поддерживает размеры блоков до 8 МБ.
  • В консольную утилиту добавлен режим обработки нескольких файлов: опция -m (или --multiple) позволяет обрабатывать несколько входных файлов одной командой. Каждый файл обрабатывается независимо, а имена выходных файлов автоматически производятся от входных (например, файл file.txt сжимается в file.txt.xc, файл file.txt.xc распаковывается в file.txt).
  • В консольную утилиту также добавлен режим рекурсивной обработки директорий: опция -r (или --recursive) позволяет обрабатывать все файлы в указанных директориях и их поддиректориях.
  • Другие улучшения (документация, тестирование) и исправления ошибок.
  • В версии 0.8.1 исправлена только генерация динамической библиотеки libzxc.so.1 для сохранения возможности использования прежних версий библиотеки.

>>> Подробности на GitHub

★★★★★

Проверено: CrX ()
Последнее исправление: dataman (всего исправлений: 3)
Ответ на: комментарий от BydymTydym

Библиотека весьма спецефичная, сделать биндинг для rust не проблема. А вот если бы это был растовый крейт - уже сложнее было бы использовать из других языков

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

сделать биндинг для rust не проблема

Уже входит в комплект. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Я ж новость обсуждаю а не гитхаб. Думаю, тут большинство (как и я) знают что такое симметричное/асимметричное шифрование, а вот про сжатие вряд ли, можно было и уточнить.

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

imul ★★★★★
()

интересно если слать сжатые данным алгоритмом udp пакеты groupcast'ом как в dota 2 между server и 10 clients как это сильно отразится на gameplay?

doomer
()
Последнее исправление: doomer (всего исправлений: 1)
Ответ на: комментарий от mittorn

скорость сжатия бы ему ещё повыше…

Точнее, многопоточность не помешает. Вот сэмь-зэ жмет на всех ядрах, можно такую опцию задать. У zxc есть такое?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У zxc есть такое?

«Number of threads» на скриншоте.

dataman ★★★★★
() автор топика

Декларируется на 40%+ более быстрая распаковка, чем LZ4 на ARM64

Засомневался, возможно ли такое вообще. Как понял, скорее всего сказывается раздельное хранение потоков литералов, смещений и прочей хрени. Но 40% что-то всё равно многовато.

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

Засомневался, возможно ли такое вообще.

В lzbench добавили zxc, хотя пока и не эту версию. Можно попробовать обновить и проверить.

dataman ★★★★★
() автор топика

Ещё не пробовал на практике, но API выглядит многообещающе. Нравится возможность работать в стримах FILE * в частности.

Не нравится требование CMake, но проект простой и можно будет свою сборку подсунуть без особых болей, думаю.

Bfgeshka ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

В моёп юзкейсе многопоточность вряд ли будет полезна, но в принципе что мешает разбить входные данные на блоки и пускать в разные потоки?

mittorn ★★★★★
()
Ответ на: комментарий от BydymTydym

Не на Rust? Надо срочно переписать!

fix

AlexVR ★★★★★
()
Ответ на: комментарий от steemandlinux

Ниче, я тут ядро Linux постепенно на Rust начал переписывать, так что скоро им ничего не останется, как сишное запретить.

BydymTydym ★★
()
Ответ на: комментарий от mittorn

Казалось, все архиваторы так и работают. Файл 100 мегабайт делят на мелкие части, а 100 файлов по 10 килобайт возьмут за один блок

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Somebody

Мне надо сжимать текстуры в реальном времени. Сначала сжимаю блочным алгоритмом на GPU, потом уже lossless алгоритмом на cpu. zxc, кажется, как раз под такие задачи должен подходить

mittorn ★★★★★
()
Ответ на: комментарий от Somebody

Это используется для стриминга изображения на vr шлем. Часть коэффициентов DWT, где не нужна высокая точность шлётся по схеме BC1+lossless

mittorn ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.