<?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[thread min sleep time]]></title><description><![CDATA[<p>hi,</p>
<p>ich erstelle mehrere threads die einen algorithmus in parallel berechnen...</p>
<p>was sollte die min sleep time in einem thread sein um zu anderen threads zu schalten? 200ns?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323568/thread-min-sleep-time</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 22:21:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323568.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Feb 2014 08:22:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 08:22:01 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich erstelle mehrere threads die einen algorithmus in parallel berechnen...</p>
<p>was sollte die min sleep time in einem thread sein um zu anderen threads zu schalten? 200ns?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381583</guid><dc:creator><![CDATA[algoman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 08:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 08:27:02 GMT]]></title><description><![CDATA[<p>sollte man dafuer</p>
<pre><code>std::this_thread::yield();
</code></pre>
<p>nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381585</guid><dc:creator><![CDATA[algoman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 08:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 08:37:34 GMT]]></title><description><![CDATA[<p>Warum willst du in einen anderen Thread schalten? Reicht es nicht, sie einfach durchlaufen zu lassen und deren Ergebnisse zu verarbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381586</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Wed, 05 Feb 2014 08:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 08:47:34 GMT]]></title><description><![CDATA[<p>Youka: damit ein anderer thread auch rechenzeit bekommt?</p>
<p>ich habe einen 2d vector&lt;vector&lt;char&gt;&gt; vec; // erste dimension ist die thread_id<br />
thread 1 greift auf vec[1] zu und schreibt in die zweite dimension<br />
thread 2 greift auf vec[2] zu und schreibt in die zweite dimension</p>
<p>muss ich das ganze dann synchronisieren obwohl die unterschiedliche indices nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381587</guid><dc:creator><![CDATA[algoman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 08:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 09:05:35 GMT]]></title><description><![CDATA[<p>algoman1 schrieb:</p>
<blockquote>
<p>Youka: damit ein anderer thread auch rechenzeit bekommt?</p>
</blockquote>
<p>Das sollte der Scheduler deines Betriebssystems auch so hinbekommen. Zudem ist nichts gewonnen wenn man so viele Threads erstellt, dass die die meiste Zeit nur darauf warten die CPU zu bekommen.</p>
<p>algoman1 schrieb:</p>
<blockquote>
<p>ich habe einen 2d vector&lt;vector&lt;char&gt;&gt; vec; // erste dimension ist die thread_id<br />
thread 1 greift auf vec[1] zu und schreibt in die zweite dimension<br />
thread 2 greift auf vec[2] zu und schreibt in die zweite dimension</p>
<p>muss ich das ganze dann synchronisieren obwohl die unterschiedliche indices nehmen?</p>
</blockquote>
<p>Nein musst du nicht. Allerdings macht es dein Programm durch die implizite Synchronisierung (z.B. Cache-Cohärenz) wahrscheinlich sehr langsam, wenn du ständig mit verschiedenen Threads auf benachbarte Speicherbereiche zugreifst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381589</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Feb 2014 09:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 09:15:09 GMT]]></title><description><![CDATA[<p>und wenn der speicherbereich als ganzes gecached wird?</p>
<p>vorschlaege um es schneller zu machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381592</guid><dc:creator><![CDATA[algoman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 09:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 09:26:57 GMT]]></title><description><![CDATA[<p>algoman1 schrieb:</p>
<blockquote>
<p>und wenn der speicherbereich als ganzes gecached wird?</p>
</blockquote>
<p>Das wid er ja wahrscheinlich und genau das ist das Problem. Beide Cores haben den selben Speicherbereich im Cache und müssen den cache immer sofort aktuallisieren sobald der andere da was reinschreibt.</p>
<p>algoman1 schrieb:</p>
<blockquote>
<p>vorschlaege um es schneller zu machen?</p>
</blockquote>
<p>Vectoren immer in möglichst großen, zusammenhängenden Blöcken aufteilen, also z.B. Thread 1 bearbeitet Index 0-999 und Thread 2 1000 bis 1999 usw. oder noch besser gleich die Daten für jeden Thread getrennt halten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381596</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Feb 2014 09:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 09:30:49 GMT]]></title><description><![CDATA[<p>So kann jemand aufschliss geben ueber das sync issue?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381597</guid><dc:creator><![CDATA[Algorithman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 09:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 11:04:13 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Nein musst du nicht. Allerdings macht es dein Programm durch die implizite Synchronisierung (z.B. Cache-Cohärenz) wahrscheinlich sehr langsam, wenn du ständig mit verschiedenen Threads auf benachbarte Speicherbereiche zugreifst.</p>
</blockquote>
<p>Das ist quark. Da wird niemals auf benachbarte Speicherbereiche zugegriffen in dem layout. Die Speicherbereiche von vec[1] und vec[2] können beliebig im RAM liegen(beachte, dass vec[i] eine Referenz auf einen weiteren std::vector zurückgibt!) und mit ziemlicher Sicherheit nicht in der selben cache line.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381611</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 05 Feb 2014 11:04:13 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 11:26:50 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Das ist quark. Da wird niemals auf benachbarte Speicherbereiche zugegriffen in dem layout. Die Speicherbereiche von vec[1] und vec[2] können beliebig im RAM liegen(beachte, dass vec[i] eine Referenz auf einen weiteren std::vector zurückgibt!) und mit ziemlicher Sicherheit nicht in der selben cache line.</p>
</blockquote>
<p>Hast recht, ich hatte mir den genauen Inhalt des Vectors nicht angeschaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381614</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Feb 2014 11:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 17:45:13 GMT]]></title><description><![CDATA[<p>koennen bielibig heisst aber nicht muessen?</p>
<p>ich verwende den lock und start mal das benchmarking...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381687</guid><dc:creator><![CDATA[algoman1]]></dc:creator><pubDate>Wed, 05 Feb 2014 17:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 18:24:59 GMT]]></title><description><![CDATA[<p>Der lock machts zu 100% langsamer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381694</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 05 Feb 2014 18:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to thread min sleep time on Wed, 05 Feb 2014 20:11:55 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Der lock machts zu 100% langsamer.</p>
</blockquote>
<p>Definitiv. Ein Lock macht aus einem parallelen Programmabschnitt einen seriellen. Die Kunst parallele Programme zu schreiben die gut skalieren besteht unter Anderem darin, mit möglicht wenig locks, am besten gar keinem auszukommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2381708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2381708</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Feb 2014 20:11:55 GMT</pubDate></item></channel></rss>