小编Bit*_*011的帖子

C 无符号 64 位整数的总体计数,最大值为 15

我在 windows c 应用程序中大量使用人口计数(汉明权重)函数,并且必须尽可能地优化它以提高性能。在我使用该函数的一半以上的情况下,我只需要知道最大值为 15。该软件将在各种新旧处理器上运行。当 Intel 的 SSE4.2 或 AMD 的 SSE4a 存在时,我已经使用了 POPCNT 指令,但希望尽可能优化软件实现(如果不存在 SSE4,则用作后备)。

目前我有以下64位(平台)模式功能的软件实现:

int population_count64(unsigned __int64 w) {
    w -= (w >> 1) & 0x5555555555555555ULL;
    w = (w & 0x3333333333333333ULL) + ((w >> 2) & 0x3333333333333333ULL);
    w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0fULL;
    return int((w * 0x0101010101010101ULL) >> 56);
}
Run Code Online (Sandbox Code Playgroud)

所以总结一下:

(1) 我想知道在我只想知道最大值为 15 的情况下是否可以优化这个。

(2) 是否有比上述函数(对于无符号 64 位整数)更快的软件实现(对于 Intel 和 AMD CPU)?

c c++ windows bit-manipulation

4
推荐指数
1
解决办法
2643
查看次数

标签 统计

bit-manipulation ×1

c ×1

c++ ×1

windows ×1