我有一个C程序,其中有n个乘法(单次乘法n次迭代),我发现另一种逻辑具有n/2次(1次乘法+ 2次加法)的迭代。我知道它们的复杂度都是O(n),但就CPU周期而言,哪个更快?
我有一个C程序,其中有n个乘法(单次乘法n次迭代),我发现另一种逻辑具有n/2次(1次乘法+ 2次加法)的迭代。我知道它们的复杂度都是O(n),但就CPU周期而言,哪个更快?
在你的电脑上进行测试。或者查看处理器规格并猜测。
旧逻辑不再适用:在现代处理器上,整数乘法可能非常便宜,在一些新的英特尔处理器上,它只需要3个时钟周期。在这些同样的处理器上,加法是1个周期。然而,在现代流水线处理器中,由数据依赖性引起的停顿可能会导致加法所需时间更长。
我猜N个加法+ N/2个乘法比N个乘法慢,如果你正在进行折叠类型操作,我会猜测反之亦然。但这只是一个猜测。
如果想要真相,请进行测试。
然而:大多数如此简单的算法都是内存绑定型的,两者速度将相同。
add r,r/i
(r=寄存器,i=立即数,m=内存)的倒数吞吐量为0.33,而延迟为1。
imul r,r
的延迟为3,倒数吞吐量为1。