Скорость битовых операций с битовыми операторами - PullRequest
0 голосов
/ 09 мая 2011

Предположим, у меня есть

x &(num-1)

где x - это длинный без знака long и num - регулярное int, а & - побитовый оператор и.

Я получаю значительное снижение скорости при увеличении значения num. Это нормальное поведение?

Это другие части кода, которые затрагиваются

int* hash = new int[num]

Ответы [ 3 ]

2 голосов
/ 09 мая 2011

Если вы выполняете код в узком цикле, вполне возможно, что вы увидите, что производительность будет уменьшаться при увеличении числа num, я предполагаю , что ваш компилятор C ++ не способеннайдите нативную инструкцию для выполнения & с длинным длинным без знака - так как вы указали, что получаете замедление для каждой степени два, то я ожидаю, что код, полученный в результате &, многократно «делит число» на 2 доэто ноль и выполнение и побитовое.

Другая возможность состоит в том, что процессор, на котором вы работаете, хромает и не выполняет AND в фиксированном количестве циклов.

2 голосов
/ 09 мая 2011

Я не думаю, что побитовая операция замедляется, я думаю, что вы используете ее намного чаще. И, вероятно, это даже не побитовая операция, которая занимает слишком много времени, но все, что вы также делаете больше раз.

Используйте профилировщик.

0 голосов
/ 09 мая 2011

Проблема решена.Это было связано с кэшем процессора и локальностью.

...