开发者

Speed of bit operations with bit operators

Suppose I have

x &(num-1)

where x is an unsigned long long and num a regular int and & is the bitwise and operator.

I'm getting a significant speed reduction as the value of num increases. Is that normal behavior?

These are the other parts of the code that are affect开发者_运维问答ed

int* hash = new int[num]


I don't think that the bitwise operation is slowing down, I think you're using it a lot more times. And probably it isn't even the bitwise operation that's taking too long, but whatever else you're also doing more times.

Use a profiler.


If you're executing the code in a tight loop, it's wholly possibly that you'll see the performance lessen the higher num gets, I'm guessing that your C++ compiler isn't able to find a native instruction to perform the & with an unsigned long long - as you've stated your getting a slowdown for each power of two then I'd expect that the code that results from the & is repeatedly "dividing num" by 2 until it's zero and performing the and bit-by-bit.

Another possibility is that the CPU you're running on is lame and doesn't perform AND in a fixed number of cycles.


Problem solved. It had to do with the CPU cache and locality.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