gpt4 book ai didi

c++ - Boost库中用于动态位集的硬件支持的popcount

转载 作者:行者123 更新时间:2023-12-02 10:24:42 26 4
gpt4 key购买 nike

如何启用硬件支持的popcount来计数dynamic bitset库中Boost 1.64.0中的设置位?

最佳答案

#include <boost/dynamic_bitset.hpp>
#include <boost/function_output_iterator.hpp>
#include <cstddef>

std::size_t fn(boost::dynamic_bitset<> const & p)
{
std::size_t acc = 0;

boost::to_block_range(p, boost::make_function_output_iterator(
[&acc](boost::dynamic_bitset<>::block_type v)
{
acc += __builtin_popcountll(v);
}
));

return acc;
}

编译为( g++ -O3 -march=native -c bitset.cpp -std=c++14):
  30:   48 8b 77 08             mov    0x8(%rdi),%rsi
34: 48 8b 17 mov (%rdi),%rdx
37: 48 89 f0 mov %rsi,%rax
3a: 48 29 d0 sub %rdx,%rax
3d: 48 83 f8 07 cmp $0x7,%rax
41: b8 00 00 00 00 mov $0x0,%eax
46: 7e 1d jle 65 <_Z3fn3RKN5boost14dynamic_bitsetImSaImEEE+0x35>
48: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
4f: 00
50: 31 c9 xor %ecx,%ecx
52: 48 83 c2 08 add $0x8,%rdx
56: f3 48 0f b8 4a f8 popcnt -0x8(%rdx),%rcx
5c: 48 01 c8 add %rcx,%rax
5f: 48 39 d6 cmp %rdx,%rsi
62: 75 ec jne 50 <_Z3fn3RKN5boost14dynamic_bitsetImSaImEEE+0x20>
64: c3 retq
65: c3 retq
66: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
6d: 00 00 00

关于c++ - Boost库中用于动态位集的硬件支持的popcount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com