Битовые вращения медленнее, чем сдвиги на текущем процессоре Intel?
Мне было любопытно, еслиjava.lang.Integer.rotateLeft
оптимизируется с помощью инструкции поворота и пишет для нее тест. Результаты были неубедительными: это было намного быстрее, чем две смены, но немного медленнее, чем одна. Поэтому я переписал его на C ++ и получил примерно те же результаты. При компиляции черезg++ -S -Wall -O3
Я могу видеть инструкцию всгенерированный ассемблер, Мой процессор - Intel Core i5.
эталонный тест довольно длинный и, конечно, не самый хороший кусок кода, но я не думаю, что он сломан. Либо это? Согласно документации, вращение занимает один цикл, как и смены. Кто-нибудь может объяснить результаты?
rotations: 6860
shift: 5100
Первые два ответа неверны. JIT и gcc, и java знают инструкции поворота и используют их. По поводу gcc смотрите ссылку выше, по поводу java смотрите мойJava-тест и его результаты
benchmark ns linear runtime
Rotate 3.48 ====================
NonRotate 5.05 ==============================
Shift 2.16 ============