Чистый функциональный язык отстаёт от лучшей 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.

Следующая новость · 10 из 10 Читать дальше
🌍Other

Goose — системный язык без кучи, и его автор пришёл отвечать на вопросы

Новый язык Вутера ван Оортмерссена помещает каждое динамическое значение внутрь стеков данных, которыми управляет компилятор, без аллокатора, сборщика мусора и аннотаций времени жизни.

★ 247 · 💬 167 · aardappel.github.io · 2 мин