<?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[OpenMP Schleife langsamer als serielle Schleife?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich wollte ausprobieren einige Schleifen in meinem Programm zu paralellisieren und bin dabei auf OpenMP gestoßen.</p>
<p>Ich habe dies wie folgt eingebunden:</p>
<pre><code class="language-cpp">#pragma omp parallel for
for (int k=0;k&lt;nodes.size();k++)
	{	
		vector&lt;double&gt; axe(3);
		axe=middlepaxis(&amp;ax,&amp;elements,&amp;nodes,&amp;nodes[k],1);
		output&lt;&lt;axe[0]&lt;&lt;&quot; &quot;&lt;&lt;axe[1]&lt;&lt;&quot; &quot;&lt;&lt;axe[2]&lt;&lt;endl;

	}
</code></pre>
<p>Header usw. sind alle eingebunden und omp im Compiler ist auch aktiviert. Es funktioniert also eig. alles. Jedoch benötigt diese Schleife deutlich länger als die Schleife ohne die Parallelisierung. Mach ich was falsch?</p>
<p>Freu mich auf eure Antworten.</p>
<p>LG<br />
Gebb <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/topic/300917/openmp-schleife-langsamer-als-serielle-schleife</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 11:24:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300917.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Mar 2012 09:51:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 09:51:45 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich wollte ausprobieren einige Schleifen in meinem Programm zu paralellisieren und bin dabei auf OpenMP gestoßen.</p>
<p>Ich habe dies wie folgt eingebunden:</p>
<pre><code class="language-cpp">#pragma omp parallel for
for (int k=0;k&lt;nodes.size();k++)
	{	
		vector&lt;double&gt; axe(3);
		axe=middlepaxis(&amp;ax,&amp;elements,&amp;nodes,&amp;nodes[k],1);
		output&lt;&lt;axe[0]&lt;&lt;&quot; &quot;&lt;&lt;axe[1]&lt;&lt;&quot; &quot;&lt;&lt;axe[2]&lt;&lt;endl;

	}
</code></pre>
<p>Header usw. sind alle eingebunden und omp im Compiler ist auch aktiviert. Es funktioniert also eig. alles. Jedoch benötigt diese Schleife deutlich länger als die Schleife ohne die Parallelisierung. Mach ich was falsch?</p>
<p>Freu mich auf eure Antworten.</p>
<p>LG<br />
Gebb <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/2191458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191458</guid><dc:creator><![CDATA[Gebb]]></dc:creator><pubDate>Wed, 14 Mar 2012 09:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 09:58:01 GMT]]></title><description><![CDATA[<p>Wie groß ist nodes.size()? Das sollte mindestens ein paar Tausend, besser mehr, sein.</p>
<p>Außerdem sollte eine Schleife mit Ausgabeoperationen (erst recht wie hier mit einem anschließenden flush) sowieso durch das Ausgabegerät begrenzt sein, insofern wirst du nie etwas gewinnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191460</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Mar 2012 09:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 10:07:22 GMT]]></title><description><![CDATA[<p>sorry falsch gelesen..</p>
<p>Es hängt von der Anzahl der Durchläufe..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191466</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Wed, 14 Mar 2012 10:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 10:09:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wie groß ist nodes.size()? Das sollte mindestens ein paar Tausend, besser mehr, sein.</p>
</blockquote>
<p>In diesem Fall sind es knapp 200. Es können aber durchaus über mehrere Tausend werden, ist nur ein Testfall der Software.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Außerdem sollte eine Schleife mit Ausgabeoperationen (erst recht wie hier mit einem anschließenden flush) sowieso durch das Ausgabegerät begrenzt sein, insofern wirst du nie etwas gewinnen.</p>
</blockquote>
<p>Das versteh ich jetzt nicht. (Sorry bin noch nicht sooo fortgeschritten ;))<br />
Was meinst du mit Ausgabegerät begrenzt?<br />
Wie könnte ich es ändern das es was bringt, wenn dies zu diesem Zweck überhaupt geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191475</guid><dc:creator><![CDATA[Gebb]]></dc:creator><pubDate>Wed, 14 Mar 2012 10:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 10:28:34 GMT]]></title><description><![CDATA[<p>Gebb schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wie groß ist nodes.size()? Das sollte mindestens ein paar Tausend, besser mehr, sein.</p>
</blockquote>
<p>In diesem Fall sind es knapp 200. Es können aber durchaus über mehrere Tausend werden, ist nur ein Testfall der Software.</p>
</blockquote>
<p>Wenn nicht jeder Schleifendurchgang sehr lange dauern sollte, dann ist der Aufwand der Parallelisierung größer als der Gewinn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> .</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Außerdem sollte eine Schleife mit Ausgabeoperationen (erst recht wie hier mit einem anschließenden flush) sowieso durch das Ausgabegerät begrenzt sein, insofern wirst du nie etwas gewinnen.</p>
</blockquote>
<p>Das versteh ich jetzt nicht. (Sorry bin noch nicht sooo fortgeschritten ;))<br />
Was meinst du mit Ausgabegerät begrenzt?<br />
Wie könnte ich es ändern das es was bringt, wenn dies zu diesem Zweck überhaupt geht.</p>
</blockquote>
<p>Wenn ein Koch 10 Kartoffeln in 25 Minuten kochen kann, wie lange brauchen dann 10 Köche für die gleiche Aufgabe?</p>
<p>Wenn output irgendein periphäres Ausgabegerät ist (Bildschirm, Festplattendatei, o.Ä.), dann ist das Gerät der bremsende Faktor der Schleife, weil es einfach nicht schneller ausgeben kann, egal wieviel parallel kommt. Außerdem wird dann natürlich die Reihenfolge total durcheinander sein und insbesondere muss der Ausgabestream auch noch threadsicher sein, was hier sicherlich nicht gegeben ist, da du nicht dran gedacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191484</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Mar 2012 10:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 10:43:49 GMT]]></title><description><![CDATA[<p>Danke, jetzt hab ichs <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/2191492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191492</guid><dc:creator><![CDATA[Gebb]]></dc:creator><pubDate>Wed, 14 Mar 2012 10:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 11:08:51 GMT]]></title><description><![CDATA[<blockquote>
<p>insbesondere muss der Ausgabestream auch noch threadsicher sein, was hier sicherlich nicht gegeben ist, da du nicht dran gedacht hast.</p>
</blockquote>
<p>Eine Frage habe ich noch. Wie würde ich das Threadsicher machen? Ich habe da gerade ein bisschen gelesen und mich informiert, aber so richtig steig ich da noch nicht dahinter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191507</guid><dc:creator><![CDATA[Gebb]]></dc:creator><pubDate>Wed, 14 Mar 2012 11:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 11:27:07 GMT]]></title><description><![CDATA[<p>In deinem Fall gar nicht.. Die „omp parallel for“ teilt deinen vector (?) in gleich große Stücke quasi auf und bearbeitet die gleichzeitig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191513</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Wed, 14 Mar 2012 11:27:07 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 11:58:39 GMT]]></title><description><![CDATA[<p>Gebb schrieb:</p>
<blockquote>
<blockquote>
<p>insbesondere muss der Ausgabestream auch noch threadsicher sein, was hier sicherlich nicht gegeben ist, da du nicht dran gedacht hast.</p>
</blockquote>
<p>Eine Frage habe ich noch. Wie würde ich das Threadsicher machen? Ich habe da gerade ein bisschen gelesen und mich informiert, aber so richtig steig ich da noch nicht dahinter.</p>
</blockquote>
<p>Durch einen Mutex.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191530</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Mar 2012 11:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 12:09:16 GMT]]></title><description><![CDATA[<p>dadurch kriegt er die Ausgabe aber immer noch nicht in die richtige Reihenfolge. Er kann höchstens erst die alles vorbereiten ( vorrechnen ) und dann nacheinander ausgeben. In dem Fall, wenn ich es richtig lese braucht er nix zu synchronisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191539</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to OpenMP Schleife langsamer als serielle Schleife? on Wed, 14 Mar 2012 13:32:59 GMT]]></title><description><![CDATA[<p>Travor schrieb:</p>
<blockquote>
<p>dadurch kriegt er die Ausgabe aber immer noch nicht in die richtige Reihenfolge. Er kann höchstens erst die alles vorbereiten ( vorrechnen ) und dann nacheinander ausgeben. In dem Fall, wenn ich es richtig lese braucht er nix zu synchronisieren.</p>
</blockquote>
<p>Nein, die Reihenfolge ist natürlich hin. Das lässt sich auch Prinzipbedingt gar nicht parallelisieren, falls es auf die Reihenfolge ankommt. Aber durch den Mutex verhindert er, dass komische Sachen mit dem Stream geschehen, wenn gleichzeitig aus mehreren Threads geschrieben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191576</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Mar 2012 13:32:59 GMT</pubDate></item></channel></rss>