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

 
Denis Kirichenko:

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...

Naturalmente, in teoria, si può generare ogni stringa con un hash lungo, e passare solo questi hash, e poi usarlo per generare tutto - ma non sono sicuro che questo sarà veloce e il compito non è semplice...

 
Alexey Kozitsyn:

1. lì vedrete i punti più "lenti" del codice. Anche se... è un'altra questione se influisce sulla compilazione...

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

E qui ho riscritto il codice in funzioni - in appendice.

Ho notato subito che il codice precedente ha preso 14428 kb dopo la compilazione e quello nuovo ha preso 9447 kb - sono già sorpreso dalla differenza di 5 Mbyte - da dove!

Più avanti nella velocità di compilazione, il primo

0 error(s), 0 warning(s), 2109302 msec elapsed

nuova versione

0 error(s), 0 warning(s), 386131 msec elapsed

La nuova versione è 5,46 volte più veloce da compilare.

Ed ecco la versione precedente in termini di velocità:

2019.10.15 14:35:47.593 Core 1  pass 0 returned result 1001000.000000 in 0:00:29.555
2019.10.15 14:35:47.595 Core 3  pass 4 returned result 1001000.000000 in 0:00:29.490
2019.10.15 14:35:47.605 Core 2  pass 2 returned result 1001000.000000 in 0:00:29.540
2019.10.15 14:35:47.641 Core 4  pass 6 returned result 1001000.000000 in 0:00:29.541
2019.10.15 14:36:15.511 Core 2  pass 3 returned result 1001000.000000 in 0:00:27.907
2019.10.15 14:36:15.523 Core 1  pass 1 returned result 1001000.000000 in 0:00:27.932
2019.10.15 14:36:15.535 Core 3  pass 5 returned result 1001000.000000 in 0:00:27.942
2019.10.15 14:36:15.537 Core 4  pass 7 returned result 1001000.000000 in 0:00:27.897
2019.10.15 14:36:15.537 Tester  optimization finished, total passes 8
2019.10.15 14:36:15.547 Statistics      optimization done in 0 minutes 58 seconds
2019.10.15 14:36:15.547 Statistics      shortest pass 0:00:27.897, longest pass 0:00:29.555, average pass 0:00:28.725
2019.10.15 14:36:15.547 Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.15 14:36:15.547 Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

la nuova versione.

2019.10.15 14:33:51.458 Core 3  pass 6 returned result 1001000.000000 in 0:01:01.840
2019.10.15 14:33:51.485 Core 2  pass 4 returned result 1001000.000000 in 0:01:01.867
2019.10.15 14:33:51.521 Core 1  pass 2 returned result 1001000.000000 in 0:01:01.903
2019.10.15 14:33:51.524 Core 4  pass 0 returned result 1001000.000000 in 0:01:01.906
2019.10.15 14:34:18.802 Core 3  pass 7 returned result 1001000.000000 in 0:00:27.346
2019.10.15 14:34:18.837 Core 2  pass 5 returned result 1001000.000000 in 0:00:27.354
2019.10.15 14:34:18.892 Core 4  pass 1 returned result 1001000.000000 in 0:00:27.370
2019.10.15 14:34:18.922 Core 1  pass 3 returned result 1001000.000000 in 0:00:27.403
2019.10.15 14:34:18.922 Tester  optimization finished, total passes 8
2019.10.15 14:34:18.932 Statistics      optimization done in 1 minutes 29 seconds
2019.10.15 14:34:18.932 Statistics      shortest pass 0:00:27.346, longest pass 0:01:01.906, average pass 0:00:44.623
2019.10.15 14:34:18.932 Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.15 14:34:18.932 Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

E qui vediamo che il primo passaggio di agenti (4 agenti) è molto lento - ho provato molte volte - il risultato è stabile, ma nel log

2019.10.15 14:38:07.002 Tester  OnTesterInit works too long...

Cosa c'entra ora, forse@Renat Fatkhullin o@Slava possono dirmi perché si verifica un tale effetto?

 
Andrey Khatimlianskii:

Il file è zippato. Leggi la zip, apri la zip all'interno. Sarà più veloce che trasferire un EA da 500 MB (viene anche trasferito ad ogni agente).

Non viene poi decompresso di nuovo ad ogni nuovo passaggio?

E la lettura dal file sarebbe più veloce di un trasferimento una tantum di....

 
Aleksey Vyazmikin:

Non viene poi spacchettato di nuovo ogni volta che viene fatto un nuovo passaggio?

Sì, e la lettura da un file sarebbe più veloce di un singolo passaggio....

Sì, potrebbe essere più lento con l'ottimizzazione... Ma io controllerei, tutto è predisposto per questo.

 
Andrey Khatimlianskii:

Sì, potrebbe essere più lento durante l'ottimizzazione... Ma io controllerei, tutto è pronto per questo.

Cosa sia esattamente pronto - non capisco.

 
Aleksey Vyazmikin:

Cosa sia esattamente pronto - non capisco.

Lavorare con gli archivi zip.

 
Andrey Khatimlianskii:

Lavorare con gli archivi zip.

Sì, l'ho visto, ma non l'ho provato nella pratica.

È più di un problema per me nella preparazione dei dati, cioè tradurre il codice in una tabella - dovrò elaborare di nuovo i dati grezzi...

 
Sfortunatamente, si è scoperto che il compilatore non può far fronte a codice di grandi dimensioni - ha ottenuto l'errore "EX5 write error" - nessun altro errore. Sarebbe bene scrivere delle limitazioni nel manuale d'uso!
 
Ho fatto una versione pubblica dell'EA, ora sto controllando - compilerà o no - il processo non è veloce, ma ora si può vedere che il 46% del codice è compilato e già 36 GB di RAM sono mangiati...
 
Aleksey Vyazmikin:
Ho fatto una versione pubblica dell'EA, ora sto controllando - compilerà o no - il processo non è veloce, ma ora si può vedere che il 46% del codice è compilato e già 36 GB di RAM sono mangiati...

Vi prego di fornirmi il codice per indagare.
Controllerò perché compila così lentamente e consuma così tanta memoria.