У меня есть массив uint64, и для всех неустановленных битов (0 с) я делаю некоторые оценки.
Оценки не очень дороги, но очень мало битов не установлено. Профилирование говорит, что я трачу много времени на логику «найти следующий неустановленный бит».
Есть ли более быстрый способ (на Core2duo)?
Мой текущий код может пропустить много старших 1:
for(int y=0; y<height; y++) {
uint64_t xbits = ~board[y];
int x = 0;
while(xbits) {
if(xbits & 1) {
... with x and y
}
x++;
xbits >>= 1;
}
}
(И любая дискуссия о том, как / если SIMD / CUDA-ise это будет интригующей касательной!)