Erreurs, bugs, questions - page 2880
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
)) La différence de vitesse aurait pu être de 4 fois en faveur d'une des méthodes (1 à 4), mais comme l'opération est 10 fois plus longue que le reste du code, cette différence n'aurait pas été visible (11 à 14).
Non, ça ne peut pas.
la différence est immédiatement visible
vérifions quelque chose que les développeurs ont annoncé dans les innovations, ils écrivent souvent que le temps d'accès à l'horodateur pour une certaine fonction a été optimisé = non vérifié depuis longtemps
2020.10.16 02:11:20.671 SpeedTst (EURUSD,H1) tst 1 : : boucles=10000000 ms=353174
2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) tst 2 : : boucles=10000000 ms=1296043
2020.10.16 02:11:21.967 SpeedTst (EURUSD,H1) 11304533.15558525 : 11303930.69247558
2020.10.16 02:11:44.012 SpeedTst (EURUSD,H1) tst 1 : : boucles=10000000 ms=359757
2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) tst 2 : : boucles=10000000 ms=1357325
2020.10.16 02:11:45.369 SpeedTst (EURUSD,H1) 11304350.05612442 : 11304321.21848488
pas du tout critique
Le temps d'exécution de rand() est constant, il s'agit probablement d'une fonction C++ commune, recherchez dans Google "rand c++ source code".
vous devez l'initialiser, mais si vous l'initialisez avec des constantes, vous pouvez rencontrer des problèmes d'optimisation.
en général, je ne comprends pas l'aversion pour rand()
une option est d'initialiser avec quelque chose comme ceci :
serait rapide.
J'ai exécuté votre script, mais il n'est pas correct.
Le temps principal est le chargement du code dans le cache, puis dans le processeur.
et ajoutez le caractère discret du temporisateur du système
nous obtenons... presque un nombre aléatoire.
vous devez le tester pendant longtemps, environ 100500 fois, imho
rand() fait taire le résultat.
Sur mon ordinateur, une itération de boucle prend environ 1,5 nanoseconde.
Avec deux rand(), une itération prend deux fois plus de temps - jusqu'à près de 3 nanosecondes. Il faut savoir que dans cette itération, deux accès à un élément d'un grand tableau disparaîtront, ce qui est également assez coûteux.
Cela signifie qu'environ 2/3 de tout le temps d'itération est passé sur deux rands(). Bien sûr, j'ai été un peu excité par l'expression "d'un ordre de grandeur").
Je ne comprends pas comment on peut se heurter à l'optimisation lorsqu'un tableau préparé à l'avance est rempli de nombres aléatoires.
On a déjà parlé une fois des performances de rand(). J'ai même essayé d'écrire une fonction similaire moi-même.https://www.mql5.com/ru/forum/170952/page137#comment_12010041
résultat
Je pense qu'en fin de compte, cela ne fait pratiquement aucune différence que vous utilisiez l'union ou le décalage binaire.
J'utilise ces deux méthodes dans ma bibliothèque iCanvas pour travailler avec les couleurs.
Je m'en souviens, j'ai également effectué des tests de performance, et j'en ai conclu que cela ne faisait pratiquement aucune différence. Mais le code avec union est plus lisible.
Je dois avouer que j'ai été déçu car je m'attendais à un gain de performance notable avec l'union.
Je ne comprends pas comment on peut se heurter à l'optimisation lorsqu'un tableau préparé à l'avance est rempli de nombres aléatoires.
Je vous ai donné 2 liens sur le hubr ci-dessus, le premier article montre bien à quoi ressemble une boucle normale après compilation.
Je ne dis pas qu'il faut nécessairement arriver à l'optimisation à l'exécution, mais je pense que si le tableau ne change pas, ce qui est essentiellement un espace mémoire constant avec une taille constante pour la boucle, il n'est pas certain que l'optimisation n'apparaîtra pas sur un certain type de processeur, et l'optimisation peut être attendue du compilateur, ainsi que du processeur avec un cache.
Je pense que l'essentiel est que cela ne fait pratiquement aucune différence de savoir ce qu'il faut utiliser - union ou décalage binaire.
Je vous ai donné 2 liens sur le hbr ci-dessus, le premier article montre bien à quoi ressemble une boucle normale après la compilation.
Je ne dis pas que vous devez vous lancer dans l'optimisation à l'exécution, mais je pense que si le tableau ne change pas, ce qui est essentiellement un espace mémoire constant avec une taille constante pour la boucle, il n'est pas certain qu'aucune optimisation ne surgira...
A en juger par les résultats, il n'y a aucun signe d'optimisation
Les résultats ne donnent pas du tout l'impression d'une optimisation.
oui
L'argument ne porte pas sur un code spécifique
mais dans la méthodologie des tests, je m'en tiens toujours à ce que je teste de manière optimale, et rand() bien qu'il introduise des distorsions, mais c'est un coefficient linéaire, pas proportionnel, c'est à dire que la précision n'est pas très importante s'il n'y a pas de différence de vitesse de moins de 5%, imho
Bonjour, tout le monde !
J'ai une question, qui s'adresse peut-être aux développeurs de MQL5... Peut-être que quelqu'un d'autre sait... Est-il prévu d'intégrer le compilateur/éditeur de code ME à certains environnements de développement populaires comme IDEA ou Visual Studio? Meta Editor est un gros problème pour moi. Pas de réduction des blocs, pas de modèles de substitution automatique (par exemple, lorsque vous commencez à taper for(...), il vous propose immédiatement de substituer un motif de boucle et bien d'autres choses), pas de mise en évidence des différentes parties importantes du code. Et ainsi de suite. Je ne dis pas que les robots modernes sont compliqués, mais il s'agit de grands projets et les exigences en matière de gestion du code et de développement de l'équipe sont beaucoup plus importantes.
Plus personne n'écrit ses propres éditeurs et compilateurs - ils les abandonnent tous et se tournent vers les solutions toutes faites de Microsoft, JetBrains et autres. Tous les éditeurs modernes disposent de systèmes de plugins personnalisables qui vous permettent d'y ajouter ce que vous voulez. La tâche n'est pas difficile en principe.
Chers Messieurs, y a-t-il quelqu'un qui puisse me donner une réponse à cette situation que je ne comprends pas?
Et vous devriez intimider les programmeurs encore plus. Alors vous aurez de l'aide, c'est sûr.
Et vous devriez intimider les programmeurs encore plus. Alors ils vont certainement aider.
Est-ce que j'ai dit à quelqu'un qu'il était stupide ? Ou accusé quelqu'un d'être analphabète ? Je traite tout le monde de la même manière. Si quelqu'un est offensé par mes appels à ne pas s'engager dans l'inondation, on ne peut rien y faire. C'est exactement ce pour quoi je ne m'excuserai pas.