有位运营商
假设速度位操作的我有有位运营商
x &(num-1)
其中x是为unsigned long long和num定期int和&是按位与操作。
随着num值的增加,我得到了显着的减速。这是正常的行为吗?
这些都是影响
int* hash = new int[num]
我不认为按位运算速度放缓代码的其他部分,我想你使用它很多次。可能它甚至不需要花费太长时间的按位操作,但其他任何事情你也可以做更多次。
使用分析器。
该数字不是任何循环或迭代器的一部分......它仅用于分配更多堆空间 – Jake 2011-05-08 23:18:10
如果你在一个紧密的循环中执行代码,那么很可能你会看到性能降低了较高的数字,我是猜测你的C++编译器无法找到本机指令执行&与一个无符号long long - 如你所说你得到一个两个幂的放缓然后我希望从&产生的代码重复“除以num”2,直到它为零执行和逐位。
另一种可能性是,您正在运行的CPU是跛脚的,并且在固定数量的周期内不执行AND操作。
你见过这样的CPU吗? – 2011-05-08 23:43:35
@ralu - 不是我所知道的,尽管他们确实存在这样的CPU,即使他们只是在旧ZX81的attic闲置。 – 2011-05-08 23:45:29
...我站在更正,ZX81(与Z80 CPU)采取一致的7个周期执行与。 :) – 2011-05-08 23:53:30
问题已解决。它必须处理CPU缓存和局部性。
你是如何测量的?请发布您的时间码。 – 2011-05-08 23:04:26
什么样的减速?当num的大小达到特定的水平时,速度是否突然增加,例如, >“什么可以用一个字节表示”? – 2011-05-08 23:06:45
代码太长..它是一个更大的程序(哈希表)的一部分,包含该操作。这只是当我增加n的幂数为2时,程序变慢...很多 – Jake 2011-05-08 23:07:19