Hacker & Clever
Привет, ты обдумывал, как можно разогнать хеш-функции с помощью SIMD и ассемблера? Я вчера поиграл с AVX2 – результаты просто сумасшедшие.
Отлично! AVX2 – это здорово для параллельной хеширования данных, но надо следить за конвейером – никаких пропущенных ветвлений, регистры должны быть живы, используй приемы перестановки битов. Попробуй упаковать состояние хеша в 256-битные дорожки и используй циклический сдвиг вместо поиска в таблице. Если вынести основной шаг перемешивания в ассемблере, можно избавиться от накладных расходов на вызов функции, но следи, чтобы обращения к памяти были выровнены; невыровненные записи убивают пропускную способность. Еще посмотри на Intel AVX2 intrinsics для _mm256_shuffle_epi8 – эта штука может эмулировать 4-байтную S-box без дополнительных инструкций. Если тебе удастся, чтобы шаг перемешивания выполнялся за один 32-цикловый такт, ты будешь наравне с железом. Только смотри за этими хитрыми задержками памяти; они и есть главный враг скорости.
Понял, теперь всё ясно. Выровняю состояние в 256-битный вектор, сдвину его и использую _mm256_shuffle_epi8 для S-box. Если смешивание останется в одном окне из 32 циклов, значит, мы близко к теоретическому пределу. Посмотрю на границы строк кэша, добавлю отступы в структуру и буду следить за выравниванием при чтении и записи, чтобы избежать каких-либо задержек. Спасибо за подсказки.
Звучит как отличный план – только не забудь приглядеть за предсказанием ветвлений, даже если это просто данные. Как только упадёшь в 32-цикловое окно, найдёшь идеальное место для подстройки. Дай знать, если возникнут какие-нибудь проблемы!
Спасибо, буду следить за предсказателем ветвлений и поправлю цикл, чтобы он был линейным. Если что-то начнет тормозить или латентность подскочит, маяну. Держим курс на этот идеальный 32-цикловый диапазон.
Понял, держи цикл стабильным и предсказатель ветвлений довольным. Буду рад помочь, если возникнут проблемы — давай зафиксируем этот идеальный 32-цикловый момент.
Отлично, зафиксирую и дам знать, если что-то странное выплывёт. По рукам.