Parallele Computing
Parallele Computing ist eine Art von Art von Berechnung in denen viele Berechnungen oder Prozesse werden gleichzeitig durchgeführt.[1] Große Probleme können oft in kleinere unterteilt werden, die dann gleichzeitig gelöst werden können. Es gibt verschiedene Formen des parallelen Computers: Bit-Level, Befehlsebene, Daten, und Aufgabe Parallelität. Parallelität ist seit langem in High Performance Computing, hat aber aufgrund der physischen Einschränkungen, die verhindern, ein breiteres Interesse gewonnen Frequenzskalierung.[2] Da der Stromverbrauch (und folglich Wärmeerzeugung) durch Computer in den letzten Jahren zu einem Problem geworden ist,[3] Parallele Computing ist das dominierende Paradigma in geworden Rechnerarchitekturhauptsächlich in Form von Multi-Core-Prozessoren.[4]
Das parallele Computer ist eng mit dem zusammenhängen Gleichzeitiges Computer- Sie werden häufig zusammen verwendet und oft miteinander verbunden, obwohl die beiden unterschiedlich sind: Es ist möglich, eine Parallelität ohne Parallelität und Parallelität ohne Parallelität zu haben (z. B. Multitasking durch Zeitteilung auf einer Einzelkern-CPU).[5][6] Im parallelen Computer wird eine rechnerische Aufgabe in der Regel in mehrere, oft viele, sehr ähnliche Unterbereitungen unterteilt, die unabhängig verarbeitet werden können und deren Ergebnisse nach Abschluss kombiniert werden. Im Gegensatz dazu befassen sich bei gleichzeitiger Computing die verschiedenen Prozesse häufig nicht mit verwandten Aufgaben. Wenn sie es tun, wie es typisch ist in verteiltes ComputerDie getrennten Aufgaben können eine unterschiedliche Natur haben und oft etwas erfordern Interprozesskommunikation während der Ausführung.
Parallele Computer können ungefähr nach dem Niveau klassifiziert werden, auf dem die Hardware Parallelität unterstützt, mit Multi-Core und Mehrprozessor Computer mit mehreren Verarbeitungselemente innerhalb einer einzigen Maschine während Cluster, MPPS, und Gitter Verwenden Sie mehrere Computer, um an derselben Aufgabe zu arbeiten. Spezialisierte parallele Computerarchitekturen werden manchmal neben herkömmlichen Prozessoren zur Beschleunigung bestimmter Aufgaben verwendet.
In einigen Fällen ist Parallelität für den Programmierer transparent Parallelalgorithmen, insbesondere diejenigen, die Parallelität verwenden, sind schwieriger zu schreiben als sequentiell Einsen,[7] Weil die Parallelität mehrere neue Potenzialklassen einführt Software -Fehler, von welchem Rennbedingungen sind die häufigsten. Kommunikation und Synchronisation Zwischen den verschiedenen Unteraufnehmern befinden sich in der Regel einige der größten Hindernisse für eine optimale parallele Programmleistung.
Ein theoretischer obere Grenze auf der beschleunigen eines einzelnen Programms als Ergebnis einer Parallelisierung ist gegeben durch Amdahls Gesetz.
Hintergrund
Traditionell, Computer Software wurde geschrieben für Serienberechnung. Ein Problem zu lösen, eine Algorithmus wird als serielle Anweisungsstrom konstruiert und implementiert. Diese Anweisungen werden auf a ausgeführt Zentrale Verarbeitungseinheit auf einem Computer. Nach dem anderen kann nur eine Anweisung ausgeführt werden - nach Abschluss der Anweisung wird die nächste ausgeführt.[8]
Paralleles Computing hingegen verwendet gleichzeitig mehrere Verarbeitungselemente, um ein Problem zu lösen. Dies wird erreicht, indem das Problem in unabhängige Teile unterteilt wird, damit jedes Verarbeitungselement seinen Teil des Algorithmus gleichzeitig mit den anderen ausführen kann. Die Verarbeitungselemente können vielfältig sein und umfassen Ressourcen wie ein einzelner Computer mit mehreren Prozessoren, mehreren vernetzten Computern, spezialisierte Hardware oder einer beliebigen Kombination der oben genannten.[8] Historisch gesehen wurde parallele Computing für wissenschaftliches Computer und die Simulation wissenschaftlicher Probleme verwendet, insbesondere in der Natur und zum Natürlichen und Ingenieurwissenschaften, wie zum Beispiel Meteorologie. Dies führte zum Design paralleler Hardware und Software sowie zum Entwurf High Performance Computing.[9]
Frequenzskalierung war der dominierende Grund für Verbesserungen in Computerleistung von Mitte der 1980er bis 2004. Die Laufzeit eines Programms entspricht der Anzahl der Anweisungen, die mit der durchschnittlichen Zeit pro Anweisung multipliziert werden. Wenn Sie alles andere konstant beibehalten und die Taktfrequenz erhöht, verringert sich die durchschnittliche Zeit, die für die Ausführung einer Anweisung benötigt wird. Eine Häufigkeitserhöhung verringert somit die Laufzeit für alle berechnen Programme.[10] Der Stromverbrauch jedoch P durch einen Chip wird durch die Gleichung gegeben P = C × V 2 × F, wo C ist der Kapazität pro Taktzyklus umgeschaltet werden (proportional zur Anzahl der Transistoren, deren Eingaben sich ändern), V ist Stromspannung, und F ist die Prozessorfrequenz (Zyklen pro Sekunde).[11] Erhöhung der Frequenz erhöht die in einem Prozessor verwendete Leistung. Erhöhung des Verbrauchs des Prozessors führte letztendlich zu Intel's 8. Mai 2004 Stornierung seiner Tejas und Jayhawk Prozessoren, die im Allgemeinen als Ende der Frequenzskalierung als dominantes Paradigma der Computerarchitektur zitiert werden.[12]
Um mit dem Problem des Stromverbrauchs umzugehen und den Major zu überhitzen Zentrale Verarbeitungseinheit (CPU oder Prozessor) Hersteller haben begonnen, leistungsstärkere Prozessoren mit mehreren Kernen zu produzieren. Der Kern ist die Computereinheit des Prozessors und in Multi-Core-Prozessoren ist jeder Kern unabhängig und kann gleichzeitig auf denselben Speicher zugreifen. Multi-Core-Prozessoren Parallele Computing zugebracht haben Desktop-Computer. Die Parallelisierung serieller Programme ist daher zu einer Mainstream -Programmieraufgabe geworden. 2012 wurde Quad-Core-Prozessoren Standard für Desktop-Computer, während Server haben 10 und 12 Kernprozessoren. Aus Moores Gesetz Es kann vorausgesagt werden, dass die Anzahl der Kerne pro Prozessor alle 18 bis 24 Monate verdoppelt wird. Dies könnte bedeuten, dass nach 2020 ein typischer Prozessor Dutzende oder Hunderte von Kernen hat.[13]
Ein Betriebssystem Kann sicherstellen, dass verschiedene Aufgaben und Benutzerprogramme parallel auf den verfügbaren Kernen ausgeführt werden. Damit ein serielles Softwareprogramm die Multi-Core-Architektur in vollem Umfang nutzen kann, muss der Programmierer den Code umstrukturieren und parallelisieren. Eine Beschleunigung der Laufzeit für Anwendungssoftware wird nicht mehr durch Frequenzskalierung erreicht. Stattdessen müssen Programmierer ihren Softwarecode parallelisieren, um die zunehmende Rechenleistung von Multicore-Architekturen zu nutzen.[14]
Amdahls Gesetz und Gustafsons Gesetz


Optimal die beschleunigen Aus der Parallelisierung wäre es linear, dass die Anzahl der Verarbeitungselemente die Laufzeit halbieren sollte und sie ein zweites Mal verdoppelt, dass die Laufzeit erneut halbieren sollte. Nur sehr wenige parallele Algorithmen erreichen jedoch eine optimale Beschleunigung. Die meisten von ihnen haben eine nahezu lineare Beschleunigung für eine kleine Anzahl von Verarbeitungselementen, die für eine große Anzahl von Verarbeitungselementen in einen konstanten Wert flacht.
Die mögliche Beschleunigung eines Algorithmus auf einer parallelen Computerplattform ist gegeben Amdahls Gesetz[15]
wo
- SLatenz ist das Potenzial beschleunigen in Latenz der Ausführung der gesamten Aufgabe;
- s ist die Beschleunigung in der Latenz der Ausführung des parallelisierbaren Teils der Aufgabe;
- p ist der Prozentsatz der Ausführungszeit der gesamten Aufgabe in Bezug auf den parallelisierbaren Teil der Aufgabe Vor der Parallelisierung.
Seit SLatenz < 1/(1 - p)Es zeigt, dass ein kleiner Teil des Programms, der nicht parallelisiert werden kann, die von der Parallelisierung erhältliche Gesamt beschleunigte. Ein Programm, das ein großes mathematisches oder technisches Problem löst, besteht in der Regel aus mehreren parallelisierbaren Teilen und mehreren nicht parallelisierbaren (seriellen) Teilen. Wenn der nicht parallelisierbare Teil eines Programms 10% der Laufzeit ausmacht (p = 0,9) können wir nicht mehr als eine 10 -fache Beschleunigung erhalten, unabhängig davon, wie viele Prozessoren hinzugefügt werden. Dies führt zu einer Obergrenze für die Nützlichkeit, mehr parallele Ausführungseinheiten hinzuzufügen. "Wenn eine Aufgabe aufgrund sequentieller Einschränkungen nicht partitioniert werden kann, hat die Anwendung von mehr Aufwand keinen Einfluss auf den Zeitplan. Die Lagerung eines Kindes dauert neun Monate, unabhängig davon, wie viele Frauen zugewiesen sind."[16]

