Как использовать нимпроф?

В одном из моих проектов Nim у меня проблемы с производительностью. Сейчас я пытаюсь использовать nimprof, чтобы посмотреть, что происходит. У меня есть import nimprof в моем основном исходном файле, и я компилирую с --profiler:on. Когда я запускаю программу, я вижу сообщения:

writing profile_results.txt...
... done

Однако profile_results.txt содержит только это:

total executions of each stack trace:
Entry: 1/1 Calls: 2741/2741 = 1.0e+02% [sum: 2741; 2741/2741 = 1.0e+02%]

Время выполнения составило около 1 минуты, так что я не думаю, что этого времени просто недостаточно, чтобы что-то попробовать. Есть ли способ получить что-то более значимое из nimprof?


person bluenote10    schedule 25.07.2015    source источник
comment
Не уверен насчет nimprof, но я всегда использовал valgrind и kcachegrind и получал хорошие результаты для программ Nim.   -  person def-    schedule 25.07.2015


Ответы (2)


Вам нужно добавить флаг компилятора --stackTrace:on, иначе не будет имен функций или номеров строк для анализа.

person ratiotile    schedule 08.07.2019

1.0e+02% — это просто глупый способ сказать 100%. Там написано, что потребовалось много образцов стека, и все они были одинаковыми, что неудивительно.

Что вам нужно, так это увидеть образец. Он должен появиться ниже строки выше. Он покажет вам, в чем проблема.

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

person Mike Dunlavey    schedule 25.07.2015
comment
В этом случае у меня возникает вопрос: как я могу увидеть образец? То, что я скопировал/вставил выше, — это все, что я вижу в файле profile_results.txt. Здесь нет номеров строк или имен функций. - person bluenote10; 25.07.2015
comment
@blue: похоже, что в коде профилировщика может быть ошибка, которая не позволяет ему отображать образец. Поэтому, если вы запустите его под отладчиком, это должно быть возможно исправить. Конечно, если вы находитесь под отладчиком, все, что вам нужно сделать, это прервать его и отобразить стек. - person Mike Dunlavey; 25.07.2015