我有一个程序,大量使用STL的bitset
。 Gperftools表明,性能瓶颈之一是std::_Base_bitset::_S_maskbit
(内联)。如何提高C++ STL bitset的效率?
从这里https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a00775_source.html#l00078它似乎是一个访问或修改bitset
掩码总是重新计算。这让我想知道查找表是否有用。
我试图实现我自己的版本bitset
,其中使用掩码查找表。但是由于我的版本没有使用gcc内置指令,如__builtin_memcpy
,它实际上比STL bitset
慢得多。
所以我想知道是否有办法替代std::_Base_bitset::_S_maskbit
,或者我应该通过复制STL bitset
的代码并添加一个查找表来编写我自己的bitset
版本。
谢谢!
首先,你计划一个优化的构建? – PaulMcKenzie 2014-10-02 04:21:44
现代处理器在计算值时比从内存中获取值要快得多。查找表几乎不是一个改进。 – 2014-10-02 04:39:39
@PaulMcKenzie用O2编译的程序。 – YJC 2014-10-02 04:53:35