我有一個程序,大量使用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