Mit der Einführung von Multicorerechnern ist es notwendig geworden serielle Programme zu parallelisieren (Threaden), damit die Applikationen alle vorhandenen Threads ausnutzen können. Die Betriebsysteme unterstützen zwar die Softwarenutzung mehrer CPU-Kerne, leider aber nicht das automatische Parallelisieren bzw. das Threaden innerhalb einer Applikation.

Um die verfügbaren Kerne der neuen Prozessorarchitekturen auszunutzen und um die maximale Leistung für Softwareapplikationen herauszubekommen, ist es notwendig, dass serielle Programme ge-threaded werden. Nur so lassen sich Software-Leistungssteigerungen erreichen. Das Threaden der Applikationen und auch das Skalieren der Anwendung geschehen in der Regel leider nicht automatisch. Es erfordert neue Entwicklungskonzepte und eine mehr oder wenig aufwändige Anpassung der Programme sowie die Nutzung neuer und erweiterter Entwicklungswerkzeuge, die in diesem Artikel beschrieben werden.

Die heutzutage am häufigsten anzutreffende Situation dürfte sein, dass der Softwareentwickler eine bereits funktionierende, getestete serielle Anwendung besitzt, die er Threaden möchte (siehe Bild). Um von diesem Punkt zum parallelen Programm zu gelangen müssen die 4 dargestellten Entwicklungsphasen durchlaufen werden. Das Werkzeug, das einem bei dem ersten Schritt, der architekturelle Analyse, hilft, ist der Intel VTune Performance Analyzer (mehr Infos unter www.intel.com/software/products). Er analysiert und visualisiert in graphischer Form die Programmbereiche, -routinen und -schleifen, die viel Zeit beanspruchen. Diese Bereiche sind typischerweise gute Kandidaten zum Parallelisieren.

In der zweiten Phase (die Code-Umsetzung von seriell nach parallel) sind die folgenden Methoden möglich: Native Threading, OpenMP, Thread Safe Bibliotheken, Autoparallelisieren und Autovektorisieren. Dabei helfen der Intel C++ Compiler, die Threading Building Blocks (STL ähnliche Template Bibliothek) oder die Intel Performance Primitives, eine Multimedia Bibliothek. In der dritten Phase ist es notwendig nach neuen Fehlertypen Ausschau zu halten, die sich beim Threaden einschleichen. Diese Fehler sind Data-Races und Deadlocks. Beide sind nichtdeterministischer Natur und tauchen sporadisch auf, was das Debuggen erheblich erschwert. Das Intel Entwicklungswerkzeug, der Thread Checker hilft dabei diese Fehler aufzudecken.

In der letzten Phase wird man nach Ineffizienzen suchen, die durch das Threaden auftreten können. Dazu gehören u.a. Threads, die zwar parallel laufen, zeitlich jedoch unterschiedlich lang sein können. Das bedeutet, dass ein Thread bereits fertig ist (und der entsprechende CPU-Kern in einen Idlemodus eintritt und ungenutzt wartet), während der andere noch läuft. Dieses Load-Imbalancing gilt es zu beseitigen. Darüber hinaus findet beim Threading Sychronisation zwischen den Threads statt. Dieser zusätzliche Overhead kann durch ungeschicktes Programmieren mehr oder weniger Programmlaufzeit kosten. Auch hier helfen Intel Tools, im SMP-Bereich der Thread Profiler.

Um das Intel Entwickler Toolkit zur Parallelisierung serieller Applikationen

zu gewinnen einfach bis zum 31.5.09 ein E-Mail senden mit Betreff:  „Intel Gewinnspiel: Parallelisierung“  an:

Diana.Boenning@huethig.de .