О профилировщике кода MT5 - страница 7

 

Что это?!


 
fxsaber #:

Профилировщик показывает вызовы функций, которых на самом деле не было. Нарвался даже на такое:

Какой-то ArrayCopy, которого нет в исходнике mqh-файла! При этом еще красной строкой выделил объявление статик-массива.

Так и не получается пользоваться профайлером, к сожалению.

А вы задумайтесь, как и чем массивы перемещаются при построении, присвоении и перемещении объектов(а у вас обьект).

Неужели вы думаете, что программа состоит только из ваших строк?

Примеры не полные.

 
Renat Fatkhullin #:

А вы задумайтесь, как и чем массивы перемещаются при построении, присвоении и перемещении объектов(а у вас обьект).

Неужели вы думаете, что программа состоит только из ваших строк?

Примеры не полные.

Дайте четкую инструкцию, что сделать с моей стороны, чтобы вы занялись этой темой, не откладывая в долгий ящик.

 
fxsaber #:

Дайте четкую инструкцию, что сделать с моей стороны, чтобы вы занялись этой темой, не откладывая в долгий ящик.

Вы делаете утверждения по теме (компиляторы и их внутренности), в которой не разбираетесь.

Инструкция не поможет - вы же не пройдете курс разработчика компиляторов, чтобы понять огромный мир неявно генерируемого кода в объектных языках. Высокоуровневые языки используют массу библиотечных и встраиваемых кодов. Соберите средний проект на WinAPI и посмотрите в *.map файл - там тысячи вспомогательных функций и любая из них может проявиться в профайлинге.

Десятки раз повторяемые мною слова про "результирующий код не имеет отношения к вашему коду, оптимизируется, встраивается и перетасовывается оптимизирующим компилятором" тоже не заходят в уши. Главная задача компилятора - сделать максимально быстрый код, а не читаемый. У профайлера - показать реально узкие места в оптимизированном(реальном) коде, а не обманывать соответствием строк.

Для сравнения: на текущий момент профилировать С++ код часто является очень непростой задачей, так как оптимизатор здорово сбивает соответствие. И да, Microsoft Visual Studio С++ - это не эталон, код он генерирует очень слабый/плохой. На 20-30% хуже конкурентов в виде LLVM/Clang.


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

Для профилирования используется метод "Sampling". Профилировщик делает паузы в работе MQL-программы (~1000 раз в секунду) и собирает статистику того, сколько раз пауза пришлась на тот или иной участок кода. В том числе анализируются стеки вызовов, чтобы определить "вклад" каждой функции в общее время работы кода. В конце профилирования вы получаете информацию о том, сколько раз была выполнена пауза и сколько раз каждая из функций оказывалась в стеке вызовов:

  • Общая активность ЦП [единица измерения, %] — общее количество "появления" функции в стеке вызовов.
  • Собственная активность ЦП [единица измерения, %] — количество "пауз", которые произошли непосредственно внутри указанной функции. Этот счетчик наиболее важен для определения "узких" мест, поскольку по статистике остановка чаще происходит в тех участках программы, которые требуют большего процессорного времени.



Без одношаговых воспроизводимых примеров мы не рассматриваем вопросы. Упрощенная синтетика из пары вызовов на микро задачах тоже не может рассматриваться в разрезе процентов занимаемого времени или вклада в общее время.

 
Renat Fatkhullin #:

Вы делаете утверждения по теме (компиляторы и их внутренности), в которой не разбираетесь.

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

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

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

Без одношаговых воспроизводимых примеров мы не рассматриваем вопросы. Упрощенная синтетика из пары вызовов на микро задачах тоже не может рассматриваться в разрезе процентов занимаемого времени или вклада в общее время.

Кому мне отправить данные для воспроизведения? Данные из ЛС показывают, что сообщения ЛС могут не читаться длительное время.

Две зеленые галочки - сообщение прочитано, одна - не прочитано.

 
fxsaber #:

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

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

Кому мне отправить данные для воспроизведения? Данные из ЛС показывают, что сообщения ЛС могут не читаться длительное время.

Две зеленые галочки - сообщение прочитано, одна - не прочитано.

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

какова вероятность попадания счетчика в дешевые переменные? почти 0

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

 
Fast235 #:

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

какова вероятность попадания счетчика в дешевые переменные? почти 0

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

Говорю про практическое применение, а не красивую теорию, которая понятна с первого раза.

 
fxsaber #:

Говорю про практическое применение, а не красивую теорию, которая понятна с первого раза.

практическое это как было раньше, сколько раз вызывается?

это ведь чисто перфекционистский интерес,

согласен лишние вызовы нужно видеть, хоть они и дешевые будут

 
Fast235 #:

практическое это как было раньше, сколько раз вызывается?

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

 
fxsaber #:

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

Ренату стоило бы не в общих фразах показать новый профайлер, а что-бы дошло даже для таких как саб, убежденных) (не принижаю.)