Дэниэл Бернштейн опубликовал новую библиотеку djbsort
11 июля 2018 года
Дэниэл Бернштейн (Daniel J. Bernstein), известный эксперт в области криптографии и создания защищённого ПО, разработавший такие проекты, как qmail, djbdns, NaCl, Ed25519, Curve25519 и ChaCha20-Poly1305, опубликовал новую библиотеку djbsort с реализацией высокопроизводительного алгоритма сортировки массивов целых чисел.
Библиотека демонстрирует рекордные показатели в скорости сортировки в памяти, заметно опережая по производительности существующие аналоги. Например, djbsort при сортировке 1024 32-разрядных знаковых целых чисел расходует 2.5 цикла CPU на байт данных, независимо от содержимого массива, в то время как библиотека Intel IPP (Integrated Performance Primitives) с оптимизациями на базе инструкций AVX расходует около 32 циклов на байт.
Кроме того, библиотека djbsort изначально написана с оглядкой на безопасность и использование в криптографических системах, в том числе может применяться в основанных на применении сортировки реализациях алгоритмов шифрования, стойких к подбору на квантовом компьютере. В частности, djbsort обеспечивает постоянное время сортировки независимо от обрабатываемого содержимого массива, что позволяет исключить применение методов анализа содержимого по сторонним каналам, учитывающих разницу во времени обработки для определения характера данных. В djbsort используются только простые арифметические инструкции без применения условного ветвления.
Третьим достоинством djbsort является предоставление инструментов, позволяющих верифицировать корректность выполненной сортировки для всех возможных вариантов массивов заданного размера. Инструментарий для верификации включает три утилиты: unroller для раскрутки программы сортировки для массивов заданного размера; minmax для преобразования раскрученной программы в набор операторов "min" и "max"; decompose для подтверждения корректности программы min-max.
Ограничения текущей реализации djbsort:
- Наличие оптимизаций только для CPU с поддержкой инструкций AVX2 ( оптимизации могут быть легко портированы для других CPU);
- Поддержка только сортировки знаковых 32-разрядных целых чисел (реализация может быть адаптирована для сортировки 16 и 64-разрядных целых, а также для чисел с плавающей запятой, любых записей фиксированного размера и указателей на записи переменного размера с отсортированными ключами);
- Размер сортируемого массива ограничивается имеющимся размером памяти - размер массива должен вмещаться в ОЗУ, но при желании библиотека может быть адаптирована для сортировки данных на диске с оптимизациями для минимизации обращений к диску;
- При сортировке используется только одно ядро CPU (алгоритм может быть изменён для параллельной обработки на разных ядрах или для распределённой сортировки на нескольких компьютерах);
- При верификации не выполняется проверка целостности данных в памяти;
- Процесс верификации запускается отдельно для массивов разного размера, а скорость верификации уменьшается при увеличении размера массива. Данное ограничение не особо значимо, так как верификация важна для применения в криптографии, а для криптографии используются только специфичные размеры массивов.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.