Définition de l'optimisation

Résolu
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 - 18 déc. 2005 à 20:24
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 - 19 déc. 2005 à 15:14
Salut à tous,


en fait je voudrais juste savoir ce que l'on entend par optimisation en programmation, parce que dans un bouquin que j'ai lu sur DirectX, l'auteur dis que l'optimisation, c'est faire des choses comme ça :


Sans optimisation Avec optimisation
y=ax+b y=a
a*=x
a+=b

Et le prof que j'ai en BTS IRIS prétend que l'optimisation, ce n'est pas ça du tout. (Et comme bien évidemment, il ne m'a rien expliqué)

Donc en fait, je voudrais savoir de votre point de vue ce qu'est l'optimisation

allez @+

8 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 déc. 2005 à 11:30
Je pense pas que l'auteur se plante ici: c'est sur que si tu écris un grosse expression, ca va faire plus création d'objets temporaires, et de recopies. Mais a mon avis, c'est surtout vrai pour la programmation objet.
Si tu trouves ca différent de ce que dit ton prof, c'est peut être parce que ton prof parle de l'optimisation faite par le compilateur, alors que celle que tu décris est plutot faite par l'utilisateur
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 déc. 2005 à 20:36
Pour moi optimisation ca veut dire mettre l'option -O3 à g++ lors de la compilation :)



Mais l'exemple que tu donnes la. La variante avec optimisation a un
intéret: elle limite les créations et destructions d'objet. Mais peut
etre que le compilateur est capable de le faire tout seul. M'enfin j'en
doute. Donc pour moi c'est bien une optimisation :)



Mais je pense que pour ton prof l'optimisation, c'est surtout dans le
processeur que ca se passe. Il s'agit d'utiliser les fonctions
spéciales que ton processeur disposent et qui sont censées etre plus
rapide que les fonctions génériques. Enfin c'est tout ce que je peux te
dire avec mes connaissances la dessus. Mais quand je me suis intéressé
a l'asm, yavait les variantes MMX, 3Dnow, etc ... de fonctions.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 déc. 2005 à 23:08
C'est très réducteur comme exemple. Il est aussi possible de faire de l'optimisation globale d'un code, sans même connaitre la machine cible.
Par exemple, supprimer du code mort est une optimisation. On peut aussi parler des variables actives, etc...
Je trouve que l'exemple y=ax+b n'est pas vraiment parlant, parce que les 3 instructions équivalentes seront probablement celles traduites par le compilo, même sans optimisation
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 déc. 2005 à 23:28
L'optimisation dans son sens premier est l'obtention du résultat en un minum de cycles, ensuite si tu tombes sur des philosophes de l'informatique alors...
Dans tous les cas, cherche à savoir ce que ton prof entend par optimisation et ensuite dis lui qu'il a raison, tu verras ensuite s'il convient de penser ca que tu lui auras dit.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
19 déc. 2005 à 09:55
Vecchio56, comme je l'ai dit, cet exemple est celui trouvé dans un bouquin (je vais vous écrire exactement ce qui est marqué dans le bouquin) :

D3DX nous offre des classes C++ complètes pour notre arithmétique vectorielle.
Nous pouvons ainsi écrire :

D3DXVECTOR3 vA, vB, vC;
vA = vB + vC;

Lorsque nous écrivons ceci, le compilateur génère des objets temporaires. Lorsqu'un objet est crée, son constructeur est appelé. Lorsque me temporaire n'est plus nécessaire, un destructeur sera invoqué. Le coût de ces opérations est souvent modeste mais pas toujours, et surtout leur accumulation devient significative à la longue. Nous devons donc remplacer le bout de code précédent et écrire :

D3DXVECTOR3 vA, vB, vC;
vA = vB;
vA += vC;

Nous insistons bien : il y'a une différence de l'ordre de 200% entre les deux formulations.

Laurent Testud, DirectX 9 : Programmation de jeux 3D (Chapitre 5 : Techniques de programmation, page 106)

Donc à moins d'une erreur d'interprétation de ma part, ces 200 % représentent l'optimisation qui a pu être faite entre les 2 formules.

Et ensuite, il explique une autre optimisation possible au niveau codage du terme :

Créez les objets sur la pile au tout dernier moment lorsque vous en avez besoin. Ne regroupez jamais les déclarations d'une méthode à la façon d'une fonction C. Par exemple :

void Calcul(...)
{
// D3DXVECTOR3 v1, v2; // Pas ici
// Code qui n'utilise pas v1 ni v2
if (cas_particulier)
{
// Déclarer (et donc construire) v1 et v2 ici
D3DXVECTOR3 v1, v2;
v1 = ....;
v2 = .....;
v2 *= v1;
UtiliserVecteur(v2);
}
}

Laurent Testud, DirectX 9 : Programmation de jeux 3D (Chapitre 5 : Techniques de programmation, page 106)

Donc là aussi ça serait de l'optimisation puisque les objets ne sont pas crées au début du prog mais que quand on en a besoin...

Enfin, je ne sais pas, à votre avis ?

Erreur d'interprétation de ma part où l'auteur se plante ?
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
19 déc. 2005 à 14:13
OK ,merci, maintenant, j'ai compris le truc.

Parce que quand je lui parlé de l'optimisation faite par l'utilisateur, il m'a dit que cette méthode n'existait pas, parce qu'il ne la connaît certainement pas et t'as raison pour lui l'optimisation vient du compilo et pas l'utilisateur.

Donc là il est vrai qu'on peut se poser la question : est-ce un bon prof d'info ?

Réponse quand j'aurais le BTS
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 déc. 2005 à 14:50
Bah ici on te dira surement que non, c'est sans doute un bon théoricien mais qui n'a pas programmé depuis un petit moment. Mais n'oublie pas qu'il a sans doute beaucoup de choses a t'apprendre
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
19 déc. 2005 à 15:14
Ah ben le fait qu'il a beaucoup de choses à m'apprendre je ne le nie pas, mais il est vrai qu'au niveau théorique, il arrache, par contre au niveau prog, va falloir qu'il fasse ses preuves au vu de ce qui a été dit; enfin nous verrons bien...
0
Rejoignez-nous