Ist parallele Programmierung == Multithread-Programmierung?
Antworten
Zu viele Anzeigen?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?
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.