www.wikidata.de-de.nina.az
Parallele Programmierung ist ein Programmierparadigma Es umfasst zum einen Methoden ein Computerprogramm in einzelne Teilstucke aufzuteilen die nebenlaufig ausgefuhrt werden konnen zum anderen Methoden nebenlaufige Programmabschnitte zu synchronisieren Dies steht im Gegensatz zur klassischen sequentiellen oder seriellen Programmierung Ein Vorteil der Parallelen Programmierung ist neben moglicher schnellerer Programmausfuhrung bspw bei Nutzung mehrerer Prozessorkerne die Moglichkeit das typische Alltagsphanomen Nebenlaufigkeit direkt in Programmen abzubilden was zu einfacherem verstandlicherem Quelltext fuhren kann Ein Nachteil ist dass das Laufzeitverhalten paralleler Algorithmen schwieriger nachvollziehbar sein kann als das eines aquivalenten sequentiellen Algorithmus Inhaltsverzeichnis 1 Umsetzung 1 1 Unterstutzende Hardware 2 Konflikte 3 Parallele Programmiersprachen 4 Effizienz 5 Siehe auch 6 LiteraturUmsetzung BearbeitenEs ist fur eine Parallelisierung theoretisch gleichgultig ob die einzelnen Programmteile tatsachlich echt gleichzeitig von unabhangigen Ausfuhrungseinheiten bearbeitet werden oder ob sie nur quasi parallel ausgefuhrt werden siehe Time Sharing Multitasking Bei der Parallelen Programmierung verwendet man den weniger strengen Begriff der Nebenlaufigkeit bei dem der Programmcode nicht streng hintereinander sondern parallel ausgefuhrt wird Zwei Programmteile sind genau dann parallelisierbar wenn die parallele verzahnte oder verdrehte Ausfuhrung zum selben Resultat fuhrt wie das sequentielle Ausfuhren Parallelisierbarkeit Ist dies nicht gegeben so kann die Ausfuhrung zu einer Race Condition fuhren Die Nebenlaufigkeit von mehreren unabhangigen Prozessen bezeichnet man als Multitasking Nebenlaufigkeit innerhalb eines Prozesses als Multithreading In den Fruhzeiten der Computerentwicklung waren auch reine Time Sharing Systeme weit verbreitet die eine Nebenlaufigkeit auf Benutzerebene ermoglichten Unterstutzende Hardware Bearbeiten Meist wird die parallele Ausfuhrung eines Programms hardwareseitig unterstutzt die Programmiersprachen sind dann im Allgemeinen darauf angepasst So kann Parallele Programmierung zum Beispiel explizit dadurch geschehen dass der Programmierer Programmteile in separaten Prozessen oder Threads ausfuhren lasst oder es geschieht automatisch so dass kausal unabhangige parallelisierbare Anweisungsfolgen nebeneinander ausgefuhrt werden Diese automatische Parallelisierung kann durch den Compiler vorgenommen werden wenn als Zielplattform ein Computer mit Mehrkernprozessor oder ein Parallelrechner zur Verfugung steht aber auch einige moderne CPUs konnen solche Unabhangigkeiten im Maschinencode bzw Mikrocode eines Programms erkennen und die Anweisungen so auf verschiedene Teile des Prozessors verteilen dass sie gleichzeitig ausgefuhrt werden Out of order execution Konflikte BearbeitenSobald die einzelnen Prozesse oder Threads aber untereinander kommunizieren sind sie streng genommen nicht mehr als Ganzes nebenlaufig sie beeinflussen sich ja nur noch einzelne Teilablaufe sind zueinander nebenlaufig Wenn nun die Reihenfolge der Ausfuhrung der Kontaktpunkte oder Kommunikationspunkte nicht entsprechend vorgegeben ist konnen sich daraus Konflikte ergeben insbesondere eine so genannte Verklemmung deadlock wenn zwei Ablaufe gegenseitig aufeinander warten bzw sich gegenseitig blockieren Zur Losung dieser Problematik werden verschiedene Techniken herangezogen Der Kontext jedes Programmteils muss vor unerwarteter Veranderung durch andere Teile geschutzt werden Synchronisierung Soll ein gemeinsamer Zugriff auf Daten realisiert werden wobei zumindest eine Partei schreibend verandernd zugreifen mochte dann muss der Zugriff synchronisiert werden bspw durch gegenseitigen Ausschluss Mutex unter Benutzung von Monitoren oder von Semaphoren Alternativ kann auch verlangt werden dass bestimmte Aktionen von zwei Prozessen gemeinsam ausgefuhrt werden mit so genannten Rendezvous Eine weitere sichere Art der Kommunikation sind Warteschlangen Diese Techniken losen das Problem des gleichzeitigen Zugriffs auf Ressourcen verhindern jedoch keine Verklemmungen ganz im Gegenteil Besonders wichtig sind solche Techniken in verteilten Systemen vor allem um die Integritat von verteilten Transaktionen zu gewahrleisten Parallele Programmiersprachen BearbeitenDie meisten Programmiersprachen bieten Moglichkeiten zur Parallelisierung von Ablaufen Einige Sprachen sind jedoch von Grund auf fur paralleles Programmieren entworfen oder besitzen diese Fahigkeit inharent Newsqueak in den 1980er Jahren veroffentlichte Sprache zur Implementierung grafischer Benutzeroberflachen Occam 1985 veroffentlichte imperative Programmiersprache die auf Communicating Sequential Processes aufbaut Scratch 2007 veroffentlichte bildungsorientierte visuelle Programmiersprache Eine erstaunliche Eigenschaft von Scratch ist dass das eigentlich komplexe Programmierparadigma Parallele Programmierung quasi nebenbei eingefuhrt wird Im Gegensatz zu traditionellen bildungsorientierten Programmiersprachen wird dieses in Scratch auch von Anfangern intuitiv sofort genutzt so dass sie sich spater ggf wundern dass Profi Programmiersprachen zunachst nur sequentiell arbeiten X10 entwickelt bei IBM zur Programmierung massiv paralleler Systeme Erlang wurde bei Ericsson von Joe Armstrong und anderen entwickelt Chapel Konkurrent zu X10 von Cray Unified Parallel C eine Erweiterung von C99 vom UPC Konsortium Rust 2015 entwickelte Programmiersprache von Mozilla Research Group welche C und C ablosen soll GOEffizienz BearbeitenDas gleichzeitige Abarbeiten der Berechnungen verkurzt im Allgemeinen die Ausfuhrungszeit eines Programms Bezuglich der verbrauchten CPU Zeit ist ein paralleler Algorithmus jedoch fast immer schlechter als ein serieller da die Synchronisierung der Ablaufe zusatzlichen Verwaltungsaufwand erzeugt Auf einem Einkernsystem sind somit nur Parallelisierungen sinnvoll bei denen ein Ausfuhrungsstrang weiterarbeiten kann wahrend ein anderer warten muss soll ohne Parallelisierung wurde dieser Warte Zwang das Hintergrund Weiterrechnen blockieren Meistens muss darauf gewartet werden dass das Betriebssystem einen Auftrag des Programms erledigt hat oder der Ausfuhrungsstrang soll auf weitere Benutzereingaben warten wahrend im Hintergrund Abarbeitungen z B zuvor ausgeloster Benutzerauftrage berechnet werden Um Parallele Programmierung voll auszunutzen sind mehrere Ausfuhrungseinheiten notig Techniken dafur sind Simultaneous Multithreading SMT z B Hyper Threading Technology HTT Symmetrisches Multiprocessing SMP z B mittels Multicore Prozessor oder mehrerer CPUs Den Extremfall bildet das Massively Parallel Processing MPP mit zum Teil mehreren tausend Prozessoren Verbreitet ist auch ganze Verbunde von Einzelrechnern zum parallelen Berechnen einzusetzen Computercluster Auf der anderen Seite sollte moglichst wenig Kontrollcode zur Koordination der Threads vorhanden sein falls dieser nur sequentiell ausgefuhrt werden kann Dieser Sachverhalt ist Ergebnis des Amdahlschen Gesetzes uber die Parallelisierungseigenschaften von Programmen Siehe auch BearbeitenParalleler Algorithmus Synchrone Kommunikation Asynchrone Kommunikation Sequentialisierung Graphpartitionierung OpenMP MPI VektorprozessorLiteratur BearbeitenPeter Ziesche Nebenlaufige amp verteilte Programmierung W3L 2004 ISBN 3 937137 04 1 Douglas Schmidt Michael Stal Hans Rohnert Frank Buschmann Pattern orientierte Softwarearchitektur Muster fur nebenlaufige und vernetzte Objekte dpunkt 2002 ISBN 3 89864 142 2 M Ben Ari Grundlagen der Parallel Programmierung 1984 ISBN 3 446 14155 3 Dietrich Boles Parallele Programmierung spielend gelernt mit dem Java Hamster Modell Programmierung mit Java Threads PDF 4 1 MB Vieweg Teubner Verlag 2008 ISBN 978 3 8351 0229 3 Wolfgang W Baumann Parallel Computing als Hilfsmittel im technisch wissenschaftlichen Hochstleistungsrechnen Eine Einfuhrung 2000 pdf Brian Goetz Tim Peierls Joshua Bloch Joseph Bowbeer David Holmes Java Concurrency in Practice Addison Wesley Longman 2006 ISBN 978 0 321 34960 6 Abgerufen von https de wikipedia org w index php title Parallele Programmierung amp oldid 232775617