gpt4 book ai didi

assembly - 执行更多指令如何加快执行速度

转载 作者:行者123 更新时间:2023-12-02 21:32:49 25 4
gpt4 key购买 nike

当我运行以下函数时,我得到了一些意想不到的结果。

在我的机器上,下面的代码始终需要大约 6 秒才能运行。但是,如果我取消注释“;dec [variable + 24]”行,因此会执行更多代码,运行时间大约为 4.5 秒。为什么?

.DATA
variable dq 0 dup(4)
.CODE

runAssemblyCode PROC
mov rax, 2330 * 1000 * 1000
start:
dec [variable]
dec [variable + 8]
dec [variable + 16]
;dec [variable + 24]
dec rax
jnz start
ret
runAssemblyCode ENDP
END

我注意到 Stack Overflow 上已经有类似的问题,但他们的代码示例并不这么简单,我找不到这个问题的任何简洁答案。

我尝试用nop指令填充代码,看看是否是对齐问题,并将亲和性设置为单个处理器。两者都没有任何区别。

最佳答案

简单的答案是因为现代CPU 极其复杂。在观察者看来,幕后发生的许多事情似乎是不可预测或随机的。

插入额外的指令可能会导致它以不同的方式调度指令,这在这样的紧密循环中可能会产生影响。但这只是猜测。

据我所知,它与前一条指令触及相同的缓存行,因此它似乎不是一种预取。我真的想不出一个合乎逻辑的解释,但同样,CPU 利用大量未记录的启发式方法和猜测来尽可能快地执行代码,有时,这意味着它们失败的奇怪的极端情况,并且代码变成比您预期的要慢。

您是否在不同的 CPU 型号上对此进行了测试?看看这是否只发生在您的特定 CPU 上,或者其他 x86 CPU 是否也表现出同样的情况,将会很有趣。

关于assembly - 执行更多指令如何加快执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com