Amdahls Gesetz gilt nur für Fälle, in denen die Problemgröße festgelegt ist. In der Praxis werden in der Praxis, wenn mehr Computerressourcen verfügbar werden, tendenziell für größere Probleme (größere Datensätze) verwendet, und die Zeit, die im parallelisierbaren Teil verbracht wird, wird häufig viel schneller als die von Natur aus serielle Arbeit.[17] In diesem Fall, Gustafsons Gesetz Gibt eine weniger pessimistische und realistischere Bewertung der parallele Leistung:[18]
Sowohl das Gesetz von Amdahl als auch das Gustafson -Gesetz gehen davon aus, dass die Laufzeit des seriellen Teils des Programms unabhängig von der Anzahl der Prozessoren ist. Amdahls Gesetz geht davon aus unabhängig von der Anzahl der Prozessorenwährend das Gustafson -Gesetz davon ausgeht, dass die Gesamtbetragsmenge parallel erledigt werden muss variiert linear mit der Anzahl der Prozessoren.
Abhängigkeiten
Verständnis Datenabhängigkeiten ist von grundlegender Bedeutung für die Umsetzung Parallelalgorithmen. Kein Programm kann schneller laufen als die längste Kette abhängiger Berechnungen (bekannt als die kritischer Weg), da Berechnungen, die von früheren Berechnungen in der Kette abhängen, in der Reihenfolge ausgeführt werden müssen. Die meisten Algorithmen bestehen jedoch nicht nur aus einer langen Kette abhängiger Berechnungen; In der Regel besteht die Möglichkeit, unabhängige Berechnungen parallel auszuführen.
Lassen Pi und Pj zwei Programmsegmente sein. Bernsteins Bedingungen[19] Beschreiben Sie, wann die beiden unabhängig sind und parallel ausgeführt werden können. Zum Pi, Lassen Ii Seien Sie alle Eingabevariablen und Oi die Ausgangsvariablen und ebenfalls für Pj. Pi und Pj sind unabhängig, wenn sie befriedigen
Die Verletzung der ersten Bedingung führt zu einer Durchflussabhängigkeit, die dem ersten Segment entspricht, das ein vom zweiter Segment verwendete Ergebnis erzeugt. Die zweite Bedingung stellt eine Anti-Abhängigkeit dar, wenn das zweite Segment eine vom erste Segment benötigte Variable erzeugt. Die dritte und endgültige Bedingung stellt eine Ausgangsabhängigkeit dar: Wenn zwei Segmente an denselben Ort schreiben, stammt das Ergebnis vom logischerweise letzten ausgeführten Segment.[20]
Betrachten Sie die folgenden Funktionen, die verschiedene Arten von Abhängigkeiten zeigen:
1: Funktion DEP (a, b) 2: c: = a * b 3: d: = 3 * c 4: Endfunktion
In diesem Beispiel kann Anweisung 3 nicht vor (oder sogar parallel zu) Anweisung 2 ausgeführt werden, da Anweisung 3 ein Ergebnis aus Anweisung 2 verwendet. Es verstößt gegen den Zustand 1 und führt somit eine Flussabhängigkeit ein.
1: Funktion nodep (a, b) 2: c: = a * b 3: d: = 3 * b 4: e: = a + b 5: Endfunktion
In diesem Beispiel gibt es keine Abhängigkeiten zwischen den Anweisungen, sodass alle parallel ausgeführt werden können.
Bernsteins Bedingungen ermöglichen es nicht, das Gedächtnis zwischen verschiedenen Prozessen zu teilen. Dazu ist einige Mittel zur Durchsetzung einer Bestellung zwischen Zugriffern erforderlich, wie z. Semaphoren, Barrieren oder ein anderer Synchronisationsmethode.
Rassenbedingungen, gegenseitiger Ausschluss, Synchronisation und parallele Verlangsamung
Unteraufgaben in einem parallelen Programm werden oft genannt Themen. Einige parallele Computerarchitekturen verwenden kleinere, leichte Versionen von Threads, die als bekannt sind Fasern, während andere größere Versionen verwenden, die als als bekannt sind Prozesse. "Threads" wird jedoch allgemein als generischer Begriff für Unteraufgaben akzeptiert.[21] Themen brauchen oft synchronisiert Zugang zu An Objekt oder andere RessourceZum Beispiel, wenn sie a aktualisieren müssen Variable Das wird zwischen ihnen geteilt. Ohne Synchronisation können die Anweisungen zwischen den beiden Threads in beliebiger Reihenfolge verschachtelt werden. Betrachten Sie beispielsweise das folgende Programm:
Thread a | Thread b |
1a: Variable v | 1b: Variable v |
2a: Fügen Sie 1 zu Variable V hinzu | 2B: Fügen Sie 1 zu Variablen V hinzu |
3A: Schreiben Sie an Variable V zurück | 3B: Schreiben Sie an Variable V zurück |
Wenn Anweisung 1B zwischen 1A und 3a ausgeführt wird oder wenn Anweisung 1A zwischen 1B und 3B ausgeführt wird, erzeugt das Programm falsche Daten. Dies ist als a bekannt Rassenbedingung. Der Programmierer muss a verwenden sperren bereitstellen gegenseitiger Ausschluss. Ein Schloss ist ein Programmiersprache -Konstrukt, mit dem ein Thread die Kontrolle über eine Variable übernimmt und verhindert, dass andere Threads ihn lesen oder schreiben, bis diese Variable entsperrt ist. Der Thread, der das Schloss hält, ist frei, um seine auszuführen Kritischer Abschnitt (Der Abschnitt eines Programms, für den exklusiver Zugriff auf eine Variable erforderlich ist) und die Daten zu entsperren, wenn sie fertig sind. Um die korrekte Programmausführung zu gewährleisten, kann das obige Programm umrunden werden, um Sperren zu verwenden:
Thread a | Thread b |
1a: Sperrvariable v | 1b: Sperrvariable v |
2A: Variable v | 2B: Variable v |
3a: Fügen Sie 1 zu Variablen v hinzu v | 3B: Fügen Sie 1 zu Variablen v hinzu v |
4A: Schreiben Sie an Variable V zurück | 4B: Schreiben Sie an Variable V zurück |
5a: Variable Variable V entsperren v | 5b: Variable Variable V entsperren v |
Ein Thread sperrt die Variable V erfolgreich, während der andere Thread sein wird ausgeschlossen- Es ist unabzubar, bis V erneut entsperrt ist. Dies garantiert die korrekte Ausführung des Programms. Schloss können erforderlich sein, um die korrekte Programmausführung zu gewährleisten, wenn Threads den Zugriff auf Ressourcen serialisieren müssen. Ihre Verwendung kann jedoch ein Programm erheblich verlangsamen und sich auswirken. Verlässlichkeit.[22]
Sperren mehrerer Variablen verwenden Nichtatomar Schlösser führt die Möglichkeit eines Programms ein Sackgasse. Ein Atomschloss sperrt mehrere Variablen auf einmal. Wenn es nicht alle sperren kann, sperrt es keine von ihnen. Wenn jeweils zwei Threads dieselben zwei Variablen mit nichtatomaren Sperren sperren müssen, ist es möglich, dass ein Faden einen von ihnen sperrt und der zweite Faden die zweite Variable sperrt. In einem solchen Fall kann keiner der Thread und Deadlockergebnisse abgeschlossen werden.[23]
Viele parallele Programme erfordern, dass ihre Unteraufgaben synchron wirken. Dies erfordert die Verwendung von a Barriere. Barrieren werden normalerweise mit einem Schloss oder a implementiert Semaphor.[24] Eine Klasse von Algorithmen, bekannt als lock-freie und wartungsfreie AlgorithmenInsgesamt vermeidet die Verwendung von Schlösser und Barrieren. Dieser Ansatz ist jedoch im Allgemeinen schwer zu implementieren und erfordert korrekt gestaltete Datenstrukturen.[25]
Nicht alle Parallelisierung führt zu einer Geschwindigkeit. Im Allgemeinen verbringen diese Themen als Aufgabe in immer mehr Fäden aufgeteilt, und verbringen einen immer größeren Teil ihrer Zeit damit, miteinander zu kommunizieren oder aufeinander auf den Zugang zu Ressourcen zu warten.[26][27] Sobald der Overhead aus Ressourcenkonkurrenz oder -Kommunikation die Zeit dominiert, die für andere Berechnungen aufgewendet wird, steigt die weitere Parallelisierung (dh die Aufteilung der Arbeitsbelastung über noch mehr Threads) erhöht, anstatt die Zeit zu verringern, die für die Beendet erforderlich ist. Dieses Problem, bekannt als Parallele Verlangsamung,[28] kann in einigen Fällen durch Softwareanalyse und Neugestaltung verbessert werden.[29]
Feinkörniger, grobkörniger und peinlicher Parallelität
Anwendungen werden häufig gemäß der Art und Weise klassifiziert, wie oft ihre Unteraufgaben synchronisieren oder miteinander kommunizieren müssen. Eine Anwendung zeigt eine feinkörnige Parallelität, wenn ihre Unteraufgaben mehrmals pro Sekunde kommunizieren müssen. Es zeigt grobkörnige Parallelität, wenn sie nicht mehrmals pro Sekunde kommunizieren, und es zeigt peinliche Parallelität Wenn sie selten oder nie kommunizieren müssen. Peinlich parallele Anwendungen gelten als die am einfachsten zu parallelisierende.
Flynns Taxonomie
Michael J. Flynn Erstellt eines der frühesten Klassifizierungssysteme für parallele (und sequenzielle) Computer und Programme, die jetzt als bekannt als bekannt als Flynns Taxonomie. Flynn klassifizierte Programme und Computer danach, ob sie mit einem einzigen Satz oder mehreren Anweisungssätzen operierten und ob diese Anweisungen einen einzelnen Satz oder mehrere Datensätze verwendeten oder nicht.
Die SISD-Klassifizierung (Einzelinstruktions-Single-Data) entspricht einem vollständig sequentiellen Programm. Die Klassifizierung mit Einzelinstruktions-Multiple-Data (SIMD) ist analog zur wiederholten Operation über einen großen Datensatz. Dies geschieht häufig in Signalverarbeitung Anwendungen. Mehrfacheinstellungsdaten (MISD) ist eine selten verwendete Klassifizierung. Während Computerarchitekturen damit umgehen, wurden (wie z. systolische Arrays), nur wenige Anwendungen, die zu dieser Klasse passen. MIMD-Programme (Mehrfachinstruktions-Multiple-Data) sind bei weitem die häufigste Art von parallelen Programmen.
Entsprechend David A. Patterson und John L. Hennessy, "Einige Maschinen sind natürlich Hybriden dieser Kategorien, aber dieses klassische Modell hat überlebt, weil es einfach, leicht zu verstehen ist und eine gute erste Näherung gibt. Es ist auch - vielleicht aufgrund seiner Verständlichkeit - das am weitesten verbreitete Schema . "[31]
Arten von Parallelität
Parallelität auf Bit-Ebene
Vom Aufkommen von Sehr große Integration (VLSI) Computer-Chip-Herstellungstechnologie in den 1970er Jahren bis etwa 1986 wurde die Geschwindigkeit in der Computerarchitektur durch Verdoppelung angetrieben Computerwortgröße- Die Menge an Informationen, die der Prozessor pro Zyklus manipulieren kann.[32] Durch Erhöhen der Wortgröße wird die Anzahl der Anweisungen verringert, die der Prozessor ausführen muss, um einen Vorgang auf Variablen auszuführen, deren Größen größer sind als die Länge des Wortes. Zum Beispiel wo ein 8 Bit Prozessor muss zwei hinzufügen 16-Bit GanzzahlenDer Prozessor muss zuerst die 8 Bits niedrigerer Ordnung von jeder Ganzzahl unter Verwendung der Standardabzuganweisung hinzufügen, und dann die 8 Bit höherer Ordnung mit einem add-mit-Carry-Befehl und der Befehl und der Bit tragen aus der ärgerlichen Ergänzung; Ein 8-Bit-Prozessor benötigt daher zwei Anweisungen, um einen einzelnen Betrieb auszuführen, bei dem ein 16-Bit-Prozessor den Betrieb mit einer einzigen Anweisung abschließen könnte.
Historisch, 4-Bit Mikroprozessoren wurden durch 8-Bit, dann 16-Bit und dann 32-Bit-Mikroprozessoren ersetzt. Dieser Trend endete im Allgemeinen mit der Einführung von 32-Bit-Prozessoren, was seit zwei Jahrzehnten ein Standard für das allgemeine Umsatz von Computing ist. Erst in den frühen 2000er Jahren mit dem Aufkommen von x86-64 Architekturen, tat 64-Bit Prozessoren werden alltäglich.
Parallelität auf Befehlsebene

