<?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 von int Addition]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgenden Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

struct foo
{
	foo() : vec3 (1000) { for (size_t i = 0; i &lt; 1000000; ++i) { vec1.push_back(i); } for (size_t i = 0; i &lt; 1000; ++i) { vec2.push_back(i); } }

	std::vector&lt;double&gt; operator()(std::vector&lt;double&gt; const &amp;input)
	{
		size_t inner_counter = 0, outer_counter = 0;
		for (size_t i = 0; i &lt; 1000; ++i) {
			for (size_t j = 0; j &lt; 1000; ++j) {
				vec3[i] += vec1[inner_counter]*(input[j] + vec2[j]);
				++inner_counter; // Darum gehts
			}
			vec3[i] += vec2[outer_counter];
			++outer_counter;
		}
		return vec3;
	}

	std::vector&lt;double&gt; vec1, vec2, vec3;
};

int main()
{
	std::vector&lt;double&gt; input(1000);
	for (auto &amp;i : input) {
		i = 1.0;
	}

	foo f;

	for (size_t i = 0; i &lt; 1000; ++i) {
		f(input);
		std::cout &lt;&lt; i &lt;&lt; '\n';
	}
}
</code></pre>
<p>Wenn ich jetzt diesen Code mit dem Visual Studio 2013 Profiler auf seine Performance hin untersuchen will, zeigt mir dieser an dass 89,9% der gesamten Laufzeit bei Zeile 14 draufgeht (also der integer Addition). Zeile 13, in der ja eigentlich viel mehr passiert schlägt dagegen nur mit 9,2% zu Buche.</p>
<p>Woran kann das liegen? Eigentlich sollte eine simple integer Addition doch so ziemlich das schnellste sein was man machen kann oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327260/performance-von-int-addition</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 12:06:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327260.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Jul 2014 21:51:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 21:52:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe folgenden Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

struct foo
{
	foo() : vec3 (1000) { for (size_t i = 0; i &lt; 1000000; ++i) { vec1.push_back(i); } for (size_t i = 0; i &lt; 1000; ++i) { vec2.push_back(i); } }

	std::vector&lt;double&gt; operator()(std::vector&lt;double&gt; const &amp;input)
	{
		size_t inner_counter = 0, outer_counter = 0;
		for (size_t i = 0; i &lt; 1000; ++i) {
			for (size_t j = 0; j &lt; 1000; ++j) {
				vec3[i] += vec1[inner_counter]*(input[j] + vec2[j]);
				++inner_counter; // Darum gehts
			}
			vec3[i] += vec2[outer_counter];
			++outer_counter;
		}
		return vec3;
	}

	std::vector&lt;double&gt; vec1, vec2, vec3;
};

int main()
{
	std::vector&lt;double&gt; input(1000);
	for (auto &amp;i : input) {
		i = 1.0;
	}

	foo f;

	for (size_t i = 0; i &lt; 1000; ++i) {
		f(input);
		std::cout &lt;&lt; i &lt;&lt; '\n';
	}
}
</code></pre>
<p>Wenn ich jetzt diesen Code mit dem Visual Studio 2013 Profiler auf seine Performance hin untersuchen will, zeigt mir dieser an dass 89,9% der gesamten Laufzeit bei Zeile 14 draufgeht (also der integer Addition). Zeile 13, in der ja eigentlich viel mehr passiert schlägt dagegen nur mit 9,2% zu Buche.</p>
<p>Woran kann das liegen? Eigentlich sollte eine simple integer Addition doch so ziemlich das schnellste sein was man machen kann oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411385</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 31 Jul 2014 21:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 22:03:58 GMT]]></title><description><![CDATA[<p>Wird wohl eine Messungenauigkeit sein. Der Optimizer hat vermutlich die Befehle etwas umgeordnet und die Inkrementierung nach oben gezogen (vermutlich direkt nachdem die Multiplikation gestartet wurde).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411388</guid><dc:creator><![CDATA[unschärferelation]]></dc:creator><pubDate>Thu, 31 Jul 2014 22:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 22:09:19 GMT]]></title><description><![CDATA[<p>Aber sollte der Profiler nicht schlau genug sein das zu merken?</p>
<p>Ich meine was bringt mir dann überhaupt ein Profiler wenn er mir die falschen Zeilen anzeigt und die Compiler Optimierung nicht berücksichtigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411390</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 31 Jul 2014 22:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 22:33:42 GMT]]></title><description><![CDATA[<p>happystudent schrieb:</p>
<blockquote>
<p>Aber sollte der Profiler nicht schlau genug sein das zu merken?</p>
</blockquote>
<p>Wie sollte er das tun, wenn wild gemischt wird?</p>
<blockquote>
<p>Ich meine was bringt mir dann überhaupt ein Profiler wenn er mir die falschen Zeilen anzeigt und die Compiler Optimierung nicht berücksichtigt?</p>
</blockquote>
<p>Was bringt es dir, unoptimierten Code zu profilen?</p>
<p>Miss die Performance von Codeabschnitten, nicht von einzelnen Zeilen. Im schlimmsten Fall von ganzen Funktionen. Aber viele Profiler bieten auch die Option, einzelne Codeabschnitte festzulegen, die dann als Einheit betrachtet werden. Code ist immer ein Gesamtkonstrukt, wenn es um Performance geht. Wenn du wissen willst, wie lange eine Integeraddition braucht, guck im Prozessorhandbuch nach (wobei selbst dort stehen wird, dass es im Details darauf ankommt, welche Anweisungen vorher und nachher folgen). Wenn du hingegen wissen willst, ob der hier gezeigte innere Schleifencode <em>insgesamt</em> schneller oder langsamer ist als eine andere Variante, oder in welcher Schleife dein Programm die meiste Zeit verbraucht, dann ist ein Profiler das richtige Werkzeug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411400</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 31 Jul 2014 22:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 22:49:44 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Was bringt es dir, unoptimierten Code zu profilen?</p>
</blockquote>
<p>Es ging mir nicht darum unoptimierten Code zu profilen. Aber wenn es in diesem Fall jetzt wirklich daran liegt dass die Addition durch den Compiler vorgezogen wurde, könnte ein Profiler ja mit dem Compiler reden und diese Information nutzen um zurückzurechnen dass die Zeile doch nicht so lahm ist. Das meinte ich.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wenn du hingegen wissen willst, ob der hier gezeigte innere Schleifencode <em>insgesamt</em> schneller oder langsamer ist als eine andere Variante, oder in welcher Schleife dein Programm die meiste Zeit verbraucht, dann ist ein Profiler das richtige Werkzeug.</p>
</blockquote>
<p>Hm Schade, ich hatte gehofft dass mir der Profiler die teuersten Zeilen anzeigt so dass man gleich auf den ersten Blick sehen kann wo sich das Optimieren am meisten lohnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411402</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Thu, 31 Jul 2014 22:49:44 GMT</pubDate></item><item><title><![CDATA[Reply to Performance von int Addition on Thu, 31 Jul 2014 23:16:08 GMT]]></title><description><![CDATA[<p>Die Vorstellung, dass die Zeilen im ausführbaren Programm noch irgendeine Bedeutung hätten ist eben einfach falsch. Du kannst dir das nicht vorstellen, dass da einzelne Zeilen umgeordnet würden. Stattdessen wird alles wild durcheinander geworfen. Daher kann man gar nicht genau zurück rechnen, was zu welcher Zeile gehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2411403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2411403</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 31 Jul 2014 23:16:08 GMT</pubDate></item></channel></rss>