»Multi Core«-Programmierung Software-Tool für die Parallelisierung in der Wolke

Mit einer ausgeklügelten Entwicklungsumgebung macht ein holländisches Software-Unternehmen die Parallelisierung von bestehendem C-Code auch für spezielle Anwendungen wirtschaftlich. Das Programm nutzt neueste Verfahren der Mustererkennung für die Analyse und testet den parallelisierten Code in der „Cloud“.

Schon bei zwei Prozessoren gelingt es in aller Regel nicht, das Doppelte an Rechenleistung herauszuholen, wenn diese am gleichen Programm arbeiten. Der Grund: In einem gewöhnlichen Programm ist die Ausführung eines Teils in der Regel von den Ergebnissen abhängig, die von einem zeitlich vorausgehenden Programmteil geliefert werden. Da immer mehr „Multi Core“-Strukturen auf Chip-Ebene verfügbar sind, wird im Bereich der Embedded-Systeme verstärkt nach Methoden gesucht, mit denen sich die theoretisch mögliche doppelte oder vierfache Systemleistung eines „Dual Core“- oder „Quad Core“-Prozessorchips wenigstens näherungsweise erreichen lässt.

Aber ein Programm, das für einen Core geschrieben wurde, durch Parallelisierung zu beschleunigen, ist immer noch eine Herausforderung für den „Multi Core“-Programmierer. Für eine erfolgreiche „händisch“ durchgeführten Segmentierung bedarf es großer Erfahrung, jedenfalls sind die Prozesse langwierig und bergen Fehlerquellen. Es liegt also auf der Hand, dass eine automatisierte Umsetzung eines Ein-Core-Codes in einen parallel zu verarbeitenden auf der Wunschliste der Software-Projektmanager ganz oben steht.

Entwicklungsumgebung für die Parallelisierung

Die holländische Software-Schmiede Vector Fabrics bietet mit der Entwicklungsumgebung „vfAnalyst“ die Möglichkeit, bestehenden C-Code in eine Struktur zu wandeln, die auf mehreren Cores parallel abgearbeitet werden kann.

Dazu analysiert die Software zunächst den Code und zeigt dem Anwender zunächst, welche Teile seiner Software sich nicht für eine Parallelisierung eignen und welche besonders geeignet sind. Hierzu werden die Programmteile statisch und dynamisch untersucht. Auf der Grundlage eigens entwickelter Algorithmen, die von Methoden der Mustererkennung Gebrauch machen, ermittelt der vfAnalyst zunächst den Teil des Programms, der die höchste Prozessorlast verursacht, und zeigt Varianten für die Parallelisierung dieses Programmsegments. Dabei wird auch untersucht, ob es Abhängigkeiten zu anderen Programmteilen gibt, die eine Parallelisierung erschweren bzw. unmöglich machen. Das Software-Tool zeigt zudem die Ursachen für die Abhängigkeiten und ermöglicht so dem Software-Entwickler eine Optimierung seines Codes in interaktiver Weise.

Die Spezialisten von Vector Fabrics sehen ihren vfAnalyst als eine Art Navigator, der dem Software-Entwickler den Weg zur Parallelisierung auch komplexer und umfangreicher Programme weist. Die Abhängigkeiten, die eine Parallelisierung verhindern, lassen sich nach verschiedenen Ursachen klassifizieren.

Die einfachste besteht darin, dass ein Programmteil auf das Ergebnis eines anderen Programmteils wartet. Diese Abhängigkeit kann rasch erkannt werden, sie beginnt in der Regel mit einem „Load“-Befehl, mit dem ein bestimmter Wert aus dem Speicher in den Akkumulator geladen wird. Die nachfolgende Sequenz, mit der dieser Wert dann verarbeitet wird, endet dann mit einem „Store“-Befehl, der neue Wert steht dann nachfolgenden Programmen zur Verfügung.

Ein strukturelles Merkmal der Programmiersprache C, hinter der sich weitere Abhängigkeiten verbergen, sind Pointer. Diese Überreste aus der Frühzeit der Programmierung erschweren jedwede Optimierung, der Programmablauf selbst ist bei ihrer Verwendung nur noch schwer nachzuvollziehen. Erst durch eine Analyse-Software lässt sich hier überhaupt Klarheit über den Ablauf gewinnen.

Statische und dynamische Evaluierung

Während sich aus der Analyse des geschriebenen Programmtextes, der statischen Evaluierung, ergibt, an welchen Stellen eine Optimierung durch Parallelisierung sinnvoll ist, zeigt der dynamische Test, welcher Zeitgewinn mit einer jeweils durchgeführten Modifikation zu erwarten ist. Der vfAnalyst bietet dem Programmierer auch diese Möglichkeit, dieser kann dann Besonderheiten eines Programms aufspüren und auch seine durchgeführten Modifikationen sofort in der Simulation überprüfen. Allerdings muss er hierfür die Test-Parameter bereitstellen, die eine praxisnahe Aussage über das Programmverhalten erlauben.

Die Simulation eines umfangreichen, in C geschriebenen Programms erfordert jedoch eine Rechenleistung, die dem Entwickler physikalisch nicht unbedingt zur Verfügung steht. Vektor Fabrics bietet daher seinen Nutzern einen Online-Dienst, der „Cloud Computing“ nutzt. Der Anwender lädt seinen Code hoch, die dynamischen Tests und die Analyse werden dann von einem Simulationsprogramm in der „Cloud“ durchgeführt. Dabei ist der Code sicher vor der Einsicht oder dem Zugriff Dritter. Das Unternehmen bietet so seinen Anwendern den Zugang zu vfAnalyst mitsamt statischer und dynamischer Analyse.