Ein Computerprogramm ist im Wesentlichen ein Strom von Anweisungen, die von einem Prozessor ausgeführt werden. Ohne Parallelität auf Anweisungsebene kann ein Prozessor nur weniger als einen ausstellen Anweisung pro Taktzyklus (IPC <1). Diese Prozessoren sind als bekannt als als Subskalar Prozessoren. Diese Anweisungen können sein neu bestellt und kombiniert zu Gruppen, die dann parallel ausgeführt werden, ohne das Ergebnis des Programms zu ändern. Dies wird als Parallelität auf Anleitungsebene bezeichnet. Fortschritte in der Parallelität auf Unterrichtsebene dominierten die Computerarchitektur von Mitte der 1980er bis Mitte der neunziger Jahre.[33]

Alle modernen Prozessoren haben mehrere Stufe Unterrichtspipelines. Jede Stufe in der Pipeline entspricht einer anderen Aktion, die der Prozessor in dieser Anweisung in dieser Phase ausführt. ein Prozessor mit einem N-Stage -Pipeline kann bis zu N Verschiedene Anweisungen in verschiedenen Abschlussphasen und können somit einen Anweisungen pro Taktzyklus ausstellen (IPC = 1). Diese Prozessoren sind als bekannt als als Skalar Prozessoren. Das kanonische Beispiel eines pipelierten Prozessors ist a RISC Prozessor mit fünf Stufen: Befehlsabruf (if), Anweisung Decodes (ID), Execute (Ex), Speicherzugriff (MEM) und Registrieren Sie Schreibschreiber (WB). Das Pentium 4 Der Prozessor hatte eine 35-stufige Pipeline.[34]

Die meisten modernen Prozessoren haben auch mehrere Ausführungseinheiten. Sie kombinieren diese Funktion normalerweise mit Pipelining und können daher mehr als einen Anweisungen pro Taktzyklus ausstellen (IPC> 1). Diese Prozessoren sind als bekannt als als Superscalar Prozessoren. Superscalar -Prozessoren unterscheiden sich von unterscheiden Multi-Core-Prozessoren Da sind die verschiedenen Ausführungseinheiten keine ganzen Prozessoren (d. H. Verarbeitungseinheiten). Anweisungen können nur zusammengefasst werden, wenn es keine gibt Datenabhängigkeit zwischen ihnen. Anzeigetafel und die Tomasulo -Algorithmus (Dies ähnelt dem Anzeigetafel, nutzt aber Umbenennen registrieren) sind zwei der häufigsten Techniken zur Implementierung der Parallelität außerhalb der Bestellung und Unterrichtsebene.
Aufgabe Parallelität
Aufgabenparallelität ist das Merkmal eines parallelen Programms, das "völlig unterschiedliche Berechnungen entweder auf denselben oder unterschiedlichen Datensätzen durchgeführt werden können".[35] Dies steht im Gegensatz zu Datenparallelität, wobei die gleiche Berechnung an denselben oder verschiedenen Datensätzen durchgeführt wird. Die Aufgabenparallelität beinhaltet die Zersetzung einer Aufgabe in Unteraufgaben und die Anschließung jeder Unteraufgabe an einen Prozessor zur Ausführung. Die Prozessoren würden diese Unterbereitungen dann gleichzeitig und oft kooperativ ausführen. Aufgabenparallelität skaliert normalerweise nicht mit der Größe eines Problems.[36]
Parallelität der Superwortebene
Parallelität der Superwortebene ist a Vektorisation Technik basierend auf Schlaufe abrollen und grundlegende Blockvektorisierung. Es unterscheidet sich von Schleifenvektorisierungsalgorithmen, da es ausnutzen kann Parallelität von Inline -Code, wie manipulierende Koordinaten, Farbkanäle oder in Schleifen von Hand abgerollt.[37]
Hardware
Gedächtnis und Kommunikation
Hauptspeicher in einem parallele Computer ist entweder geteilte Erinnerung (Teilen zwischen allen Verarbeitungselementen in einem einzigen Adressraum), oder Verteilter Speicher (in dem jedes Verarbeitungselement einen eigenen lokalen Adressraum hat).[38] Der verteilte Speicher bezieht sich auf die Tatsache, dass der Speicher logisch verteilt ist, impliziert jedoch häufig auch, dass er auch physikalisch verteilt ist. Verteilter gemeinsamer Speicher und Speichervirtualisierung Kombinieren Sie die beiden Ansätze, bei denen das Verarbeitungselement seinen eigenen lokalen Speicher und Zugriff auf den Speicher auf nicht-lokalen Prozessoren hat. Zugriffe auf den lokalen Speicher sind in der Regel schneller als auf den nicht lokalen Speicher zugreifen. Auf der SupercomputerDer verteilte gemeinsame Speicherplatz kann mit dem Programmiermodell wie z. B. implementiert werden PGAs. Dieses Modell ermöglicht es den Prozessen auf einem Rechenknoten, transparent auf den Remotespeicher eines anderen Computerknotens zuzugreifen. Alle Rechenknoten werden auch über eine Hochgeschwindigkeits-Verbindungsverbindung mit einem externen gemeinsam genutzten Speichersystem verbunden, wie z. InfinibandDieses externe gemeinsame Speichersystem ist als bekannt als Burstpuffer, was typischerweise aus Arrays von gebaut wurde Nichtflüchtiger Gedächtnis physisch über mehrere E/A -Knoten verteilt.

