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

 
Aleksey Vyazmikin:

Leprofileur a-t-il déjà été suggéré ?

 
Aleksey Vyazmikin:

Option n° 2. Prenez chaque ligne de caractères :

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)

en une fonction distincte. Essayez de croire Renate :)

C'est-à-dire que le résultat devrait être comme ceci à la fin :

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

Oui, il y a un lien vers l'EA ici.

Cela fait deux jours - la compilation est de 7%...

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

Sur cette machine.

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:

Leprofileur a-t-il déjà été proposé ?

Non, pas du tout - qu'est-ce que je suis censé y voir exactement ? Je ne sais pas vraiment comment l'utiliser.


Alexey Kozitsyn:

Option 2. Pour mettre chaque chaîne de type :

en une fonction distincte. Essayez de croire Renate :)

C'est-à-dire que le résultat devrait être tel au bout du compte :

etc.

C'est la variante "cas :" et non la variante "si" qui donne un gain de vitesse significatif à cet endroit. Si tu le fais même comme

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

Le code va devenir encore plus grand. Mais vous pouvez comparer le temps de compilation et les performances, bien sûr...

 
Slava:

Sur cette voiture.

Oui, ce code n'est pas gros, je n'ai pas posté un code de 500 mégaoctets - si vous en avez besoin, je peux...

 
Aleksey Vyazmikin:

Quels autres moyens suggérez-vous ? C'est l'option la plus rapide que j'ai trouvée jusqu'à présent...

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'alors il n'y aura plus besoin de 74 000 cas...

 
Aleksey Vyazmikin:

1. Non, ils ne l'ont pas fait - qu'est-ce que je suis censé y voir exactement ? Je ne sais pas vraiment comment l'utiliser.


2. c'est la variante "cas :" et non la variante "si" qui donne un gain de vitesse significatif. Si tu le fais même comme

Le code va devenir encore plus rapide... Mais vous pouvez certainement comparer le temps de compilation et les performances...

1. vous y verrez les parties les plus lentes du code. Bien que... Une autre question est de savoir si cela affecte la compilation...

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

 
@Renat Fatkhullin, veuillez préciser, le profileur peut-il aider à révéler les goulots d'étranglement de la compilation ? Ou l'utiliser uniquement pour vérifier la vitesse du code en temps réel ?
 
Aleksey Vyazmikin:

Je pourrais transférer cette énumération, disons, dans un fichier CSV externe, mais un autre problème se pose alors - perte de temps pour lire le fichier, et de plus, lorsque je distribue les tâches aux agents, je ne suis pas en mesure d'envoyer 500 mégaoctets à chaque agent, alors que le code EA est envoyé à un agent (ou pas ?) et divisé entre eux.

Et une autre question, mon code est facilement compressé par 7zip de 500 à 15 mégaoctets, mais après compression, le fichier sera autour de 500 - pourquoi en est-il ainsi - aucun moyen de faire une compression primitive (au moins jusqu'à 100 mégaoctets) ?

Compresser le fichier par zip. Lire le zip, décompresser à l'intérieur. Ce sera plus rapide que le transfert de 500 Mb d'EA (il est également transféré à chaque agent).

 
Alexey Kozitsyn:
@Renat Fatkhullin, pouvez-vous préciser si le profileur peut aider à révéler les goulots d'étranglement de la compilation ? Ou l'utiliser uniquement pour vérifier la vitesse du code en temps réel ?

Le profileur n'a rien à voir avec la compilation.

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