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 и вы думаете, что это полезно, тогда удачи вам.