boost::dynamic_bitset[]运算符调用序列不同导致计算时长差异问题
boost::dynamic_bitset[]运算符性能差异问题
测试环境
- 问题复现环境:AWS EC2实例,CPU为Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
- 无差异对比环境:11th Gen Intel(R) Core(TM) i5-1135G7 笔记本
核心性能现象
测试boost::dynamic_bitset的[]运算符调用时,两种场景下耗时存在显著差异:
- 定义
DO_COUNT_IN_FUNC宏时,整体耗时约370ms - 未定义该宏时,整体耗时约1070ms
编译与测试情况
使用编译参数g++ -O2 -std=c++17及其他类似编译组合测试,结果一致。该性能差异仅在上述AWS EC2实例中出现,在11th Gen Intel Core i5-1135G7笔记本上无法复现。
测试代码
#include <boost/dynamic_bitset.hpp> #include <chrono> #include <iostream> // 注释/取消注释该行切换测试场景 #define DO_COUNT_IN_FUNC int main() { boost::dynamic_bitset<> bits(100000000, 1); auto start = std::chrono::high_resolution_clock::now(); #ifdef DO_COUNT_IN_FUNC size_t count = 0; for (size_t i = 0; i < bits.size(); ++i) { if (bits[i]) { ++count; } } #else for (size_t i = 0; i < bits.size(); ++i) { if (bits[i]) { // 空分支,仅触发[]运算符调用 } } #endif auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); std::cout << "耗时: " << duration.count() << "ms" << std::endl; #ifdef DO_COUNT_IN_FUNC std::cout << "计数结果: " << count << std::endl; #endif return 0; }
运行结果截图说明
截图显示:定义
DO_COUNT_IN_FUNC宏时程序输出耗时约370ms;未定义该宏时输出耗时约1070ms
内容的提问来源于stack exchange,提问作者Venkata Subbarao
相关产品推荐
相关产品推荐

