Spec-Zone.ru › OCaml 4.14

Глава 19 Профилирование (ocamlprof)

  • 19.1 Компиляция для профилирования
  • 19.2 Профилирование выполнения
  • 19.3 Вывод информации о профилировании
  • 19.4 Профилирование по времени

В этой главе описано, как можно профилировать выполнение программ OCaml, регистрируя, сколько раз вызываются функции, какие ветви условных операторов выполняются и т.д.

19.1 Компиляция для профилирования

Перед профилированием выполнения программы необходимо скомпилировать её в режиме профилирования, используя фронт-энд ocamlcp к компилятору ocamlc (см. главу 11) или фронт-энд ocamloptp к компилятору ocamlopt (см. главу 14). При компиляции модулей по отдельности, ocamlcp или ocamloptp необходимо использовать при компиляции модулей (для создания файлов .cmo или .cmx), а также их можно использовать (хотя это не строго необходимо) при их линковке.

Примечание

Если модуль (.ml файл) не имеет соответствующего интерфейса (.mli файл), тогда компиляция его с помощью ocamlcp создаст объектные файлы (.cmi и .cmo), которые не совместимы с файлами, созданными ocamlc, что может привести к проблемам (если .cmi или .cmo всё ещё существуют) при переключении между компиляцией с профилированием и без него. Чтобы избежать этой проблемы, всегда следует иметь .mli файл для каждого .ml файла. Такая же проблема существует с ocamloptp.

Примечание

Чтобы убедиться, что ваши программы могут быть скомпилированы в режиме профилирования, избегайте использования идентификаторов, начинающихся с __ocaml_prof.

Объем информации о профилировании можно контролировать с помощью опции -P для ocamlcp или ocamloptp, за которой следует одна или несколько букв, указывающих, какие части программы должны быть профилированы:

a
все опции
f
вызовы функций: точка подсчёта устанавливается в начале тела каждой функции
i
if …then …else … : точки подсчёта устанавливаются как в ветке then, так и в ветке else
l
циклы while, for: точка подсчёта устанавливается в начале тела цикла
m
ветки match: точка подсчёта устанавливается в начале тела каждой ветви
t
ветки try …with …: точка подсчёта устанавливается в начале тела каждой ветви

Например, компиляция с ocamlcp -P film профилирует вызовы функций, условные операторы if…then…else…, циклы и совпадение шаблонов.

Вызов ocamlcp или ocamloptp без опции -P по умолчанию устанавливает -P fm, то есть профилируются только вызовы функций и совпадение шаблонов.

Примечание

Для совместимости с предыдущими версиями, ocamlcp также принимает опцию -p с теми же аргументами и поведением, что и -P.

Команды ocamlcp и ocamloptp также принимают все опции соответствующих компиляторов ocamlc или ocamlopt, за исключением опции -pp (препроцессинг).

19.2 Профилирование выполнения

Запуск исполняемого файла, скомпилированного с помощью ocamlcp или ocamloptp, записывает счётчики выполнения указанных частей программы в файл ocamlprof.dump в текущем каталоге.

Если переменная среды OCAMLPROF_DUMP установлена при выходе программы, её значение используется как имя файла вместо ocamlprof.dump.

Файл дампов записывается только если программа завершается нормально (вызовом exit или естественным завершением). Он не записывается, если программа завершается с неперехваченным исключением.

Если в текущем каталоге уже существует совместимый файл дампов, то информация о профилировании добавляется в этот файл. Это позволяет, например, профилировать несколько запусков программы на различных входных данных. Обратите внимание, что файлы дампов, созданные интерпретируемыми исполняемыми файлами (скомпилированными с ocamlcp), совместимы с файлами дампов, созданными исполняемыми файлами для нативной архитектуры (скомпилированными с ocamloptp).

19.3 Вывод информации о профилировании

Команда ocamlprof выводит исходный код модулей программы, где в качестве комментариев указано количество выполнений. Например,

        ocamlprof foo.ml

выводит исходный код модуля foo с комментариями, указывающими, сколько раз были вызваны функции в этом модуле. Естественно, эта информация точна только в том случае, если исходный файл не был изменён после компиляции.

Следующие опции распознаются командой ocamlprof:

-args filename
Читать дополнительные аргументы командной строки, завершённые новой строкой, из filename.
-args0 filename
Читать дополнительные аргументы командной строки, завершённые нулевым символом, из filename.
-f dumpfile
Указывает альтернативный файл дампов профильной информации для чтения.
-F string
Указывает дополнительную строку, которая будет выводиться вместе с профильной информацией. По умолчанию ocamlprof будет добавлять к программам комментарии вида (* n *), где n — значение счётчика для точки профилирования. С опцией -F s аннотация будет (* sn *).
-impl filename
Обработать файл filename как файл реализации, даже если его расширение не .ml.
-intf filename
Обработать файл filename как файл интерфейса, даже если его расширение не .mli.
-version
Вывести строку версии и завершить работу.
-vnum
Вывести короткий номер версии и завершить работу.
-help or --help
Отобразить краткое описание использования и завершить работу.

19.4 Профилирование по времени

Профилирование с помощью ocamlprof записывает только количество вызовов, а не фактическое время, потраченное в каждой функции. В настоящее время нет способа выполнить профилирование по времени для байткодовых программ, сгенерированных ocamlc. Для профилирования по времени кода нативном коде рекомендуется использовать стандартные инструменты, такие как perf (на Linux), Instruments (на macOS) и DTrace. Профилирование с помощью gprof больше не поддерживается.

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/profil.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API