45 Stimmen

Ist parallele Programmierung == Multithread-Programmierung?

Ist parallele Programmierung == Multithread-Programmierung?

33voto

Lucas Lindström Punkte 1778

Multithreading-Programmierung ist parallel, aber parallele Programmierung ist nicht unbedingt multithreading.

Es sei denn, das Multithreading findet auf einem einzigen Kern statt; in diesem Fall handelt es sich nur um gleichzeitiges Arbeiten.

28voto

Jon Skeet Punkte 1325502

Nicht unbedingt . Sie können Aufträge auf mehrere Prozesse und sogar mehrere Maschinen verteilen - ich würde das nicht als "Multi-Thread"-Programmierung bezeichnen, da jeder Prozess nur einen einzigen Thread verwenden kann, aber es ist sicherlich parallele Programmierung. Zugegebenermaßen könnte man dann argumentieren, dass es bei mehreren Prozessen mehrere Threads im System als Ganzes gibt...

Letztlich sind Definitionen wie diese nur in einem bestimmten Kontext nützlich. Welchen Unterschied macht es in Ihrem speziellen Fall? Oder ist das nur aus Interesse?

26voto

Stefano Borini Punkte 132313

Nein. Multithread-Programmierung bedeutet, dass Sie einen einzigen Prozess haben, und dieser Prozess erzeugt eine Reihe von Threads. Alle Threads laufen zur gleichen Zeit, aber sie befinden sich alle im gleichen Prozessraum: Sie können auf den gleichen Speicher zugreifen, haben die gleichen offenen Dateideskriptoren und so weiter.

Parallele Programmierung ist etwas "allgemeiner" definiert. In MPI führen Sie parallele Programmierung durch, indem Sie denselben Prozess mehrmals ausführen, mit dem Unterschied, dass jeder Prozess einen anderen "Bezeichner" erhält, so dass Sie, wenn Sie wollen, jeden Prozess unterscheiden können, was aber nicht erforderlich ist. Außerdem sind diese Prozesse unabhängig voneinander und müssen über Pipes oder Netzwerk-/Unix-Sockets kommunizieren. MPI-Bibliotheken stellen spezielle Funktionen zur Verfügung, um Daten synchron oder asynchron zwischen den Knoten hin- und herzuschieben.

Im Gegensatz dazu erreicht OpenMP die Parallelisierung durch Multithreading und Shared-Memory. Sie geben dem Compiler spezielle Anweisungen, und dieser führt die parallele Ausführung automatisch für Sie durch.

Der Vorteil von OpenMP ist, dass es sehr transparent ist. Wenn Sie eine Schleife parallelisieren wollen, fügen Sie einfach ein paar Direktiven hinzu, und der Compiler zerlegt die Schleife in Teile und weist jeden Teil der Schleife einem anderen Prozessor zu. Leider benötigen Sie dafür eine Shared-Memory-Architektur. Cluster mit einer knotenbasierten Architektur können OpenMP auf Clusterebene nicht verwenden. Mit MPI können Sie auf einer knotenbasierten Architektur arbeiten, aber Sie müssen den Preis einer komplexeren und nicht transparenten Verwendung zahlen.

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