Перший стабільний випуск zlib-ng, високопродуктивного форка zlib

Доступний реліз бібліотеки zlib-ng 2.0, який відзначений як перший стабільний випуск проекту (слід вже доступний коригуючий випуск 2.0.1). Zlib-ng сумісний із zlib на рівні API, але надає додаткові оптимізації, не прийняті в офіційний репозиторій zlib через консервативний підхід до прийому змін. Додатково запропоновано модернізований API, що базується на zlib, але змінений для спрощення портування. Код проекту написаний мовою Сі та поширюється під ліцензією Zlib.

Проведені на системах x86_64 тести показали, що при виконанні операцій стиснення Zlib-ng приблизно в 4 рази швидше за zlib і в 2.1 рази швидше за gzip. При розпакуванні Zlib-ng приблизно в 2.4 рази швидше за zlib і в 1.8 разів швидше за gzip. Досягти істотного підвищення продуктивності стиснення/розпакування в основному вдалося завдяки використанню векторних інструкцій SSE*, AVX2, VSX і Neon.

У тому числі додана реалізація алгоритму обчислення контрольних сум Adler32, оптимізована за допомогою інструкцій SSSE3, AVX2, Neon та VSX, реалізація CRC32-B на базі PCLMULQDQ та ACLE, удосконалені хеш-таблиці, реалізація хешу Slide на базі S2 , Операції порівняння на базі SSE2 та AVX4.2. До складу також включені націлені на підвищення продуктивності зміни, які використовуються у форках від компаній Intel та Cloudflare. Оптимізовано процес роботи з буферами. Додана підтримка складальних систем CMake та NMake. Для тестування задіяні системи безперервної інтеграції.

Крім оптимізації в Zlib-ng також включені накопичені в пакетах дистрибутивів патчі і проведено чищення коду від обхідних рішень, що використовуються в zlib для підтримки старих компіляторів і платформ, але заважають реалізації більш ефективних методів (наприклад, обмеження, необхідні для підтримки 16-розрядних систем та несумісних з компіляторами ANSI C). Проведено роботу з виявлення та виправлення помилок, виявлених статичними аналізаторами, системами fuzzing-тестування, та інструментами для виявлення проблем при роботі з пам'яттю (AddressSanitizer та MemorySanitizer).

Джерело: opennet.ru

Додати коментар або відгук