Профилирование стоимости полиморфизма?
У меня есть кодовая база, которая "бесполезно" полиморфна тем, что почти каждая функция является полиморфной в некотором роде (почему бы и нет, когда вы можете?), но конечная программа использует функции только с несколькими конкретными типами. Я начал тратить некоторое время, бросая в SPECIALIZE
и INLINABLE
pragmas, чтобы попытаться снизить стоимость выполнения всего этого полиморфизма, но с размером моего кода он довольно ударил и пропустил. Есть ли способ сказать из профилирования, сколько времени потрачено на "выполнение потребностей полиморфизма" во время выполнения, для каждой функции?
(Примечание. Я задал этот вопрос, не зная, насколько это возможно даже технически, или если "все, что нужно полиморфизму", достаточно хорошо определено).
Ответы
Ответ 1
Процесс определения затрат:
- Построить контрольный показатель - с критерием или другим инструментом измерения
- Профиль - с поддержкой профилирования ghc.
- Прочтите ядро - с ghc-core, если причины производительности не очевидны.
Обычно вы обнаружите некоторую операцию, которая слишком медленная; компилировать с профилированием и точно определять, какие компоненты стоят дорого, а затем проверять код для его оптимизации (например, специализируя структуры или функции данных, изменяя алгоритмы или делая другие изменения).
Для критически важной работы вы затем перейдете и проверите Core, чтобы узнать, может ли помочь микро-настройка компилятора.