Admin

News

The last commits for conyar added support for internal versi (...)
New C++ framework for distributed systems (...)

GPL v3
Valid XHTML 1.1
Valid CSS!

Elaboration

Author: Markus Pargmann   Created: 10 December 2007   Last update: 12 August 2009   Revision: 1
I wrote this elaboration for the school. This elaboration is only available in german. Following you can find the introduction in german.

Synchronisation von Threads zur Optimierung des Rechnens auf Mehrkernprozessoren am Beispiel der Simulation von Planetenbewegungen

In dieser Facharbeit möchte ich auf ein aktuelles Problem eingehen, das sich auf neue Prozessoren bezieht. Seit etwa einem Jahr gibt es nun die Prozessoren, die mehrere Prozessorkerne besitzen. Dabei sind in einem Prozessor mehrere Prozessoren vereinigt, die dafür sorgen, dass mehrere Prozesse wirklich parallel bearbeitet werden können und nicht nur anscheinend parallel laufen, wie es ein Scheduler ermöglicht. Dieser weist verschiedenen Prozessen die CPU zu.
Durch diese neue Art von Prozessoren müssen folglich auch Programme anders konzipiert werden, da sie nun mehrere Kerne nutzen können. Benutzt ein Programm nur einen Thread zur Ausführung, so bringen diesem Programm mehrere Prozessoren oder Prozessorkerne keinen Vorteil. Ein Prozess kann nicht ohne Analyse der Befehle in mehrere parallele Prozesse aufgeteilt werden, da gewisse Abhängigkeiten zwischen Befehlen bestehen. Deshalb müssen die Programme an diese Mehrkern-Architekturen angepasst werden. Dazu ist es notwendig ein Programm in mehrere Prozesse aufzuteilen, die dann auf den verschiedenen Prozessoren laufen und somit die Ausführungsgeschwindigkeit des Programms steigern können.
Dabei muss jedoch beachtet werden, dass die einzelnen Prozesse nicht mehr gezwungen sind in der gleichen zeitlichen Reihenfolge zu laufen. Das bedeutet, dass Prozesse vollkommen unabhängig voneinander sein müssen, um zu gewährtleisten, dass das Resultat sich nicht bei jeder Programmausführung ändert oder das ganze Programm nicht mehr funktioniert. Um die einzelnen Prozesse trotzdem in das Programm einzubinden, ist die Synchronisation der Prozesse sinvoll. Unter anderem wird so auch erreicht, dass Daten ausgetauscht werden können.
Wie stark man optimieren kann wird vor allem bei rechenintensiven Anwendungen deutlich, bei denen es viele unabhängige Rechnungen gibt, da hier durch das Ausnutzen mehrerer Prozessoren ein erheblicher Geschwindigkeitsvorteil erreicht werden kann. Hier werde ich auf die Grundlagen eingehen die man benötigt um möglichst optimal Programme für mehrere Prozessoren zu schreiben. Anschließend werde ich auf die Optimierung von Programmen eingehen, die keine langen unabhängigen Rechnungen haben. Da dies oft bei Simulationen der Fall ist, werde ich die Optimierung an einer selbstimplementierten Simulation von Planetenbewegungen in Java darstellen. Hierbei handelt es sich um die Simulation von mehreren punktförmigen Massen unter Berücksichtigung der Gravitation und Vernachlässigung von Kollisionen.
Die Frage die sich hier stellt ist, wie man eine solche Simulation gut in Prozesse aufteilen kann und diese dabei möglichst optimal synchronisiert. In dieser Facharbeit werde ich auf ein mögliches Verfahren im Vergleich zu anderen Synchronisationsmöglichkeiten eingehen. Die Realisierung von Threads in anderen Programmiersprachen außer Java werde ich nicht ansprechen.
Meine Facharbeit behandelt nur die Optimierung von Programmen am Beispiel von Mehrkernprozessoren. Die Probleme und Lösungen können teilweise auf andere Multicore-Architekturen übertragen werden.

Download

Elaboration
Program for simulating planetmovement
Statistics
Current visitors: 2
Visitors: 9892
Site views: 190
Website views: 14703