← На главную

Проект fc от Praveen Vaddadi раскрывает в 10 раз быстрее fpzip

10.05.2026 10:14 · hackernews

Команда Praveen Vaddadi представляет новый библиотеку fc — безубыточный сжатие для потоков IEEE-754 64-битных двойных чисел. Программа разбивает входные данные на адаптивные блоки и запускает соревнования между множеством специализированных кодеков, чтобы выбрать самый эффективный вариант. Сжатие и декомпрессия работают в многопоточном режиме через POSIX-потоки, а горячие пути векторизованы вручную под архитектуру x86-64 с поддержкой инструкций AVX2, SSE4.2, BMI и LZCNT. Текущая версия fc 1.56 набрала лучший показатель отношения на десяти из семнадцати тестовых наборов, демонстрируя устойчивость к структурированным и аналитическим числам. Декомпрессия работает примерно в десять раз быстрее сжатия, достигая около 1.28 ГБ/с, что подходит для хранилищ временных рядов с одним режимом записи. Однако универсальных чудес ждать не стоит: на данных с шумными естественными плавучими точками, таких как random-walk или climate, конкурент fpzip всё ещё показывает преимущество. Скорость сжатия ограничена процессором примерно 120 МБ/с, а если это становится узким местом, лучше взять lz4 или zstd -3. Библиотека требует строгой архитектуры x86-64 с активированными нужными инструкциями при запуске, так как фолбэков нет. Формат файла помечается маджик-числом в заголовке, а внутренние изменения формата в новых версиях будут его менять, поэтому считайте вывод непрозрачным. Публичный API в fc.h включает функции fc_enc для сжатия и fc_dec для распаковки, а также позволяет отслеживать статистику через массивы fc_dec_mode_hist и fc_enc_mode_wins. Кодер поддерживает 50 режимов, от простых предикторов PRED до сложных моделей BWT и CONV, и выбирает лучший путь динамически. Для тестирования можно скомпилировать бинарник и запустить make test, чтобы увидеть сравнительные метрики по умолчанию. Лицензия самого проекта — Apache 2.0, но подкарауленые коды от Redis gorilla требуют соблюдения их собственных условий RSALv2, SSPLv1 или AGPLv3. Сжатие работает только с кратными восьми байтами, а неизвестные ID режимов при чтении просто заменяются нулями, а не вызывают ошибку. Если вам нужен максимально компактный файл для плавающей точки и скорость декодирования важна — берите fc. Если же важна универсальность и работа с гетерогенными данными — выбирайте zstd или lz4.

Читать оригинал →