2016-08-07 2 views
1

C++ предоставляет bitset для хранения бит. В соответствии с эталоном класс эмулирует массив из bool элементов, но оптимизирован для распределения пространства. В каких случаях следует отдать предпочтение другому?Битрейт быстрее, чем массив bools?

+2

Быстрее для чего? – juanchopanza

+0

Почему бы не написать код для получения статистики производительности? –

+1

Хороший вопрос. Вы должны сравнить свою проблему с использованием обеих реализаций. – StoryTeller

ответ

1

Вам необходимо сравнить ваш прецедент.

  • обычная реализация bitset<N> используют бит на элемент и array<bool, N> - байты за элемент, так что первые имеют более высокие изменения, чтобы поместиться в L1d..LLd, и таким образом, может быть быстрее для критического размера битовой маски , по крайней мере, при выполнении последовательного доступа
  • bitset<N> делает больше математики так под некоторые модели доступа (высоко случайные) вполне могут быть медленнее
  • при доступе одновременно, array<bool, N> будет иметь меньше конкуренции для каждого элемента, так что производительность будет зависеть много на шаблон доступа.
7

Правильная вещь - принимать измерения.

Тем не менее, как я помню, документы о битах всегда говорили, что бит-набор не гарантированно является реальным битом, это всего лишь рекомендация для компилятора и удобный синтаксис для манипуляций с битами.

В компиляторах встроенных систем многие используют реальные биты, потому что работа с битами является реальной необходимостью в таких программах.

Что касается скорости, противоположность более разумная - работа с массивами проще с помощью индексации. Работа с битами требует больше математики, доступа к правильному слову и последующего доступа к правильному биту.

+1

В то время как «бит-сдвиги означают дополнительную работу, поэтому она должна быть медленнее!» звучит разумно, на практике дополнительные затраты составляют две дополнительные смены, а также две и более (не более). Это около двух циклов на современных процессорах. Но вы просто увеличили давление памяти в восемь раз, что может иметь гораздо большие последствия для производительности. Так что это далеко не так ясно. – Voo

Смежные вопросы