Тестирование нового компилятора MQL5 для x64 платформ - ускорение расчетов от 2 до 10 раз! - страница 19

 
Aleksey Vyazmikin:

Профилировщиком уже предлагали воспользоваться?

 
Aleksey Vyazmikin:

Вариант №2. Вынести каждую строку типа: 

if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)

в отдельную функцию. Попробуйте поверить Ренату:)

Т.е. результат должен быть таким в итоге:

if(Test_P==1000 && Func1000()) CalcTest = CalcTest+1;
if(Test_P==1001 && Func1001()) CalcTest = CalcTest+1;
и т.д.
 
Aleksey Vyazmikin:

Да, тут ссылка на советник.

Прошло двое суток - компиляция 7%...

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

Вот на этой тачке

2019.10.15 09:08:34.692 Terminal        Windows 10 (build 18362) x64, IE 11, UAC, Intel Xeon  E5-2630 v4 @ 2.20GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+2
 
Alexey Kozitsyn:

Профилировщиком уже предлагали воспользоваться? 

Нет не предлагали - что конкретно я должен в нем увидеть? Я им не очень то умею пользоваться.


Alexey Kozitsyn:

Вариант №2. Вынести каждую строку типа: 

в отдельную функцию. Попробуйте поверить Ренату:)

Т.е. результат должен быть таким в итоге:

и т.д.

Там прирост значительный в скорости дает именно вариант с "case :" а не "if". Если даже сделать типа 

               switch(Test_P)
                    {
                     case 1000: F1(); break;
                     case 1001: F2(); break;
                    }
   

То код увеличится ещё больше... но сравнить время компиляции и производительности можно, конечно...

 
Slava:

Вот на этой тачке

Да тот код не большой, я не выкладывал код на 500 мегабайт - если надо, то могу...

 
Aleksey Vyazmikin:

Какие средства ещё предложите? Это самый быстрый вариант, что я пока придумал...

Оптимизировать логику. Например поработать с массивами и циклами. Попробовать значения критериев упаковать в массив. А проверки делать в цикле. Может тогда потребность в 74-х тысячах case'ов и отпадёт...

 
Aleksey Vyazmikin:

1. Нет не предлагали - что конкретно я должен в нем увидеть? Я им не очень то умею пользоваться.


2. Там прирост значительный в скорости дает именно вариант с "case :" а не "if". Если даже сделать типа 

То код увеличится ещё больше... но сравнить время компиляции и производительности можно, конечно...

1.  Вы там увидите самые "тормознутые" места в коде. Хотя... еще вопрос, влияет ли это на компиляцию...

2. Как хотите: можете через case. Вам же посоветовали разбить на мелкие функции. Разбейте и проверьте. Да, конечно, код еще больше увеличится. А что делать.

 
@Renat Fatkhullin, уточните пожалуйста, профилировщик может помочь выявить тонкие места при компиляции? Или использовать исключительно для проверки скорости работы кода в реальном времени?
 
Aleksey Vyazmikin:

Я бы перебросил этот перебор, допустим, во внешний файл CSV, но тогда возникает другая проблема - трата времени на чтение файла, а кроме того при раздаче заданий агентам я не в состоянии каждому агенту отправить 500 мегабайт, в то время как код советника отправляется одному агенту (или нет?) и делится между ними.

И ещё вопрос, мой код легко сжимается 7zip с 500 до 15 мегабайт, но после компиляции файл будет в районе 500 - почему так - нет возможности при компиляции делать примитивное сжатие (хоть до 100 мегабайт)?

Файл сожмите зипом. Читайте зип, распаковывайте внутри. Будет быстрее, чем передавать 500 Мб советника (он тоже каждому агенту передается).

 
Alexey Kozitsyn:
@Renat Fatkhullin, уточните пожалуйста, профилировщик может помочь выявить тонкие места при компиляции? Или использовать исключительно для проверки скорости работы кода в реальном времени?

Профилировщик не имеет отношения к компиляции.

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...
Причина обращения: