8Fermer10
PolluxLe 23/07/2006 à 11:30
GoldenCrystal
: Par exemple, pour une librairie que tu n'aurais pas codée toi même, et dont tu appellerais une fonction avec un ou plusieurs des paramètres étant toujours à la même valeur, tu pourrais faire une optimisation (enfin là c'est un peu trop poussé pour faire du JIT) exactement du même type mais qui pourrait se révéler très avantageuse pour le programme...

Oui enfin si la différence est suffisamment importante pour avoir une différence de performance significative à un endroit critique du programme et que les gens de la lib n'ont pas pensé à faire une version sans ce paramètre supplémentaire, c'est peut-être que cette lib n'est pas adaptée et pas pensée pour l'optimisation ? (sans compter que si ça a déjà un impact important sur la performance avec des optimisations faites par le compilo, ça risque d'être nettement mieux avec une fonction de la lib plus adaptée)
Sinon on peut aussi penser à de la réoptimisation dynamique dans le cas d'utilisations de pointeurs de fonctions ou assimilés (delégués en C#, interfaces/classes dérivées en C#/Java), par exemple une classe qui prendrait un callback (pas un event multicast comme en C#...), donc un truc intrinsèquement lent du fait des méthodes virtuelles, pour ses opérations... Si on le jugeait nécéssaire, il serait possible de recompiler le code a chaque changement de ce callbak, afin d'avoir toujours des appels optimisés. Bien sûr ça demande une analyse assez poussée du code, donc impossible a aire avec les JIT actuels, mais il y a toujours moyen d'améliorer (*profiler* hem)

Un peu comme les templates en C++, en quelque sorte ? cheeky (sauf que les templates C++ c'est un peu naze parce que c'est pas du tout général : il faudrait par exemple pouvoir préciser que n'importe lequel des paramètres doit être inliné dans le code de la fonction, sans restriction de type et sans redéfinition de la fonction)
y n'agit pas sur Object, var v1 = Object.FunctionA(toto); Display(v1); Object.FunctionB(); var v2 = Object.FunctionA(toto); Display(v2);Sinon quand tu parles d'analyse des dépendances entre insructions, c'est genre vérifier si, en supposant que Displav); Display(v);
est équivalent àvar v = Object.FunctionA(toto);
Object.FunctionB();
Display(
c'est ça ?

Oui ^^
En tout cas c'est pas la première chose qui me vien a l'esprit, mais c'est clair que c'est intéressant niveau optimisation, happy

C'est pourtant important pour la parallélisation automatique : scheduling des instructions, optimisations SIMD (bon ça c'est à plus petite échelle), génération de code threadé, etc...