Parallel Computing Definition
Parallel Computing ist eine Art von Computerarchitektur, in der mehrere Prozessoren gleichzeitig mehrere, kleinere Berechnungen ausführen, die von einem insgesamt größeren, komplexen Problem getrennt sind.
FAQs
Was ist Paralleles Rechnen?
Parallel Computing bezieht sich auf den Prozess, größere Probleme in kleinere, unabhängige, oft ähnliche Teile zu zerlegen, die gleichzeitig von mehreren Prozessoren ausgeführt werden können, die über gemeinsam genutzten Speicher kommunizieren, deren Ergebnisse nach Abschluss als Teil eines Gesamtalgorithmus kombiniert werden. Das primäre Ziel von Parallel Computing ist es, die verfügbare Rechenleistung für eine schnellere Anwendungsverarbeitung und Problemlösung zu erhöhen.
Parallele Computing-Infrastruktur ist in der Regel in einem einzigen Rechenzentrum untergebracht, in dem mehrere Prozessoren in einem Server-Rack installiert sind; Berechnungsanforderungen werden in kleinen Blöcken vom Anwendungsserver verteilt, die dann gleichzeitig auf jedem Server ausgeführt werden.
Es gibt im Allgemeinen vier Arten von parallelem Rechnen, die sowohl von proprietären als auch von Open-Source-Anbietern für paralleles Rechnen erhältlich sind – Parallelität auf Bitebene, Parallelität auf Befehlsebene, Task-Parallelität oder Parallelität auf Superwortebene:
- Parallelität auf Bitebene: erhöht die Prozessorwortgröße, wodurch die Anzahl der Anweisungen verringert wird, die der Prozessor ausführen muss, um eine Operation für Variablen auszuführen, die größer als die Länge des Wortes sind.
- Parallelität auf Befehlsebene: Der Hardwareansatz arbeitet mit dynamischer Parallelität, bei der der Prozessor zur Laufzeit entscheidet, welche Anweisungen parallel ausgeführt werden sollen; der Softwareansatz arbeitet mit statischer Parallelität, bei der der Compiler entscheidet, welche Anweisungen parallel ausgeführt werden sollen
- Taskparallelität: eine Form der Parallelisierung von Computercode über mehrere Prozessoren hinweg, die mehrere verschiedene Aufgaben gleichzeitig mit denselben Daten ausführt
- Parallelität auf Superwortebene: eine Vektorisierungstechnik, die die Parallelität von Inline-Code ausnutzen kann
Parallele Anwendungen werden typischerweise entweder als feinkörnige Parallelität klassifiziert, bei der Unteraufgaben mehrmals pro Sekunde kommunizieren; grobkörnige Parallelität, bei der Unteraufgaben nicht mehrmals pro Sekunde kommunizieren; oder peinliche Parallelität, bei der Unteraufgaben selten oder niemals kommunizieren. Mapping in Parallel Computing wird verwendet, um peinlich parallele Probleme zu lösen, indem eine einfache Operation auf alle Elemente einer Sequenz angewendet wird, ohne dass eine Kommunikation zwischen den Teilaufgaben erforderlich ist.
Die Popularisierung und Entwicklung des Parallelrechnens im 21.Jahrhundert kam als Reaktion auf die Skalierung der Prozessorfrequenz, die die Power Wall traf. Frequenzerhöhungen erhöhen die in einem Prozessor verwendete Leistung, und eine Skalierung der Prozessorfrequenz ist ab einem bestimmten Punkt nicht mehr möglich; daher begannen Programmierer und Hersteller mit der Entwicklung paralleler Systemsoftware und der Herstellung energieeffizienter Prozessoren mit mehreren Kernen, um das Problem des Stromverbrauchs und der Überhitzung der Zentraleinheiten anzugehen.
Die Bedeutung von Parallel Computing nimmt mit dem zunehmenden Einsatz von Multicore-Prozessoren und GPUs weiter zu. GPUs arbeiten mit CPUs zusammen, um den Datendurchsatz und die Anzahl der gleichzeitigen Berechnungen innerhalb einer Anwendung zu erhöhen. Mit der Kraft der Parallelität kann eine GPU in einer bestimmten Zeit mehr Arbeit erledigen als eine CPU.
Grundlagen der Parallelcomputerarchitektur
Parallelcomputerarchitektur existiert in einer Vielzahl von Parallelcomputern, klassifiziert nach der Ebene, auf der die Hardware Parallelität unterstützt. Parallele Computerarchitektur und Programmiertechniken arbeiten zusammen, um diese Maschinen effektiv zu nutzen. Die Klassen paralleler Computerarchitekturen umfassen:
- Multi-Core-Computing: Ein Mehrkernprozessor ist eine integrierte Computerprozessorschaltung mit zwei oder mehr separaten Verarbeitungskernen, von denen jeder parallel Programmanweisungen ausführt. Kerne werden auf mehreren Dies in einem einzigen Chip-Paket oder auf einem einzigen integrierten Schaltkreis-Die integriert und können Architekturen wie Multithreading, Superskalar, Vektor oder VLIW implementieren. Multicore-Architekturen werden entweder als homogen, das nur identische Kerne enthält, oder als heterogen, das nicht identische Kerne enthält, kategorisiert.
- Symmetrische Mehrfachverarbeitung: Multiprozessor-Computerhardware- und -softwarearchitektur, bei der zwei oder mehr unabhängige, homogene Prozessoren von einer einzigen Betriebssysteminstanz gesteuert werden, die alle Prozessoren gleich behandelt und mit einem einzigen, gemeinsam genutzten Hauptspeicher mit vollem Zugriff auf alle gemeinsamen Ressourcen und Geräte verbunden ist. Jeder Prozessor verfügt über einen privaten Cache-Speicher, kann über On-Chip-Mesh-Netzwerke verbunden werden und kann an jeder Aufgabe arbeiten, unabhängig davon, wo sich die Daten für diese Aufgabe im Speicher befinden.
- Verteiltes Rechnen: Verteilte Systemkomponenten befinden sich auf verschiedenen vernetzten Computern, die ihre Aktionen koordinieren, indem sie über reines HTTP, RPC-ähnliche Konnektoren und Nachrichtenwarteschlangen kommunizieren. Wesentliche Merkmale verteilter Systeme sind der unabhängige Ausfall von Komponenten und die Parallelität von Komponenten. Verteilte Programmierung wird typischerweise als Client–Server-, Drei-Tier-, n-Tier- oder Peer-to-Peer-Architekturen kategorisiert. Es gibt viele Überschneidungen im verteilten und parallelen Rechnen, und die Begriffe werden manchmal synonym verwendet.
- Massiv paralleles Rechnen: bezieht sich auf die Verwendung zahlreicher Computer oder Computerprozessoren, um gleichzeitig einen Satz von Berechnungen parallel auszuführen. Ein Ansatz beinhaltet die Gruppierung mehrerer Prozessoren in einem eng strukturierten, zentralisierten Computercluster. Ein anderer Ansatz ist Grid Computing, bei dem viele weit verteilte Computer zusammenarbeiten und über das Internet kommunizieren, um ein bestimmtes Problem zu lösen.Andere parallele Computerarchitekturen umfassen spezialisierte Parallelcomputer, Cluster-Computing, Grid-Computing, Vektorprozessoren, anwendungsspezifische integrierte Schaltungen, Allzweck-Computing auf Grafikverarbeitungseinheiten (GPGPU) und rekonfigurierbares Computing mit feldprogrammierbaren Gate-Arrays. Der Hauptspeicher in jeder parallelen Computerstruktur ist entweder verteilter Speicher oder gemeinsam genutzter Speicher.
Softwarelösungen und -techniken für Paralleles Computing
Gleichzeitige Programmiersprachen, APIs, Bibliotheken und parallele Programmiermodelle wurden entwickelt, um paralleles Computing auf paralleler Hardware zu ermöglichen. Einige Softwarelösungen und -techniken für das parallele Rechnen umfassen: Anwendungsprüfpunkt: Eine Technik, die Fehlertoleranz für Computersysteme bietet, indem alle aktuellen Variablenzustände der Anwendung aufgezeichnet werden, sodass die Anwendung im Fehlerfall von diesem Punkt aus wiederhergestellt und neu gestartet werden kann. Checkpointing ist eine entscheidende Technik für hochparallele Computersysteme, in denen Hochleistungsrechnen über eine große Anzahl von Prozessoren ausgeführt wird.
- Automatische Parallelisierung: bezieht sich auf die Umwandlung von sequentiellem Code in Multithread-Code, um mehrere Prozessoren gleichzeitig in einer SMP-Maschine (Shared Memory Multiprocessor) zu verwenden. Automatische Parallelisierungstechniken umfassen Parsen, Analysieren, Planen und Codegenerierung. Typische Beispiele für gängige Parallelisierungscompiler und -tools sind der Paradigm-Compiler, der Polaris-Compiler, der Rice Fortran D-Compiler, der SUIF-Compiler und der Vienna Fortran-Compiler.
- Parallele Programmiersprachen: Parallele Programmiersprachen werden typischerweise entweder als verteilter Speicher oder als gemeinsam genutzter Speicher klassifiziert. Während verteilte Speicherprogrammiersprachen Nachrichtenübermittlung verwenden, um zu kommunizieren, kommunizieren gemeinsam genutzte Speicherprogrammiersprachen, indem sie gemeinsam genutzte Speichervariablen manipulieren.
Unterschied zwischen Parallel Computing und Cloud Computing
Cloud Computing ist ein allgemeiner Begriff, der sich auf die Bereitstellung skalierbarer Dienste wie Datenbanken, Datenspeicher, Netzwerke, Server und Software über das Internet bezieht. Cloud-Computing-Dienste können öffentlich oder privat sein, werden vollständig vom Anbieter verwaltet und ermöglichen den Fernzugriff auf Daten, Arbeit und Anwendungen von jedem Gerät an jedem Ort, an dem eine Internetverbindung hergestellt werden kann. Die drei häufigsten Servicekategorien sind Infrastructure as as Service (IaaS), Platform as a Service (PaaS) und Software as a Service (SaaS). Cloud Computing ist ein relativ neues Paradigma in der Softwareentwicklung, das einen breiteren Zugang zu parallelem Computing über riesige, virtuelle Computercluster ermöglicht und es dem durchschnittlichen Benutzer und kleineren Organisationen ermöglicht, parallele Verarbeitungsleistung und Speicheroptionen zu nutzen, die normalerweise großen Unternehmen vorbehalten sind.
Unterschied zwischen Parallelverarbeitung und Parallelem Rechnen
Die Parallelverarbeitung ist eine Rechenmethode, bei der einzelne Teile einer insgesamt komplexen Aufgabe aufgebrochen und gleichzeitig auf mehreren CPUs ausgeführt werden, wodurch die Verarbeitungszeit verkürzt wird.Das Teilen und Zuweisen jeder Aufgabe zu einem anderen Prozessor wird typischerweise von Informatikern mit Hilfe von Parallelverarbeitungssoftware-Tools ausgeführt, die auch daran arbeiten, die Daten wieder zusammenzusetzen und zu lesen, sobald jeder Prozessor seine bestimmte Gleichung gelöst hat. Dieser Vorgang erfolgt entweder über ein Computernetzwerk oder über einen Computer mit zwei oder mehr Prozessoren.Parallelverarbeitung und paralleles Rechnen treten im Tandem auf, daher werden die Begriffe oft synonym verwendet; Wo jedoch Parallelverarbeitung die Anzahl der Kerne und CPUs betrifft, die parallel im Computer laufen, betrifft paralleles Rechnen die Art und Weise, wie sich Software verhält, um für diese Bedingung zu optimieren.
Unterschied zwischen sequentiellem und parallelem Rechnen
Sequentielles Rechnen, auch bekannt als serielle Berechnung, bezieht sich auf die Verwendung eines einzelnen Prozessors zur Ausführung eines Programms, das in eine Sequenz diskreter Anweisungen unterteilt ist, die jeweils nacheinander ohne Überlappung zu einem bestimmten Zeitpunkt ausgeführt werden. Software wurde traditionell sequenziell programmiert, was einen einfacheren Ansatz bietet, jedoch durch die Geschwindigkeit des Prozessors und seine Fähigkeit, jede Reihe von Anweisungen auszuführen, erheblich eingeschränkt ist. Wo Uni-Prozessor-Maschinen sequentielle Datenstrukturen verwenden, sind Datenstrukturen für parallele Rechenumgebungen gleichzeitig.
Die Messung der Leistung in der sequentiellen Programmierung ist weitaus weniger komplex und wichtig als Benchmarks im Parallel Computing, da es in der Regel nur darum geht, Engpässe im System zu identifizieren. Benchmarks im Parallel Computing können mit Benchmarking- und Performance-Regressionstestframeworks erreicht werden, die eine Vielzahl von Messmethoden wie statistische Behandlung und Mehrfachwiederholungen verwenden. Die Fähigkeit, diesen Engpass durch Verschieben von Daten durch die Speicherhierarchie zu vermeiden, zeigt sich insbesondere im Parallel Computing für Data Science-, Machine Learning-Parallel Computing- und Parallel Computing-Anwendungsfälle für künstliche Intelligenz.
Sequentielles Rechnen ist das Gegenteil von parallelem Rechnen. Während paralleles Rechnen komplexer sein kann und im Vorfeld höhere Kosten verursacht, überwiegt der Vorteil, ein Problem schneller lösen zu können, häufig die Kosten für den Erwerb von Hardware für paralleles Rechnen.
Bietet OmniSci eine parallele Rechenlösung an?
Die OmniSci-Plattform nutzt die enorme parallele Rechenleistung von GPUs für Big-Data-Analysen und gibt Big-Data-Analysten und Datenwissenschaftlern die Möglichkeit, datenwissenschaftliche Workflows über Milliarden von Datensätzen in Millisekunden interaktiv abzufragen, zu visualisieren und zu optimieren. Die OmniSci-Plattform wurde entwickelt, um die Skalierbarkeits- und Leistungsbeschränkungen älterer Analysetools zu überwinden, die mit der Skalierung, Geschwindigkeit und den Standortattributen heutiger Big Datasets konfrontiert sind.