硬件支持的 Boost 库中动态位集的弹出计数
Hardware supported popcount for dynamic bitset in Boost library
如何启用硬件支持的popcount
,以从Boost 1.64.0
库中计算dynamic bitset
中的设置位?
#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
相关文章:
- 编译时未启用intel oneApi CUDA支持
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- C++中的动态铸造故障
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 内联映射初始化的动态atexit析构函数崩溃
- 为什么istream不支持右值提取
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在标准库中静态链接时,如何支持动态插件
- 为什么C++不支持基于范围的动态数组的 for 循环?
- 硬件支持的 Boost 库中动态位集的弹出计数
- 是 Oracle 正式支持的动态记录集
- 抢占模式下不支持 CUDA 动态并行调试.断点将被禁用
- GTX 550 Ti显卡支持动态并行编程
- 如何重构C++代码以支持动态数组大小
- QT是否支持运行时动态UI生成和HTML呈现
- 使用动态链接的zlib支持构建boost
- O'Reilly "Objective-C Pocket Reference"声称C++不支持动态调度,这是真的吗?