在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是不是使用 AVX 或 SSE4 指令?

Posted

技术标签:

【中文标题】在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是不是使用 AVX 或 SSE4 指令?【英文标题】:Does the bitwise operation (&, ^. | etc) provided as operator overloads in the std::bitset use AVX or SSE4 instructions?在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是否使用 AVX 或 SSE4 指令? 【发布时间】:2016-10-05 22:19:58 【问题描述】:

由于这是依赖于实现的,唯一的方法是通过反汇编来找到它吗?

【问题讨论】:

【参考方案1】:

您总是可以查看STL 源以查看它是否使用SIMD,但我相信它是特定于编译器的并且STL 库不直接使用SIMDAVX。如果可能的话,作为优化的一部分,由编译器进行向量化。

所以我宁愿查看特定循环的优化报告,看看编译器是否能够向量化它,如果不能,原因是什么。

【讨论】:

STL 源代码将从不明确使用 SIMD 指令,因为这样做的唯一方法是通过内在函数,这必然使您高度依赖体系结构。这将破坏可以在任何地方使用的标准库的目的。如果您的编译器没有应用您期望的优化,您可以查看专门用内部函数编写的库以强制使用 SIMD 指令。每个目标处理器都需要一个。【参考方案2】:

由于这是依赖于实现的,唯一的方法是通过反汇编来找到它吗?

是的,没有其他办法。也无法保证实际使用的是什么。

【讨论】:

以上是关于在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是不是使用 AVX 或 SSE4 指令?的主要内容,如果未能解决你的问题,请参考以下文章

[C++] 用bitset代替bool数组的性能测试以及bitset的基本使用

bitset

std::bitset 的性能如何?

迭代std :: bitset中真实位的有效方法?

在 C++ 中将 bitset 转换为 int

为啥 std::bitset 不带有迭代器?