Refine
Year of publication
- 2015 (1)
Document Type
- Bachelor Thesis (1)
Language
- German (1)
Has Fulltext
- yes (1)
Is part of the Bibliography
- no (1) (remove)
Keywords
Institute
Moderne Programme bewältigen immer komplexere und leistungsfordernde Aufgaben. Mit diesem Anstieg geht jedoch ein höherer Bedarf an Hardware-Ressourcen einher, insbesondere an höheren Prozessorkapazitäten. Diesem Trend wurde mit einer konstanten Erhö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ührt auch zu neuen Programmiertechniken, die Programme auf mehreren Prozessorkernen verteilen. Sie stellen einen sicheren Datenzugriff, deterministische Ausführung und Leistungsverbesserungen sicher. Ursprünglich mussten Programmierer diese Techniken manuell programmieren, heute existieren Technologien, die eine solche Verwaltung automatisch durchführen.
In dieser Thesis werden verschiedene High-Level Programmiertechniken anhand einer Beispielanwendung hinsichtlich ihrer Leistung, Ressourcenverwaltung und Bedienbarkeit verglichen. Die Beispielanwendung soll eine tatsächlich einsetzbare Anwendung repräsentieren, die grundlegende Probleme, wie voneinander unabhängige und abhängige Berechnungsschritte aufweist, weshalb eine Physiksimulation gewä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ührungszeiten der verschieden Simulationen gemessen und analysiert. Die Ressourcenverwaltung wurde anhand der Prozessorauslastung der verschiedenen Implementierungen verglichen. Um die Bedienbarkeit der verschiedenen Parallelisierungstechniken gegenüberzustellen, wurde die Anzahl der Quelltextzeilen ermittelt und in Relation gesetzt. Die Analyse dieser Daten zeigt die Unterschiede der Parallelisierungstechniken. Während die Implementierung unter Nutzung von Java Parallel Streams hohe Prozessorauslastung, und, verglichen mit den anderen Techniken, einen hohen Beschleunigungsfaktor sowie geringe Komplexitä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ät der Implementierung mit Goroutinen zahlt sich durch vergleichsweise geringe Ausführungszeiten trotz niedriger Prozessorauslastung aus.