Shr(7,dest) занимает больше времени, чем shr(1,dest)?

Я нахожусь в процессе изучения HLA Assembly по книге Art of Assembly Language, 2nd Edition. Я только начал изучать инструкции shr и shl, и я хотел бы знать, если бы сдвиг на большую величину занял бы больше времени, чем сдвиг на меньшую величину. shr(1,dest) против shr(7,dest).

Извините, если синтаксис для инструкций неверен.

1 ответ

Решение

http://agner.org/optimize/ имеется время инструкций для процессоров x86 и руководства для микроархивов.

Сдвиг и поворот с немедленным (постоянным временем компиляции) счетчиком - это задержка одного цикла на последних AMD и Intel.

Поворот-перенос по любому счету, кроме 1, является медленным, но, вероятно, постоянным временем. (зависящее от данных время делает отслеживание зависимостей выполнения не по порядку еще сложнее, поэтому я думаю, что они просто берут максимум.

Еще одна странная вещь: по-видимому, IvyBridge / Haswell предпринимают дополнительный моп для короткой формы ROL / ROR код операции поворота на 1, поэтому пропускная способность в два раза меньше, чем у обычного кода операции с imm8 количество 1.

re: HLA: Компиляторы C и C++ имеют хорошую поддержку встроенных функций (функций, которые превращаются в встроенные инструкции). HLA уже не так полезен, я помню, что читал. Согласно некоторым источникам, которые я не могу вспомнить (извините>.<), В эти дни вы могли бы также просто изучить нормальный асм. В большинстве случаев вы можете получить ускорение от использования векторных инструкций (или битовых манипуляций, таких как popcount) через встроенные функции в C / C++.

Если вам весело изучать HLA и вы думаете, что это полезно, тогда удачи вам.

Другие вопросы по тегам