我正在分析一些使用 a 的代码,dynamic_bitset<>
我发现我的瓶颈出现在count()
函数中,需要在 for 循环中调用数百万次。简而言之,for 循环采用成对的位集,使用 计算集合交集&
,然后使用 保存汉明权重count()
。
为了与<bitset>
STL 中的常规进行比较,我将 bitset 实现为 long 数组并使用__builtin_popcountl()
(used in <bitset>
),发现它要慢得多 - 大约慢 50%。有没有人看过 boost 的do_count()
函数,在 中找到<boost/detail/dynamic_bitset.hpp>
,因为它使用了一些我完全不理解的查找表。
更清楚地说,我的问题是为什么 Boost 的do_count()
效率比__builtin_popcount()
?