Новая версия платформы MetaTrader 5 build 2755: Улучшения в окне котировок и отладчике - страница 25

 
Edgar Akhmadeev:

Я профилировал эксперта на истории M1 OHLC за 21 год (15К трейдов). Вот что получил:

Эта функция вызывается один раз при инициализации эксперта, затрачивает микросекунды или миллисекунды из всего теста в почти 3 минуты.

Посоветуйте, как мне получить какие-нибудь полезные данные? Это не сарказм. Мне надо оптимизировать код.

Вы в курсе, что в контекстном меню есть переключение режимов показа профилировщика и есть раскрываемая по клику детализация?

 
Renat Fatkhullin:

Вы точно задумываетесь над моими словами про инлайниг? Зачастую из 30 функций остается только 3.

Мне нужно иметь возможность ответить на вопрос, сколько и какая функция вызывались, как если бы не было инлайнинга, а был интерпретатор вместо компилятора.

Эта информация позволяет находить ошибки в своем коде, когда видишь несоответствия.


Т.е. профайлер интерпретатора и компилятора - две разные вещи с отличными друг от друга целями.

 
fxsaber:

Мне нужно иметь возможность ответить на вопрос, сколько и какая функция вызывались, как если бы не было инлайнинга, а был интерпретатор вместо компилятора.

Эта информация позволяет находить ошибки в своем коде, когда видишь несоответствия.


Т.е. профайлер интерпретатора и компилятора - две разные вещи с отличными друг от друга целями.

Наш, как и большинство C++ профайлеров работает в режиме семплирования по оптимизированному коду. У нас нет интерпретаторов и не будет.

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

 
fxsaber:

Мне нужно иметь возможность ответить на вопрос, сколько и какая функция вызывались, как если бы не было инлайнинга, а был интерпретатор вместо компилятора.

Эта информация позволяет находить ошибки в своем коде, когда видишь несоответствия.


Т.е. профайлер интерпретатора и компилятора - две разные вещи с отличными друг от друга целями.

Главной целью профилировщика - получение сведений о скорости работы участков кода
Любые добавленные счётчики будут вносить огромную погрешность.


Описанная задача (выделил жирным шрифтом) больше подходит для Code Coverage теста.
Для Code Coverage не важна скорость исполнения, его задача показать, какие участки кода программы выполнились, дополнительно, в отчёт можно будет добавить счётчики исполнения кода, которые обогатят отчёт.

Code Coverage тестирование мы планируем добавить в будущем.

 

Забыл, что мы уже добавили в редактор режим отключения инлайнинга пользовательского кода.

При отключенной галочке инлайнинга в профайлинге становится видно больше функций.



Профайлинг будем дальше апгрейдить, нашли несколько проблем.
 
Renat Fatkhullin:

Вы в курсе, что в контекстном меню есть переключение режимов показа профилировщика и есть раскрываемая по клику детализация?

Да. Но в любом случае показывает одну строку.

Неужели мой код настолько быстр, что профилер не успевает заметить ))

Моё ИМХО: у вас был очень полезный инструмент. Вылизанный и совершенно рабочий. Вы его выкинули и добавили более честный и точный инструмент, но у него, похоже, другое применение и цели. Если это не баг, и новый профилер так и должен работать, то для меня он бесполезен. В отличие от старого, который очень помогал оптимизировать код.

Я бы просто сделал 2 полезных инструмента в составе платформы, почему нет? Например профилировщик и трассировщик.

PS: галочка инлайнинга отключена
 
Edgar Akhmadeev:

Да. Но в любом случае показывает одну строку.

Неужели мой код настолько быстр, что профилер не успевает заметить ))

Моё ИМХО: у вас был очень полезный инструмент. Вылизанный и совершенно рабочий. Вы его выкинули и добавили более честный и точный инструмент, но у него, похоже, другое применение и цели. Если это не баг, и новый профилер так и должен работать, то для меня он бесполезен. В отличие от старого, который очень помогал оптимизировать код.

Я бы просто сделал 2 полезных инструмента в составе платформы, почему нет? Например профилировщик и трассировщик.

PS: галочка инлайнинга отключена

Вы раскрывали эту одну строку?

Да, если вы тестируете синтетический тест с полным игнором реальности, то профайлер покажет пустоту.

То есть:

  1. взяли мизерный код
  2. который зачастую вырожден в тотальное вырезание после оптимизатора
  3. не оценили затратность трафа прохождения типа пара легких if  с быстрым выходом в OnTick
  4. получили практически пустоту

Внимательно читайте технические детали, которые я описываю и не заменяйте их своей картиной мира.

Отключение инлайнинга в настройках влияет только на инлайнинг чистого MQL5 кода и нисколько не влияет на оптимизацию кода. Оптимизация в профайлере неотключаема.

Еще раз повторю: нынешние компиляторы - это совершеннейшие монстры оптимизации, недоступные для понимания большинства программистов. 10-20 летней давности знания и практики давно устарели. Профилировка MQL5/С++ оптимизированного кода оставляет очень мало шансов на определение точных границ строк исходного кода. Потому что границы размываются, код дублируется/реплицируется/разворачивается/смешивается на уровне cpu инструкций.

Даже в Visual Studio С++ когда профилируешь реальный релизный проект, приходится неслабо расширять сознание, когда смотришь на сильно урезанную картину рабочего мира. А без релиза нельзя, так как разница между оптимизированным и неоптимизированным кодом просто чудовищная.

