Ускорение маленьких Ruby-хэшей: SWAR-поиск вместо линейного перебора

Speeding Up (Small) Ruby Hashes

Автор блога byroot, разработчик Ruby, оптимизирует поиск в маленьких хэшах (до 8 записей), которые в Ruby реализованы как массив пар, а не как настоящая хэш-таблица. Вместо линейного поиска O(n) он предлагает использовать SWAR (SIMD в регистре) для одновременного сравнения всех 8 байтов хинтов, что должно приблизить производительность к O(1). Бенчмарки показывают, что поиск восьмого ключа в ar_table на 1.58x медленнее, чем первого, и на 1.18x медленнее, чем в st_table.

Если посмотреть на это под другим углом, это поиск конкретного байта, то есть символа, в массиве байтов, то есть строке, длиной 8.

Ещё за этот день

2026-08-21