In den 1980er Jahren wurden sowohl das PRAM- als auch das BSP- Modell für parallele Berechnungen entwickelt. Es scheint, dass die Blütezeit beider Modelle in den späten 80ern und frühen 90ern lag.
Sind diese Bereiche noch in der Forschung nach parallelen Algorithmen aktiv? Gibt es neuere, ausgefeiltere Modelle für die parallele Berechnung? Sind allgemeine Modelle noch in Mode oder versuchen Forscher, sich auf GPGPU- oder Cloud-basierte Berechnungen zu spezialisieren?
ds.algorithms
dc.parallel-comp
dc.distributed-comp
Nicholas Mancuso
quelle
quelle
Ich entschuldige mich im Voraus für das Blog-Post-Format meiner Antwort. Ich konnte nicht anders, als mir einen kleinen Überblick über die Parallel-Computing-Welt zu verschaffen.
Sie können parallele Programmiermodelle in ungefähr zwei Kategorien einteilen: Kontrollfluss- und Datenflussmodelle.
Die Kontrollflussmodelle versuchen, Parallelität im Kontext eines expliziten Kontrollprogramms zu ermöglichen, im Grunde genommen jeden heute programmierbaren Computer. Das grundlegende Problem besteht darin, dass eine solche "Von Neumann-Architektur" nicht für die parallele Ausführung, sondern für effiziente sequentielle Berechnungen konzipiert wurde. Parallelität in einem solchen Kontext wird durch Duplizieren von Teilen der Grundmodule (Speicher, Steuerung, Arithmetik) erhalten.
Wenn Sie nur Arithmetik duplizieren, erhalten Sie SIMD-Anweisungen. Alle ALUs verwenden denselben Programmzähler (PC) und führen daher immer den gleichen Vorgang parallel aus, wenn auch mit unterschiedlichen Daten.
Wenn Sie ALU und PC duplizieren, aber den Anweisungssequenzer in der Steuereinheit belassen, erhalten Sie eine Out-of-Order-Ausführung (OoO), die eine gewisse Pipeline-Parallelität ergibt. In dieser Kategorie finden Sie auch das VLWI (Very Long Instruction Word) und Techniken zur Branchenvorhersage. Sie sehen diese Kategorie jedoch selten auf Software-Ebene.
Ein bisschen weiter zu gehen bedeutet, den gesamten "Kern" zu duplizieren, aber den Speicher gemeinsam zu nutzen. Dies sind die aktuellen Multicore-Prozessoren, mit denen Sie Task- (oder Thread-) Parallelität erzielen. Wenn Sie in diesem Zusammenhang den Speicher gemeinsam nutzen, treten sehr , sehr schwierige und subtile Probleme bei der gemeinsamen Nutzung auf . Parallele Berechnungen auf aktuellen Multicores drehen sich daher vollständig um Synchronisations- / Parallelitätsprobleme, das sorgfältige Gleichgewicht zwischen Leistung (keine Synchronisation) und gewünschter Semantik (vollständig synchronisierte, sequentielle Ausführungssemantik). Beispiele hierfür sind der PRAM oder heutzutage populärer die Cilk ofshoots wie Fork / Join ( IntelTBB , Java.Utils.Concurrency)). CSP- und Actor-Modelle sind Parallelitätsmodelle, aber wie oben erwähnt verschwimmen Parallelität und Parallelität in einer Shared-Memory-Umgebung. nb Parallelität dient der Leistung und der Aufrechterhaltung der korrekten Semantik.
Durch das Duplizieren des Speichers erhalten Sie entweder vernetzte Computer, die mit MPI und seiner Art programmiert wurden, oder nur merkwürdige Nicht-Von-Neumann-Architekturen wie die Network-on-a-Chip-Prozessoren (Cloud-Prozessor, Transputer, Tilera). Speichermodelle wie UMA oder NUMA versuchen, die Illusion eines gemeinsam genutzten Speichers aufrechtzuerhalten und können entweder auf Software- oder Hardwareebene existieren. MPI behält die Parallelität auf Programmebene bei und kommuniziert nur über Message-Passing. Die Nachrichtenübermittlung wird auch auf Hardwareebene für die Kommunikation und den gemeinsamen Zugriff (Transputer) verwendet.
Die zweite Kategorie sind Datenflussmodelle . Diese wurden zu Beginn des Computerzeitalters entwickelt, um parallele Berechnungen aufzuschreiben und auszuführen, wobei das Von Neumann-Design vermieden wurde. Diese sind in den 80er Jahren aus der Mode gekommen (für Parallel Computing), nachdem die sequentielle Leistung exponentiell angestiegen ist. Viele parallele Programmiersysteme wie Google MapReduce, Microsoft Dryad oder Intel Concurrent Collections sind jedoch tatsächlich Datenfluss-Rechenmodelle. Irgendwann stellen sie Berechnungen als Grafik dar und verwenden diese, um die Ausführung zu steuern.
Durch die Angabe von Teilen des Modells erhalten Sie unterschiedliche Kategorien und Semantiken für das Datenflussmodell. Wie beschränken Sie die Form des Graphen auf: DAG (CnC, Dryad), Baum (Mapreduce), Digraph? Gibt es eine strikte Synchronisationssemantik ( Lustre, reaktive Programmierung]? Erlauben Sie Rekursion nicht, einen statischen Zeitplan (StreaMIT) zu haben, oder bieten Sie mehr Ausdruckskraft durch einen dynamischen Zeitplan (Intel CnC)? Gibt es eine Begrenzung für die Anzahl der eingehenden oder ausgehenden Flanken? Ermöglichen die Auslösungssemantiken das Auslösen des Knotens, wenn eine Teilmenge der eingehenden Daten verfügbar ist? Sind Kanten-Datenströme (Stream-Verarbeitung) oder einzelne Datentoken (statische / dynamische Einzelzuweisung). Für verwandte Arbeiten können Sie sich zunächst die Datenflussforschung von Personen wie Arvind, K. Kavi, j. Sharp, W. Ackerman, R. Jagannathan usw.
Edit: Der Vollständigkeit halber. Ich sollte darauf hinweisen, dass es auch parallele reduktionsgetriebene und mustergetriebene Modelle gibt. Für die Reduktionsstrategien haben Sie allgemein die Graph-Reduktion und die String-Reduktion. Haskell verwendet grundsätzlich die Graph-Reduktion, eine sehr effiziente Strategie für ein sequentielles Shared-Memory-System. Duplikate zur Zeichenfolgenreduzierung funktionieren, verfügen jedoch über eine Private-Memory-Eigenschaft, die eine implizite Parallelisierung erleichtert. Die mustergetriebenen Modelle sind die parallelen Logiksprachen, beispielsweise der gleichzeitige Prolog. Das Actor-Modell ist ebenfalls ein mustergetriebenes Modell, jedoch mit Merkmalen des privaten Speichers.
PS. Ich verwende den Begriff "Modell" allgemein und spreche sowohl für formale als auch für Programmierzwecke von abstrakten Maschinen.
quelle
Für Message-Passing-Architekturen ist CGM oder Coarse Grained Multicomputer mit Sicherheit ein Modell, das BSP ähnelt, aber einfacher zu handhaben ist und eine Leistungsanalyse bietet, die der tatsächlichen Leistung einer Maschine nahe kommt. Es wurde von Frank Dehne vorgeschlagen, und Sie werden viele interessante Artikel finden, in denen Algorithmen vorgestellt werden, die in diesem Zusammenhang entwickelt wurden.
CGM passt zu grobkörnigen Architekturen, wobei p Prozessoren vorausgesetzt werden, von denen jeder einen lokalen O (n / p) -Speicher und eine Eingangsgröße n aufweist, die viel größer ist (um Größenordnungen voneinander entfernt) als p, dh p≪n. Daher ist das Modell auf aktuellen Architekturen viel besser als andere. es wurde ausgiebig untersucht. Das Modell basiert auf den folgenden Annahmen: (i) Die Algorithmen führen sogenannte Supersteps aus, die aus einer Phase der lokalen Berechnung und einer Phase der Interprozessorkommunikation mit Zwischensperrensynchronisation bestehen. (Ii) Alle p Prozessoren haben Zugriff auf O (n / p) lokaler Speicher, (iii) in jedem Superstep kann ein Prozessor höchstens O (n / p) Elemente senden und empfangen, und (iv) das Kommunikationsnetz zwischen den Prozessoren kann beliebig sein. In diesem Modell wird ein Algorithmus hinsichtlich seiner Berechnungszeit und der Anzahl der Kommunikationsrunden bewertet. Das Modell ist zwar einfach, bietet jedoch eine vernünftige Vorhersage der tatsächlichen Leistung paralleler Algorithmen. In der Tat weisen parallele Algorithmen für CGMs normalerweise eine theoretische Komplexitätsanalyse auf, die den tatsächlichen Zeiten sehr nahe kommt, die experimentell beim Implementieren und Benchmarking ermittelt wurden.
quelle
Paralleler externer Speicher (PEM) ist eine natürliche Kombination einer PRAM-artigen Shared-Memory-Maschine mit dem externen Speichermodell. Es konzentriert sich auf die Auswirkungen privater Caches.
quelle
Soweit ich weiß, werden die BSP- und LogP-Modelle heute für verteilte Algorithmen verwendet. Auch seit GPU-Computing wird der PRAM wieder populär, allerdings sollte man die Speicherhierarchien in die Analyse einbeziehen. Sie können das UPMH-Modell (Uniform Parallel Memory Hierarchie) überprüfen, das gut zu PRAM passt.
B. Alpern, L. Carter, E. Feig und T. Selker. Das einheitliche Speicherhierarchiemodell der Berechnung. Algorithmica, 12: 72–109, 1994. 10.1007 / BF01185206.
Bowen Alpern, Larry Carter und Jeanne Ferrante. Modellierung paralleler Computer als Speicherhierarchien. In In Proc. Programmiermodelle für massiv parallele Computer, S. 116–123. IEEE Computer Society Press, 1993.
Auch für das GPU-Computing wurde ein theoretisches Rechenmodell vorgeschlagen. das K-Modell:
Gabriele Capannini, Fabrizio Silvestri und Ranieri Baraglia. K-Modell: Ein neues Rechenmodell für Stream-Prozessoren. In Proceedings of the 2010 IEEE 12. International Conference on High Performance Computing and Communications, HPCC '10, S. 239–246, Washington, DC, USA, 2010. IEEE Computer Society.
Zuletzt habe ich Cellular Automata (CA) gesehen, die als Parallelrechner modelliert wurden. Ich persönlich halte dies für ein sehr interessantes Forschungsthema. Wer in Zukunft weiß, dass Prozessoren wie kleine Rechenräume auf diese Weise erstellt werden. Ich habe keine solide Referenz dafür, du kannst im Web nachschauen.
quelle
Rein funktionale Programme ermöglichen die parallele Ausführung von unabhängigen Ausdrücken. Daher würde ich sie als parallele Rechenmodelle betrachten.
quelle
Ich bevorzuge den Bader-Jaja-Ansatz (siehe Abschnitt 2.1). Sie modellieren Komplexität als Problem der Nachrichtenübermittlung. Für jede gesendete Nachricht gibt es sowohl eine Variable für die Latenz zum Einleiten der Kommunikation als auch eine Variable für die Bandbreite.
quelle
Sie erwähnen Cloud Computing speziell. Innerhalb weniger Jahre gab es in diesem Bereich intensive Innovationen mit der Amazon Elastic Compute Cloud, der Google App Engine und verschiedenen Tools und den zugehörigen konzeptionellen Parallelverarbeitungsmodellen.
Zu den speziellen Open-Source-Tools gehören die Datenbanken Mapreduce , Apache Hadoop und NoSQL von Google , die sich als neue, starke und weithin angepasste Standards für die "Best Practices" und "Design Patterns" des Parallelisierungsalgorithmus herausstellen . Auch memcacheD wird zunehmend als speicherinterne verteilte Datenbank eingesetzt. Ein Beispiel dafür wird bei Facebook verwendet und in einem kürzlich erschienenen Artikel beschrieben [1].
[1] Viele Schlüsselwertspeicher von Berezecki et al
quelle
ein anderer Winkel dazu. Zwar könnte dies von einigen als etwas undeutlich oder als Randerscheinung angesehen werden, aber es gibt einige Arbeiten zur allgemeinen Parallelisierung probabilistischer Algorithmen, von denen behauptet wird, dass sie für die Parallelität auf natürliche Weise geeignet sind.
siehe zB Parallele probabilistische Berechnungen auf einem Cluster von Workstations Radenski, Vann, Norris:
falls es nicht klar ist, ist die "gemeinsame parallele Kontrollstruktur als generischer Algorithmus", auf die zusammen mit der probabilistischen Berechnung und der Gesamtumwandlung Bezug genommen wird, das "Modell".
Es könnte argumentiert werden, dass probabilistische Berechnungen nicht ausschließlich klassisches Rechnen oder Turing vollständig sind. man beachte also, dass es einige Arbeiten gibt, um klassische mit probabilistischen Berechnungen zu verknüpfen, auch speziell in einem parallelen Kontext, z
Begründung zu probabilistischen Parallelprogrammen von Rao:
Natürlich ist QM-Computing dem probabilistischen Computing sehr ähnlich (eine nette Referenz, die dies hervorhebt, ist One Complexity Theorist's View of Quantum Computing von Fortnow ) und es gibt Hinweise, dass diese Ansätze dort erweitert werden könnten, z. B. in der Arbeit in der parallelen QM-Simulation.
quelle
Dies wird von einigen als kontrovers angesehen, und selbst Befürworter dieses Blickwinkels werden zugeben müssen, dass es sich in den frühen Stadien der Forschung befindet, aber im Grunde genommen scheint Quantencomputing viele Verbindungen zu Parallelität und paralleler Berechnung zu haben. Die Referenzen sind derzeit verstreut, aber ein aufstrebendes Thema kann von einem entschlossenen Forscher gesehen werden.
Vielleicht ist die beste Verbindung mit Grovers-Suchalgorithmus, von dem kürzlich gezeigt wurde, dass er allgemeiner ist, da er für die Beschleunigung der meisten NP-Gesamtprobleme im Allgemeinen verwendet werden kann [5]. Der Algorithmus von Grovers scheint eine starke Analogie / Verbindung zu den Suchalgorithmen für parallele Datenbanken zu haben. Die besten klassischen seriellen Algorithmen können nicht dieselbe Leistung erbringen, aber mindestens eine Behörde argumentiert kürzlich, dass QM-Ansätze für die Suche parallelisierte klassische Algorithmen nicht übertreffen. [1]
Weitere Belege sind Schemata, die explizit die Parallelität bei der Quantensuche untersuchen, z. B. [2]. Es wurden auch Quantensimulatoren vorgeschlagen, die auf paralleler / verteilter Verarbeitung basieren [3] [4]. Da das Schema gut passt und zu effizienten und nachvollziehbaren Simulationen führt (30 Qubits werden in Lit. [3] simuliert), wird diese Konvertierung durchgeführt Dies ist sicherlich kein Zufall und deutet auf eine tiefere Brücke zwischen parallelem klassischem Computing und QM-Computing hin, die aber wahrscheinlich bisher aufgedeckt wurde.
[1] Ist die Quantensuche praktisch? von Viamontes et al
[2] Genaue Quantensuche nach parallelen einheitlichen Diskriminierungsschemata von Wu / Dian
[3] Allzweck-Parallel-Simulator für das Quantencomputing von Niwa, Matsumoto, Imai.
[4] Effizientes verteiltes Quantencomputing von Beals et al. 2012
[5] Lösen von NP-Gesamtproblemen mit der Quantensuche von Furer 2008
quelle