Особенности языка mql5, тонкости и приёмы работы - страница 278

 
Dominik Egert #:

Нам нужен подход, при котором мы могли бы достоверно сказать, что этот код был удален оптимизатором.

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

Отношение времён выполнения кода, который точно не будет удалён и кода, который может быть удалён пойдёт?

 
JRandomTrader #:

Отношение времён выполнения кода, который точно не будет удалён и кода, который может быть удалён пойдёт?

Интересно, во что превратит эту фразу гугл-переводчик (((

 

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

Особенности языка mql5, тонкости и приёмы работы

amrali, 2024.11.30 17:21

Я удалю эту функцию из бенчмарка, так как она ненадежна:

2024.11.30 19:20:17.616 IsOptimizationCompiler (EURUSD,H1)      
2024.11.30 19:20:17.616 IsOptimizationCompiler (EURUSD,H1)      Compiler Version: 4647 X64 Regular, optimization - true


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

Новая версия платформы MetaTrader 5 build 4410: улучшения в работе

fxsaber, 2024.08.31 15:28

Компилятор: b4410 vs b4512.


Такой код выдает разный результат при отключенной оптимизации.

void OnStart()
{
  Print((string)TerminalInfoInteger(TERMINAL_BUILD) + " - " +
        (string)IsOptimizationCompiler()); // https://www.mql5.com/ru/forum/170952/page247#comment_52620994
}
4410 - false
4512 - true

Т.е. в 4512 включена какая-то оптимизация, по сравнению с b4410.


Debug (F5):

Compiler Version: 4709 AVX, optimization - false
 
amrali #:

Небольшое исправление (приведение datetime к uint), но увеличивающее производительность в два раза:

Если сделать для TimeToCalendar, то и там будет ускорение.

   uint t2 = (uint)t;
   int HH  = (int)((t2 / 3600) % 24)             ;
   int MM  = (int)((t2 / 60) % 60)               ;
   int SS  = (int)(t2 % 60)                      ;
 
fxsaber #:


То есть в 4512 включена некоторая оптимизация по сравнению с b4410.

Он ненадежен с версии 4512, так почему же вы продолжаете его использовать?
 
amrali #:
Он ненадежен с версии 4512, так почему же вы продолжаете его использовать?

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

 
Compiler Version: 4709 X64 Regular, optimization - true
Intel Core i7-2700K  @ 3.50GHz, AVX
With hours (dt.hour+ dt.min+ dt.sec - on), random datetimes[].
1970.01.01 00:01:44 - 2097.11.29 23:59:39
 9.40 ns, checksum = 1267172791534620   // TimeToStructMQLplus
10.00 ns, checksum = 1267172791534620   // TimeToStructFast
41.38 ns, checksum = 1267172791534620  /// MQL's TimeToStruct()


А теперь добавляем в начале Fast-вариант.

   BENCH( Tests::TimeToStructFast           (t[i], dt), "  // TimeToStructFast");
   BENCH( Tests::TimeToStructMQLplus        (t[i], dt), "  // TimeToStructMQLplus");
   BENCH( Tests::TimeToStructFast           (t[i], dt), "  // TimeToStructFast");


И стало на 30% медленнее.

Compiler Version: 4709 X64 Regular, optimization - true
Intel Core i7-2700K  @ 3.50GHz, AVX
With hours (dt.hour+ dt.min+ dt.sec - on), random datetimes[].
1970.01.01 00:00:02 - 2097.11.29 23:59:39
13.68 ns, checksum = 1238909201370816   // TimeToStructFast
 9.42 ns, checksum = 1238909201370816   // TimeToStructMQLplus
13.13 ns, checksum = 1238909201370816   // TimeToStructFast
40.30 ns, checksum = 1238909201370816  /// MQL's TimeToStruct()


Вообще не понимаю, как интерпретировать результаты тестов.

 
fxsaber #:


А теперь добавим Fast-variant в начало.


И он стал на 30 % медленнее.


В общем, я не понимаю, как интерпретировать результаты теста.

Может, кто-то сможет повторить это довольно любопытное поведение?
 
Dominik Egert #:
Может, кто-то сможет повторить это довольно любопытное поведение?

Это проблема нового компилятора. В b4410 все в порядке.

 
fxsaber #:

Это проблема нового компилятора. В b4410 все в порядке.

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

Впервые я столкнулся с этим эффектом (я думаю) на 3003...