libprof: Mesure de temps et profilage pour gint
Posté le 17/07/2019 22:16
Ce topic fait partie de la série de topics du fxSDK.
Bien le salut, développeurs !
Cette bibliothèque est un outil pratique permettant de mesurer le temps du code dans un add-in, et d'identifier dans quelle partie du code l'add-in passe le plus clair de son temps. Grâce aux timers matériels, la précision des mesures est en-dessous de la microseconde et s'améliore encore avec l'overlock !
Pour pas oublier, voici le lien vers le dépôt Git :
Lien vers le dépôt Gitea, Lephenixnoir/libprof
Pour vous donner une petite idée, j'ai mesuré le temps qu'il faut dans gint pour :
• Effacer la VRAM (
dclear)
• Afficher la VRAM à l'écran (
dupdate)
• Dessiner un rectangle de 32×32 à une position favorable (
rect1)
• Le même rectangle à une position défavorable (
rect2)
• Dessiner un rectangle de tout l'écran, avec un effet identique à
dclear (
rect3)
On sait d'emblée que le point critique c'est l'envoi des données à l'écran. Heureusement, il y a un mécanisme permettant de le faire en arrière-plan donc ce délai ne nous gênera en fait pas. Et donc, pour améliorer les performances du dessin, il faut concentrer nos efforts sur
dclear.
Dans un moteur de jeu cette lib permettra de trouver très facilement quelle partie du pipeline graphique prend le plus de temps. Dans un moteur 3D, on peut mesurer le temps de dessin des triangles versus celui de remplissage du z-buffer... autant d'informations qui sont utiles pour améliorer les applications critiques.
Une description détaillée de la façon de compiler et utiliser la lib est dans le README du Gitea. J'espère que ça vous sera utile !
Fichier joint
Citer : Posté le 17/07/2019 22:19 | #
Mon blog ⋅ Mes autres projets
Citer : Posté le 17/07/2019 23:47 | #
C'est formidable !
Je vais regarder ça
Citer : Posté le 13/10/2020 19:41 | #
Je sais qu'il n'y a pas beaucoup d'utilisateurs de cette bibliothèque (dommage d'ailleurs ), mais je signale quand même des nouveaux changements incompatibles.
Je viens de pousser une version dans laquelle la gestion des contextes ne se fait plus avec les entiers maladroits mais avec des variables qu'on peut créer localement ou globalement selon les besoins. Essentiellement, on obtient un contexte avec prof_t prof = prof_make() et on spécifie le nom de la variable au lieu de l'entier dans prof_enter(), prof_leave() et prof_time(). Accessoirement, ça réduit un peu l'overhead dans la mesure.
Par conséquent, le paramètre de prof_init() n'est plus nécessaire, et le premier paramètre de prof_exec() non plus. Mesurer le temps n'a jamais été aussi simple !
my_code();
});
Tous les détails sont sur le README du dépôt qui explique comment utiliser la bibliothèque.