<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Performance unter C++]]></title><description><![CDATA[<p>Hi@all</p>
<p>Ich habe ein kleines Verständnisproblem bei der Optimierung von C++ Code.</p>
<p>Also ich habe jetzt mal eine kleines Codebeispiel das ich nicht so ganz verstehe. (Den Code ja aber das Optimierungsverhalten nicht ;-))</p>
<p>Also ich habe eine Funktion die einen Zeiger auf ein Objekt übergeben bekommt.<br />
Dieses Objekt beinhaltet verschiedene Vektoren die ich mittels get() Methoden bekomme.<br />
Also der Ursprungscode war ungefähr so</p>
<p>double myFunction(const Bead const *pBead){<br />
Vector vec_diff(pBead-&gt;getVec1() - pBead-&gt;getVec2() * constValue)<br />
....<br />
)<br />
Es wird also quasi Vektor2 mit einem konstanten Wert multipliziert und der neue Vektor dann von Vektor1 abgezogen.<br />
Bei der Optimierung habe ich dann die get Methoden so umgeschrieben das nur noch Referenzen von den Vektoren übergeben werden.<br />
Das hat bei einem PIII (900Mhz 32bit) 20%, beim AMD (2800Mhz 32bit) 10% und beim 64bit Xenon (2 Prozessoren (4 mit HT)) 30% rausgeholt.<br />
Jetzt habe ich das ganze mal so umgeschrieben</p>
<p>double myFunction(const Bead const *pBead){<br />
Vector vec2_mult = pBead-&gt;getVec2() * constValue;<br />
Vector vec_diff = pBead-&gt;getVec1() - vec2_mult;<br />
....<br />
)</p>
<p>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.</p>
<p>Vielen Dank schonmal und beste Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152120/performance-unter-c</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 22:46:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152120.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 Jul 2006 08:06:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance unter C++ on Mon, 03 Jul 2006 08:06:26 GMT]]></title><description><![CDATA[<p>Hi@all</p>
<p>Ich habe ein kleines Verständnisproblem bei der Optimierung von C++ Code.</p>
<p>Also ich habe jetzt mal eine kleines Codebeispiel das ich nicht so ganz verstehe. (Den Code ja aber das Optimierungsverhalten nicht ;-))</p>
<p>Also ich habe eine Funktion die einen Zeiger auf ein Objekt übergeben bekommt.<br />
Dieses Objekt beinhaltet verschiedene Vektoren die ich mittels get() Methoden bekomme.<br />
Also der Ursprungscode war ungefähr so</p>
<p>double myFunction(const Bead const *pBead){<br />
Vector vec_diff(pBead-&gt;getVec1() - pBead-&gt;getVec2() * constValue)<br />
....<br />
)<br />
Es wird also quasi Vektor2 mit einem konstanten Wert multipliziert und der neue Vektor dann von Vektor1 abgezogen.<br />
Bei der Optimierung habe ich dann die get Methoden so umgeschrieben das nur noch Referenzen von den Vektoren übergeben werden.<br />
Das hat bei einem PIII (900Mhz 32bit) 20%, beim AMD (2800Mhz 32bit) 10% und beim 64bit Xenon (2 Prozessoren (4 mit HT)) 30% rausgeholt.<br />
Jetzt habe ich das ganze mal so umgeschrieben</p>
<p>double myFunction(const Bead const *pBead){<br />
Vector vec2_mult = pBead-&gt;getVec2() * constValue;<br />
Vector vec_diff = pBead-&gt;getVec1() - vec2_mult;<br />
....<br />
)</p>
<p>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.</p>
<p>Vielen Dank schonmal und beste Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090536</guid><dc:creator><![CDATA[reweiss]]></dc:creator><pubDate>Mon, 03 Jul 2006 08:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to Performance unter C++ on Mon, 03 Jul 2006 08:58:54 GMT]]></title><description><![CDATA[<p>Kannst du deinen Code bitte ausführlicher und mit cpp - Tags (siehe C/C++ Button unter den Smileys) gestalten? Ich blicke grad nicht durch. Wie hast du die Optimierung berechnet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090551</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Mon, 03 Jul 2006 08:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Performance unter C++ on Mon, 03 Jul 2006 09:59:41 GMT]]></title><description><![CDATA[<p>Hi also die Orginalversion ist</p>
<pre><code class="language-cpp">double myFunction(const Bead const *pBead){ 
 Vector vec_diff(pBead-&gt;getVec1() - pBead-&gt;getVec2() * constValue) 
 .... 
)
</code></pre>
<p>Bead ist eine Klasse die Vektoren enthält. Die Vektoren sind in der Klasse Vector beschrieben. Ich sprechen hier von mathematischen Vektoren (x/y/z- Koordinaten).</p>
<p>das habe ich dann nur geändert indem ich in der Klasse Bead die get() methoden, die die ensprechenden Vektoren zurückgibt, halt nur eine Referenz zurück gibt und keine Kopie mehr anlegt.<br />
Dadurch habe ich die oben beschriebenen Optimierungsgrad erreicht. Bloß beim PIII und AMD zur langsam. Wenn ich die Funktion jetzt so umschreibe, also die Berechnungen einzeln abspeicher, kommen alle PCs auf den selben Optimierungsgrad von 30%.</p>
<pre><code class="language-cpp">double myFunction(const Bead const *pBead){ 
 Vector vec2_mult = pBead-&gt;getVec2() * constValue; 
 Vector vec_diff = pBead-&gt;getVec1() - vec2_mult; 
 .... 
)
</code></pre>
<p>Die Prozente rechne ich aus indem ich die Zeit der alten Version mit der Zeit der neuen Version vergleiche. Quasi eine for() um die Funkion und 10k mal rechnen lassen. Dann einfach Prozentrechung anwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090584</guid><dc:creator><![CDATA[reweiss]]></dc:creator><pubDate>Mon, 03 Jul 2006 09:59:41 GMT</pubDate></item><item><title><![CDATA[Reply to Performance unter C++ on Mon, 03 Jul 2006 11:32:37 GMT]]></title><description><![CDATA[<p>Bei der ersten Variante werden vom Compiler 2 temp. Variablen angelegt, während deine 2. Variante diese ja explizit anlegt.</p>
<p>Hast du denn jeweils die Optimierungen beim Compiler eingeschaltet, oder in der Debug-Version getestet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090636</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 03 Jul 2006 11:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Performance unter C++ on Mon, 03 Jul 2006 12:03:03 GMT]]></title><description><![CDATA[<p>Ich habe den Compiler mit -O3 zusätzlich alles Optimieren lassen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090652</guid><dc:creator><![CDATA[reweiss]]></dc:creator><pubDate>Mon, 03 Jul 2006 12:03:03 GMT</pubDate></item></channel></rss>