Подтвердить что ты не робот

Профилирование стоимости полиморфизма?

У меня есть кодовая база, которая "бесполезно" полиморфна тем, что почти каждая функция является полиморфной в некотором роде (почему бы и нет, когда вы можете?), но конечная программа использует функции только с несколькими конкретными типами. Я начал тратить некоторое время, бросая в SPECIALIZE и INLINABLE pragmas, чтобы попытаться снизить стоимость выполнения всего этого полиморфизма, но с размером моего кода он довольно ударил и пропустил. Есть ли способ сказать из профилирования, сколько времени потрачено на "выполнение потребностей полиморфизма" во время выполнения, для каждой функции?

(Примечание. Я задал этот вопрос, не зная, насколько это возможно даже технически, или если "все, что нужно полиморфизму", достаточно хорошо определено).

4b9b3361

Ответ 1

Процесс определения затрат:

  • Построить контрольный показатель - с критерием или другим инструментом измерения
  • Профиль - с поддержкой профилирования ghc.
  • Прочтите ядро ​​- с ghc-core, если причины производительности не очевидны.

Обычно вы обнаружите некоторую операцию, которая слишком медленная; компилировать с профилированием и точно определять, какие компоненты стоят дорого, а затем проверять код для его оптимизации (например, специализируя структуры или функции данных, изменяя алгоритмы или делая другие изменения).

Для критически важной работы вы затем перейдете и проверите Core, чтобы узнать, может ли помочь микро-настройка компилятора.