Um OpenCL-Anwendungen auf der NVIDIA Platform zu tracen gibt es den NVIDIA Visual Profiler. Um sie auf der AMD Platform zu tracen gibt es den AMD APP Profiler. Problem gelöst – oder? Leider gibt es ein paar spezielle Situationen in denen das nicht reicht. Der AMD APP Debugger kann zwar auf der Kommandozeile tracen und funktioniert unter Linux, seine Visualisierung ist allerdings als Plugin für Visual Studio implementiert. Die Express-Versionen von Visual Studio unterstützen leider keine Plugins, und Visual Studio kaufen nur um ein Plugin auszuführen? Der inzwischen kostenlose gDEBugger kann zwar unter Linux visualisieren, kann aber nicht auf der Kommandozeile messen. Tau, eigentlich zum Profilen und Tracen von großen Clusteranwendungen gedacht, löst das Problem. Aufgrund seines eigentlichen Anwendungszieles ist es zwar etwas komplexer zu verwenden, aber weniger Aufwand als die Visualisierung der Tracingdaten komplett selbst zu schreiben, wie es mein erster Versuch war.

Tau installieren

Tau ist für eine Anwendung ihrer Größe recht leicht zu installieren. Zunächst sind die Quellen von http://www.cs.uoregon.edu/Research/tau/downloads.php herunterzuladen. Trotz des Formulars ist hierzu keine Anmeldung notwendig. Anschließend lässt sich Tau mit dem üblichen Zweisatz installieren. Wenn es nur um OpenCL geht ist hierbei keine große Konfiguration notwendig.

./configure -opencl=
make install

Tau installiert sich übrigens in ein nach der Architektur benanntes Unterverzeichnis des Build-Verzeichnisses…. Soll es woanders lassen müsste man configure den passenden Pfad via -prefix mitgeben. Man beachte, das es hier nur einen Minus gibt….

Anschließend müssen noch PATH und LD_LIBRARY_PATH angepasst werden, also z.B.:

export PATH=$HOME/tau-2.21.1/x86_64/bin/:$PATH
export LD_LIBRARY_PATH=$HOME/tau-2.21.1/x86_64/lib/:$LD_LIBRARY_PATH

Trace erstellen

Um ein Trace zu erstellen verwendet man tau_exec wie folgt:

TAU_TRACE=1 tau_exec -T PROFILE,SERIAL -opencl  

TAU_TRACE=1 ist notwendig damit Tau auch Tracing und nicht nur Profiling betreibt. SERIAL ist notwendig damit tau_exec die Anwendung direkt und nicht via mpirun startet.

Anschließend existieren mehrere tautrace.0.0.?.trc-Dateien. Da Jumpshot mit slog2-Dateien arbeitet müssen diese noch konvertiert werden:

tau_treemerge.pl
tau2slog2 tau.trc tau.edf -o .slog2

Trace analysieren

Die slog2-Datei kann anschließend mit Jumpshot analysiert werden. Jumpshot ist in Tau enthalten, muss also nicht extra installiert werden. Die slog2-Datei enthält alle Trace-Informationen, kann also problemlos zur analyse auf andere Rechner verschoben werden.

Für eine sinnvolle Analyse in Jumpshot empfiehlt es sich die Node aufzuklappen um die einzelnen OpenCL devices und den Host-Thread als einzelne Lanes zu sehen. Leider ist Jumpshot kein besonders nutzerfreundliches Programm, sondern versucht sämtliche Java-Vorurteile zu erfüllen. Deshalb sollte man nach jeder Einstellungsändern – ob ausklappen der Lanes oder An- bzw. Abwahl von einzelnen Ereignissen – den Refresh-Knopf nutzen.