小编roy*_*est的帖子

如果CPU是二进制机器,为什么它在位操作上会变慢?

我发现与二进制/双态特性相反,x86 CPU在处理诸如SHR,BT,BTR,ROL等类似的二进制操作指令时非常慢.

例如,我从某个地方读取它,比特移位/旋转超过1个位置被认为是慢的(具有高延迟,性能损失和那些可怕的东西).当操作数在内存中时更糟糕(不是内存双态外设吗?)

shl eax,1  ;ok
shl eax,7  ;slow?
Run Code Online (Sandbox Code Playgroud)

那么是什么让他们变慢?具有讽刺意味的是,像CPU一样的二进制机器在进行这种操作时应该很慢.它给人的印象是二进制CPU正在将位移位困难!

编辑:现在在手册中第二次看SHL条目后,它确实涉及一些沉重的微代码逻辑!

来自英特尔的vol.2手册shl ...

Operation
TemporaryCount = Count & 0x1F;
TemporaryDestination = Destination;
while(TemporaryCount != 0) {
    if(Instruction == SAL || Instruction == SHL) {
        CF = MSB(Destination);
        Destination = Destination << 1;
    }
    //instruction is SAR or SHR
    else {
        CF = LSB(Destination);
        if(Instruction == SAR) Destination = Destination / 2; //Signed divide, rounding toward negative infinity
        //Instruction is SHR
        else Destination = Destination / 2; //Unsigned divide …
Run Code Online (Sandbox Code Playgroud)

performance x86 assembly cpu-architecture bit

2
推荐指数
1
解决办法
134
查看次数

标签 统计

assembly ×1

bit ×1

cpu-architecture ×1

performance ×1

x86 ×1