Старый профайлер вообще никуда не годился и давал ложное ощущение контроля для неподготовленных разработчиков.

Новый профайлер доведем до ума вместе с новым отладчиком. Сейчас идет болезненный период вырезания и отказа от последних кусков совместимости с 32 битным кодом и его отладчиком.


Для информации: свой первый компилятор ассемблера для ZX Spectrum я написал еще в 1991 году, а потом все остальное время писал и пишу код, включая компиляторы.

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов...
 
Edgar Akhmadeev:

Я бы просто сделал 2 полезных инструмента в составе платформы, почему нет? Например профилировщик и трассировщик.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2755: Улучшения в окне котировок и отладчике

Ilyas, 2021.02.03 09:50

Главной целью профилировщика - получение сведений о скорости работы участков кода
Любые добавленные счётчики будут вносить огромную погрешность.


Описанная задача (выделил жирным шрифтом) больше подходит для Code Coverage теста.
Для Code Coverage не важна скорость исполнения, его задача показать, какие участки кода программы выполнились, дополнительно, в отчёт можно будет добавить счётчики исполнения кода, которые обогатят отчёт.

Code Coverage тестирование мы планируем добавить в будущем.


 
Renat Fatkhullin:

Вы раскрывали эту одну строку?

Да, если вы тестируете синтетический тест с полным игнором реальности, то профайлер покажет пустоту.

То есть:

  1. взяли мизерный код
  2. который зачастую вырожден в тотальное вырезание после оптимизатора
  3. не оценили затратность трафа прохождения типа пара легких if  с быстрым выходом в OnTick
  4. получили практически пустоту

Внимательно читайте технические детали, которые я описываю и не заменяйте их своей картиной мира.

Отключение инлайнинга в настройках влияет только на инлайнинг чистого MQL5 кода и нисколько не влияет на оптимизацию кода. Оптимизация в профайлере неотключаема.

Еще раз повторю: нынешние компиляторы - это совершеннейшие монстры оптимизации, недоступные для понимания большинства программистов. 10-20 летней давности знания и практики давно устарели. Профилировка MQL5/С++ оптимизированного кода оставляет очень мало шансов на определение точных границ строк исходного кода. Потому что границы размываются, код дублируется/реплицируется/разворачивается/смешивается на уровне cpu инструкций.

Даже в Visual Studio С++ когда профилируешь реальный релизный проект, приходится неслабо расширять сознание, когда смотришь на сильно урезанную картину рабочего мира. А без релиза нельзя, так как разница между оптимизированным и неоптимизированным кодом просто чудовищная.

Старый профайлер вообще никуда не годился и давал ложное ощущение контроля для неподготовленных разработчиков.

Новый профайлер доведем до ума вместе с новым отладчиком. Сейчас идет болезненный период вырезания и отказа от последних кусков совместимости с 32 битным кодом и его отладчиком.


Для информации: свой первый компилятор ассемблера для ZX Spectrum я написал еще в 1991 году, а потом все остальное время писал и пишу код, включая компиляторы.

1. Вам приходится читать много сообщений, поэтому вы не особо вчитываетесь к отдельные. Я же написал, что знаю и про контекстное меню, и про раскрывание строк. И, кстати, про длительность истории (21 год), количество трейдов (15К), время профилирования (почти 3 мин), что говорит о достаточном количестве данных для профилировщика.

2. Не синтетический тест, предназначенный показать баг (или свой игнор реальности), а реальный эксперт, над которым я работаю.

3. "Мизерный код" занимает после Release-компиляции с полной оптимизаций 690 Кб в ex5.

4. Со всем уважением - внимательно читаю сообщения, особенно разработчиков. Знаю, почему переходите на новый профилировщик. Понимаю, что он ещё в разработке, и когда-то заработает в полной мере. Пока что я просил совета - что мне делать, чтобы получить хоть какой-то полезный результат от профилировщика в текущем состоянии. Ваше сообщение полно советов, но это, как я сейчас описал, не мой случай.

5. Мой первый язык программирования был отнюдь не Бейсик, а ассемблер миниэвм Digital Equipment Corp PDP-11. А в 1984 я написал декомпилятор ROM для ZX 81 (предшественника Spectrum). А потом декомпилятор программ, драйвера устройств для советской персоналки ДВК. Для ГТС - определитель номера и голосовой робот. Для лингвистов - анализ речи, граф. звуковой редактор под Windows 1.0. После развала страны не писал код за деньги, и с возрастом сало в голове застывает, но полученный опыт позволяет адекватно оценивать реальность. Вот для этого последнего предложения, а не из гордыни, я и перечислил былые дела.

 
Ilyas:

Главной целью профилировщика - получение сведений о скорости работы участков кода
Любые добавленные счётчики будут вносить огромную погрешность.


Описанная задача (выделил жирным шрифтом) больше подходит для Code Coverage теста.
Для Code Coverage не важна скорость исполнения, его задача показать, какие участки кода программы выполнились, дополнительно, в отчёт можно будет добавить счётчики исполнения кода, которые обогатят отчёт.

Code Coverage тестирование мы планируем добавить в будущем.

Плохо владею терминологией, извините. Хорошо, что Вы поняли, о чем вел речь, и планируете это реализовать, спасибо.

Причина обращения: