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...
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.1514:35:47.593 Core 1 pass 0 returned result 1001000.000000in0:00:29.5552019.10.1514:35:47.595 Core 3 pass 4 returned result 1001000.000000in0:00:29.4902019.10.1514:35:47.605 Core 2 pass 2 returned result 1001000.000000in0:00:29.5402019.10.1514:35:47.641 Core 4 pass 6 returned result 1001000.000000in0:00:29.5412019.10.1514:36:15.511 Core 2 pass 3 returned result 1001000.000000in0:00:27.9072019.10.1514:36:15.523 Core 1 pass 1 returned result 1001000.000000in0:00:27.9322019.10.1514:36:15.535 Core 3 pass 5 returned result 1001000.000000in0:00:27.9422019.10.1514:36:15.537 Core 4 pass 7 returned result 1001000.000000in0:00:27.8972019.10.1514:36:15.537 Tester optimization finished, total passes 82019.10.1514:36:15.547 Statistics optimization done in0 minutes 58 seconds
2019.10.1514:36:15.547 Statistics shortest pass 0:00:27.897, longest pass 0:00:29.555, average pass 0:00:28.7252019.10.1514:36:15.547 Statistics 8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.1514:36:15.547 Statistics local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
la nuova versione.
2019.10.1514:33:51.458 Core 3 pass 6 returned result 1001000.000000in0:01:01.8402019.10.1514:33:51.485 Core 2 pass 4 returned result 1001000.000000in0:01:01.8672019.10.1514:33:51.521 Core 1 pass 2 returned result 1001000.000000in0:01:01.9032019.10.1514:33:51.524 Core 4 pass 0 returned result 1001000.000000in0:01:01.9062019.10.1514:34:18.802 Core 3 pass 7 returned result 1001000.000000in0:00:27.3462019.10.1514:34:18.837 Core 2 pass 5 returned result 1001000.000000in0:00:27.3542019.10.1514:34:18.892 Core 4 pass 1 returned result 1001000.000000in0:00:27.3702019.10.1514:34:18.922 Core 1 pass 3 returned result 1001000.000000in0:00:27.4032019.10.1514:34:18.922 Tester optimization finished, total passes 82019.10.1514:34:18.932 Statistics optimization done in1 minutes 29 seconds
2019.10.1514:34:18.932 Statistics shortest pass 0:00:27.346, longest pass 0:01:01.906, average pass 0:00:44.6232019.10.1514:34:18.932 Statistics 8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.1514: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.1514: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?
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.
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...
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
nuova versione
La nuova versione è 5,46 volte più veloce da compilare.
Ed ecco la versione precedente in termini di velocità:
la nuova versione.
E qui vediamo che il primo passaggio di agenti (4 agenti) è molto lento - ho provato molte volte - il risultato è stabile, ma nel log
Cosa c'entra ora, forse@Renat Fatkhullin o@Slava possono dirmi perché si verifica un tale effetto?
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....
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.
Sì, potrebbe essere più lento durante l'ottimizzazione... Ma io controllerei, tutto è pronto per questo.
Cosa sia esattamente pronto - non capisco.
Cosa sia esattamente pronto - non capisco.
Lavorare con gli archivi zip.
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...
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.