Чистый функциональный язык отстаёт от лучшей C-библиотеки DEFLATE всего на 2,6–8,9%
Ричард Фельдман сравнил roc-deflate с libdeflate в 144 прогонах и выяснил, что медианное отставание невелико.
На корпусе Silesia roc-deflate отстаёт от libdeflate по медиане на 8,9% на Ryzen 9 3900X и на 2,6% на MacBook Pro с M1.
Бенчмарк
В посте Фельдман оптимизировал roc-deflate, пакет на Roc, чистом функциональном языке с автоматическим управлением памятью и обязательными проверками границ, и сравнил его с libdeflate, библиотекой на C, которая использует SIMD под конкретную архитектуру. Раньше lean-zip на Lean обогнал miniz_oxide на Rust, но не libdeflate. Тест прогнали на корпусе Silesia при 12 уровнях сжатия (144 бенчмарка) и проверили, что выход идентичен.
| Машина | Медианное замедление относительно libdeflate |
|---|---|
| AMD Ryzen 9 3900X (x64) | 8,9% |
| M1 MacBook Pro | 2,6% |
Самые трудные входы были примерно на 18% медленнее, а самые лёгкие — чуть больше чем на 18% быстрее. На nci при уровне 1 на M1 libdeflate выдал 601,03 МБ/с, а roc-deflate — 529,49 МБ/с. Фельдман признаёт, что цена гарантий Roc — «более низкий потолок производительности», и предупреждает, что один пакет может не обобщаться.
Почему C всё ещё выигрывает в потолке
«Код на C/C++ может без труда залезть в какой-нибудь удалённый кусок состояния и изменить его напрямую. Компилятор редко возражает» — jandrewrogers, который проектирует специализированные аналитические базы данных
Его мысль: разрыв возникает из-за крайне агрессивного исключения копирований, которое экономит пропускную способность памяти ценой сопровождаемости и безопасности. Другой комментатор усомнился в самой мерке.
«У меня сложилось впечатление, что libdeflate даёт почти такой же размер, что и zstd, но работает в 40 раз дольше» — jeffbee
А andai спросил, как можно оправдать выбор языка до версии 0.1 для клиентской работы. Прежде чем назвать победителя бенчмарка, проверьте, что базовый вариант — тот, который реально использует ваша нагрузка.
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
Goose — системный язык без кучи, и его автор пришёл отвечать на вопросы
Новый язык Вутера ван Оортмерссена помещает каждое динамическое значение внутрь стеков данных, которыми управляет компилятор, без аллокатора, сборщика мусора и аннотаций времени жизни.