Реализация count () в динамическом наборе Boost

Я профилирую некоторый код, который использует dynamic_bitset<> и я обнаружил, что мое узкое место возникает в count() функция, которую нужно вызывать миллионы раз в цикле for. Короче говоря, цикл for принимает пары наборов битов, вычисляет пересечение множества с использованием &, а затем сохраняет вес Хэмминга, используя count(),

Сравнивать с обычным <bitset> в STL я реализовал набор битов в виде массива long и использовал __builtin_popcountl() (используется в <bitset>) и обнаружил, что это намного медленнее — примерно на 50% медленнее. Кто-нибудь смотрел на буст do_count() функция, найденная в <boost/detail/dynamic_bitset.hpp>потому что он использует таблицу поиска, которую я совсем не понимаю.

Чтобы быть более ясным, мой вопрос, почему Boost’s do_count() гораздо эффективнее, чем __builtin_popcount()?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]