popcnt的前世今生?

1 · Ted Mostly · Feb. 3, 2024, 3:39 p.m.
Summary
不是popcorn,更不是pornhub 最近群聊里传了一个面试题 实现统计1的个数(汉明权重 hammingWeight),使用popcnt的算法对硬件不友好,有无绕过的思路 显然这个哥们的第一个实现是 int hammingWeight_popcnt(uint64_t n) { return __builtin_popcountll(n); } 当然c++20也支持 https://en.cppreference.com/w/cpp/numeric/popcount 一行,觉得自己很帅,当然面试官不喜欢,提示不要用popcnt,所谓的对硬件不友好指的应该是部分硬件没有这个指令 又或者性能原因?难道GPU上的popcnt性能很差?按下不表 直接贴实现 int hammingWeight(uint64_t n) { int ret = 0; while (n) { n &= n - 1; ret++; } return ret; } 其实开启 O2 加上 -march=native,大家都会生成相同的popcnt...