<?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[Parallelisieren von Algorithmen standardkonform?]]></title><description><![CDATA[<p>Der Titel sagt eigentlich alles. Erlaubt der Standard Implementierungen, die mehrere Threads starten und Algorithmen parallel abarbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290836/parallelisieren-von-algorithmen-standardkonform</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 10:01:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290836.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Aug 2011 09:52:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 09:52:26 GMT]]></title><description><![CDATA[<p>Der Titel sagt eigentlich alles. Erlaubt der Standard Implementierungen, die mehrere Threads starten und Algorithmen parallel abarbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101634</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 09:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 10:07:47 GMT]]></title><description><![CDATA[<p>Deine Frage ist mir unklar. Du darfst machen was du willst. Aber es gibt keine Standardsprachmittel zum Parallelisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101642</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 04 Aug 2011 10:07:47 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 10:10:21 GMT]]></title><description><![CDATA[<p>Man könnte bspw. einen Sortieralgorithmus parallelisieren, indem in 2 Teile geteilt wird, die seperat sortiert werden und dann gemerged wird. Ob das nun schneller ist, ist vorerst egal, ich möchte nur wissen ob der Standard das erlaubt. Mit C++11 hab ich auch die entsprechenden Mittel dazu <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/2101643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101643</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 10:10:21 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 10:13:54 GMT]]></title><description><![CDATA[<p>Die Frage ist immernoch unklar. Warum sollte der Standard Dir verbieten, einen Suchalgorithmus wie es Dir beliebt zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101644</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 04 Aug 2011 10:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 10:55:39 GMT]]></title><description><![CDATA[<p>Was meinst du damit, ob der Standard das erlaubt? Wie sollte so etwas verboten sein? Worauf du dich nicht verlassen kannst ist, dass die Standardfunktionen/-container threadsicher sind, insbesondere in der C-Bibliothek sind viele Funktionen die das sogar ausdrücklich nicht sind. Bei der STL kannst du davon ausgehen (aber es ist dir nicht garantiert), dass gängige Implementierungen die Thread-Garantien der SGI Ur-STL erfüllen:</p>
<blockquote>
<p>The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.</p>
</blockquote>
<p>Und es gibt da noch die Klausel 3.6.4,1:</p>
<p>C++ International Standard schrieb:</p>
<blockquote>
<p>Programmers whose nickname is a decimal power times a mathematical constants shall not write multi-threaded applications. This also applies to nicknames that are rounded to an integer. Any such programs are malformed. Otherwise the behaviour is well defined.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2101646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101646</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 04 Aug 2011 10:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 10:58:07 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Erlaubt der Standard Implementierungen, die mehrere Threads starten und Algorithmen parallel abarbeiten?</p>
</blockquote>
<p>Du meinst Implementierungen der Standardbibliothek wahrscheinlich. Ich würde sagen, &quot;es kommt drauf an&quot;. Sobald benutzerdefinierte Typen, die nicht aus der Standardbibliothek kommen, als Sequenz-Element-Typen verwendet werden (zB vector&lt;foo&gt;) oder als Comparator (class my_less;) darf std::sort da nichts parallelisieren, weil nirgendswo geschrieben steht, dass der Zuweisungsoperator der Elementtypen (zB Foo::operator=) oder der comparator reentrant sein müssen. Bei Typen, die aus der Standardbibliothek kommen, weiß man das natürlich. Da kann ich mir vorstellen, dass man einen vector&lt;string&gt; ohne Probleme per std::sort üeber std::less&lt;string&gt; parallel sortieren kann. Den Unterschied merkt ja keiner...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101664</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 04 Aug 2011 10:58:07 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 11:17:46 GMT]]></title><description><![CDATA[<p>Genau das meinte ich krümel <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>
<p>Ich hab hier mal meinen Algorithmus programmiert. Da ich gerade keine thread-API hab, musste ich die Win-API nehmen. Bitte jetzt keine Diskussionen über CreateThread, ich war zu faul um _beginthread zu suchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<pre><code class="language-cpp">template &lt;typename BiIt&gt;
BiIt mid(BiIt first, BiIt last)
{
	while(first != last &amp;&amp; ++first != last)
		--last;

	return first;
}

template &lt;typename T&gt;
unsigned long __stdcall func(void* arg)
{
	static_cast&lt;std::list&lt;T&gt;*&gt;(arg)-&gt;sort();
	return 0;
}

template &lt;typename T, typename A&gt;
void sort_parallel(std::list&lt;T, A&gt;&amp; a)
{
	std::list&lt;T, A&gt; b;
	b.splice(b.begin(), a, a.begin(), mid(a.begin(), a.end()));

	void* t1 = CreateThread(0, 0, func&lt;T&gt;, &amp;a, 0, 0);
	void* t2 = CreateThread(0, 0, func&lt;T&gt;, &amp;b, 0, 0);

	WaitForSingleObject(t1, -1);
	WaitForSingleObject(t2, -1);

	a.merge(b);
}
</code></pre>
<p>Ab etwa 200.000 Elementen ist mein Algorithmus schneller <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/2101668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101668</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 04 Aug 2011 11:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Parallelisieren von Algorithmen standardkonform? on Thu, 04 Aug 2011 11:22:51 GMT]]></title><description><![CDATA[<p>n3242 schrieb:</p>
<blockquote>
<p>17.6.5.9 Data race avoidance<br />
...<br />
8 Unless otherwise specified, C++ standard library functions shall perform all operations solely within the current thread if those operations have effects that are visible (1.10) to users.<br />
9 [ Note: This allows implementations to parallelize operations if there are no visible s. —end note ]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2101674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101674</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 04 Aug 2011 11:22:51 GMT</pubDate></item></channel></rss>