<?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[Takte ermitteln, die eine Funktion &#x2F; Methode benötigt]]></title><description><![CDATA[<p>Hallo, meine Frage ist, wie man ermitteln kann, wieviele Takte eine entsprechende Funktion oder Methode zur Laufzeit benötigt?</p>
<p>Was ich bis jetzt gefunden habe war folgende Idee</p>
<pre><code class="language-cpp">unsigned __int64 i =0, Dif=0, iStart, iEnd;
	while(i&lt;=5000000)
	{
		QueryPerformanceCounter((LARGE_INTEGER*)&amp;iStart);
                   //Mache was
		QueryPerformanceCounter((LARGE_INTEGER*)&amp;iEnd); 
		Dif += iEnd - iStart;

		i++;
	}
</code></pre>
<p>Aber geht es denn auch anders? Das Problem ist ja bei dieser Art, das auch alle Takte mitgezählt werden, die durch andere Prozesse verwendet werden. Ich frage nämlich, weil ich testhalber eine Multiplikation ausführe, und folgender Code soll angeblich 1200 Takte brauchen, was ich nich ganz glaube.</p>
<pre><code class="language-cpp">void m(unsigned long x,unsigned long y)
{
	__asm{
		mov eax, x
		mul y
	     }
}
</code></pre>
<p>Mfg Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179587/takte-ermitteln-die-eine-funktion-methode-benötigt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 09:00:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179587.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Apr 2007 13:19:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Mon, 23 Apr 2007 13:19:37 GMT]]></title><description><![CDATA[<p>Hallo, meine Frage ist, wie man ermitteln kann, wieviele Takte eine entsprechende Funktion oder Methode zur Laufzeit benötigt?</p>
<p>Was ich bis jetzt gefunden habe war folgende Idee</p>
<pre><code class="language-cpp">unsigned __int64 i =0, Dif=0, iStart, iEnd;
	while(i&lt;=5000000)
	{
		QueryPerformanceCounter((LARGE_INTEGER*)&amp;iStart);
                   //Mache was
		QueryPerformanceCounter((LARGE_INTEGER*)&amp;iEnd); 
		Dif += iEnd - iStart;

		i++;
	}
</code></pre>
<p>Aber geht es denn auch anders? Das Problem ist ja bei dieser Art, das auch alle Takte mitgezählt werden, die durch andere Prozesse verwendet werden. Ich frage nämlich, weil ich testhalber eine Multiplikation ausführe, und folgender Code soll angeblich 1200 Takte brauchen, was ich nich ganz glaube.</p>
<pre><code class="language-cpp">void m(unsigned long x,unsigned long y)
{
	__asm{
		mov eax, x
		mul y
	     }
}
</code></pre>
<p>Mfg Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271755</guid><dc:creator><![CDATA[Tobias1984]]></dc:creator><pubDate>Mon, 23 Apr 2007 13:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 01:09:59 GMT]]></title><description><![CDATA[<p>Ok.<br />
Äh.<br />
Du kannst VTune kaufen, das kann das was du willst soweit ich mich erinnere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ansonsten ein paar Dinge zu QueryPerformanceCounter:<br />
Ja, es wird mitgezählt was andere Prozesse verbrauchen, allerdings kannst du kurz die Thread Priorität + Prozess Priorität anheben, dann fällt das kaum ins Gewicht. Vor kurzen Tests tut's im Normalfall auch ein &quot;Sleep(0);&quot;.</p>
<p>Und so wie du das machst wird es nix werden, du musst schon mehr als nur ein paar Takte zwischen den beiden zu QueryPerformanceCounter verbraten, sonst misst du bloss wie lange zu QueryPerformanceCounter selbst braucht.<br />
QueryPerformanceCounter 2x direkt hintereinander auszuführen um rauszubekommen wie lange die &quot;Nullzeit&quot; ist funktioniert dabei leider nicht (ich hab's selbst schon ausprobiert, kommen Hausnummern dabei raus), also bleibt dir nix anderes übrig als einfach ein paar Millionen Loops über die entsprechende Funktion zu machen wenn du es so messen willst. Die beiden QueryPerformanceCounter Aufrufe müssen dabei dann natürlich VOR und NACH dem Loop stehen, nicht mitten drinnen.</p>
<p>Und du musst dann natürlich aufpassen dass die der Compiler nicht gleich den ganzen Loop wegoptimiert, bzw. nicht das was du eigentlich messen willst aus dem Loop rausoptimiert. Und beim &quot;erzwingen&quot; des &quot;nicht optimierens&quot; (wo z.B. gern &quot;volatile&quot; verwendet wird) musst du aufpassen dass das nicht übermässig viel Zeit beansprucht, denn das geht ja auch in die Messung mit ein.</p>
<p>Das einfachste ist es halt immer noch wenn man wirklich fertige Funktionen misst die reale Arbeit verrichten, also so aussehen wie man sie im fertigen Programm braucht, und natürlich die nicht sehr kurz sind. Dann kann man das &quot;Wegoptimieren&quot; auch einfach dadruch verhindern dass man das Ergebnis der Funktion am Ende ausgibt - also einfache alle Variablen danach ausgibt die die Funktion modifiziert (inklusive dem Returnwert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272102</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 01:09:59 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 06:04:35 GMT]]></title><description><![CDATA[<p>Hi, besten Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Nun komme ich auf 180 Takte wenn ich außerhalb der Schleife QueryPerformanceCounter Aufrufe das mach ich 10Mio mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vtune wäre schon cool, aber auch ein Wenig zu teuer um damit solch simple Sachen anzustellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272131</guid><dc:creator><![CDATA[Tobias1984]]></dc:creator><pubDate>Tue, 24 Apr 2007 06:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 12:26:42 GMT]]></title><description><![CDATA[<p>benutz doch ne sim, die zeigt dir genau an, wieviel takt die durchläuft und da es ne simulation ist, ist sie sogar &quot;echtzeit&quot; fähig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272396</guid><dc:creator><![CDATA[simulacra]]></dc:creator><pubDate>Tue, 24 Apr 2007 12:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 15:58:36 GMT]]></title><description><![CDATA[<p>@simulacra: was denn für eine &quot;sim&quot;? Ich glaube kaum dass man so ohne weiteres Simulationen bekommt die das Verhalten moderner CPUs wie z.B. Core 2 Zyklengenau simulieren können...<br />
p.S.: wenn doch würde mich interessieren welche, wenn du nen Link hast...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15709">@Tobias1984</a>: 180 ist immer noch viel zu viel, nen P4 oder Core 2 sollte dafür max. 15 Zyklen brauchen, soll sein 20 wenn alles schief geht (inklusive &quot;call + ret&quot; und dem ganzen). Und das auch nur wenn man den Wert von eax unmittelbar nach der Funktion &quot;verbraucht&quot;, wenn man den erst später verwendet müsste es noch schneller gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272590</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 15:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 16:09:00 GMT]]></title><description><![CDATA[<p>Tobias1984 schrieb:</p>
<blockquote>
<p>Hi, besten Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Nun komme ich auf 180 Takte wenn ich außerhalb der Schleife QueryPerformanceCounter Aufrufe das mach ich 10Mio mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vtune wäre schon cool, aber auch ein Wenig zu teuer um damit solch simple Sachen anzustellen.</p>
</blockquote>
<p>benutz AMD Code Analyst (ja funzt auch auf intel cpus). damit bekommst du weit bessere resultate als mit deinem versuch und das auch noch fuer alle funktionen und sogar auf assembler level.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272603</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 24 Apr 2007 16:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 16:22:44 GMT]]></title><description><![CDATA[<p>Hier eine Möglichkeit, mit rdtsc zu messen:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-177699-and-start-is-6.html" rel="nofollow">Messung mit rdtsc</a><br />
Die Verwendung eines Profilers ist für solche Zwecke wenig sinnvoll, da diese dafür typischerweise viel zu ungenau sind. Auch ist die Fragestellung selbst für moderne Prozessoren relativ sinnlos. Wir müssen hier genauer zwischen Latenz und Durchsatz unterscheiden, zudem sind solche kurzen Codestücke wegen Instruktionsumordnung und spekulativer Ausführung einer direkten Messung ohnehin kaum zugänglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272614</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 24 Apr 2007 16:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 17:57:59 GMT]]></title><description><![CDATA[<p>... und da dachte ich immer, um die Takte zu ermitteln schaue man sich die Assembler-Ausgabe des Compilers an und summiert mithilfe einer Tabelle (oder auch ohne, wenn man die Taktzyklen der einzelnen Befehle auswendig weiß) auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272678</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 24 Apr 2007 17:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Takte ermitteln, die eine Funktion &#x2F; Methode benötigt on Tue, 24 Apr 2007 20:21:04 GMT]]></title><description><![CDATA[<p>Mit Zyklen addieren kommt man heute nichtmehr weit.<br />
Auch sind die Ausführungszeiten (in Zyklen) je nach CPU ganz anders, ein P4 wird ganz unterschiedlich lange brauche als ein Core 2 oder ein Athlon FX.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272803</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 20:21:04 GMT</pubDate></item></channel></rss>