Mit der kontinuierlichen Verbesserung der Leistung der Computerhardware ist Parallelrechnen für Mehrkernprozessoren zu einem wichtigen Thema im Bereich der Programmierung geworden. Als effiziente Programmiersprache verfügt C++ selbstverständlich über verschiedene Methoden, um paralleles Rechnen zu implementieren. In diesem Artikel werden mehrere häufig verwendete parallele C++-Computing-Methoden vorgestellt und deren Code-Implementierung bzw. Verwendungsszenarien gezeigt.
OpenMP ist eine auf gemeinsam genutztem Speicher basierende Parallel-Computing-API, mit der C++-Programmen problemlos Parallelisierungscode hinzugefügt werden kann. Es verwendet die Direktive #pragma, um Codesegmente zu identifizieren, die parallelisiert werden müssen, und bietet eine Reihe von Bibliotheksfunktionen zur Implementierung paralleler Berechnungen. Hier ist ein einfaches OpenMP-Beispielprogramm:
#include <iostream> #include <omp.h> using namespace std; int main() { int data[1000], i, sum = 0; for (i=0;i<1000;i++){ data[i] = i+1; } #pragma omp parallel for reduction(+:sum) for (i=0;i<1000;i++){ sum += data[i]; } cout << "Sum: " << sum << endl; return 0; }
In diesem Beispiel wird die #pragma omp-Direktive verwendet, um die for-Schleife zu parallelisieren. Verwenden Sie gleichzeitig die Anweisung „reduction(+:sum)“, um OpenMP anzuweisen, die Summenvariable hinzuzufügen. Wenn dieses Programm auf einem Computer mit 4 Kernen ausgeführt wird, können Sie feststellen, dass die Laufzeit drei- bis viermal schneller ist als bei der Single-Threaded-Version.
MPI ist eine Nachrichtenübermittlungsschnittstelle, die verteiltes paralleles Rechnen zwischen mehreren Computern ermöglicht. Die Grundeinheit eines MPI-Programms ist ein Prozess, und jeder Prozess wird in einem unabhängigen Speicherbereich ausgeführt. MPI-Programme können auf einem einzelnen Computer oder auf mehreren Computern ausgeführt werden. Das Folgende ist ein grundlegendes MPI-Beispielprogramm:
#include <iostream> #include <mpi.h> using namespace std; int main(int argc, char** argv) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); cout << "Hello world from rank " << rank << " of " << size << endl; MPI_Finalize(); return 0; }
In diesem Beispiel wird die MPI-Umgebung über die Funktion MPI_Init() initialisiert und die Funktionen MPI_Comm_rank() und MPI_Comm_size() werden verwendet, um die Prozessnummer eines einzelnen Prozesses zu erhalten die Gesamtzahl der Prozesse. Hier gebe ich einfach einen Satz aus. Durch Ausführen des Befehls mpirun -np 4 können Sie dieses Programm auf 4 Prozessen ausführen.
Intel Threading Building Blocks (TBB) ist eine C++-Bibliothek, die Tools zur Vereinfachung des parallelen Rechnens bereitstellt. Das Hauptkonzept von TBB sind Aufgaben, die einige Arbeiten durch Zusammenarbeit zwischen Knoten und Aufgaben parallelisieren. Das Folgende ist ein TBB-Beispielprogramm:
#include <iostream> #include <tbb/tbb.h> using namespace std; class Sum { public: Sum() : sum(0) {} Sum(Sum& s, tbb::split) : sum(0) {} void operator()(const tbb::blocked_range<int>& r) { for (int i=r.begin();i!=r.end();i++){ sum += i; } } void join(Sum&s) { sum += s.sum; } int getSum() const { return sum; } private: int sum; }; int main() { Sum s; tbb::parallel_reduce(tbb::blocked_range<int>(0, 1000), s); cout << "Sum: " << s.getSum() << endl; return 0; }
In diesem Beispiel wird eine Sum-Klasse definiert, um paralleles Rechnen zu implementieren, tbb::blocked_range Diese drei Methoden haben jeweils ihre eigenen Vor- und Nachteile. Welche Methode man wählt, hängt hauptsächlich vom jeweiligen Anwendungsszenario ab. OpenMP eignet sich für die Verwendung auf einem einzelnen Computer mit gemeinsam genutztem Speicher und kann problemlos Parallelisierungscode zu vorhandenen C++-Programmen hinzufügen, um die Programmausführung zu beschleunigen. MPI eignet sich für den Einsatz in verteilten Computerclustern und kann durch die Weitergabe von Nachrichten zwischen mehreren Computern eine Parallelisierung erreichen. TBB ist eine plattformübergreifende C++-Bibliothek, die einige effiziente Tools zur Vereinfachung des parallelen Rechnens bereitstellt. Zusammenfassend lässt sich sagen, dass C++ für Anwendungen, die paralleles Rechnen erfordern, eine Vielzahl von Optionen bietet, um eine effiziente Parallelisierung zu erreichen. Entwickler können eine oder mehrere Methoden auswählen, um ihre Aufgaben basierend auf ihren eigenen Anforderungen und Anwendungsszenarien zu erfüllen und die Leistung des Programms auf ein neues Niveau zu verbessern.
Das obige ist der detaillierte Inhalt vonWie führt man eine parallele Berechnung von C++-Code durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!