У меня есть программа, которая сильно использует STL's bitset
. И gperftools показывает, что одна из горлышек с производительностью - std::_Base_bitset::_S_maskbit
(inline).Как улучшить эффективность битов C++ STL?
Отсюда 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
, или я должен написать свою собственную версию bitset
, скопировав код STL bitset
и добавив таблицу поиска.
Спасибо!
Во-первых, вы выбираете оптимизированную сборку? – PaulMcKenzie
Современные процессоры намного быстрее вычисляют значение, чем при извлечении значения из памяти. Таблицы поиска вряд ли улучшаются. –
@PaulMcKenzie Программа, составленная с помощью O2. – YJC