<?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[Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht.]]></title><description><![CDATA[<p>Ich habe eine C bzw. C++ Programm geschrieben mit welchem ich eine bestimmte Anzahl von Speicherplätzen parallel belegen und wieder freigeben kann (malloc/free). Ich benutze dazu Threads und möchte nun herausfinden wie das Zeitverhalten des Programmes in abhängigkeit der Anzahl der Threads ist. Mit anderen Worten, ich will herausfinden mit wievielen parallel arbeitenden Threads ich Speicher dynamisch verwalten kann und wie schnell das geht.</p>
<p>hier der Main-Teil:</p>
<p>*main(int argc, char *argv[])<br />
{<br />
unsigned int t1,t2;<br />
double Wert;<br />
unsigned int Anzahl_Threads=atoi(argv[1]);</p>
<p><strong>t1=clock(); // Stoppuhr an</strong></p>
<p>threadstart(Anzahl_Threads);</p>
<p><strong>t2=clock(); // Stoppuhr aus</strong></p>
<p><strong>Wert=(double)(t2-t1)/CLOCKS_PER_SEC;</strong></p>
<p>printf(&quot;%f &quot;,(double) Wert);</p>
<p>return 0;<br />
}<br />
*</p>
<p>Wie man sieht, habe ich bereits hier eine Lösung unter Verwendung der Zeitfunktion &lt;time.h&gt; (fettgedruckt). Allerdings bekomme ich für eine große Anzahl von Threads (&gt;150) sehr stakr fallende Werte heraus(0,01 sec) und diese stimmen keinesfalls, da die Zeit, in der ich auf eine Programmantowrt warte mit steigender Anzahl von Threads immer länger wird (ca 20 sec).</p>
<p>Über eine zuverlässigere Funktion als Stoppuhr für mein Programm wäre ich sehr dankbar. Ich bitte darum Antworten leicht verständlich zu halten, da ich relativ neu unter den Programmierern bin.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252589/methode-funktion-zum-zeitmessen-einer-funktion-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 23:08:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252589.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Oct 2009 22:59:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Wed, 21 Oct 2009 22:59:10 GMT]]></title><description><![CDATA[<p>Ich habe eine C bzw. C++ Programm geschrieben mit welchem ich eine bestimmte Anzahl von Speicherplätzen parallel belegen und wieder freigeben kann (malloc/free). Ich benutze dazu Threads und möchte nun herausfinden wie das Zeitverhalten des Programmes in abhängigkeit der Anzahl der Threads ist. Mit anderen Worten, ich will herausfinden mit wievielen parallel arbeitenden Threads ich Speicher dynamisch verwalten kann und wie schnell das geht.</p>
<p>hier der Main-Teil:</p>
<p>*main(int argc, char *argv[])<br />
{<br />
unsigned int t1,t2;<br />
double Wert;<br />
unsigned int Anzahl_Threads=atoi(argv[1]);</p>
<p><strong>t1=clock(); // Stoppuhr an</strong></p>
<p>threadstart(Anzahl_Threads);</p>
<p><strong>t2=clock(); // Stoppuhr aus</strong></p>
<p><strong>Wert=(double)(t2-t1)/CLOCKS_PER_SEC;</strong></p>
<p>printf(&quot;%f &quot;,(double) Wert);</p>
<p>return 0;<br />
}<br />
*</p>
<p>Wie man sieht, habe ich bereits hier eine Lösung unter Verwendung der Zeitfunktion &lt;time.h&gt; (fettgedruckt). Allerdings bekomme ich für eine große Anzahl von Threads (&gt;150) sehr stakr fallende Werte heraus(0,01 sec) und diese stimmen keinesfalls, da die Zeit, in der ich auf eine Programmantowrt warte mit steigender Anzahl von Threads immer länger wird (ca 20 sec).</p>
<p>Über eine zuverlässigere Funktion als Stoppuhr für mein Programm wäre ich sehr dankbar. Ich bitte darum Antworten leicht verständlich zu halten, da ich relativ neu unter den Programmierern bin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796074</guid><dc:creator><![CDATA[Richard00]]></dc:creator><pubDate>Wed, 21 Oct 2009 22:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Wed, 21 Oct 2009 23:14:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">clock_t  time;
time = std::clock();

// some intensive operation

time = std::clock() - time;
std::cout &lt;&lt; &quot;First attempt, time needed: &quot;
		&lt;&lt; time
		&lt;&lt; std::endl;

// the second intensive operation

time = std::clock() - time;
std::cout &lt;&lt; &quot;Second attempt, time needed: &quot;
		&lt;&lt; time
		&lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1796076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796076</guid><dc:creator><![CDATA[jesus was black]]></dc:creator><pubDate>Wed, 21 Oct 2009 23:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Thu, 22 Oct 2009 00:49:42 GMT]]></title><description><![CDATA[<p>Wenn du unter Windows Arbeitest kannst du auch über die Winapi den Counter der CPU abfragen mit QueryPerformanceFrequency und QueryPerformanceCounter.</p>
<p>Das sähe dann so aus:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

long long frequency;
long long startTime;
long long endTime;
double timeInSeconds;

//Frequenz abfragen, gibt Ticks pro Sekunde, muß nur einmal abgefragt werden Wert ist konstant
QueryPerformanceFrequency(reinterpret_cast&lt;LARGE_INTEGER*&gt;(&amp;frequency));

//startzeit holen
QueryPerformanceCounter(reinterpret_cast&lt;LARGE_INTEGER*&gt;(&amp;startTime));

//hier arbeiten erledigen

//endzeit holen
QueryPerformanceCounter(reinterpret_cast&lt;LARGE_INTEGER*&gt;(&amp;endTime));

timeInSeconds=static_cast&lt;double&gt;(endTime-startTime)/static_cast&lt;double&gt;(frequency);
</code></pre>
<p>Der Counter is sehr genau. Weitere Infos kanst du dem MSDN und der Suchmaschine deines Vertrauens entnehmen.</p>
<p>Die Frage wieso du als Programmieranfänger mit Threads arbeitest und davon 150 brauchst spare ich mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796083</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Thu, 22 Oct 2009 00:49:42 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Thu, 22 Oct 2009 10:13:16 GMT]]></title><description><![CDATA[<p>Danke, ich arbeite allerdings unter Linux (openSuse).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3422">@jesus</a>: Danke, werd ich heut mal ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796248</guid><dc:creator><![CDATA[Richard00]]></dc:creator><pubDate>Thu, 22 Oct 2009 10:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Thu, 22 Oct 2009 13:53:19 GMT]]></title><description><![CDATA[<p>Ich habe es jetzt mit der Variante von &quot;Jesus was black&quot; ausprobiert, das Problem ist aber immer noch dasselbe. Die Zeitwerte stiegen erst simultan zur real-verstrichenen Zeit an und fallen dann allerdings wieder ab einem bestimmten Punkt, wobei die in der Realität verstrichene Zeit immer länger wird.</p>
<p>Mit folgender Funktion bekomme ich richtige Werte, die allerdings sehr ungenau sind(+/- 1 sec):</p>
<p>*time_t start,end;</p>
<p>time (&amp;start);<br />
threadstart(Anzahl_Threads);<br />
time (&amp;end);</p>
<p>dif = difftime (end,start);</p>
<p>printf(&quot;%f &quot;,(double) dif);*</p>
<p>Problem hierbei ist, dass ich gerne Werte haben würde die auf die Millisekunde genau sind. Eine Lösung über clock() und CLOCKS_PER_SEC funktioniert jedenfalls nicht. Ich habe in anderen Foren auch schon gelesen, dass dies wahscheinlich daran liegt dass ich auf einem Mehrprozessorsystem arbeite.</p>
<p>Für weiter Hilfe wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796396</guid><dc:creator><![CDATA[Richard00]]></dc:creator><pubDate>Thu, 22 Oct 2009 13:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Thu, 22 Oct 2009 15:41:54 GMT]]></title><description><![CDATA[<p>Du musst auf das Ende der Threads warten. Irgendwas in der Art threadwait(bla)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1796471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1796471</guid><dc:creator><![CDATA[gsat]]></dc:creator><pubDate>Thu, 22 Oct 2009 15:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Mon, 16 Nov 2009 22:10:03 GMT]]></title><description><![CDATA[<p>Ich bin auf der Suche nach genauen Zeitstempeln. Wobei es nicht die Uhrzeit sein muss, sondern eben einfach ein Wert der die Zeit repräsentiert, sodass verschiedene Zeiten in Relation gesetzt werden können:<br />
Konkret: Es werden ständig Messwerte erstellt und man soll sehen können, welcher Messwert neuer ist. Ich will also einfach jedem Messwert eine Erstellungszeit geben mit der ich ihn nachher mit anderen vergleichen kann.</p>
<pre><code>double Erstellungszeit = clock();
std::cout &lt;&lt; Erstellungszeit &lt;&lt; std::endl;
</code></pre>
<p>Leider kommt immer null raus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Soweit ich das verstanden habe zählt clock doch die CPU Ticks die seit Programmstart vergangen sind. Da sollte also doch ein Wert rauskommen! Außerdem können doch keine zwei Objekte zur gleichen Zeit erstellt werden, es liegen immer ein paar Ticks dazwischen. Kann ich also diese Erstellungszeit als eindeutige ID benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809080</guid><dc:creator><![CDATA[fabske]]></dc:creator><pubDate>Mon, 16 Nov 2009 22:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Mon, 16 Nov 2009 22:44:25 GMT]]></title><description><![CDATA[<p>Wenn's nur für Linux sein soll, dann kannst du so an genauere Zeiten kommen:</p>
<pre><code class="language-cpp">#include &lt;sys/time.h&gt;  

    timeval start, end;

    gettimeofday(&amp;start, NULL);

   /* Mach irgendwas tolles */

    gettimeofday(&amp;end, NULL);

    long seconds  = end.tv_sec  - start.tv_sec;
    long useconds = end.tv_usec - start.tv_usec;

    long utime = ((seconds) * 1000000 + useconds); // vergangene Zeit in Mikrosekunden
</code></pre>
<p>edit: Man beachte, dass die Auflösung des Zeitgebers nicht standardmäßig eine Mikrosekunde sein muss. Wie genau er tatsächlich ist, hängt von deinem System ab.</p>
<p>edit2: Im Linux-Unterforum hier gibt es bestimmt Leute, die noch genauere Methoden kennen, falls es diese gibt. Das was ich hier zeige hat mir persönlich immer gereicht und ich war froh, dafür nicht zu tief in die Systemprogrammierung einsteigen zu müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809094</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 16 Nov 2009 22:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Mon, 16 Nov 2009 22:49:46 GMT]]></title><description><![CDATA[<p>Da nicht dabei steht für welches system dus suchst verweis eich mal auf meinen post weiter oben, der QueryPerformanceCounter liefert mit jedem Aufruf vergangene Ticks seit dem Start des PCs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809102</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Mon, 16 Nov 2009 22:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 17 Nov 2009 10:35:06 GMT]]></title><description><![CDATA[<p>Ich programmiere unter Linux! Und zwar nutzen wir ein Kontron Board das anscheinend sogar einen WatchDog hat. Kann man den zufällig zur genauen Zeitmessung brauchen?</p>
<p><a href="http://de.kontron.com/unternehmen/news-events/jrexce+der+erste+intel+celeron+35sbc+mit+usb+20.72.html" rel="nofollow">http://de.kontron.com/unternehmen/news-events/jrexce+der+erste+intel+celeron+35sbc+mit+usb+20.72.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809262</guid><dc:creator><![CDATA[fabske]]></dc:creator><pubDate>Tue, 17 Nov 2009 10:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 17 Nov 2009 12:23:01 GMT]]></title><description><![CDATA[<p>fabske schrieb:</p>
<blockquote>
<p>Kann man den zufällig zur genauen Zeitmessung brauchen?</p>
</blockquote>
<p>Keine Ahnung, ich will jetzt nicht das gesamte datenblatt durchlesen, aber Zeitmessung unter Linux allgemein habe ich ja schon weiter oben erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809329</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 17 Nov 2009 12:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 17 Nov 2009 21:22:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>aber Zeitmessung unter Linux allgemein habe ich ja schon weiter oben erklärt.</p>
</blockquote>
<p>Hab ich grad ausprobiert, funktioniert wunderbar! Vieles Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809608</guid><dc:creator><![CDATA[fabske]]></dc:creator><pubDate>Tue, 17 Nov 2009 21:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 19 Jan 2010 12:44:43 GMT]]></title><description><![CDATA[<p>Da ich die boost lib einsetze habe ich mir nun eine Funktion geschrieben die die Zeit in Millisekunden seit dem 1.1.1970 ausgeben soll, also einen UNIX timestamp. Leider verrechnet der sich um ca. 2,5 Jahre <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<pre><code>unsigned long HIRN::gibuZeitstempel2(void)
{
  boost::posix_time::ptime Urzeitpunkt = boost::posix_time::from_iso_string(&quot;19700101T000000&quot;); 
  boost::posix_time::ptime AktuelleZeit = boost::posix_time::microsec_clock::local_time();
  boost::posix_time::time_duration VergangeneZeit = AktuelleZeit - Urzeitpunkt;
  return (unsigned long) VergangeneZeit.total_milliseconds();

};
</code></pre>
<p>Weiß zufällig jemand warum?</p>
<p>Außerdem würde ich gerne microseconds machen, aber leider passt das anscheinend nicht in eine long <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841353</guid><dc:creator><![CDATA[fabske]]></dc:creator><pubDate>Tue, 19 Jan 2010 12:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 19 Jan 2010 13:55:03 GMT]]></title><description><![CDATA[<blockquote>
<p>leider passt das anscheinend nicht in eine long</p>
</blockquote>
<p>Mit uint64_t oder int64_t aus stdint.h (oder aber cstdint) hast du garantierte 64 Bit breite Integer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841396</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 19 Jan 2010 13:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to Methode&#x2F;Funktion zum Zeitmessen einer Funktion gesucht. on Tue, 19 Jan 2010 15:21:25 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841464</guid><dc:creator><![CDATA[fabske]]></dc:creator><pubDate>Tue, 19 Jan 2010 15:21:25 GMT</pubDate></item></channel></rss>