@phdthesis{Binder, type = {Bachelor Thesis}, author = {Benjamin Binder}, title = {Evaluation verschiedener Techniken zur Parallelisierung von Programmen anhand einer Beispielanwendung}, url = {https://nbn-resolving.org/urn:nbn:de:bsz:900-opus4-39400}, abstract = {Moderne Programme bew{\"a}ltigen immer komplexere und leistungsfordernde Aufgaben. Mit diesem Anstieg geht jedoch ein h{\"o}herer Bedarf an Hardware-Ressourcen einher, insbesondere an h{\"o}heren Prozessorkapazit{\"a}ten. Diesem Trend wurde mit einer konstanten Erh{\"o}hung der Taktraten von Prozessoren begegnet. Doch seit 2005 wurde dieser Trend aufgrund von physikalischen Grenzen gebremst. Stattdessen installieren Prozessorhersteller nun mehrere Prozessorkerne mit geringerer Taktrate auf einem Prozessor. Dies f{\"u}hrt auch zu neuen Programmiertechniken, die Programme auf mehreren Prozessorkernen verteilen. Sie stellen einen sicheren Datenzugriff, deterministische Ausf{\"u}hrung und Leistungsverbesserungen sicher. Urspr{\"u}nglich mussten Programmierer diese Techniken manuell programmieren, heute existieren Technologien, die eine solche Verwaltung automatisch durchf{\"u}hren. In dieser Thesis werden verschiedene High-Level Programmiertechniken anhand einer Beispielanwendung hinsichtlich ihrer Leistung, Ressourcenverwaltung und Bedienbarkeit verglichen. Die Beispielanwendung soll eine tats{\"a}chlich einsetzbare Anwendung repr{\"a}sentieren, die grundlegende Probleme, wie voneinander unabh{\"a}ngige und abh{\"a}ngige Berechnungsschritte aufweist, weshalb eine Physiksimulation gew{\"a}hlt wurde. Die Parallelisierung wurde mit Goroutinen, Java Parallel Streams, Thread Pools und C++ async-Funktionen in ihrer jeweiligen Programmiersprache realisiert. Um die verschiedenen Parallelisierungstechniken zu vergleichen, wurden mehrere Merkmale der parallelen Implementierungen gemessen und mit einer sequentiellen Referenzimplementierung verglichen. Um die Leistung der Techniken zu messen, wurden die Ausf{\"u}hrungszeiten der verschieden Simulationen gemessen und analysiert. Die Ressourcenverwaltung wurde anhand der Prozessorauslastung der verschiedenen Implementierungen verglichen. Um die Bedienbarkeit der verschiedenen Parallelisierungstechniken gegen{\"u}berzustellen, wurde die Anzahl der Quelltextzeilen ermittelt und in Relation gesetzt. Die Analyse dieser Daten zeigt die Unterschiede der Parallelisierungstechniken. W{\"a}hrend die Implementierung unter Nutzung von Java Parallel Streams hohe Prozessorauslastung, und, verglichen mit den anderen Techniken, einen hohen Beschleunigungsfaktor sowie geringe Komplexit{\"a}t aufweist, kann die Implementierung mit Hilfe von C++ async-Funktion nicht mehrere Prozessorkerne auslasten und damit nicht die Vorteile von Parallelisierung ausnutzen. Die hohe Komplexit{\"a}t der Implementierung mit Goroutinen zahlt sich durch vergleichsweise geringe Ausf{\"u}hrungszeiten trotz niedriger Prozessorauslastung aus.}, language = {de} }