在 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
库不直接使用SIMD
和AVX
。如果可能的话,作为优化的一部分,由编译器进行向量化。
所以我宁愿查看特定循环的优化报告,看看编译器是否能够向量化它,如果不能,原因是什么。
【讨论】:
STL 源代码将从不明确使用 SIMD 指令,因为这样做的唯一方法是通过内在函数,这必然使您高度依赖体系结构。这将破坏可以在任何地方使用的标准库的目的。如果您的编译器没有应用您期望的优化,您可以查看专门用内部函数编写的库以强制使用 SIMD 指令。每个目标处理器都需要一个。【参考方案2】:由于这是依赖于实现的,唯一的方法是通过反汇编来找到它吗?
是的,没有其他办法。也无法保证实际使用的是什么。
【讨论】:
以上是关于在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是不是使用 AVX 或 SSE4 指令?的主要内容,如果未能解决你的问题,请参考以下文章