<?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[Multithreading -&amp;gt; Instabilere Programme?]]></title><description><![CDATA[<p>Wird Software jetzt noch fehleranfälliger, wenn jetzt immer mehr versuchen Mulhithreading einzusetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208738/multithreading-gt-instabilere-programme</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 21:36:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208738.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Mar 2008 06:40:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 06:40:03 GMT]]></title><description><![CDATA[<p>Wird Software jetzt noch fehleranfälliger, wenn jetzt immer mehr versuchen Mulhithreading einzusetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478590</guid><dc:creator><![CDATA[sunshineCoder]]></dc:creator><pubDate>Sat, 22 Mar 2008 06:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 09:30:10 GMT]]></title><description><![CDATA[<p>sunshineCoder schrieb:</p>
<blockquote>
<p>Wird Software jetzt noch fehleranfälliger, wenn jetzt immer mehr versuchen Mulhithreading einzusetzen?</p>
</blockquote>
<p>Hi. Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478607</guid><dc:creator><![CDATA[Gregor]]></dc:creator><pubDate>Sat, 22 Mar 2008 09:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 11:39:19 GMT]]></title><description><![CDATA[<p>Gregor schrieb:</p>
<blockquote>
<p>sunshineCoder schrieb:</p>
<blockquote>
<p>Wird Software jetzt noch fehleranfälliger, wenn jetzt immer mehr versuchen Mulhithreading einzusetzen?</p>
</blockquote>
<p>Hi. Ja.</p>
</blockquote>
<p>Hi. Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478661</guid><dc:creator><![CDATA[Hi5555]]></dc:creator><pubDate>Sat, 22 Mar 2008 11:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 11:45:53 GMT]]></title><description><![CDATA[<p>Hi5555 schrieb:</p>
<blockquote>
<p>Gregor schrieb:</p>
<blockquote>
<p>sunshineCoder schrieb:</p>
<blockquote>
<p>Wird Software jetzt noch fehleranfälliger, wenn jetzt immer mehr versuchen Mulhithreading einzusetzen?</p>
</blockquote>
<p>Hi. Ja.</p>
</blockquote>
<p>Hi. Warum?</p>
</blockquote>
<p>Alleine schon deshalb, weil Fehler durch Multithreading schwerer erkannt und debuggt werden können. Da kommt halt eine gewisse nichtdeterministische Komponente in die Programme. Was macht man denn, wenn ein Fehler durch fehlende Synchronisierung oder so nur alle 1000 Programmdurchläufe einmal auftritt. Und man ihn somit praktisch nicht reproduzieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478666</guid><dc:creator><![CDATA[Gregor]]></dc:creator><pubDate>Sat, 22 Mar 2008 11:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 12:19:01 GMT]]></title><description><![CDATA[<p>Hi. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478687</guid><dc:creator><![CDATA[alter Scherzkeks]]></dc:creator><pubDate>Sat, 22 Mar 2008 12:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 13:51:14 GMT]]></title><description><![CDATA[<p>Deswegen arbeitet man ja wie verrueckt an besseren Techniken als diese dummen ewigen locks <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="😉"
    /><br />
ParallelFX von Microsoft sieht da schon mal nicht schlecht aus.</p>
<p>Alternativ kann man natuerlich auch Ansaetze wie zB Erlang verfolgen. Ueber kurz oder lang werden wir aber fuer die meisten Anwendungen von den haendischen locks wegkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478731</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 22 Mar 2008 13:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 14:00:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1197">@Gregor</a><br />
Man kann Multithreading auch dafür nutzen, dass man stabilere Programme erzeugt. Auch werden durch moderne Paradigmen viele Fehler vermieden. Siehe Erlang.</p>
<p>Shared-State-Multithreading (was leider extrem verbreitet ist) ist nur einfach böse!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478732</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 22 Mar 2008 14:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 19:36:07 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Shared-State-Multithreading (was leider extrem verbreitet ist) ist nur einfach böse!</p>
</blockquote>
<p>Was genau war noch die Alternative?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478894</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 22 Mar 2008 19:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 19:39:20 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Shared-State-Multithreading (was leider extrem verbreitet ist) ist nur einfach böse!</p>
</blockquote>
<p>Was genau war noch die Alternative?</p>
</blockquote>
<p>Die Übermittlung von Nachrichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478896</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 22 Mar 2008 19:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 19:47:03 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Die Übermittlung von Nachrichten.</p>
</blockquote>
<p>Deadlocks sind da aber genauso möglich -- auch wenn lock drin steht.</p>
<p>Ich glaube nicht, dass Message-Passing die Lösung aller Probleme ist. Ich denke eher, dass da neue Paradigmen und Idiome hermüssen. Die best-practices der parallelen Programmierung sind leider noch recht wenig verbreitet.</p>
<p>Außerdem vermute ich, dass nur ein sehr geringer Teil der Entwickler in der Lage ist ein Programm zu schreiben, das wirklich skaliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478897</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 22 Mar 2008 19:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 20:22:05 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Die Übermittlung von Nachrichten.</p>
</blockquote>
<p>Deadlocks sind da aber genauso möglich -- auch wenn lock drin steht.</p>
<p>Ich glaube nicht, dass Message-Passing die Lösung aller Probleme ist. Ich denke eher, dass da neue Paradigmen und Idiome hermüssen. Die best-practices der parallelen Programmierung sind leider noch recht wenig verbreitet.</p>
<p>Außerdem vermute ich, dass nur ein sehr geringer Teil der Entwickler in der Lage ist ein Programm zu schreiben, das wirklich skaliert.</p>
</blockquote>
<p>Naja, das wirkliche Problem mit Threads ist der Shared State. Der erzeugt die locking Probleme. Denn die wenigen Resourcen die man wirklich sharen will, kann man recht einfach locken. Die Probleme faengt man sich bei den Sachen ein die man unabsichtlich Shared.</p>
<p>Wenn wir uns zB Erlang ansehen: jede Funktion ist ein Prozess. Man hat per Definition keine Locking Probleme - denn wenn man etwas sharen will, muss man es explizit machen.</p>
<p>Da kommen wir dann zu dem naechsten Problem: Seiteneffekte von Funktionen. Die killen dir die Parallelisierbarkeit. Man kann recht simpel einen grossteil des Codes parallelisieren wenn man auf Seiteneffekte in Funktionen verzichtet - der Trick ist naemlich dem Compiler oder der Plattform das Parallelisieren zu ueberlassen. C++ ist hier leider furchtbar, da jede Funktion Seiteneffekte haben kann. Deshalb ist soetwas einfaches wie std::for_each nicht parallelisierbar.</p>
<p>Da gefaellt mir zB der ParallelFX Ansatz. Man schreibt:</p>
<pre><code class="language-cpp">Parallel.forEach(vector, delegate(T elem) {
  foo(elem);
});
</code></pre>
<p>Wo man aktuell haengt ist eben zu garantieren dass foo keine Seiteneffekte hat die den vector betreffen. Aber es ist ein Ansatz - denn viel Code laesst sich so erstmal parallelisieren ohne dass man gross etwas tun muss. Wichtig ist vorallem dass man nur noch Semantisch sagt &quot;das hier ist zu parallelisieren&quot; - wie genau das dann ablaeuft soll sich die Plattform selber aussuchen (zB auf einem 8 Kern System wuerde man deutlich mehr Threads erstellen als auf einem 2 Kern System).</p>
<p>Der Weisheit letzter Schluss ist es nicht, aber ParallelFX ist ziemlich interessant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478903</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 22 Mar 2008 20:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 20:30:42 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn wir uns zB Erlang ansehen: jede Funktion ist ein Prozess. Man hat per Definition keine Locking Probleme - denn wenn man etwas sharen will, muss man es explizit machen.</p>
</blockquote>
<p>Das heißt es ist unmöglich in Erlang eine Situation A wartet auf Nachricht von B und B wartet auf Nachricht von A zu erzeugen?</p>
<blockquote>
<p>Da kommen wir dann zu dem naechsten Problem: Seiteneffekte von Funktionen. Die killen dir die Parallelisierbarkeit. Man kann recht simpel einen grossteil des Codes parallelisieren wenn man auf Seiteneffekte in Funktionen verzichtet - der Trick ist naemlich dem Compiler oder der Plattform das Parallelisieren zu ueberlassen.</p>
</blockquote>
<p>Ich denke nicht, dass funktionale Programmierung in Zukunft einen wesentlich größteren Anteil haben wird. Die Programme sind zwar leicht parallelisierbar, aber die Denkweise ist trotzdem sehr ungewohnt.</p>
<blockquote>
<p>C++ ist hier leider furchtbar, da jede Funktion Seiteneffekte haben kann. Deshalb ist soetwas einfaches wie std::for_each nicht parallelisierbar.</p>
<p>Da gefaellt mir zB der ParallelFX Ansatz. Man schreibt:</p>
<pre><code class="language-cpp">Parallel.forEach(vector, delegate(T elem) {
  foo(elem);
});
</code></pre>
<p>Wo man aktuell haengt ist eben zu garantieren dass foo keine Seiteneffekte hat die den vector betreffen. Aber es ist ein Ansatz - denn viel Code laesst sich so erstmal parallelisieren ohne dass man gross etwas tun muss. Wichtig ist vorallem dass man nur noch Semantisch sagt &quot;das hier ist zu parallelisieren&quot; - wie genau das dann ablaeuft soll sich die Plattform selber aussuchen (zB auf einem 8 Kern System wuerde man deutlich mehr Threads erstellen als auf einem 2 Kern System).</p>
<p>Der Weisheit letzter Schluss ist es nicht, aber ParallelFX ist ziemlich interessant.</p>
</blockquote>
<p>Da finde ich zum Beispiel MCSTL ganz nett. Das ist ein recht ähnlicher Ansatz, nur dass eben einfach die STL-Algorithmen ersetzt werden. Damit kann man viele C++-Programme durch einfaches neu übersetzen mehrkernfähig machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478908</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 22 Mar 2008 20:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 22:38:17 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Das heißt es ist unmöglich in Erlang eine Situation A wartet auf Nachricht von B und B wartet auf Nachricht von A zu erzeugen?</p>
</blockquote>
<p>Wenn man dumm ist, dann schon. Aber da muss man sich schon ein bisschen anstrengen.</p>
<p>Ein Erlang wartet A auch nicht auf Nachricht _von_ B sondern auf _Nachricht_ B. Diese Nachricht kann absolut jeder schicken.</p>
<blockquote>
<p>Ich denke nicht, dass funktionale Programmierung in Zukunft einen wesentlich größteren Anteil haben wird. Die Programme sind zwar leicht parallelisierbar, aber die Denkweise ist trotzdem sehr ungewohnt.</p>
</blockquote>
<p>Zumindest eine Menge Konzepte fliessen in die Mainstream Sprachen ein. zB Funktionsobjekte sind nicht mehr wegzudenken aus modernen Sprachen.</p>
<blockquote>
<p>Da finde ich zum Beispiel MCSTL ganz nett. Das ist ein recht ähnlicher Ansatz, nur dass eben einfach die STL-Algorithmen ersetzt werden. Damit kann man viele C++-Programme durch einfaches neu übersetzen mehrkernfähig machen.</p>
</blockquote>
<p>Der Ansatz ist ganz ok, aber wie auch hier kann die implementierung nicht garantieren dass keine Seiteneffekte den Code invalid machen.</p>
<p>Und genau das ist der Punkt wo es IMHO noch am meisten zu tun gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478954</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 22 Mar 2008 22:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 23:42:22 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Wenn man dumm ist, dann schon. Aber da muss man sich schon ein bisschen anstrengen.</p>
</blockquote>
<p>hm, genau sowas kann man auch über locks sagen. das konzept ist ja auch ganz einfach. die schwierigkeiten zeigen sich erst bei der umsetzung in komplexeren umgebungen. dass man statt auf A auf Nachricht A wartet hilft da auch nicht viel, schließlich könnte A einfach der einzige sein, der Nachricht A überhaupt verschicken kann... ich glaub nicht so recht an ein kostenlose deadlock-freiheit.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Zumindest eine Menge Konzepte fliessen in die Mainstream Sprachen ein. zB Funktionsobjekte sind nicht mehr wegzudenken aus modernen Sprachen.</p>
</blockquote>
<p>In der Tat. Die sind auch so unheimlich praktisch, weil man nämlich gleich noch zusätzlich zur Funktion einen zustand mitgeben und manipulieren kann. Genau das, was in der funktionalen Welt aber nicht erlaubt ist. <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>Die automatische Parallelisierung ist sicherlich einen Versuch wert. Allerdings denke ich, dass das noch ein weiter Weg wird. Kurzfristig ist sicherlich das Parallelisieren der Grundalgorithmen der vielversprechendere Weg. Und wenn es wirklich um pure Leistung geht, dann müssen auch die Algorithmen von Hand parallelisiert werden. Schließlich ist es oft auch für Menschen nicht offensichtlich wie sich eine Aufgabe parallelisieren lässt. Da können wir es kaum von der Plattform erwarten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478968</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sat, 22 Mar 2008 23:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sat, 22 Mar 2008 23:40:01 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>In der Tat. Die sind auch so unheimlich praktisch, weil man nämlich gleich noch zusätzlich zur Funktion einen zustand mitgeben und manipulieren kann. Genau das, was in der funktionalen Welt aber nicht erlaubt ist. <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>
</blockquote>
<p>Ich meinte eher weniger functors als lambda Ausdruecke, closures, anonyme Funktionen <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/1478973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478973</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 22 Mar 2008 23:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 12:33:54 GMT]]></title><description><![CDATA[<p>Wie sieht denn die automatische Parallelisierung von einem einfachen Algorithmus in Erlang aus? Was passiert, wenn ich ein simples Quicksort implementiere. Wie sieht dazu die automatische Parallelisierung aus? Was passiert da parallel und was nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479090</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 23 Mar 2008 12:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 12:46:32 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Man kann Multithreading auch dafür nutzen, dass man stabilere Programme erzeugt.</p>
</blockquote>
<p>Wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479098</guid><dc:creator><![CDATA[und]]></dc:creator><pubDate>Sun, 23 Mar 2008 12:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:13:24 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Wie sieht denn die automatische Parallelisierung von einem einfachen Algorithmus in Erlang aus? Was passiert, wenn ich ein simples Quicksort implementiere. Wie sieht dazu die automatische Parallelisierung aus? Was passiert da parallel und was nicht?</p>
</blockquote>
<p>Automatisch wird bei Erlang gar nichts parallelisiert.</p>
<p>ShadeOfMine schrieb:</p>
<blockquote>
<p>Wenn wir uns zB Erlang ansehen: jede Funktion ist ein Prozess. Man hat per Definition keine Locking Probleme - denn wenn man etwas sharen will, muss man es explizit machen.</p>
</blockquote>
<p>Nein und nein <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="🙂"
    /> Bei Erlang ist nicht jede Funktion ein Prozess. Locking-Probleme hat man auch.</p>
<p>Ich denke aber, dass es einfacher ist ein Nachrichtenbasiertes System zu testen, da die Kommunikation nur über definierte Schnittstellen funktioniert.</p>
<p>In Erlang werden eben auch gewisse Programmiertechniken benutzt, um Deadlocks zu vermeiden. So lässt man bei einem Fehler (zB undefinierte Zustände/Nachrichten) einfach den Prozess abstürzen und neustarten.</p>
<p>ShadeOfMine schrieb:</p>
<blockquote>
<p>C++ ist hier leider furchtbar, da jede Funktion Seiteneffekte haben kann. Deshalb ist soetwas einfaches wie std::for_each nicht parallelisierbar.</p>
</blockquote>
<p>Wo ist C++ da anders, als zB C#? (Wenn du schon ParallelFX erwähnst).</p>
<p>So etwas wie ParallelFX ist ja auch für C++ möglich: <a href="http://gcc.gnu.org/onlinedocs/libstdc++/parallel_mode.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/libstdc++/parallel_mode.html</a></p>
<p>Jester schrieb:</p>
<blockquote>
<p>Die automatische Parallelisierung ist sicherlich einen Versuch wert. Allerdings denke ich, dass das noch ein weiter Weg wird. Kurzfristig ist sicherlich das Parallelisieren der Grundalgorithmen der vielversprechendere Weg. Und wenn es wirklich um pure Leistung geht, dann müssen auch die Algorithmen von Hand parallelisiert werden. Schließlich ist es oft auch für Menschen nicht offensichtlich wie sich eine Aufgabe parallelisieren lässt. Da können wir es kaum von der Plattform erwarten.</p>
</blockquote>
<p>Ich denke so etwas wie OpenMP scheint auch ganz interessant zu sein. Wo man einfach angeben kann welche Schleifen und Codeteile parallelisiert werden können und der Compiler und die Lib kümmern sich dann darum, dass der Code entsprechend auf Prozesse aufgeteilt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479111</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:18:36 GMT]]></title><description><![CDATA[<p>OpenMP ist sicher ein gute Framework. Allerdings hilft es mir eher bei der Implementierung einer parallelen Applikation als bei deren Entwurf. Ich denke was wir auf Dauer brauchen sind Werkzeuge und Bibliotheken, die beim Entwurf von parallelen Applikationen unterstützen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479114</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:20:43 GMT]]></title><description><![CDATA[<p>und schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Man kann Multithreading auch dafür nutzen, dass man stabilere Programme erzeugt.</p>
</blockquote>
<p>Wie?</p>
</blockquote>
<p>In dem man Multithreading für Redundanz nutzt zB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479117</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:26:11 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>und schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Man kann Multithreading auch dafür nutzen, dass man stabilere Programme erzeugt.</p>
</blockquote>
<p>Wie?</p>
</blockquote>
<p>In dem man Multithreading für Redundanz nutzt zB.</p>
</blockquote>
<p>Da fällt mir jetzt nur sowas wie in Raketen oder Flugzeugen ein, also mehrere Rechner und dann das Ergebnis nehmen das die meisten haben. Aber was bringt sowas bei einem Rechner?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479124</guid><dc:creator><![CDATA[und]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:29:43 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Wie sieht denn die automatische Parallelisierung von einem einfachen Algorithmus in Erlang aus? Was passiert, wenn ich ein simples Quicksort implementiere. Wie sieht dazu die automatische Parallelisierung aus? Was passiert da parallel und was nicht?</p>
</blockquote>
<p>In Erlang rufst du eher selten Funktionen auf - du sendest viel oefter Nachrichten. Ich wuerde in meiner naivitaet einfach folgendes machen: Die rekursiven aufrufe von QuickSort durch Message Passing ersetzen.</p>
<p>Und immer wenn die nur Nachrichten verschickst, kannst du Parallel Arbeiten. Ganz trivial ist das ganze natuerlich nicht. (ich habe jetzt 10 min ueberlegt wie man das am besten implementieren wuerde - aber da ich in Erlang nicht ganz so fit bin, bin ich am Design gescheitert :/)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479125</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 13:48:53 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>In Erlang rufst du eher selten Funktionen auf - du sendest viel oefter Nachrichten. Ich wuerde in meiner naivitaet einfach folgendes machen: Die rekursiven aufrufe von QuickSort durch Message Passing ersetzen.</p>
</blockquote>
<p>Das ist genau das wo ich Probleme bei der automatischen Parallelisierung sehe: Diese naive Parallelisierung von Quicksort skaliert nicht.</p>
<p>Allein das erste partitionieren, das dadurch ja nicht parallelisiert wird, benötigt O(n) Zeit. Das heißt egal wieviele Prozessoren ich Dir spendiere, es wird ab einer gewissen Sättigungsgrenze einfach nicht mehr schneller, der erste Partitionierungsschritt wird zum Flaschenhals.</p>
<p>Ich denke dieses Problem lässt sich am besten durch geeignete Bibliotheken umgehen, die die Algorithmen bereit stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479135</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 23 Mar 2008 13:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 14:14:40 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Ich denke dieses Problem lässt sich am besten durch geeignete Bibliotheken umgehen, die die Algorithmen bereit stellen.</p>
</blockquote>
<p>PLINQ <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>
<pre><code class="language-csharp">array.AsParallel().Orderby(x =&gt; x)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1479138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479138</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 23 Mar 2008 14:14:40 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 14:29:04 GMT]]></title><description><![CDATA[<p>Klingt nach einem guten Ansatz. Zumindest die wichtigsten Grundoperationen sollten dadurch abgedeckt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479145</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 23 Mar 2008 14:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading -&amp;gt; Instabilere Programme? on Sun, 23 Mar 2008 16:51:13 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Klingt nach einem guten Ansatz. Zumindest die wichtigsten Grundoperationen sollten dadurch abgedeckt werden können.</p>
</blockquote>
<p>Das steckt ebenfalls noch in den Kinderschuhen und mit .NET 3.5 kam die erste Version raus. LINQ sagt dir uU etwas - query syntax auf Datenstrukturen.</p>
<p>Danach ging man einen Schritt weiter und hat PLINQ entwickelt (wobei PLINQ seit 2005 in Entwicklung ist) um eben solche Sachen parallelisieren zu koennen.</p>
<p>Was aber wieder fehlt ist eine Garantie dass der Code wenn er parallel ablaeuft nicht durch Seiteneffekte kaputt gemacht wird. Weiters glaube ich, dass (P)LINQ keine Inplace Operationen machen kann. Sprich man hat enormen Speicherverbrauch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Ideal ist es also noch lange nicht - aber die unterliegende Technik ist ziemlich interessant. PLINQ basiert auf der TPL.</p>
<p>TPL (Task Parallel Library) ist die Library um das Subsystem in .NET dass die komplette Parallelisierung uebernimmt. Ein Parallel.forEach oder ein PLINQ Query machen nichts anderes als eine Menge kleiner Tasks zu erstellen - die Arbeit also in kleine Stueckchen zu schneiden. Diese Tasks werden dann je nach Plattform parallelisiert.</p>
<p>Worum es nun geht ist, den Programmierern die Tools zu geben um solche Tasks moeglichst automatisiert zu erstellen. PLINQ ist da recht nett - man macht Queries auf Datenstrukturen und diese koennen dann Parallel ablaufen. Aber wie dein QuickSort Beispiel ja zeigt - so einfach ist das nicht immer. Denn man wird immer Algorithmen haben die man selber Parallelisieren muss und das suckt.</p>
<p>Aber die Ansaetze sind ja schonmal da - wenn wir zB von einem Binary Tree ausgehen und wir wollen alle Elemente aufsummieren:</p>
<pre><code class="language-csharp">int sum() {
  return left.sum()+right.sum();
}
</code></pre>
<p>dann bietet uns ParallelFX folgendes nettes:</p>
<pre><code class="language-csharp">int sum() {
  int r,l;
  Parallel.Do(
    delegate { l=left.sum(); }
    delegate { r=right.sum(); }
  );
  return l+r;
}
</code></pre>
<p>Wobei man hier natuerlich aufpassen muss, dass man nicht zuviel Zeit mit dem Schedulen verbringt und man Sequentiell nicht schneller waere - da Threads ja doch Overhead bringen.</p>
<p>Ich bin jedenfalls gespannt was es noch so alles geben wird - denn momentan gibt es verschiedene interessante Ansaetze - aber das wichtigste fehlt noch: die Garantie dass Seiteneffekte den Code nicht zerstoeren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479155</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 23 Mar 2008 16:51:13 GMT</pubDate></item></channel></rss>