shr(7,dest) 是否比 shr(1,dest) 花费更多时间?
Does shr(7,dest) take more time than shr(1,dest)?
我正在学习 汇编语言艺术,第 2 版这本书。我刚开始学习 shr 和 shl 指令,我想知道移动较大的量是否会比移动较小的量花费更多的时间。 shr(1,dest) vs shr(7,dest).
如果说明的语法有误,我深表歉意。
http://agner.org/optimize/ 有 x86 CPU 的指令时序和微架构指南。
立即(编译时间常数)计数的移位和循环是最近的 AMD 和 Intel 的单周期延迟。
按 1 以外的任何计数循环进位都很慢,但可能是恒定时间。 (数据依赖时序使得无序执行依赖跟踪更加棘手,所以我认为他们只取最大值。
另一件奇怪的事情:显然 IvyBridge / Haswell 为短格式 ROL / ROR
旋转 1 操作码采用了额外的 uop,因此与具有 imm8
的普通操作码相比,吞吐量是一半计数 1.
回复:HLA:C 和 C++ 编译器现在对内部函数(转换为内联指令的函数)有很好的支持。 HLA 不再有那么多用例,我想我记得读过。根据一些我不记得的消息来源(抱歉 >.<),这些天你还不如学习普通的 asm。很多时候,您可以通过 C/C++.
中的内在函数使用矢量指令(或位操作,如 popcount)获得加速
如果您在学习 HLA 方面很开心,并且认为它很有用,那么祝您好运。
我正在学习 汇编语言艺术,第 2 版这本书。我刚开始学习 shr 和 shl 指令,我想知道移动较大的量是否会比移动较小的量花费更多的时间。 shr(1,dest) vs shr(7,dest).
如果说明的语法有误,我深表歉意。
http://agner.org/optimize/ 有 x86 CPU 的指令时序和微架构指南。
立即(编译时间常数)计数的移位和循环是最近的 AMD 和 Intel 的单周期延迟。
按 1 以外的任何计数循环进位都很慢,但可能是恒定时间。 (数据依赖时序使得无序执行依赖跟踪更加棘手,所以我认为他们只取最大值。
另一件奇怪的事情:显然 IvyBridge / Haswell 为短格式 ROL / ROR
旋转 1 操作码采用了额外的 uop,因此与具有 imm8
的普通操作码相比,吞吐量是一半计数 1.
回复:HLA:C 和 C++ 编译器现在对内部函数(转换为内联指令的函数)有很好的支持。 HLA 不再有那么多用例,我想我记得读过。根据一些我不记得的消息来源(抱歉 >.<),这些天你还不如学习普通的 asm。很多时候,您可以通过 C/C++.
中的内在函数使用矢量指令(或位操作,如 popcount)获得加速如果您在学习 HLA 方面很开心,并且认为它很有用,那么祝您好运。