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

 
Edgar Akhmadeev:

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

Тоже очень хочу научиться пользоваться новым. Возможно, мешают закостенелые привычки. Статью по профилировщику прочел. Но так и не смог разобраться, чтобы на 100% понимать. Допускаю, что это из-за еще неисправленных проблем. Наверное, когда будут устранены слабые места в профилировщике, можно будет с большей вероятностью разобраться в нем.


ЗЫ Новый термин "Code Coverage" взял на вооружение.

 
Andrey Khatimlianskii:

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

 
Edgar Akhmadeev:

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

Вы только представьте себе степень вранья:

Для примера, строка кода короткой функции

struct A
  {
   ...

   int Get()
    {
     return(m_x);
    }
  }

Псевокод

int A::Get()
  {
   Ext_"A::Get"_Calls = Ext_"A::Get"_Calls + 1    // добавляем счётчик вызовов
   
   ulong time = read_time_stamp_counter();        // получим начальное "время" для строки return(m_x);

   MOV EAX = this->m_x;                           // выполним полезный код

   time = read_time_stamp_counter() - time;       // получим "время" полезной работы 
   
   Ext_"A::Get"_Time = Ext_"A::Get"_Time + time;  // сохраняем время для строки return(m_x);

   RET
  }

И это для каждой строки исходного кода !

Старый профилировщик нельзя использовать - это была иллюзия


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

 
Edgar Akhmadeev:

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

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

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

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

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

Вы забыли самое главное - доказательства с отчетами этих самых 690 кб кода.

Пока у вас только слова. Или вы утверждаете, что результат полноценного профилирования ваших 690 кб, это вот эта строка? Которая даже не раскрыта.


 
Renat Fatkhullin:

Нашел слабое место CopyTicks, которое прошу устранить.

// Сильное замедление CopyTicks при увеличении количества запрашиваемых тиков, которые входят в кеш.

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

int g( const int Amount )
{
  static MqlTick Ticks[2000];    

  int Sum = 0;
  
  for (int i = 0; i < 1000; i++) 
    Sum += CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, Amount);
    
  return(Sum);
}

void OnStart()
{  
  _B(g(10), 1);   // 149 mcs
  _B(g(1000), 1); // 5706 mcs
}


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

 
Насколько существенное ускорение можно получить, если вместо вызова функции из #import ex5 сделать #include исходного mqh?
 
fxsaber:
Насколько существенное ускорение можно получить, если вместо вызова функции из #import ex5 сделать #include исходного mqh?

Будет зависеть от вызываемой функции:

  1. инлайнинг

  2. удаление параметров вызовов

  3. оптимизация доступа к глобальным переменным



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

Нашел слабое место CopyTicks, которое прошу устранить.

Еще одно.

https://www.mql5.com/ru/forum/342090/page81#comment_20534660

MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2021.01.27
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 
Renat Fatkhullin:

Вы забыли самое главное - доказательства с отчетами этих самых 690 кб кода.

Пока у вас только слова. Или вы утверждаете, что результат полноценного профилирования ваших 690 кб, это вот эта строка? Которая даже не раскрыта.


Какие доказательства? Логи? Скриншот - это результат честного и долгого профилирования большого советника (690 Кб - это не размер кода, а размер ex5; хотя и код примерно такого же объёма).

Да, результат - эта одна строка. Она не раскрывается (а должна?) ни кликом, ни из контекстного меню ("Развернуть всё"). И переключение режима просмотра ничего не меняет. И эта функция (одна из сотен) очень быстро выполняется при инициализации эксперта, который сам занимает почти 3 минуты профилирования. И показанные на ней 19% очень странны.

Этот результат стабильно повторился раз 10, на разных билдах (последних). В начале моих попыток там была одна, но другая функция. Которая НИ РАЗУ НЕ ВЫЗЫВАЛАСЬ. Я закомментировал её тело и вызов, и теперь так.

Если так только у меня - я не могу дать код, да и смысла нет. В другом окружении всё будет по-другому. Я вижу, что баги с новым отладчикам нестабильны и трудноуловимы, возможно зависят от окружения.

 

2772 - те же ошибки в дебаггере - Could not evaluate expression (на этот раз кроме input-переменных), остановка где угодно или глухое зависание при пошаговом выполнении (в т.ч. на пустых строках).

Опять вернулся к 2761.