Профилирование GHC / Haskell: функция потребляет время без вызова

#haskell #profiling #ghc

#haskell #профилирование #ghc

Вопрос:

Я скомпилировал программу Haskell с GHC с включенным профилированием.

$ ./ server RTS -M6m -p -RTS

Я получаю профиль, подобный:

                                                    individual    inherited
COST CENTRE      MODULE           no.    entries  %time %alloc   %time %alloc

poke_a4u64       Generator      2859       56436   0.0    0.0     0.4    0.4
 storeParameter  Generator      2860           0   0.4    0.4     0.4    0.4
  ppCurrent      Generator      2866       56436   0.0    0.0     0.0    0.0
  ppFeedback     Generator      2861       56436   0.0    0.0     0.0    0.0
  

Похоже, что storeParameter никогда не вызывается, но потребляет время и память. Поскольку storeParameter вызывает ppCurrent, я предполагаю, что storeParameter вызывается 56436 раз, как и ppCurrent. Почему не отображается?

Комментарии:

1. Было бы очень полезно просмотреть код, который вы профилируете, если это возможно.

Ответ №1:

Это ошибка в профилировании ghc. Я не знаю об обходном пути, но Simon M пообещал улучшения в следующем выпуске.

Комментарии:

1. У вас есть ссылка на билет GHC Trac?

2. Я не могу вспомнить, есть ли билет Trac, но я говорил об этом с Саймоном М.

Ответ №2:

Я обнаружил entries , что столбец находится в моем собственном коде: например main , вызывается 6 раз!

Так что я бы не стал слишком беспокоиться об этом.

Комментарии:

1. entries это не количество раз, когда вызывается функция. Это количество раз, когда был введен узел графа вызовов. Это не одно и то же.

2. @JohnL: и все же, почему main узел графа вызовов должен вводиться более одного раза? Никакой рекурсии или чего-либо еще: просто выполните прямое «считывание параметров из командной строки, распечатайте некоторые данные в стандартный вывод, оцените чистую функцию и сохраните ее результаты на диске».

3. это предположение с моей стороны, но, возможно, возврат к main из системного вызова имеет значение? Было бы неплохо, если бы документация была немного более подробной.