À propos du profileur de code MT5 - page 7

 

Qu'est-ce que c'est ?


 
fxsaber #:

Le profileur montre des appels de fonction qui n'ont pas réellement eu lieu. Je suis même tombé sur quelque chose comme ça :

Une sorte de ArrayCopy, qui n'est pas dans la source du fichier mqh! J'ai même tracé une ligne rouge dans la déclaration d'un tableau statique.

Je ne peux toujours pas utiliser le profileur, malheureusement.

Et pensez à la façon dont les tableaux se déplacent lors de la construction, de l'affectation et du déplacement des objets (et vous avez un objet).

Pensez-vous vraiment que le programme se compose uniquement de vos ficelles ?

Les exemples ne sont pas complets.

 
Renat Fatkhullin #:

Et pensez à la manière dont les tableaux sont déplacés lors de la construction, de l'affectation et du déplacement des objets (et vous avez un objet).

Vous pensez vraiment que le programme se compose uniquement de vos ficelles ?

Les exemples ne sont pas complets.

Donner des instructions claires sur ce que je dois faire de mon côté pour que vous abordiez ce sujet sans le remettre à plus tard.

 
fxsaber #:

Donnez-moi une instruction claire sur ce que je dois faire de mon côté pour que vous abordiez ce sujet sans le remettre à plus tard.

Vous faites des déclarations sur un sujet (les compilateurs et leurs rouages) que vous ne comprenez pas.

L'instruction ne sert à rien - vous ne suivez pas un cours de développeur de compilateur pour comprendre le vaste monde du code généré implicitement dans les langages objet. Les langages de haut niveau utilisent beaucoup de bibliothèques et de code en ligne. Construisez un projet moyen en WinAPI et regardez le fichier *.map - il y a des milliers de fonctions auxiliaires et chacune d'entre elles peut apparaître dans le profilage.

Les mots que j'ai répétés des dizaines de fois à propos de "le code résultant n'a rien à voir avec votre code, il est optimisé, incorporé et mélangé par le compilateur optimiseur" ne captent pas non plus mon oreille. Le travail principal du compilateur est de rendre le code aussi rapide que possible, et non pas lisible. Le rôle du profileur est de montrer les goulots d'étranglement réels dans le code optimisé (réel), et non de tricher en faisant correspondre les lignes.

À titre de comparaison, le profilage du code C++ est actuellement une tâche souvent très difficile, car l'optimiseur est un excellent correcteur de correspondance. Et oui, Microsoft Visual Studio C++ n'est pas une référence, le code qu'il génère est très faible/mauvais. Il est 20-30% plus mauvais que ses concurrents LLVM/Clang.


Une fois de plus, nous avons un profileur qui ne modifie pas le code examiné. Le temps de vérification augmente, mais le code n'est pas vraiment gâché par l'intégration de compteurs, ce qui tuerait l'optimisation du code.

La méthode utilisée pour le profilage est "l'échantillonnage". Le profileur met en pause le programme MQL (~1000 fois par seconde) et collecte des statistiques sur le nombre de fois où une pause est faite sur un fragment de code particulier. Cela inclut l'analyse des piles d'appels afin de déterminer la "contribution" de chaque fonction au temps d'exécution total du code. À la fin du profilage, vous obtenez le nombre de fois où chaque fonction a été mise en pause et le nombre de fois où chaque fonction a été dans la pile d'appels:

  • Activité totale du CPU [unité, %] - le nombre total de fois où une fonction est apparue dans la pile d'appels.
  • Activité CPU propre [unité, %] - le nombre de "pauses" qui se sont produites directement dans la fonction spécifiée. Ce compteur est le plus important pour identifier les goulots d'étranglement car, statistiquement, les arrêts se produisent plus souvent dans les parties du programme qui nécessitent plus de temps CPU.



Sans exemples reproductibles en une étape, nous ne considérons pas les problèmes. Des synthèses simplifiées à partir de quelques appels sur des micro-tâches ne peuvent pas non plus être considérées en termes de pourcentage du temps pris ou de contribution au temps total.

 
Renat Fatkhullin #:

Vous faites des déclarations sur un sujet (les compilateurs et leurs rouages) que vous ne comprenez pas.

Totalement ignorant du sujet que vous avez identifié. Le profileur montre certaines données qui ne peuvent être interprétées d'aucune façon.

Une fois de plus, nous avons un profileur qui n'introduit presque pas de délais dans le code que nous étudions. Le temps de vérification augmente mais le code n'est pas vraiment gâché par l'intégration de compteurs - cela tuerait l'optimisation du code.

J'essaie de voir les goulots d'étranglement avec le nouveau profileur. Pas de chance, bien que j'essaie très fort.

Sans exemples reproductibles en une étape, nous n'examinons pas les problèmes. Des synthèses simplifiées à partir de quelques appels sur des micro-tâches ne peuvent pas non plus être considérées en termes de pourcentage du temps pris ou de contribution au temps total.

À qui dois-je envoyer les données pour la relecture ? Les données de LS montrent que les messages de LS peuvent ne pas être lus pendant une longue période.

Deux coches vertes indiquent que le message a été lu, une indique qu'il n'a pas été lu.

 
fxsaber #:

Complètement ignorant du sujet que vous avez exposé. Le profileur montre certaines données qui ne peuvent être interprétées d'aucune façon.

J'essaie de voir les goulots d'étranglement avec le nouveau profileur. Pas de chance, bien que j'essaie.

À qui dois-je envoyer les données pour la relecture ? Les données du PM montrent que les messages du PM peuvent ne pas être lus pendant une longue période.

Deux tics verts - message lu, un - non lu.

de la même manière, plus le marteau est frappé souvent, à un endroit ou à un autre, plus la fonction est coûteuse.

quelle est la probabilité qu'un contre frappe des variables bon marché ? presque 0

il y a des fonctions immédiatement compréhensibles que le compteur va atteindre, elles sont sautées, regardez les fonctions personnalisées suivantes

 
Fast235 #:

Tout simplement parce que plus le marteau est frappé souvent, à un endroit ou à un autre, plus la fonction est coûteuse.

quelle est la probabilité qu'un contre frappe des variables bon marché ? presque 0

il y a des fonctions immédiatement compréhensibles que le compteur va atteindre, elles sont sautées, regardez les fonctions personnalisées suivantes

Je parle de l'application pratique, pas de la belle théorie qui est claire au premier coup d'œil.

 
fxsaber #:

Je parle d'application pratique, pas de belle théorie facile à comprendre du premier coup.

pratique est ce qu'elle était, combien de fois est-elle invoquée ?

c'est un intérêt purement perfectionniste,

Je suis d'accord pour dire que les appels supplémentaires doivent être vus, même s'ils sont bon marché.

 
Fast235 #:

La pratique est comme avant, combien de fois est-elle appelée ?

Le profileur précédent était capable de trouver les goulets d'étranglement, mais ici nous parlons d'un nouveau profileur dont les données ne nous permettent pas de comprendre ce qui se passe, même si en théorie cela a été étudié plusieurs fois.

 
fxsaber #:

Le profileur précédent permettait de trouver les goulots d'étranglement, mais ici il s'agit d'un nouveau, dont les données ne permettent pas de comprendre ce qui se passe, bien qu'en théorie tout ait été étudié plusieurs fois.

Renat ne devrait pas montrer le nouveau profileur dans des phrases générales, mais le rendre clair même pour les convaincus comme le sub) (je ne suis pas dépréciatif).

Raison: