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を求めると倍以上かかる。すごす。