PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Performance unter C++



reweiss
03-07-2006, 09:42
Hi@all

Ich habe ein kleines Verständnisproblem bei der Optimierung von C++ Code.

Also ich habe jetzt mal eine kleines Codebeispiel das ich nicht so ganz verstehe. (Den Code ja aber das Optimierungsverhalten nicht ;-))

Also ich habe eine Funktion die einen Zeiger auf ein Objekt übergeben bekommt.
Dieses Objekt beinhaltet verschiedene Vektoren die ich mittels get() Methoden bekomme.
Also der Ursprungscode war ungefähr so

double myFunction(const Bead const *pBead){
Vector vec_diff(pBead->getVec1() - pBead->getVec2() * constValue)
....
)
Es wird also quasi Vektor2 mit einem konstanten Wert multipliziert und der neue Vektor dann von Vektor1 abgezogen.
Bei der Optimierung habe ich dann die get Methoden so umgeschrieben das nur noch Referenzen von den Vektoren übergeben werden.
Das hat bei einem PIII (900Mhz 32bit) 20%, beim AMD (2800Mhz 32bit) 10% und beim 64bit Xenon (2 Prozessoren (4 mit HT)) 30% rausgeholt.
Jetzt habe ich das ganze mal so umgeschrieben

double myFunction(const Bead const *pBead){
Vector vec2_mult = pBead->getVec2() * constValue;
Vector vec_diff = pBead->getVec1() - vec2_mult;
....
)

Jetzt erreiche ich auch beim PIII und beim AMD einer Optimierung von 30%, genau wie beim 64Bit Prozi. Kann sich das einer erklären?? Alle Systeme laufen auf Linux Dist. und haben den selben Intel Compiler. Den Optimierungsgrad habe ich durch Zeitmessungen der alten und neuen Version auf jedem System einzeln ermittelt.

Vielen Dank schonmal und beste Grüße

Joghurt
10-07-2006, 00:40
Sind getVec auch als const definiert?
Vector Vectorclass::getVec1() const {...}

mcspam
10-07-2006, 10:27
double myFunction(const Bead const *pBead){
1. wieso arbeitest du hier nicht mit konstanten Referenzen?
2. const Bead const* -> meinst du damit const Bead * const?
3. Verfrühte Optimierung ist die Wurzel allen Übels :)