Bonjour,
Après un peu de boulot sur xvid, j'ai réussi a rendre le décodeur environ 25% plus rapide... ces optims ont été le fruit de la règle maîtresse en la matière:
Avant d'optimiser une fonction, il faut s'abstenir de l'appeler.
En effet, le décodeur étant un peu laissé à l'abandon, aucun dev n'avait fait l'effort de vérifier qu'on ne faisait que le strict minimum (ie: pas de répétition inutile d'une étape de décodage)... et pire, dû à quelques changements hâtifs coté codeur, on avait des fois des fonctions optimisées en assembleur qui n'étaient pas exploitées coté décodeur.
Mais bon voilà, je pense en avoir fini avec ça, et je pense que maintenant, il est temps de se jeter dans du profilage bien ficelé et efficace. Pour cela j'utilise Oprofile qui me permet d'avoir des flats profiles et l'annotation des sources avec une granularité que gprof ne peut avoir (1. car oprofile profile au niveau de l'instruction et 2. gprof est incapable de profiler du code asm écrit à la main, il lui manque les entetes mouchardes qui updatent les compteurs des fonctions).
La question:
Seulement voila, c'est un peu pauvre coté présentation des résultats, alors je me demandais si quelqu'un avait une liste de scripts annexes pour mieux exploiter un fichier du genre:
http://ed.gomez.free.fr/vrac/decoder.oprofile.c(...)
http://ed.gomez.free.fr/vrac/encoder.oprofile.c(...)
PS: le site d'Oprofile ne pointe sur pas grand chose, prospect de HP ne donne pas bcp plus d'infos que opreport+opannotate, et Google reste bien vague sur la question.
Merci
# Aussi...
Posté par Edouard Gomez (site web personnel) . Évalué à 2.
Les outils c'est bien, mais rien ne vaut la synthèse faite par l'humain.
[^] # Re: Aussi...
Posté par Nicolas Boulay (site web personnel) . Évalué à 1.
J'avais vu celle de ffmpeg. Il me semble qu'il y a beaucoup de référence mémoire. Souvent pour des petites tables, cela peut aller plus vite de les inliner dans le code.
"La première sécurité est la liberté"
[^] # Re: Aussi...
Posté par Edouard Gomez (site web personnel) . Évalué à 1.
Nan de toute facon tout ce qui est optimisé à la main (ie: postfixé par mmx/3dne/xmm/sse2) est déjà très optimisé, je pense plutôt que la où pêche XviD serait une utilisation abusive du bus mémoire... le problème c'est que pour économiser le bus mémoire, ca équivaut à voir quelles étapes peuvent être fusionnées pour éviter des résultats intermédiaires. Or je me disais qu'il y avait peut être quelques % à gratter sur la forme du C avant de s'attaquer au fond (qui demandera plus de travail, puisque certaines étapes seront fusionnées et demanderont la création de nouevlles séries de fonctions).
[^] # Re: Aussi...
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
http://f-cpu.seul.org/nico/article_hack_C.html(...)
C'est assez complexe de trouver l'utilisation optimale du bus mémoire sachant comment fonctionne les caches et les write buffer.
Le prefetch est censé amélioré ça mais la distance optimal est variable avec le cpu. Je suis plutôt pour le "preload". Charger le plus tôt possible les données dans le flots surtout si l'acces est "aléatoire".
"La première sécurité est la liberté"
[^] # Re: Aussi...
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
- Un 1er acces à la mémoire prends en gros 150 cycles.
Donc tout 1er acces aléatoire qui peut être remplacé par une centaine d'instruction sera plus rapide.
"La première sécurité est la liberté"
# pas oprofile, mais d'autres...
Posté par tuan kuranes (site web personnel) . Évalué à 2.
(MMX seulement)
Ou encore celui-la qui est cense supporter le 3DNow!/MMX/SSE/SSE2 :
http://www.elis.rug.ac.be/~ronsse/diota/(...)
sinon une lecture des plus interressantes :
OPTIMISING FOR MODERN PROCESSORS de Alan Cox :
http://josu.uninet.edu/n1/acox.html(...)
(merci pour oprofile je connaissais pas !)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.