Computerarchitekturen, bei denen auf jedes Element des Hauptspeichers zugegriffen werden kann Latenz und Bandbreite sind bekannt als Einheitlicher Speicherzugriff (Uma) Systeme. Normalerweise kann dies nur durch a erreicht werden geteilte Erinnerung System, in dem der Speicher nicht physikalisch verteilt ist. Ein System, das diese Eigenschaft nicht hat ungleichmäßiger Speicherzugriff (Numa) Architektur. Verteilte Speichersysteme haben ungleichmäßigen Speicherzugriff.
Computersysteme nutzen von Caches- Small und schnelle Erinnerungen in der Nähe des Prozessors, der vorübergehende Kopien von Speicherwerten speichert (in der Nähe sowohl im physischen als auch im logischen Sinne). Parallele Computersysteme haben Schwierigkeiten mit Caches, die den gleichen Wert an mehr als einem Ort speichern können, mit der Möglichkeit einer falschen Programmausführung. Diese Computer benötigen a Cache -Kohärenz System, das zwischengespeicherte Werte und strategisch entspannt und so die korrekte Programmausführung gewährleistet. Bus schnüffeln ist eine der häufigsten Methoden, um den Überblick zu behalten, auf welche Werte zugegriffen werden (und somit gespült werden sollten). Das Entwerfen großer, leistungsstarker Cache-Kohärenzsysteme ist ein sehr schwieriges Problem in der Computerarchitektur. Infolgedessen skalieren gemeinsame Speicher -Computer -Architekturen nicht so gut wie verteilte Speichersysteme.[38]
Prozessor -Prozessor- und Prozessor -Memory -Kommunikation kann auf verschiedene Weise in Hardware implementiert werden Multiplexed) Speicher, a Querlatte, ein geteiltes Bus oder ein Verbindungsnetzwerk von einer Vielzahl von Topologien einschließlich Stern, Ring, Baum, HypercubeFetthypercube (ein Hypercube mit mehr als einem Prozessor am Knoten) oder N-dimensionales Netz.
Parallele Computer, die auf miteinander verbundenen Netzwerken basieren Routing Um das Übergeben von Nachrichten zwischen Knoten zu aktivieren, die nicht direkt verbunden sind. Das für die Kommunikation zwischen den Prozessoren verwendete Medium ist wahrscheinlich in großen Multiprozessormaschinen hierarchisch.
Klassen paralleler Computer
Parallele Computer können ungefähr nach der Ebene klassifiziert werden, auf der die Hardware die Parallelität unterstützt. Diese Klassifizierung ist weitgehend analog zum Abstand zwischen grundlegenden Rechenknoten. Diese schließen sich nicht gegenseitig aus; Beispielsweise sind Cluster symmetrischer Multiprozessoren relativ häufig.
Multi-Core-Computing
Ein Multi-Core-Prozessor ist ein Prozessor, der mehrere enthält Verarbeitungseinheiten (genannt "Kerne") auf demselben Chip. Dieser Prozessor unterscheidet sich von a Superscalar Prozessor, der mehrere umfasst Ausführungseinheiten und kann mehrere Anweisungen pro Taktzyklus aus einem Befehlsstrom (Thread) ausstellen; Im Gegensatz dazu kann ein Multi-Core-Prozessor mehrere Anweisungen pro Taktzyklus aus mehreren Befehlsströmen ausgeben. IBM's Zellmikroprozessorfür den Einsatz in der Sony Playstation 3, ist ein prominenter Multi-Core-Prozessor. Jeder Kern in einem Multi-Core-Prozessor kann möglicherweise auch übersät sein. In jedem Taktzyklus kann jeder Kern mehrere Anweisungen aus einem Thread ausgeben.
Simultanes Multithreading (von welchem Intel Hyper-Threading ist das bekannteste) war eine frühe Form des Pseudo-Multi-Korsmus. Ein Prozessor, der zu einer gleichzeitigen Multithreading in der Lage ist, enthält mehrere Ausführungseinheiten in derselben Verarbeitungseinheit - das heißt, er verfügt mehrere Themen. Temporales Multithreading Auf der anderen Seite enthält eine einzelne Ausführungseinheit in derselben Verarbeitungseinheit und kann jeweils eine Anweisung abgeben mehrere Themen.
Symmetrische Multiprozessierung
Ein symmetrischer Multiprozessor (SMP) ist ein Computersystem mit mehreren identischen Prozessoren, die Speicher teilen und über a herstellen Bus.[39] Busstreitigkeiten verhindert die Skalierung von Busarchitekturen. Infolgedessen umfassen SMPs im Allgemeinen nicht mehr als 32 Prozessoren.[40] Aufgrund der geringen Größe der Prozessoren und der erheblichen Verringerung der Anforderungen an die Busbandbreite, die durch große Caches erreicht werden, sind solche symmetrischen Multiprozessoren äußerst kostengünstig, sofern eine ausreichende Menge an Speicherbandbreite besteht.[39]
Verteiltes Computer
Ein verteilter Computer (auch als verteilter Speichermultiprozessor bezeichnet) ist ein verteiltes Speicher -Computersystem, in dem die Verarbeitungselemente von einem Netzwerk verbunden sind. Verteilte Computer sind sehr skalierbar. Die Begriffe "Gleichzeitiges Computer"," Parallel Computing "und" verteiltes Computer "haben eine Menge Überlappungen, und es gibt keine klare Unterscheidung zwischen ihnen.[41] Das gleiche System kann sowohl als "parallel" als auch als "verteilt" charakterisiert werden. Die Prozessoren in einem typischen verteilten System laufen gleichzeitig parallel.[42]
Cluster Computing
Ein Cluster ist eine Gruppe locker gekoppelter Computer, die eng zusammenarbeiten, so dass sie in gewisser Hinsicht als einzelner Computer angesehen werden können.[43] Cluster bestehen aus mehreren eigenständigen Maschinen, die von einem Netzwerk verbunden sind. Während Maschinen in einem Cluster nicht symmetrisch sein müssen, Lastverteilung ist schwieriger, wenn sie nicht sind. Die häufigste Art von Cluster ist die Beowulf Cluster, was ein Cluster ist, der auf mehreren identischen implementiert ist kommerzielle Off-the-Shelf Computer, die mit a verbunden sind TCP/IP Ethernet lokales Netzwerk.[44] Die Beowulf -Technologie wurde ursprünglich von entwickelt von Thomas Sterling und Donald Becker. 87% aller Top500 Supercomputer sind Cluster.[45] Die verbleibenden sind massiv parallele Prozessoren, erklärt unten.
Da Grid -Computersysteme (unten beschrieben) leicht peinlich parallele Probleme bewältigen können, sind moderne Cluster in der Regel für schwierigere Probleme ausgelegt - Probleme, bei denen Knoten häufiger Zwischenergebnisse miteinander teilen müssen. Dies erfordert eine hohe Bandbreite und vor allem eine niedrigeLatenz Verbindungsnetzwerk. Viele historische und aktuelle Supercomputer verwenden maßgeschneiderte Hochleistungsnetzwerkhardware, die speziell für das Cluster-Computing entwickelt wurden, z. B. das Cray Gemini-Netzwerk.[46] Ab 2014 verwenden die meisten aktuellen Supercomputer häufig eine Standard-Standardnetzwerkhardware für die Stelle Myrinet, Infiniband, oder Gigabit Ethernet.
Massiv parallele Computer

