Профилирование
Profile.@profileМакрос
@profile
@profile <expression> выполняет ваш выражение, периодически делая снимки стека вызовов. Они добавляются во внутренний буфер снимков стека вызовов.
Методы в Profile не экспортированы и должны вызываться, например, как Profile.print().
Profile.clearФункция
clear()
Очистить все существующие снимки стека вызовов из внутреннего буфера.
исходный код
Profile.printФункция
print([io::IO = stdout,] [data::Vector]; kwargs...)
Выводит результаты профилирования в io (по умолчанию, stdout). Если вы не предоставите вектор data, будет использован внутренний буфер накопленных снимков стека вызовов.
Ключевые аргументы могут быть любой комбинацией:
format– Определяет, будут ли снимки стека вызовов выводиться с (по умолчанию,:tree) или без (:flat) отступом, указывающим структуру дерева.C– Еслиtrue, будут показаны снимки стека вызовов из кода C и Fortran (обычно они исключаются).combine– Еслиtrue(по умолчанию), указатели инструкций объединяются, которые соответствуют одной и той же строке кода.maxdepth– Ограничивает глубину больше, чемmaxdepthв формате:tree.sortedby– Управляет порядком в формате:flat.:filefuncline(по умолчанию) сортирует по строке исходного кода,:countсортирует по количеству собранных выборок, а:overheadсортирует по количеству выборок, вызываемых каждой функцией сама по себе.noisefloor– Ограничивает кадры, превышающие эвристический порог шума выборки (применяется только к формату:tree). Рекомендуемое значение для этого параметра составляет 2.0 (по умолчанию 0). Этот параметр скрывает выборки, для которыхn <= noisefloor * √N, гдеn– число выборок в этой строке, аN– число выборок для вызываемой функции.mincount– Ограничивает вывод только теми строками, которые содержат как минимумmincountвхождений.recur– Управляет обработкой рекурсии в формате:tree.:off(по умолчанию) выводит дерево как обычно.:flatвместо этого сжимает любую рекурсию (по ip), показывая приблизительное влияние преобразования любой саморекурсии в итератор.:flatcделает то же самое, но также включает сжатие кадров C (может делать странные вещи вокругjl_apply).
print([io::IO = stdout,] data::Vector, lidict::LineInfoDict; kwargs...)
Выводит результаты профилирования в io. Эта разновидность используется для проверки результатов, экспортированных предыдущим вызовом retrieve. Укажите вектор data снимков стека вызовов и словарь lidict информации о строках.
См. Profile.print([io], data) для объяснения допустимых ключевых аргументов.
Profile.initФункция
init(; n::Integer, delay::Real))
Настройте интервал delay между снимками стека вызовов (в секундах) и число n указателей инструкций, которые могут быть сохранены. Каждый указатель инструкции соответствует одной строке кода; снимки стека вызовов обычно представляют собой длинный список указателей инструкций. Текущие настройки можно получить, вызвав эту функцию без аргументов, и каждую можно установить независимо, используя ключевые слова или в порядке (n, delay).
Profile.fetchФункция
fetch() -> data
Возвращает копию буфера профильных снимков стека вызовов. Обратите внимание, что значения в data имеют смысл только на этой машине в текущей сессии, потому что они зависят от точных адресов памяти, используемых при JIT-компиляции. Эта функция предназначена в основном для внутреннего использования; retrieve может быть лучшим выбором для большинства пользователей.
Profile.retrieveФункция
retrieve() -> data, lidict
«Экспортирует» результаты профилирования в переносимом формате, возвращая набор всех снимков стека вызовов (data) и словарь, который сопоставляет (специфичные для сессии) указатели инструкций в data значениям LineInfo, которые хранят имя файла, имя функции и номер строки. Эта функция позволяет сохранять результаты профилирования для дальнейшего анализа.
Profile.callersФункция
callers(funcname, [data, lidict], [filename=<filename>], [linerange=<start:stop>]) -> Vector{Tuple{count, lineinfo}}
Учитывая предыдущий запуск профилирования, определите, кто вызвал конкретную функцию. Предоставление имени файла (и, необязательно, диапазона номеров строк, в которых определена функция), позволяет избежать неоднозначности перегруженной функции. Возвращаемое значение – вектор, содержащий количество вызовов и информацию о строке вызывающей функции. Необязательно можно предоставить снимок стека вызовов data полученный от retrieve; в противном случае используется текущий внутренний буфер профилирования.
Profile.clear_malloc_dataФункция
clear_malloc_data()
Очищает любые сохраненные данные об аллокации памяти при запуске julia с --track-allocation. Выполните команду(ы), которую нужно протестировать (чтобы принудительно выполнить JIT-компиляцию), затем вызовите clear_malloc_data. Затем снова выполните свои команды, выйдите из Julia и проверьте полученные *.mem файлы.
© 2009–2021 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.6.0/stdlib/Profile/