Aufgabe Parallelität
Aufgabe Parallelität (auch bekannt als Funktion Parallelität und Kontrolle der Parallelität) ist eine Form von Parallelisierung von Computercode über mehrere Prozessoren in Parallele Computing Umgebungen. Aufgabenparallelität konzentriert sich auf die Verteilung Aufgaben- Konsument ausgeführt von Prozesse oder Themen- Verschiedene Prozessoren. Im Kontrast zu Datenparallelität Bei der Ausführung derselben Aufgabe in verschiedenen Datenkomponenten wird die Aufgabeparallelität unterschieden, indem viele verschiedene Aufgaben gleichzeitig auf denselben Daten ausgeführt werden.[1] Eine häufige Art von Aufgabenparallelität ist Pipelining, was darin besteht, einen einzelnen Datensatz durch eine Reihe separater Aufgaben zu bewegen, bei denen jede Aufgabe unabhängig von den anderen ausgeführt werden kann.
Beschreibung
In einem Multiprozessor -System wird die Aufgabenparallelität erreicht, wenn jeder Prozessor einen anderen Thread (oder einen Prozess) für dieselben oder unterschiedlichen Daten ausführt. Die Threads können denselben oder anderen Code ausführen. Im allgemeinen Fall kommunizieren verschiedene Ausführungs -Threads miteinander, während sie funktionieren, dies ist jedoch keine Voraussetzung. Die Kommunikation findet normalerweise statt, indem Daten von einem Thread an den nächsten als Teil von a geleitet werden Arbeitsablauf.[2]
Als einfaches Beispiel, wenn ein System Code auf einem 2-Prozessor-System ausführt (CPUs "A" & "B") in einer parallelen Umgebung und wir möchten Aufgaben "A" und "B" erledigen, es ist möglich, CPU zu sagen, "A" Aufgabe "A" und CPU "B", um Aufgabe zu erledigen. " B "gleichzeitig, wodurch das verringert wird Laufzeit der Ausführung. Die Aufgaben können verwendet werden Bedingte Aussagen wie unten beschrieben.
Aufgabenparallelität betont die verteilte (parallelisierte) Art der Verarbeitung (d. H. Threads) im Gegensatz zu den Daten (Daten (Datenparallelität). Die meisten realen Programme fallen irgendwo auf ein Kontinuum zwischen Aufgabenparallelität und Datenparallelität.[3]
Parallelität auf Fadenebene (Tlp) ist der Parallelität einer Anwendung inhärent, die mehrere ausgeführt wird Themen auf einmal. Diese Art von Parallelität fällt größtenteils in Anwendungen für kommerzielle Bewerbungen vor Server wie Datenbanken. Durch das Ausführen vieler Threads gleichzeitig können diese Anwendungen die hohen Mengen an E/A- und Speichersystemlatenz tolerieren, die ihre Workloads entstehen können - während ein Thread verzögert auf einen Speicher- oder Festplattenzugriff ist, können andere Threads nützliche Arbeit leisten.
Die Ausbeutung der Parallelität auf Thread-Ebene hat auch begonnen, mit dem Aufkommen von den Desktop-Markt in den Markt zu kommen Multi-Core Mikroprozessoren. Dies ist aufgetreten, weil es aus verschiedenen Gründen zunehmend unpraktisch geworden ist, die Taktgeschwindigkeit oder die Anweisungen pro Uhr eines einzelnen Kerns zu erhöhen. Wenn dieser Trend fortgesetzt wird, müssen neue Anwendungen so konzipiert werden, dass sie mehrere Threads verwenden, um von der Erhöhung der potenziellen Rechenleistung zu profitieren. Dies steht im Gegensatz zu früheren Mikroprozessor -Innovationen, bei denen der vorhandene Code automatisch durch Ausführen auf einem neueren/schnelleren Computer beschleunigt wurde.
Beispiel
Das Pseudocode Unten zeigt die Aufgabenparallelität:
Programm: ... wenn cpu = "a" dann task machen "a" else wenn cpu = "b" dann task "b" Ende ... Endprogramm
Ziel des Programms ist es, eine Netto -Gesamtaufgabe ("A+B") zu erledigen. Wenn wir den Code wie oben schreiben und in einem 2-Prozessor-System starten, wird die Laufzeitumgebung wie folgt ausgeführt.
- In einem (n SPMD (Einzelprogramm, mehrere Daten) System, beide CPUs wird den Code ausführen.
- In einer parallele Umgebung haben beide Zugriff auf dieselben Daten.
- Die "if" -Klausel unterscheidet zwischen dem CPUs. CPU "A" wird True über die "if" und cpu "b" lesen, wird True auf das "else wenn" lesen und so ihre eigene Aufgabe haben.
- Jetzt führen beide CPUs separate Codeblöcke gleichzeitig aus und führen verschiedene Aufgaben gleichzeitig aus.
Code von CPU "a" ausgeführt:
Programm: ... Aufgabe "a" ... Endprogramm
Code von CPU "B" ausgeführt:
Programm: ... Aufgabe "B" ... Endprogramm
Dieses Konzept kann nun auf eine beliebige Anzahl von Prozessoren verallgemeinert werden.
Sprachunterstützung
Aufgabenparallelität kann in allgemeinen Sprachen entweder durch integrierte Einrichtungen oder Bibliotheken unterstützt werden. Bemerkenswerte Beispiele sind:
- ADA: Aufgaben (eingebaut)
- C ++ (Intel): Fadenbausteine
- C ++ (Intel): Cilk Plus
- C ++ (Open Source/Apache 2.0): Raftlib
- C, C ++, Objective-C, Swift (Apple): Grand Central Dispatch
- D: Aufgaben und Fasern
- Delphi (System.Threading.tparallel)
- Gehen: Goroutinen
- Java: Java Parallelität
- .NETZ: Aufgabe Parallele Bibliothek
Beispiele für feinkörnige aufgabenparallele Sprachen finden Sie im Bereich von Hardware -Beschreibung Sprachen wie Verilog und VHDL.
Siehe auch
Verweise
- ^ Reinders, James (10. September 2007). "Verständnis der Aufgabe und Datenparallelität | ZDNET". ZDNET. Abgerufen 8. Mai 2017.
- ^ Quinn, Michael J. (2007). Parallele Programmierung in C mit MPI und OpenMP (Tata McGraw-Hill ed.). Neu-Delhi: Tata McGraw-Hill Pub. ISBN 978-0070582019.
- ^ Hicks, Michael. "Parallelität Grundlagen" (PDF). Universität von Maryland: Abteilung für Informatik. Abgerufen 8. Mai 2017.