相关疑难解决方法(0)

哪个更快:x << 1或x << 10?

我不想优化任何东西,我发誓,我只想出于好奇而问这个问题.我知道,在大多数硬件有位移(例如的组件的命令shl,shr),它是一个命令.但是,你转移了多少比特(纳秒级,或CPU技巧)是否重要?换句话说,在任何CPU上是否更快?

x << 1;
Run Code Online (Sandbox Code Playgroud)

x << 10;
Run Code Online (Sandbox Code Playgroud)

请不要因为这个问题而恨我.:)

c c++ cpu performance low-level

82
推荐指数
8
解决办法
7018
查看次数

INC指令与ADD 1:重要吗?

来自Ira Baxter回答,为什么INC和DEC指令不会影响进位标志(CF)?

大多数情况下,我远离INCDEC现在,因为他们做的部分条件代码更新,这样就可以在管道中引起滑稽的摊位,和ADD/ SUB没有.因此,无关紧要(大多数地方),我使用ADD/ SUB避免失速.我使用INC/ DEC仅在保持代码较小的情况下,例如,适合高速缓存行,其中一个或两个指令的大小产生足够的差异.这可能是毫无意义的纳米[字面意思!] - 优化,但我在编码习惯上相当老派.

我想问一下为什么它会导致管道中的停顿,而添加不会?毕竟,无论是ADDINC更新标志寄存器.唯一的区别是INC不更新CF.但为什么重要呢?

performance x86 assembly increment micro-optimization

26
推荐指数
2
解决办法
4234
查看次数

Is a logical right shift by a power of 2 faster in AVR?

I would like to know if performing a logical right shift is faster when shifting by a power of 2

For example, is

myUnsigned >> 4
Run Code Online (Sandbox Code Playgroud)

any faster than

myUnsigned >> 3
Run Code Online (Sandbox Code Playgroud)

我很欣赏每个人的第一反应是告诉我,人们不应该担心像这样的小事,它使用正确的算法和集合来减少重要的数量级.我完全同意你的意见,但我真的想从嵌入式芯片(ATMega328)中挤出所有东西 - 我只是有一个性能转变,值得'哇喔!' 通过用位移替换除法,所以我向你保证这很重要.

c++ optimization avr atmega bit-shift

7
推荐指数
2
解决办法
5293
查看次数

为什么所有现代 x86 掩码都会将计数移至 CL 中的 5 个低位

我正在深入研究 x86 ASM 中的左移和右移操作,例如shl eax, cl

\n\n

来自 IA-32 英特尔架构软件开发人员\xe2\x80\x99s 手册 3

\n\n
\n

所有 IA-32\n 处理器(从 Intel 286 处理器开始)都会将移位计数屏蔽为 5 位,从而导致最大计数为 31。此屏蔽在所有操作模式\n 中完成(包括虚拟 8086模式)以减少指令的最大执行时间。

\n
\n\n

我试图理解这个逻辑背后的原因。也许它以这种方式工作是因为在硬件级别上很难使用 1 个周期实现寄存器中所有 32(或 64)位的移位?

\n\n

任何详细的解释都会有很大帮助!

\n

x86 assembly bit-shift cpu-architecture cpu-registers

4
推荐指数
1
解决办法
1744
查看次数