Ein massiv paralleler Prozessor (MPP) ist ein einzelner Computer mit vielen vernetzten Prozessoren. MPPs haben viele der gleichen Merkmale wie Cluster, aber MPPs haben spezielle Verbindungsnetzwerke (während Cluster für die Networking Commodity -Hardware verwenden). MPPs sind auch in der Regel größer als Cluster, wobei normalerweise "weit mehr als 100 Prozessoren" sind.[47] In einem MPP "enthält jede CPU ihren eigenen Speicher und seine Kopie des Betriebssystems und der Anwendung. Jedes Subsystem kommuniziert mit den anderen über eine Hochgeschwindigkeits-Verbindung."[48]
IBM's Blaues Gen/l, das fünftschnellste Supercomputer in der Welt nach Juni 2009 Top500 Ranking ist ein MPP.
Raster Computing
Grid Computing ist die verteilte Form des parallelen Computing. Es nutzt Computer, die über die kommunizieren Internet an einem bestimmten Problem zu arbeiten. Aufgrund der niedrigen Bandbreite und der extrem hohen Latenz im Internet befasst sich verteiltes Computing normalerweise nur mit peinlich parallel Probleme. Viele verteilte Computeranwendungen wurden geschaffen, von denen Seti@home und Falten@home sind die bekanntesten Beispiele.[49]
Die meisten Raster -Computeranwendungen verwenden Middleware (Software, die zwischen dem Betriebssystem und der Anwendung zur Verwaltung von Netzwerkressourcen und zur Standardisierung der Software -Schnittstelle sitzt.) Das häufigste verteilte Computer -Middleware ist die Berkeley Open Infrastructure für das Netzwerk Computing (BOINC). Oft nutzt die verteilte Computersoftware "Ersatzzyklen" und führt in Zeiten, in denen ein Computer im Leerlauf ist, berechnet.
Spezialisierte parallele Computer
Innerhalb des parallelen Computing gibt es spezielle parallele Geräte, die nische Bereiche von Interesse bleiben. Während nicht DomänenspezifischSie sind in der Regel auf nur wenige Klassen paralleler Probleme anwendbar.
Rekonfigurierbares Computing mit Feldprogrammiergate-Arrays
Rekonfigurierbares Computer ist die Verwendung von a Feldprogrammierbares Gate-Array (FPGA) als Co-Prozessor eines allgemeinen Computers. Ein FPGA ist im Wesentlichen ein Computerchip, der sich für eine bestimmte Aufgabe neu verdrahtet.
FPGAs können mit programmiert werden Hardware -Beschreibung Sprachen wie zum Beispiel VHDL[50] oder Verilog.[51] Die Programmierung in diesen Sprachen kann jedoch mühsam sein. Mehrere Anbieter haben erstellt C zu HDL Sprachen, die versuchen, die Syntax und Semantik der C Programmiersprache, mit denen die meisten Programmierer vertraut sind. Die bekanntesten C -für HDL -Sprachen sind Mitrion-C, Impuls c, und Händel-C. Spezifische Untergruppen von Systemc Basierend auf C ++ kann auch für diesen Zweck verwendet werden.
AMDs Entscheidung, seine zu öffnen Hypertransport Die Technologie für Anbieter von Drittanbietern ist zur Aktivierung von Technologie für rekonfigurierbare Computing mit hoher Leistung.[52] Laut Michael R. D'Amour, Chief Operating Officer von DRC Computer Corporation"Als wir zum ersten Mal in AMD gingen, nannten sie uns 'die Steckdose Diebstahl. ' Jetzt nennen sie uns ihre Partner. "[52]
Allzweck-Computing auf Grafikverarbeitungseinheiten (GPGPU)

Allzweck-Computing auf Grafikverarbeitungseinheiten (GPGPU) ist ein ziemlich neuer Trend in der Forschung für Computertechnik. GPUs sind Co-Prozessoren, die stark optimiert wurden Computergrafik wird bearbeitet.[53] Computergrafikverarbeitung ist ein Feld, das von Daten parallele Operationen dominiert wird - insbesondere von Daten Lineare Algebra Matrix Operationen.
In den frühen Tagen verwendeten GPGPU -Programme die normalen Grafik -APIs für die Ausführung von Programmen. Es wurden jedoch mehrere neue Programmiersprachen und Plattformen für Allzweckberechnung bei GPUs mit beiden erstellt Nvidia und AMD Programmierumgebungen freigeben mit CUDA und Stream SDK beziehungsweise. Andere GPU -Programmiersprachen umfassen Brookgpu, Peakstream, und Rapidmind. NVIDIA hat auch spezifische Produkte zur Berechnung in ihrer veröffentlicht Tesla -Serie. Die Technology Consortium Khronos Group hat die veröffentlicht OpenCL Spezifikation, ein Rahmen für das Schreiben von Programmen, die über Plattformen aus CPUs und GPUs hinweg ausgeführt werden. AMD, Apfel, Intel, Nvidia und andere unterstützen OpenCL.
Anwendungsspezifische integrierte Schaltkreise
Mehrere Anwendungsspezifische integrierte Schaltung (ASIC) Ansätze wurden für den Umgang mit parallelen Anwendungen entwickelt.[54][55][56]
Da ein ASIC (per Definition) für eine bestimmte Anwendung spezifisch ist, kann sie für diese Anwendung vollständig optimiert werden. Infolgedessen neigt ein ASIC für eine bestimmte Anwendung dazu, einen allgemeinen Computer zu übertreffen. Asics werden jedoch von erstellt von UV -Photolithographie. Dieser Prozess erfordert ein Maskensatz, was extrem teuer sein kann. Ein Maskensatz kann über eine Million US -Dollar kosten.[57] (Je kleiner die für den Chip benötigten Transistoren sind, desto teurer wird die Maske.) Inzwischen erhöht sich die Leistung im Allgemeinen im Allgemeinen über die Zeit (wie beschrieben von Moores Gesetz) neigen dazu, diese Gewinne in nur ein oder zwei Chip -Generationen auszulöschen.[52] Hohe anfängliche Kosten und die Tendenz, von Moores gesetzlich gesteuertem allgemeinem Computer überholt zu werden, hat ASICs für die meisten parallelen Computeranwendungen nicht maßgeblich gemacht. Einige wurden jedoch gebaut. Ein Beispiel sind die Pflops Riken Mdgrap-3 Maschine, die benutzerdefinierte ASICs für verwendet Molekulare Dynamik Simulation.
Vector processors

