Vectorized CLZ и CTZ: трюк с плавающей запятой ускоряет подсчёт нулей в 2–3 раза
Vectorized CLZ and CTZ
Автор нашёл способ векторизовать инструкции CLZ и CTZ через манипуляции с экспонентой чисел с плавающей запятой. На Haswell CLZ выполняется за 0.45 нс/итерацию против 1 нс у скалярной версии, а CTZ — за 0.49 нс. Позже в комментариях предложили альтернативу на основе последовательностей де Брёйна, которая даёт вдвое большую пропускную способность. Для 64-битных входов оптимальным оказался алгоритм с двумя LUT и vpsadbw.
Можете себе представить, сколько времени я потратил на то, чтобы всё это устроить?