Пример профилировки кода в MQL5

 

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

Для примера возьмем достаточно затратный пример скрипта RayTracer.Bmp.mq5, который производит большое количество вычислений и выводит результаты в BMP файл. Его исходник приложен ниже.

Скомпилируем скрипт и запустим его на чарте. Он достаточно быстро отработает, покажет в журнале время выполнения так:

2012.07.12 19:57:05     RayTracer.Bmp (EURUSD,H1)       In 8393 ms

Сгенерированный файл picture.bmp можно найти в каталоге /MQL5/Files:

Скрипт занимается рейтрейсингом для визуализации сложной сцены из большого количества объектов.

Теперь попробуем оценить затраты каждой функции и строки этой программы. Для этого в редакторе кода просто выполним команду "Start Profiling", дождемся окончания работы скрипта на чарте и вернемся в редактор.

Профайлинг вносит задержки на контроль кода, замедляя работу программы в 3-4 раза, что можно увидеть по увеличившемуся времени генерации:

2012.07.12 20:03:40     RayTracer.Bmp (EURUSD,H1)       In 28127 ms


Посмотрим во вкладку "Profile" редактора. По умолчанию открывается режим "Functions by Calls", который показывает обобщенные результаты по функциям.

В таблице показываются:

  • имя функции
  • строка
  • счетчик вызовов функции
  • количество затраченных тактов (замеряется через rdtsc)
  • графическое отображение процента использования


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

Более детально увидеть расходы ресурсов можно в режиме "Functions by Lines", где указываются замеры каждой строки:


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

При необходимости, результаты профилировки можно экспортировать в Open XML, HTML или CSV файлы.

Ну что можно еще сказать? Мы сделали еще один простой и удобный инструмент для разработчиков!

Файлы:
Причина обращения: