Erreurs, bugs, questions - page 2878
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Cette fonction ne sera appelée qu'une seule fois pour l'ensemble du passage. Cela ne fait donc aucune différence.
donc oui... Mais je vais l'exécuter pendant quelques jours pour l'optimiser, je veux mesurer les performances d'une manière ou d'une autre ..... bien que je pense que la variante 1 sera plus efficace, il n'y aura pas 100500 fois de copie dans les tableaux.
oui... Mais je vais faire tourner l'ordinateur pendant quelques jours pour l'optimiser, je veux mesurer les performances d'une manière ou d'une autre ..... même si je pense que l'option 1 sera plus efficace, il n'y aura pas 100500 fois de copie dans les tableaux.
L'union n'est pas une copie de tableaux, c'est une interprétation différente du même espace mémoire. La deuxième option est donc probablement plus rapide, mais comme indiqué ci-dessus, cela n'a pas d'importance.
oui... Mais je vais faire tourner l'ordinateur pendant quelques jours pour l'optimiser, je veux mesurer les performances d'une manière ou d'une autre ..... même si je pense que l'option 1 sera plus efficace, il n'y aura pas 100500 fois de copie dans les tableaux.
il y a une vieille méthode pour mesurer la vitesse
dans le style de
for (int i=0 ; i< 1000000 ; i++) {notre code1}....
for (int i=0 ; i< 1000000 ; i++) {notre code2}....
L'Union n'est pas aussi rapide qu'il n'y paraît. Je parie sur le premier.
Je parie aussi sur le premier ! Les opérateurs binaires sont plusieurs fois plus rapides que l'opérateur if, même si le second n'en dispose pas.
vérifié :
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : boucles=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : boucles=10000000000 ms=10862287
la différence n'est pas significative, il est très probable que si nous inversons les tests dans l'ordre inverse, les résultats seront inversés.
non critique
pas une différence significative, il est très probable que si vous intervertissez les tests, les résultats seront inversés.
Il est fort probable que le compilateur ait généré le même code pour les deux cas. Dans ce cas, choisissez simplement celui que vous préférez subjectivement.
vérifié :
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : boucles=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : boucles=10000000000 ms=10862287
la différence n'est pas significative, il est très probable que si nous inversons les tests dans l'ordre inverse, les résultats seront inversés.
non critique
Le script démontre ici que le temps de création des nombres aléatoires peut être non-uniforme et dépend du volume des variables créées))))
Et le code dont nous avons besoin dans ce nombre de répétitions me prend 0 ms.
Toujours pas de réponse.
ou l'optimiseur de code supprime quelque chose d'inutileIl semble exister un script qui démontre que le moment de la génération des nombres aléatoires peut être inégal.
non rand() est une fonction normale, elle fonctionne toujours de la même façon
Mais pour tester la vitesse, si vous l'initialisez avec des constantes, les tests seront "accélérés" pendant l'exécution - l'optimisation du code en MQL pendant l'exécution est une bonne chose.
en général, il a été vérifié plusieurs fois
et beaucoup dépend de la taille des variables créées))))
Bien sûr, l'allocation de mémoire prend du temps, je l'ai vérifié, je teste à la fois des objets créés dynamiquement (nouveau pointeur) et des objets locaux, le test s'étend sur 100500 fois par nouveau et par suppression.
laquestion était que, dans le testeur, la mémoire est allouée aux variables une fois et non à chaque passage - mais j'ai besoin de tableaux d'uint, donc j'ai testé avec ce script, pas comme je l'ai écrit la première fois
Et le code dont nous avons besoin pour ce nombre de répétitions me prend 0 ms.
toujours pas de réponse
Soit l'optimiseur de code coupe quelque chose d'inutile.Avez-vous utilisé mon script ? - soit vous n'avez pas attendu jusqu'à la fin du test et vous avez interrompu ou vous avez débordé ulong - le premier paramètre de la macro est 10^ count
il est très probable que le compilateur ait généré le même code pour les deux cas. dans ce cas, choisissez simplement celui que vous préférez subjectivement.
oui, peut-être
C'est ce que je demandais - j'ai lu à plusieurs reprises que les processeurs modernes peuvent exécuter plus d'une opération élémentaire par horloge en optimisant le pipeline d'instructions ..... beaucoup de bla-bla-bla... et le fait est que les instructions arithmétiques sont exécutées par le processeur dans un nombre imprévisible de cycles d'horloge.
Quant aux opérations de branchement et d'allocation de mémoire, elles sont très mal optimisées par le processeur, donc ne cherchez pas l'optimisation dans la simplification de l'arithmétique, essayez d'écrire un code maximalement linéaire avec un minimum de branchement, et il vaut mieux déclarer les variables et leur attribuer des valeurs juste avant les calculs, ce qui permet au pipeline d'instructions et à la prédiction de l'échantillonnage du cache d'optimiser ce code.
En d'autres termes, l'échantillonnage des valeurs des éléments du tableau (adressage) ne sera probablement pas crucial pour la vitesse - je pensais qu'il y aurait un avantage de décalage par rapport à l'union, mais il s'avère qu'il n'y a pas de différence du tout.
Je l'ai retravaillé un peu
(il est préférable de ne pas utiliser une macro de cette façon ;)