Hacker's DelightのFig5-11にあるnlzは超はえぇ
64bit版。
inline int nlz(unsigned long long x) { x = x | (x >> 1); x = x | (x >> 2); x = x | (x >> 4); x = x | (x >> 8); x = x | (x >> 16); x = x | (x >> 32); return __builtin_popcountll(~x); }
tbb::parallel_reduceで4億個に対して統計を取ったら0.92secとかで求まってしまった。ループでナイーブnlzを求めると倍以上かかる。すごす。