оптимизация — профилирование C ++ показывает векторную точку доступа. Как оптимизировать?

Я профилирую некоторый код обработки сигналов, используя callgrind / qcachegrind, включающий много операций над std::vector<float>,

Я получаю довольно серьезную точку доступа от встроенной в Mac OS nearbyint функция.

введите описание изображения здесь

Кажется, это почти полностью вызывается этой векторной функцией.

введите описание изображения здесь

Это в свою очередь вызывается из многих функций моего класса. Для меня _push_back_slow_path выглядит как какое-то узкое место в распределении, но я не совсем уверен, почему. Ни в одной точке цикла выполнения я не изменяю размер векторов. Все, что происходит, иногда они копируются по ссылке, повторяются или data() op используется для получения необработанного указателя для операций vDSP. Например . , ,

введите описание изображения здесь

  • Почему функция vDSP является причиной этого vector горячая точка, когда я передаю указатель на необработанные данные?
  • Каковы вероятные виновники этой точки доступа?
  • Почему basic_string появляются? Профилированная библиотека не использует строки.
  • Переключился бы на std::array по возможности, будь мудрым следующим ходом?

Не стесняйтесь спрашивать больше информации, и я с удовольствием отредактирую вопрос.

РЕДАКТИРОВАТЬ 1

В ответ на первый ответ я явно не звоню push_back в любом месте. Горячие точки встречаются в, казалось бы, помешанных местах, таких как эта встроенная операция регистрации на поплавке. Может ли это быть оптимизацией компилятора, делающей странные вещи?

введите описание изображения здесь

3

Решение

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

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

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

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