Понимание отчета VTune

это продолжение существующего потока (http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) — я обнаружил, что не кеш мешает моему приложению. Короче говоря, у меня есть приложение, которое тратит 70 процентов времени выполнения в одной функции (15 секунд из 22). Следовательно, я хотел бы максимально сократить время выполнения этой функции, так как предполагаемое использование функции предназначено для НАМНОГО больших данных (то есть 22 секунды не являются запланированным временем выполнения 🙂

Проблема в том, что вывод VTune меня озадачивает, кажется, что код тратит огромное количество времени в совершенно неожиданных местах. У меня закончились идеи, поэтому я публикую свой проект вместе с результатами профилировщика здесь.

Взглянув на инкриминированную функциюvaluExits (), эти вещи меня озадачивают:

1 / функция тратит 2,2 с на вызов встроенной функции, которая возвращает 1 независимо от параметров (строка 425, this-> contractManager-> contractCount ()). Примечание: версия, в которой функция возвращает 1 независимо от параметров, является одним из возможных случаев, поэтому я не могу поставить «contractCount = 1» и оставить это так. Может ли перенаправление от указателя виртуальной таблицы съесть эти 2,2 секунды (contractCount () — это виртуальный метод)?

2 / функция тратит 3,3 с на min (uint1, uint2) (строка 432), несмотря на то, что я использую версию wmin, которая должна быть максимально дружественной к процессору.

3 / функция тратит 1,6 с на строку 512, что является очень тривиальной операцией, и вызываемая функция не является виртуальной.

Итак, вопросы: почему эти три строки кода занимают так много времени? Что я пропускаю? И как я могу оптимизировать мой код, чтобы он работал быстрее? Должен ли я заменить wmin () на версию SSE min, примененную ко всем массивам?

Любой вклад очень ценится.
Даниил

РЕДАКТИРОВАТЬ:
Взглянув на сборку, я обнаружил, что в случае 1 / это действительно vfptr, который делает код «медленным». Я заменил вызов виртуальной функции быстрым делегатом Дона Клагстона, но никаких изменений в производительности не произошло (понятия не имею, почему). Благодаря комментарию Соловья, вложения теперь должны содержать все необходимые файлы. Тем не менее, двоичный файл не может быть успешно запущен, так как он подключается к общей памяти, где есть 100 МБ данных.

Итак, я прилагаю весь проект в сочетании с результатами VTune Вот а также Вот

2

Решение

Daniel,

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

Я также попытался пересобрать ваши исходники, но не удалось найти несколько файлов заголовков:

  • Некоторые заголовки Qt (у меня не установлен Qt и я не эксперт в этом)
  • файл parameterHolder.h
  • externFloatConsts.h файл

Поэтому, чтобы помочь, было бы хорошо иметь эти файлы или двоичный файл, который использовался для сбора данных.

0

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

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

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