12 Stimmen

Automatische Parallelisierung

Was ist Ihre Meinung zu einem Projekt, das versucht, einen Code zu nehmen und ihn automatisch in Threads aufzuteilen (vielleicht zur Kompilierzeit, wahrscheinlich zur Laufzeit).

Werfen Sie einen Blick auf den unten stehenden Code:

for(int i=0;i<100;i++)
   sum1 += rand(100)
for(int j=0;j<100;j++)
   sum2 += rand(100)/2

Diese Art von Code kann automatisch auf 2 verschiedene Threads aufgeteilt werden, die parallel laufen. Glauben Sie, dass das überhaupt möglich ist? Ich habe das Gefühl, dass es theoretisch unmöglich ist (es erinnert mich an das Halteproblem), aber ich kann diesen Gedanken nicht begründen.

Halten Sie es für ein nützliches Projekt? Gibt es etwas Vergleichbares?

0voto

mobileappDev Punkte 3

Ich habe gelernt, dass ab JDK 1.8 (Java 8), können Sie nutzen / Hebelwirkung mehrere Kerne Ihrer CPU im Falle der Nutzung von Streams durch die Verwendung von parallelStream().

Es wurde jedoch untersucht, dass es vor der endgültigen Entscheidung für parallelStream() immer besser ist, sequentiell() mit parallel zu vergleichen, indem man die Leistung vergleicht, und dann zu entscheiden, was ideal wäre.

Der Grund dafür ist, dass es Szenarien geben kann, in denen der parallele Stream deutlich schlechter abschneidet als der sequenzielle, wenn die Operation ein automatisches Un-/Boxing erfordert. Für diese Szenarien ist es ratsam, die Java 8 Primitive Streams wie IntStream, LongStream, DoubleStream zu verwenden.

Referenz: Modern Java in Action: Manning Publications 2019

-1voto

Deathlymad Punkte 31

Die Programmiersprache ist Java und Java ist eine virtuelle Maschine. Sollte man also nicht in der Lage sein, den Code zur Laufzeit auf verschiedenen Threads auszuführen, die der VM gehören. Da der gesamte Speicher usw. auf diese Weise gehandhabt wird, sollte es zu keiner Korruption kommen. Man könnte den Code als Stapel von Anweisungen sehen, die Ausführungszeit abschätzen und ihn dann auf ein Array von Threads verteilen, die jeweils einen Ausführungsstapel mit ungefähr der gleichen Zeit haben. Es könnte gefährlich sein, obwohl einige Grafiken wie OpenGL sofortigen Modus braucht, um Ordnung zu halten und meist sollte nicht Threads überhaupt sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X