Test del nuovo compilatore MQL5 per piattaforme x64 - calcoli da 2 a 10 volte più veloci! - pagina 19

 
Aleksey Vyazmikin:

Il profiler è già stato suggerito?

 
Aleksey Vyazmikin:

Opzione n. 2. Prendete ogni riga di tipo:

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)

in una funzione separata. Prova a credere a Renate:)

Cioè il risultato dovrebbe essere come questo alla fine:

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

Sì, c'è un link all'EA qui.

Sono passati due giorni - la compilation è al 7%...

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

Su questa macchina.

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

Il profiler è già stato offerto?

No, non l'ha fatto - cosa dovrei vederci esattamente? Non so davvero come usarlo.


Alexey Kozitsyn:

Opzione 2. Per mettere ogni riga del tipo:

in una funzione separata. Prova a credere a Renate:)

Cioè il risultato dovrebbe essere così alla fine:

ecc.

È la variante "case :" e non la variante "if" che dà un significativo guadagno di velocità in questo caso. Se lo fai anche solo come

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

Il codice diventerà ancora più grande. Ma potete confrontare il tempo di compilazione e le prestazioni, naturalmente...

 
Slava:

Su questa macchina.

Sì, quel codice non è grande, non ho postato un codice da 500 megabyte - se ne hai bisogno posso...

 
Aleksey Vyazmikin:

Quali altri mezzi suggerisce? Questa è l'opzione più veloce che ho trovato finora...

Ottimizzare la logica. Per esempio, lavorare con gli array e i loop. Prova a impacchettare i valori dei criteri in un array. E fare i controlli in un ciclo. Forse allora non ci sarà bisogno in 74 mila casi...

 
Aleksey Vyazmikin:

1. No, non l'hanno fatto - cosa dovrei vederci esattamente? Non so davvero come usarlo.


2. è la variante "case :" e non la variante "if" che dà un significativo aumento di velocità. Se lo fai anche solo come

Il codice diventerà ancora più veloce... Ma si può certamente confrontare il tempo di compilazione e le prestazioni...

1. Lì vedrete le parti più lente del codice. Anche se... Un'altra domanda è se influisce sulla compilazione...

2. Come volete: potete usare il caso. Ti è stato consigliato di suddividerlo in funzioni più piccole. Spezzatelo e testatelo. Sì, certo, il codice diventerà più grande. Ma cosa fare.

 
@Renat Fatkhullin, per favore chiarisci, il profiler può aiutare a rivelare i colli di bottiglia della compilazione? O usarlo solo per controllare la velocità del codice in tempo reale?
 
Aleksey Vyazmikin:

Vorrei trasferire questa enumerazione, diciamo, in un file CSV esterno, ma poi sorge un altro problema - perdita di tempo per leggere il file, e inoltre, quando si distribuiscono i compiti agli agenti non sono in grado di inviare ad ogni agente 500 megabyte, mentre il codice EA viene inviato ad un agente (o no?) e diviso tra loro.

E un'altra domanda, il mio codice è facilmente compresso da 7zip da 500 a 15 megabyte, ma dopo la compressione, il file sarà circa 500 - perché è così - nessun modo per fare una compressione primitiva (almeno fino a 100 megabyte)?

Comprimere il file con lo zip. Leggere zip, decomprimere all'interno. Sarà più veloce che trasferire 500 Mb di EA (viene anche trasferito ad ogni agente).

 
Alexey Kozitsyn:
@Renat Fatkhullin, potresti per favore chiarire, il profiler può aiutare a rivelare i colli di bottiglia della compilazione? O usarlo solo per controllare la velocità del codice in tempo reale?

Il profiler non ha nulla a che fare con la compilazione.

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