gpt4 book ai didi

cpu - 现代 CPU 是否跳过乘法为零?

转载 作者:行者123 更新时间:2023-12-04 14:49:27 33 4
gpt4 key购买 nike

我想知道当前的 cpus 是否避免在其中至少一个为零时将两个数字相乘。谢谢

最佳答案

这取决于 CPU 和(在某些情况下)操作数的类型。

较旧/较简单的 CPU 通常使用如下乘法算法:

integer operator*(integer const &other) {
unsigned temp1 = other.value;
unsigned temp2 = value;
unsigned answer = 0;

while (temp1 != 0) {
if (temp1 & 1)
answer += temp2;
temp2 <<= 1;
temp1 >>=1;
}
return integer(answer);
}

由于循环仅在/如果 temp1 != 0 时执行,如果 temp1,循环显然不会执行从 0 开始(但正如此处所写,不会尝试对其他操作数为 0 进行任何优化)。

然而,这基本上是一次一位的算法。例如,当乘以 32 位操作数时,如果每个位有 50:50 的机会被设置,我们预计平均大约有 16 次迭代。

较新的高端 CPU 通常一次至少处理两个位,甚至可能更多。它不是一个单一的硬件执行多次迭代,它通常会为乘法的每个阶段使用单独的(尽管本质上相同)硬件流水线操作(尽管这些通常不会在正常的流水线图中显示为单独的阶段)处理器)。

这意味着无论操作数如何,执行都将具有相同的延迟(和吞吐量)。平均而言,它稍微改善了延迟和吞吐量,但确实导致每个操作以相同的速度发生,而不管操作数如何。

关于cpu - 现代 CPU 是否跳过乘法为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332670/

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