Test du nouveau compilateur MQL5 pour les plateformes x64 - calculs 2 à 10 fois plus rapides ! - page 20

 
Denis Kirichenko:

Optimisez la logique. Par exemple, travailler avec des tableaux et des boucles. Essayez de regrouper les valeurs des critères dans un tableau. Et faire des vérifications en boucle. Peut-être qu'il n'y aura pas besoin de 74 000 cas alors...

Bien sûr, en théorie, on peut générer chaque chaîne par un long hash, et ne passer que ces hashs, puis l'utiliser pour tout générer - mais je ne suis pas sûr que cela soit rapide et la tâche n'est pas simple...

 
Alexey Kozitsyn:

1. Vous y verrez les endroits les plus "lents" du code. Bien que... c'est une autre question de savoir si cela affecte la compilation...

2. Comme vous voulez : vous pouvez utiliser le cas. On vous a conseillé de le décomposer en petites fonctions. Brisez-le et testez-le. Oui, bien sûr, le code va s'élargir. Mais que faire.

Et ici j'ai réécrit le code en fonctions - dans l'annexe.

J'ai tout de suite remarqué que le code précédent prenait 14428 kb après compilation et que le nouveau prenait 9447 kb - je suis déjà surpris par une différence de 5 Mbytes - d'où !

Plus loin par la vitesse de compilation, le premier

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

nouvelle version

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

La nouvelle version est 5,46 fois plus rapide à compiler.

Et voici la version précédente en termes de vitesse :

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

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%)

Et ici nous voyons que le premier passage d'agents (4 agents) est très lent - je l'ai essayé plusieurs fois - le résultat est stable, mais dans le log

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

Qu'est-ce que cela a à voir maintenant, peut-être que@Renat Fatkhullin ou@Slava peuvent me dire pourquoi un tel effet se produit ?

Dossiers :
 
Andrey Khatimlianskii:

Le fichier est zippé. Lire le zip, dézipper à l'intérieur. Ce sera plus rapide que le transfert d'un EA de 500 Mo (il est également transféré à chaque agent).

N'est-il pas ensuite décompressé à nouveau à chaque nouveau passage ?

Et la lecture du fichier serait-elle plus rapide qu'un transfert unique de .....

 
Aleksey Vyazmikin:

N'est-il pas ensuite déballé à chaque fois qu'un nouveau passage est effectué ?

Oui, et la lecture d'un fichier serait-elle plus rapide qu'une simple passe.....

Oui, il pourrait être plus lent avec l'optimisation... Mais je vérifierais, tout est prévu pour ça.

 
Andrey Khatimlianskii:

Oui, cela peut être plus lent pendant l'optimisation... Mais je vérifierais, tout est prêt pour ça.

Qu'est-ce qui est prêt exactement - je ne comprends pas.

 
Aleksey Vyazmikin:

Qu'est-ce qui est prêt exactement - je ne comprends pas.

Travailler avec des archives zip.

 
Andrey Khatimlianskii:

Travailler avec des archives zip.

Oui, je l'ai vu, mais je ne l'ai pas essayé en pratique.

Le problème se situe plutôt au niveau de la préparation des données, c'est-à-dire de la traduction du code en tableau - je dois à nouveau traiter les données brutes...

 
Malheureusement, il s'est avéré que le compilateur ne peut pas faire face à un code volumineux - j'ai obtenu l'erreur "EX5 write error" - aucune autre erreur. Il serait bon d'écrire les limitations dans le manuel d'utilisation !
 
J'ai créé une version publique de l'EA, maintenant je vérifie - est-ce qu'elle va compiler ou non - le processus n'est pas rapide, mais maintenant vous pouvez voir que 46% du code est compilé et que déjà 36 GB de RAM sont consommés...
 
Aleksey Vyazmikin:
J'ai créé une version publique de l'EA, maintenant je vérifie - est-ce qu'elle va compiler ou non - le processus n'est pas rapide, mais maintenant vous pouvez voir que 46% du code est compilé et que déjà 36 GB de RAM sont consommés...

Veuillez me fournir le code à étudier.
Je vais vérifier pourquoi il compile si lentement et consomme tant de mémoire.