Tipp 7: Schalte die Nebenläufigkeit (Concurrency) ab, um Dein Programm seriell zu testen.
Bisher hatte der OpenMP-Ansatz eine relativ einfache Möglichkeit, das parallele Programm zu Testzwecken kurzzeitig zu serialisieren (also auf einen Thread limitiert) und damit nicht-deterministische Fehlerquellen auszuschließen. Lediglich die seriellen Bugs werden bearbeitet. Erst wenn diese seriellen Bugs beseitigt sind, wendet man sich den parallelen Bugs zu und schaltet den seriellen Modus wieder ab.
Für das Serialisieren im OpenMPUmfeld wird eine Umgebungsvariable durch die Anweisung #define NUM_THREADS 1 auf den Integerwert „1“ gesetzt. Mit einer zweiten Anweisung omp_set_num_threads (NUM_THREADS) lässt sich die Umgebungsvariable im Programmablauf aufrufen und nutzen. Der Nachteil dieser Lösung ist, dass man jedes Mal neu compilieren muss.
Die Intel Parallel Debugger Extensions, die Bestandteil der Tool-Komponente Parallel Composer sind, gehen einen Schritt weiter und vermeiden diesen Nachteil. Sie bieten an, OpenMP-Programmteile seriell ablaufen zu lassen, indem die Anweisung „Serialize Parallel Regions“ (siehe Bild 1) eingefügt wird. Ein zweiter Modus erlaubt der Parallel Debugger Extension sogar ein schrittweises, deterministisches Abarbeiten von Open- MP-Code.
Das Verhalten des zu analysierenden Programmbereichs ist in Bild 2 zusammengefasst. Die Vorteile des temporären Abschaltens des nichtdeterministischen Verhaltens von Threads sind evident. Der Entwickler kann sich nun auf den Test logischer Fehler – wie bei seriellen Programmen üblich – konzentrieren und muss nicht zwei verschiedene Fehlerursachen (serielle und parallele, also logische und nicht-deterministische) gleichzeitig testen.
Tipp 8: Benutze die neuesten „State of the Art“-Software-Werkzeuge
Beim parallelen Programmieren benötigt man Tools, die einem helfen, parallele Applikationen zu debuggen und zu verbessern. Die herkömmlichen, verfügbaren seriellen Tools sind ineffektiv, um diese Aufgabe zu erfüllen. Die neuesten, ein paralleles Debuggen erlaubenden Tools, wie die Intel Parallel Suite, helfen vor allem bei zwei Herausforderungen des Parallelisierens: Skalierbarkeit und Korrektheit der parallelen Programme – letzteres ist gleichbedeutend mit dem Auffinden nicht-deterministischer Fehler.
Verschiedene Tool-Komponenten sind notwendig, um die verschiedenen Phasen des Designs zu unterstützen:
Da der Trend mit Multicore- und Manycore-Prozessoren zu noch mehr Kernen geht, werden die Programmierer, die die oben genannten Schritte schnell verinnerlichen, ausprobieren und umsetzen, in Zukunft bei ihrer Arbeit davon profitieren. Es gibt keinen Grund, damit zu warten, sich diese kritischen Fähigkeiten anzueignen. Ein erster Schritt wäre, Intel Parallel Studio zu evaluieren. Man findet eine Evaluierungversion (Vollversion mit begrenzter Laufzeit) unter www.intel.com/go/parallel.
Außerdem werden neueste Tools auch neuere Konzepte der Parallelisierung offerien. Intel plant z.B., noch 2010 mit CT ein neues Werkzeug bzw. API-Konzept für Daten-Parallelismus anbieten, was die Parallelisierung von Applikationen beschleunigt und Data Races vermeidet.