Ein Vektorprozessor ist ein CPU oder ein Computersystem, das denselben Anweisungen für große Datensätze ausführen kann. Vektorprozessoren haben hochrangige Operationen, die an linearen Zahlen oder Vektoren arbeiten. Ein Beispiel für den Vektorbetrieb ist A = B × C, wo A, B, und C sind jeweils 64-Element-Vektoren von 64-Bit Schwimmpunkt Zahlen.[58] Sie sind eng mit der SIMD -Klassifizierung von Flynn verwandt.[58]
Cray Computer wurden in den 1970er und 1980er Jahren berühmt für ihre Vektorverarbeitungscomputer. Vektorprozessoren - sowohl als CPUs als auch als vollständige Computersysteme - sind jedoch im Allgemeinen verschwunden. Modern Prozessoranweisung enthalten einige Anweisungen zur Vektorverarbeitung, z. B. mit Freescale Semiconductor's Altivec und Intel's Streaming -SIMD -Erweiterungen (SSE).
Software
Parallele Programmiersprachen
Gleichzeitige Programmiersprachen, Bibliotheken, Apis, und Parallele Programmiermodelle (wie zum Beispiel Algorithmische Skelette) wurden für die Programmierung paralleler Computer erstellt. Diese können im Allgemeinen in Klassen unterteilt werden, basierend auf den Annahmen, die sie über die zugrunde liegende Speicherarchitektur treffen - ein erholter Speicher, ein verteilter Speicher oder ein gemeinsam genutzter verteilter Speicher. Shared Memory -Programmiersprachen kommunizieren durch Manipulation gemeinsamer Speichervariablen. Verteilte Speicher verwendet Nachrichtenübergang. POSIX -Threads und OpenMP sind zwei der am häufigsten verwendeten Shared Memory APIs, während Schnittstelle zur Nachrichtenübergabe (MPI) ist die am weitesten verbreitete API für Nachrichtenpassing-Systeme.[59] Ein Konzept, das bei der Programmierung paralleler Programme verwendet wird, ist die zukünftiges Konzept, wo ein Teil eines Programms verspricht, zu einem späteren Zeitpunkt ein erforderliches Datum an einen anderen Teil eines Programms zu liefern.
Zu den Bemühungen, parallele Programmierung zu standardisieren, gehören ein offener Standard mit dem Namen namens OpenHMPP Für hybride Multi-Core-Parallelprogramme. Das auf OpenHMPP-basierte Programmiermodell bietet eine Syntax, mit der Berechnungen auf Hardwarebeschleunigern effizient abgeladen und die Datenbewegung zum/vom Hardwarespeicher verwendet werden können Remote -Verfahrensanrufe.
Der Aufstieg des Verbraucher -GPUs hat zur Unterstützung für die Unterstützung geführt Kernel berechnenentweder in Grafik -APIs (bezeichnet als als Berechnen Sie Shader) in dedizierten APIs (wie z. OpenCL) oder in anderen Sprachverlängerungen.
Automatische Parallelisierung
Automatische Parallelisierung eines sequentiellen Programms von a Compiler ist der "heilige Gral" des parallelen Computers, insbesondere mit der oben genannten Grenze der Prozessorfrequenz. Trotz jahrzehntelanger Arbeiten von Compiler -Forschern hat die automatische Parallelisierung nur begrenzten Erfolg erzielt.[60]
Mainstream -Parallelprogrammiersprachen bleiben entweder bestehen explizit parallel oder (bestenfalls) teilweise implizit, in dem ein Programmierer dem Compiler gibt Richtlinien zur Parallelisierung. Es gibt ein paar vollständig implizite parallele Programmiersprachen -SisalParallel Haskell, Sequencel, System C (zum Fpgas), Mitrion-C, VHDL, und Verilog.
Anwendungsprüfung
Als Computersystem wächst die Komplexität, die Zwischenzeit zwischen Fehlern normalerweise abnimmt. Anwendungsprüfung ist eine Technik, bei der das Computersystem einen "Schnappschuss" der Anwendung annimmt - ein Aufzeichnung aller aktuellen Ressourcenzuweisungen und variablen Zustände, ähnlich wie ein Core-Dump-; Diese Informationen können verwendet werden, um das Programm wiederherzustellen, wenn der Computer fehlschlagen sollte. Anwendungsüberprüfung bedeutet, dass das Programm nur von seinem letzten Kontrollpunkt und nicht von Anfang an neu starten muss. Während Checkpointing in einer Vielzahl von Situationen Vorteile bietet, ist es jedoch besonders in hoch parallele Systeme mit einer großen Anzahl von Prozessoren nützlich, die in der in den High Performance Computing.[61]
Algorithmische Methoden
Da parallele Computer größer und schneller werden, können wir nun Probleme lösen, die zuvor zu lange gedauert hatten, um zu laufen. Felder so unterschiedlich wie Bioinformatik (zum Proteinfaltung und Sequenzanalyse) und Ökonomie (für Mathematische Finanzierung) haben das parallele Computer ausgenutzt. Häufige Arten von Problemen in parallelen Computeranwendungen umfassen:[62]
- Dicht Lineare Algebra
- Spärliche lineare Algebra
- Spektralmethoden (wie z. Cooley -tukey Fast Fourier Transformation)
- N-körperprobleme (wie zum Beispiel Barnes -Hut -Simulation)
- strukturiertes Gitter Probleme (wie z. Gitter -Boltzmann -Methoden)
- Unstrukturiertes Netz Probleme (wie gefunden in Finite -Elemente -Analyse)
- Monte Carlo -Methode
- Kombinationslogik (wie zum Beispiel Kryptografische Brute-Force-Techniken)
- Graph Traversal (wie zum Beispiel Sortieren von Algorithmen)
- Dynamische Programmierung
- Zweig und gebunden Methoden
- Grafische Modelle (wie Erkennung Versteckte Markov -Modelle und konstruieren Bayes'sche Netzwerke)
- Finite-State-Maschine Simulation
Fehlertoleranz
Parallele Computing kann auch auf das Design von angewendet werden Fehlertolerante Computersysteme, besonders über Lockstep Systeme, die parallel den gleichen Betrieb durchführen. Dies liefert Redundanz Wenn eine Komponente fehlschlägt und auch automatisch ist Fehlererkennung und fehler Korrektur Wenn sich die Ergebnisse unterscheiden. Diese Methoden können verwendet werden, um die durch transienten Fehler verursachten Einschätzungsstörungen zu verhindern.[63] Obwohl in eingebetteten oder spezialisierten Systemen zusätzliche Maßnahmen erforderlich sein können, kann diese Methode einen kostengünstigen Ansatz bieten, um die noduläre Redundanz in kommerziellen Off-the-Shelf-Systemen zu erreichen.
Geschichte
Die Ursprünge der wahren (MIMD) Parallelität gehen zurück zu Luigi Federico Menabrea und sein Skizze der Analysemotor Erfunden von Charles Babbage.[65][66][67]
Im April 1958 diskutierte Stanley Gill (Ferranti) parallele Programme und die Notwendigkeit einer Verzweigung und Warten.[68] Auch 1958 IBM -Forscher John Cocke und Daniel Slotnick Erörterte die Verwendung der Parallelität in numerischen Berechnungen zum ersten Mal.[69] Burroughs Corporation stellte 1962 die D825 ein, einen Computer mit vier Prozessoren, der über a auf bis zu 16 Speichermodule zugegriffen hat Querlatte.[70] 1967 veröffentlichten Amdahl und Slotnick eine Debatte über die Machbarkeit der parallelen Verarbeitung auf der American Federation of Information Processing Societies Conference.[69] Es war während dieser Debatte das Amdahls Gesetz wurde geprägt, um die Geschwindigkeitsgrenze aufgrund von Parallelität zu definieren.
Im Jahr 1969,, Honeywell stellte seine erste vor Mehrheit System, ein symmetrisches Multiprozessor -System, mit dem bis zu acht Prozessoren parallel ausgeführt werden können.[69] C.MMP, ein Multi-Proprozessor-Projekt bei Carnegie Mellon Universität In den 1970er Jahren gehörte zu den ersten Multiprozessoren mit mehr als wenigen Prozessoren. Der erste mit dem Bus verbundene Multiprozessor mit Snooping-Caches war die Synapse N+1 im Jahr 1984.[66]
SIMD -Parallelcomputer können bis in die 1970er Jahre zurückverfolgt werden. Die Motivation hinter frühen Simd -Computern bestand darin Torverspätung des Prozessors Steuergerät über mehrere Anweisungen.[71] 1964 hatte Slotnick vorgeschlagen, einen massiv parallele Computer für die zu bauen Lawrence Livermore National Laboratory.[69] Sein Design wurde von der finanziert US-Luftwaffe, was die früheste SIMD-Parallel-Berechnung war, ILLIAC IV.[69] Der Schlüssel zu seinem Design war eine ziemlich hohe Parallelität mit bis zu 256 Prozessoren, die es der Maschine ermöglichten, an großen Datensätzen in dem zu arbeiten, was später als bekannt war Vektorverarbeitung. Iliac IV wurde jedoch als "berüchtigtste Supercomputer" bezeichnet, da das Projekt nur ein Viertel abgeschlossen war, aber 11 Jahre dauerte und fast das Vierfache der ursprünglichen Schätzung kostete.[64] Als es endlich bereit war, seine erste wirkliche Anwendung im Jahr 1976 auszuführen, wurde es von bestehenden kommerziellen Supercomputern wie dem übertroffen Cray-1.
Biologisches Gehirn als massiv parallele Computer
In den frühen 1970er Jahren bei der MIT Informatik und künstliche Intelligenzlabor, Marvin Minsky und Seymour Paper begann die Entwicklung des Gesellschaft des Geistes Theorie, die das biologische Gehirn als betrachtet Massiv paralleler Computer. 1986 veröffentlichte Minsky Die Gesellschaft des Geistes, was behauptet, dass „der Geist von vielen kleinen Agenten gebildet wird, die von selbst sinnlos sind“.[72] Die Theorie versucht zu erklären, wie das, was wir intelligenz nennen, ein Produkt der Interaktion nicht intelligenter Teile sein könnte. Minsky sagt, dass die größte Quelle für Ideen über die Theorie aus seiner Arbeit kam, um eine Maschine zu erstellen, die einen Roboterarm, eine Videokamera und einen Computer mit Kinderblöcken aufgebaut hat.[73]
Ähnliche Modelle (die das biologische Gehirn auch als massiv parallele Computer betrachten, d. H. Das Gehirn besteht aus einer Konstellation unabhängiger oder semi-unabhängiger Mittel) wurden auch beschrieben:
- Thomas R. Blakeslee,[74]
- Michael S. Gazzaniga,[75][76]
- Robert E. Ornstein,[77]
- Ernest Hilgard,[78][79]
- Michio Kaku,[80]
- George Ivanovich Gurdjieff,[81]
- Neurocluster -Gehirnmodell.[82]
Siehe auch
- Computer Multitasking
- Parallelität (Informatik)
- Inhaltswerter paralleler Prozessor
- Liste der verteilten Computerkonferenzen
- List of important publications in concurrent, parallel, and distributed computing
- Manchester DataFlow Machine
- Manycore
- Parallele Programmiermodell
- Serialisierbarkeit
- Synchronprogrammierung
- Durchgang
- Vektorverarbeitung
Verweise
- ^ Gottlieb, Allan; Almasi, George S. (1989). Hoch parallele Computer. Redwood City, Kalifornien: Benjamin/Cummings. ISBN 978-0-8053-0177-9.
- ^ S.V. Adve et al. (November 2008). "Parallel Computing Research bei Illinois: Die UPCRC -Agenda" Archiviert 2018-01-11 bei der Wayback -Maschine (PDF). Parallel@Illinois, Universität von Illinois in Urbana-Champaign. "Die Haupttechniken für diese Leistungsvorteile-verstärkte Taktfrequenz und schlauer, aber immer komplexere Architekturen-treffen jetzt die sogenannte Power-Wand. Die Computerindustrie hat akzeptiert, dass zukünftige Leistungserhöhungen größtenteils durch die Erhöhung der Anzahl der Prozessoren (oder Kerne) auf einem Würfel entstehen müssen, anstatt einen einzelnen Kern schneller zu machen. "
- ^ Asanovic et al. Alte [konventionelle Weisheit]: Macht ist frei, aber Transistoren sind teuer. Neue [konventionelle Weisheit] ist [diese] Macht ist teuer, aber Transistoren sind "frei".
- ^ Asanovic, Krste et al. (18. Dezember 2006). "Die Landschaft der parallelen Computerforschung: Eine Ansicht aus Berkeley" (PDF). Universität von Kalifornien, Berkeley. Technischer Bericht Nr. UCB/EECS-2006-183. "Alte [konventionelle Weisheit]: Erhöhte Taktfrequenz ist die Hauptmethode zur Verbesserung der Prozessorleistung. Neue [konventionelle Weisheit]: Erhöhung der Parallelität ist die Hauptmethode zur Verbesserung der Prozessorleistung… sogar Vertreter von Intel, ein Unternehmen, das im Allgemeinen mit der 'höheren Uhr verbunden ist -Verschwelle ist eine bessere Position, warnte, dass traditionelle Ansätze zur Maximierung der Leistung durch Maximierung der Taktrate an ihre Grenzen gedrückt wurden. "
- ^ "Parallelität ist keine Parallelität", WAZA -Konferenz 11. Januar 2012, Rob Pike (Folien Archiviert 2015-07-30 im Wayback -Maschine) (Video)
- ^ "Parallelität gegen Parallelität". Haskell Wiki.
- ^ Hennessy, John L.; Patterson, David A.; Larus, James R. (1999). Computerorganisation und Design: Die Hardware-/Software -Oberfläche (2. ed., 3. print. Ed.). San Francisco: Kaufmann. ISBN 978-1-55860-428-5.
- ^ a b Barney, Blaise. "Einführung in das parallele Computer". Lawrence Livermore National Laboratory. Abgerufen 2007-11-09.
- ^ Thomas Rauber; Gudula Rünger (2013). Parallele Programmierung: Für Multicore- und Cluster -Systeme. Springer Science & Business Media. p. 1. ISBN 9783642378010.
- ^ Hennessy, John L.; Patterson, David A. (2002). Computerarchitektur / ein quantitativer Ansatz (3. Aufl.). San Francisco, Kalifornien: International Thomson. p. 43. ISBN 978-1-55860-724-8.
- ^ Rabaey, Jan M. (1996). Digital integrierte Schaltkreise: Eine Designperspektive. Upper Saddle River, N.J.: Prentice-Hall. p. 235. ISBN 978-0-13-178609-7.
- ^ Flynn, Laurie J. (8. Mai 2004). "Intel stoppt die Entwicklung von 2 neuen Mikroprozessoren". New York Times. Abgerufen 5. Juni 2012.
- ^ Thomas Rauber; Gudula Rünger (2013). Parallele Programmierung: Für Multicore- und Cluster -Systeme. Springer Science & Business Media. p. 2. ISBN 9783642378010.
- ^ Thomas Rauber; Gudula Rünger (2013). Parallele Programmierung: Für Multicore- und Cluster -Systeme. Springer Science & Business Media. p. 3. ISBN 9783642378010.
- ^ Amdahl, Gene M. (1967). "Gültigkeit des einzelnen Prozessoransatzes zur Erreichung von Rechenfunktionen in großem Maßstab". Verfahren AFIPS '67 (Frühjahr) Verfahren des 18. bis 20. April 1967, Spring Joint Computer Conference: 483–485. doi:10.1145/1465482.1465560. ISBN 9780805301779.
- ^ Brooks, Frederick P. (1996). Der mythische Mannmonat Essays über Software -Engineering (Jubiläum, Repr. Mit Corr., 5. [Dr.] ed.). Reading, Mass. [U.A.]: Addison-Wesley. ISBN 978-0-201-83595-3.
- ^ Michael McCool; James Reinders; Arch Robison (2013). Strukturierte parallele Programmierung: Muster für eine effiziente Berechnung. Elsevier. p. 61.
- ^ Gustafson, John L. (Mai 1988). "Amdahls Gesetz neu bewerten". Kommunikation der ACM. 31 (5): 532–533. Citeseerx 10.1.1.509.6892. doi:10.1145/42411.42415. S2CID 33937392. Archiviert von das Original am 2007-09-27.
- ^ Bernstein, A. J. (1. Oktober 1966). "Analyse von Programmen zur parallele Verarbeitung". IEEE -Transaktionen auf elektronischen Computern. EC-15 (5): 757–763. doi:10.1109/pgec.1966.264565.
- ^ Roosta, Seyed H. (2000). Parallele Verarbeitung und parallele Algorithmen: Theorie und Berechnung. New York, NY [U.A.]: Springer. p. 114. ISBN 978-0-387-98716-3.
- ^ "Prozesse und Fäden". Microsoft Developer Network. Microsoft Corp. 2018. Abgerufen 2018-05-10.
- ^ Krauss, Kirk J (2018). "Fadensicherheit für die Leistung". Für die Leistung entwickeln. Abgerufen 2018-05-10.
- ^ Tanenbaum, Andrew S. (2002-02-01). Einführung in das Betriebssystem Deadlocks. Informit. Pearson Education, Informit. Abgerufen 2018-05-10.
- ^ Cecil, David (2015-11-03). "Synchronisation Interna - das Semaphor". Eingebettet. Aspencore. Abgerufen 2018-05-10.
- ^ Preshing, Jeff (2012-06-08). "Eine Einführung in die lockfreie Programmierung". Vorschriften auf Programmierung. Abgerufen 2018-05-10.
- ^ "Was ist das Gegenteil von" peinlich parallel "?. Paketüberfluss. Abgerufen 2018-05-10.
- ^ Schwartz, David (2011-08-15). "Was ist Thread -Konkurrenz?". Paketüberfluss. Abgerufen 2018-05-10.
- ^ Kukanov, Alexey (2008-03-04). "Warum ein einfacher Test eine parallele Verlangsamung erhalten kann". Abgerufen 2015-02-15.
- ^ Krauss, Kirk J (2018). "Threading für Leistung". Für die Leistung entwickeln. Abgerufen 2018-05-10.
- ^ Flynn, Michael J. (September 1972). "Einige Computerorganisationen und ihre Effektivität" (PDF). IEEE -Transaktionen auf Computern. C-21 (9): 948–960. doi:10.1109/tc.1972.5009071.
- ^ Patterson und Hennessy, p. 748.
- ^ Singh, David Culler; J. P. (1997). Parallele Computerarchitektur ([Nachdr.] Ed.). San Francisco: Morgan Kaufmann Publ. p. fünfzehn. ISBN 978-1-55860-343-1.
- ^ Culler et al. p. fünfzehn.
- ^ Patt, Yale (April 2004). "Der Mikroprozessor in zehn Jahren: Was sind die Herausforderungen, wie treffen wir sie? Archiviert 2008-04-14 bei der Wayback -Maschine (WMV). Distinguished Dozent Rede bei Carnegie Mellon Universität. Abgerufen am 7. November 2007.
- ^ Culler et al. p. 124.
- ^ Culler et al. p. 125.
- ^ Samuel Larsen; Saman Amarasinghe. "Parallelität der Superwortebene mit Multimedia -Anweisungssätzen ausnutzen" (PDF).
- ^ a b Patterson und Hennessy, p. 713.
- ^ a b Hennessy und Patterson, p. 549.
- ^ Patterson und Hennessy, p. 714.
- ^ Ghosh (2007), p. 10. Keidar (2008).
- ^ Lynch (1996), p. xix, 1–2. Peleg (2000), p. 1.
- ^ Was ist Clustering? Webopedia Computer Dictionary. Abgerufen am 7. November 2007.
- ^ Beowulf Definition. PC Magazine. Abgerufen am 7. November 2007.
- ^ "Listenstatistiken | Top500 Supercomputer -Websites". www.top500.org. Abgerufen 2018-08-05.
- ^ "Verbinden" Archiviert 2015-01-28 bei der Wayback -Maschine.
- ^ Hennessy und Patterson, p. 537.
- ^ MPP -Definition. PC Magazine. Abgerufen am 7. November 2007.
- ^ Kirkpatrick, Scott (2003). "Informatik: grobe Zeiten voraus". Wissenschaft. 299 (5607): 668–669. doi:10.1126/Science.1081623. PMID 12560537. S2CID 60622095.
- ^ Valueva, Maria; Valuev, Georgii; Semyonova, Nataliya; Lyakhov, Pavel; Chervyakov, Nikolay; Kaplun, Dmitry; Bogaevskiy, Danil (2019-06-20). "Konstruktion des Rückstandsnummernsystems mit Hardwareeffizienten diagonale Funktion". Elektronik. 8 (6): 694. doi:10.3390/Electronics8060694. ISSN 2079-9292.
Alle simulierten Schaltkreise wurden in der Hardware -Beschreibung der Hardware -Beschreibung (VHDL) in sehr hoher Geschwindigkeit beschrieben. Die Hardwaremodellierung wurde auf Xilinx FPGA ARTIX 7 XC7A200TFBG484-2 durchgeführt.
- ^ Gupta, Ankit; Suneja, Kriti (Mai 2020). "Hardwaredesign des ungefähren Matrix -Multiplikators basierend auf FPGA in Verilog". 2020 4. Internationale Konferenz über intelligente Computer- und Kontrollsysteme (ICICCs). Madurai, Indien: IEEE: 496–498. doi:10.1109/ICICCS48265.2020.9121004. ISBN 978-1-7281-4876-2. S2CID 219990653.
- ^ a b c D'Amour, Michael R., Chief Operating Officer, DRC Computer Corporation. "Standard rekonfigurierbares Computer". Eingeladener Redner an der Universität von Delaware, 28. Februar 2007.
- ^ Boggan, Sha'kia und Daniel M. Pressel (August 2007). GPUs: Eine aufstrebende Plattform für die allgemeine Berechnung Archiviert 2016-12-25 bei der Wayback -Maschine (PDF). ARL-SR-154, US Army Research Lab. Abgerufen am 7. November 2007.
- ^ Maslennikov, Oleg (2002). "Systematische Erzeugung von Programmen für Prozessorelemente in paralleler ASIC- oder FPGA-basiertem Systemen und deren Umwandlung in VHDL-Descriptions von Prozessorelementsteuerungseinheiten". Vorlesungsnotizen in Informatik, 2328/2002: p. 272.
- ^ Shimokawa, Y.; Fuwa, Y.; Aramaki, N. (18. bis 21. November 1991). "Ein paralleler ASIC -VLSI -Neurocomputer für eine große Anzahl von Neuronen und Milliarden Verbindungen pro zweiter Geschwindigkeit". Internationale gemeinsame Konferenz über neuronale Netze. 3: 2162–2167. doi:10.1109/ijcnn.1991.170708. ISBN 978-0-7803-0227-3. S2CID 61094111.
- ^ Acken, Kevin P.; Irwin, Mary Jane; Owens, Robert M. (Juli 1998). "Eine parallele Asic -Architektur für eine effiziente fraktale Bildcodierung". Das Journal of VLSI -Signalverarbeitung. 19 (2): 97–113. doi:10.1023/a: 1008005616596. S2CID 2976028.
- ^ Kahng, Andrew B. (21. Juni 2004) "Das Problem der DFM in der Halbleiterindustrie Archiviert 2008-01-31 am Wayback -Maschine. ist weit über 1 Million US-Dollar beim 90-NM-Technologieknoten und schafft einen erheblichen Dämpfer in Bezug auf Halbleiter-basierte Innovation. "
- ^ a b Patterson und Hennessy, p. 751.
- ^ Das Sidney Fernbach Award an den MPI -Erfinder Bill Gropp Archiviert 2011-07-25 bei der Wayback -Maschine bezeichnet MPI als "die dominante HPC -Kommunikationsschnittstelle"
- ^ Shen, John Paul; Mikko H. Lipasti (2004). Modernes Prozessordesign: Grundlagen von Superscalar -Prozessoren (1. Aufl.). Dubuque, Iowa: McGraw-Hill. p. 561. ISBN 978-0-07-057064-1.
Der heilige Gral solcher Forschungen - die Parallelisierung von Serienprogrammen - ist jedoch noch nicht zustande. Während eine automatisierte Parallelisierung bestimmter Klassen von Algorithmen nachgewiesen wurde, war ein solcher Erfolg weitgehend auf wissenschaftliche und numerische Anwendungen mit vorhersehbarer Durchflussregelung (z. B. verschachtelte Schleifenstrukturen mit staatlich festgelegten Iterationszahlen) und statisch analysierbare Speicherzugriffsmuster beschränkt. (z. B. wandert über große mehrdimensionale Arrays von Float-Point-Daten).
- ^ Enzyklopädie des parallelen Computers, Band 4 von David Padua 2011 ISBN0387097651 Seite 265
- ^ Asanovic, Krste, et al. (18. Dezember 2006). "Die Landschaft der parallelen Computerforschung: Eine Ansicht aus Berkeley" (PDF). Universität von Kalifornien, Berkeley. Technischer Bericht Nr. UCB/EECS-2006-183. Siehe Tabelle auf den Seiten 17–19.
- ^ B. Dobel, B., Hartig, H. & Engel, M. (2012) "Betriebssystemunterstützung für redundante Multithreading". Verfahren der zehnten ACM International Conference on Embedded Software, 83–92. doi:10.1145/2380356.2380375
- ^ a b Patterson und Hennessy, S. 749–50: "Obwohl erfolgreich in späteren Projekten mehrere Technologien nützlich sind, scheiterte die IIRIAC IV als Computer. Ein Viertel der geplanten Maschine. Es war vielleicht das berüchtigtste Supercomputer. Das Projekt startete 1965 und führte 1976 seine erste reale Anwendung. "
- ^ Menabrea, L. F. (1842). Skizze des von Charles Babbage erfundenen analytischen Motors. Bibliothèque Universelle de Genève. Abgerufen am 7. November 2007. Zitat: "Wenn eine lange Reihe identischer Berechnungen durchgeführt werden soll, wie die für die Bildung numerischer Tabellen erforderlich, kann die Maschine ins Spiel gebracht werden, um mehrere Ergebnisse gleichzeitig zu erzielen , was die gesamte Menge der Prozesse erheblich verkürzen wird. "
- ^ a b Patterson und Hennessy, p. 753.
- ^ R. W. Hockney, C. R. Jesshope. Parallele Computer 2: Architektur, Programmierung und Algorithmen, Band 2. 1988. p. 8 Zitat: "Der früheste Hinweis auf die Parallelität im Computerdesign wird im Allgemeinen in der Veröffentlichung von L. F. Menabrea in… 1842 mit dem Titel" 1842 "angesehen Skizze des von Charles Babbage erfundenen analytischen Motors".
- ^ "Parallele Programmierung", S. Gill, Das Computerjournal Vol. 1 #1, PP2-10, British Computer Society, April 1958.
- ^ a b c d e Wilson, Gregory V. (1994). "Die Geschichte der Entwicklung des parallelen Computers". Virginia Tech/Norfolk State University, Interactive Learning mit einer digitalen Bibliothek in Informatik. Abgerufen 2008-01-08.
- ^ Anthes, Gry (19. November 2001). "Die Kraft der Parallelität". Computerwelt. Archiviert von das Original am 31. Januar 2008. Abgerufen 2008-01-08.
- ^ Patterson und Hennessy, p. 749.
- ^ Minsky, Marvin (1986). Die Gesellschaft des Geistes. New York: Simon & Schuster. pp.17. ISBN 978-0-671-60740-1.
- ^ Minsky, Marvin (1986). Die Gesellschaft des Geistes. New York: Simon & Schuster. pp.29. ISBN 978-0-671-60740-1.
- ^ Blakeslee, Thomas (1996). Jenseits des Bewusstseins. Erschöpfen der Geheimnisse des Selbst. pp.6–7. ISBN 9780306452628.
- ^ Gazzaniga, Michael; Ledoux, Joseph (1978). Der integrierte Geist. S. 132–161.
- ^ Gazzaniga, Michael (1985). Das soziale Gehirn. Entdeckung der Netzwerke des Geistes. pp.77–79. ISBN 9780465078509.
- ^ Ornstein, Robert (1992). Entwicklung des Bewusstseins: Die Ursprünge der Art, wie wir denken. pp.2.
- ^ Hilgard, Ernest (1977). Geteiltes Bewusstsein: Mehrere Kontrollen im menschlichen Denken und Handeln. New York: Wiley. ISBN 978-0-471-39602-4.
- ^ Hilgard, Ernest (1986). Dividiertes Bewusstsein: Mehrere Kontrollen in menschlichem Denken und Handeln (erweiterte Ausgabe). New York: Wiley. ISBN 978-0-471-80572-4.
- ^ Kaku, Michio (2014). Die Zukunft des Geistes.
- ^ Ouspenskii, pyotr (1992). "Kapitel 3". Auf der Suche nach dem Wunder. Fragmente einer unbekannten Lehre. S. 72–83.
- ^ "Offizielle Neurocluster -Gehirnmodellstelle". Abgerufen 22. Juli, 2017.
Weitere Lektüre
- Rodriguez, C.; Villagra, M.; Baran, B. (29. August 2008). "Asynchrone Teamalgorithmen für boolesche Befriedigung". Bio-inspirierte Modelle für Netzwerk-, Informations- und Computersysteme, 2007. Bionetics 2007. 2.: 66–69. doi:10.1109/bimnics.2007.4610083. S2CID 15185219.
- Sechin, a.; Parallele Computing in der Photogrammetrie. Gim International. #1, 2016, S. 21–23.