Erste Schritte mit Intel Trace Analyzer und Collector
Erste Schritte mit Intel® Trace Analyzer und Collector
Verwenden Sie dieses Dokument „Erste Schritte“ und eine vorab erfasste Ablaufverfolgung file um eine grundlegende MPI-Leistungsanalyse mit Intel® Trace Analyzer and Collector zu durchlaufen.
Intel Trace Analyzer und Collector hilft bei der Untersuchung der MPI-Nutzungseffizienz (Message Passing Interface) und identifiziert Kommunikations-Hotspots, Synchronisierungsengpässe und Lastausgleich. Weitere Informationen zum Produkt finden Sie auf der Produktseite von Intel Trace Analyzer und Collector.
Laden Sie Intel Trace Analyzer und Collector herunter
- als Teil des Intel® oneAPI HPC Toolkits
- als eigenständiges Tool
Voraussetzungen
- Stellen Sie vor dem Ausführen von Intel Trace Analyzer und Collector sicher, dass Sie die neueste Intel® MPI-Bibliothek und den Intel® oneAPI DPC++/C++-Compiler oder Intel® Fortran-Compiler installiert haben.
- Dadurch werden die erforderlichen Umgebungsvariablen für Compiler, die Intel MPI-Bibliothek und Intel Trace Analyzer und Collector festgelegt, und Sie können Ihre Anwendungen verfolgen.
- Weitere Informationen finden Sie unter: Systemanforderungen für das Intel® oneAPI HPC-Toolkit.
Verstehen Sie den Arbeitsablauf
- Verfolgen Sie Ihre Anwendung
- Analysieren Sie die aktivsten MPI-Funktionen
- Identifizieren Sie problematische Interaktionen
- Verbessern Sie die Leistung Ihrer Anwendung, indem Sie die problemverursachende Funktion ersetzen
Verfolgen Sie Ihre MPI-Anwendung
Erstellen Sie eine Ablaufverfolgung file um Ereignisprotokolle für die folgende Anwendungsverhaltensanalyse zu sammeln.
- Richten Sie die Umgebung zum Starten von Intel® Trace Analyzer und Collector ein, indem Sie das setvars-Skript aus dem oneAPI-Installationsdirektor ausführen
NOTIZ
Standardmäßig wird Intel Trace Analyzer und Collector unter /opt/intel/oneapi/itac für Linux*-Betriebssysteme und Programme installiert Files (x86)\Intel\oneAPI\itac\latest für Windows* OS.
Unter Linux:
$ Quelle /opt/intel/oneapi/setvars.sh
Unter Windows:
„C:\Programme Files (x86)\Intel\oneAPI\setvars.bat“ - Führen Sie Ihre MPI-Anwendung aus und generieren Sie mit der Option -trace einen Trace.
Unter Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
Unter Windows:
Kompilieren Sie die App und erfassen Sie die Ablaufverfolgung.
Führen Sie für den Intel oneAPI DPC++/C++-Compiler Folgendes aus:
> mpiicc -trace poisson_sendrecv.single.c
Führen Sie für Intel Fortran Compiler Folgendes aus:
> mpiifort -trace poisson_sendrecv.single.f
Dieses Example erzeugt einen Trace (stf*) für asample poisson_sendrcv.single MPI-Anwendung - Öffnen Sie die generierte .stf-Datei file mit Intel Trace Analyzer mit Intel Trace Analyzer und Collector.
Unter Linux:
$ Traceanalyzer ./ poisson_sendrecv.single.stf
Unter Windows:
Traceanalyzer poisson_sendrecv.single.stf
NOTIZ
Zu Testzwecken können Sie eine vorab erfasste Ablaufverfolgung herunterladen file poisson_sendrecv.single.stf für das in diesem Dokument verwendete Poisson und öffnen Sie es mit Intel Trace Analyzer und Collector.
Die .stf file wird auf der Zusammenfassungsseite geöffnet view, das allgemeine Informationen über Ihre Anwendungsleistung darstellt:NOTIZ Weitere Informationen zur Funktionalität von Intel Trace Analyzer und Collector finden Sie unter Mehr erfahren.
Analysieren Sie die aktivsten MPI-Funktionen
Analysieren Sie das Verhalten einer MPI-Anwendung, finden Sie Engpässe und identifizieren Sie die Serialisierung, um Wege zur Verbesserung der Anwendungsleistung zu finden.
- Öffnen Sie auf der Zusammenfassungsseite die Ereigniszeitachse view indem Sie auf Weiter > Diagramme > Ereigniszeitleiste klicken, um eine eingehende Analyse der wichtigsten MPI-Funktionen zu erhalten.
Das Diagramm zeigt einzelne Prozessaktivitäten im Zeitverlauf an.
Die Anwendungsarbeit ist iterativ, wobei jede Iteration aus einem Berechnungsteil und MPI-Kommunikation besteht. - Identifizieren Sie eine einzelne Iteration, auf die Sie sich konzentrieren möchten, und zoomen Sie hinein, indem Sie Ihre Maus über das erforderliche Zeitintervall ziehen:
Die Spur view zeigt den Abschnitt innerhalb der von Ihnen ausgewählten Kurve an. Das Ereigniszeitachsendiagramm zeigt die Ereignisse, die während der ausgewählten Iteration aktiv waren.
- Horizontale Balken repräsentieren die Prozesse mit den in diesen Prozessen aufgerufenen Funktionen.
- Schwarze Linien zeigen Nachrichten an, die zwischen Prozessen gesendet werden. Diese Linien verbinden sendende und empfangende Prozesse.
- Blaue Linien stellen kollektive Operationen dar, wie z. B. Rundsende- oder Reduzierungsoperationen.
- Wechseln Sie zum Flat Profile Registerkarte (A), um sich die Funktionen genauer anzusehen, die zu dem Zeitpunkt ausgeführt werden, den Sie ( in der Ereigniszeitleiste ausgewählt haben.
- Heben Sie die Gruppierung von MPI-Funktionen auf, um die MPI-Prozessaktivität in Ihrer Anwendung zu analysieren.
Klicken Sie dazu in der Flat Pro mit der rechten Maustaste auf Alle Prozesse > Gruppe MPI (B).file und wählen Sie UngroupMPI. Diese Operation legt die einzelnen MPI-Aufrufe offen. - Analysieren Sie mit MPI_Sendrecv zu Beginn der Iteration die Prozesse, die mit ihren direkten Nachbarn kommunizieren. Zum Bspampauf:
- A. Im sample hat der MPI_Sendrecv-Datenaustausch einen Engpass: Der Prozess tauscht keine Daten mit seinem nächsten Nachbarn aus, bis der Austausch mit dem vorherigen abgeschlossen ist. Die Event-Timelines view zeigt diesen Engpass als Treppe an.
- B. Der MPI_Allreduce am Ende der Iteration resynchronisiert alle Prozesse; Aus diesem Grund hat dieser Block das Aussehen einer umgekehrten Treppe.
- Identifizieren Sie die Serialisierung mit Function Profile und Message Profile views.
- A. Charts gleichzeitig öffnen:
In der Funktion Profile Diagramm, öffnen Sie die Registerkarte Lastausgleich. - Gehen Sie zum Menü Charts, um ein Message Pro zu öffnenfile.
- B. Erweitern Sie auf der Registerkarte Lastausgleich MPI_Sendrecv und MPI_Allreduce. Das Load Balancing zeigt an, dass die in MPI_Sendrecv verbrachte Zeit mit der Prozessnummer zunimmt, während die Zeit für MPI_Allreduce abnimmt.
- C. Untersuchen Sie das Message Profile Diagramm bis zur unteren rechten Ecke.
Die Farbcodierung der Blöcke zeigt an, dass Nachrichten, die von einem höheren Rang zu einem niedrigeren Rang übertragen werden, proportional mehr Zeit benötigen, während die Nachrichten, die von einem niedrigeren Rang zu einem höheren Rang übertragen werden, ein schwaches gerade-ungerades Muster aufweisen:
- A. Charts gleichzeitig öffnen:
Die Ergebnisse der vergleichenden Analyse zeigen, dass es in der Anwendung keine komplexen Austauschmuster gibt, der Austausch erfolgt nur mit benachbarten Prozessen. Die Informationen sind für den Schritt Improve Your Application Performance by Changing Communications unerlässlich, um das Kommunikationsmodell der Anwendung zu optimieren.
Identifizieren Sie unausgeglichene Kommunikation
Beobachten Sie Ihre Anwendung unter Idealbedingungen und vergleichen Sie den Original-Trace file mit dem idealisierten, um problematische Interaktionen zu isolieren.
- Erstellen Sie eine idealisierte file:
- A. Wählen Sie Erweitert > Idealisierung oder klicken Sie auf
(Idealisierung) Symbolleistenschaltfläche.
- B. Überprüfen Sie die Idealisierungsparameter im Dialogfeld Idealisierung (ideale Spur file Name und Zeitbereich für die Konvertierung).
- C. Klicken Sie auf Start, um Ihre Spur zu idealisieren.
- A. Wählen Sie Erweitert > Idealisierung oder klicken Sie auf
- Vergleichen Sie die ursprüngliche Spur mit der idealisierten Spur:
- A. Wählen Sie Erweitert > Ungleichgewichtsdiagramm oder klicken Sie auf
(Ungleichgewichtsdiagramm) Symbolleistenschaltfläche.
- B. Klicken Sie im Dialogfeld Ungleichgewichtsdiagramm auf die Schaltfläche Anderes öffnen File , navigieren Sie zur idealisierten Spur und wählen Sie sie aus.
- C. Klicken Sie im Fenster Imbalance Diagram auf die Schaltfläche Total Mode und wählen Sie Breakdown Mode.
- A. Wählen Sie Erweitert > Ungleichgewichtsdiagramm oder klicken Sie auf
Sie sehen, dass MPI_Sendrecv die zeitaufwändigste Funktion ist. Das Unwuchtgewicht wird in angezeigt
helle Farbe und macht ca. 10% für die Funktion MPI_Sendrecv aus. Dies ist die Zeit, in der die Prozesse aufeinander warten.
Verbessern Sie die Leistung Ihrer Anwendung, indem Sie die Kommunikation ändern
- Verbessern Sie die Leistung der MPI-Anwendung, indem Sie blockierende auf nicht blockierende Kommunikation umstellen.
Ersetzen Sie in Ihrem Code das serielle MPI_Sendrcv durch nicht blockierende Kommunikation: MPI_Isend und MPI_Irecv. Zum Bspample: Ursprünglicher Codeschnipsel:
// Grenzaustausch
Leerer Austausch(Absatz* p, Gitter* gr){
int i, j;
MPI_Status status_100, status_200, status_300, status_400;
// Erste Zeile nach unten senden
MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
&status_100);
// Letzte Zeile nach oben senden
MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
Verwenden Sie den Intel Trace Analyzer-Vergleich view um die serialisierte Anwendung mit der überarbeiteten zu vergleichen
// Linke Spalte in tmp-Arrays kopieren
if(gr->links != MPI_PROC_NULL){
gr->x_new[i][gr->lcol+1] = right_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
// rechts senden
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
if(gr->links != MPI_PROC_NULL)
{
MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i<gr->lrow+2; i++
{
gr->x_new[i][0] = left_col[i];
}
}
Aktualisierter Codeausschnitt
MPI_Request req[7];
// Erste Zeile nach unten senden
MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
…..
MPI_Waitall(7, req, MPI_STATUSES_IGNORE);
Nach der Korrektur sieht die einzelne Iteration der überarbeiteten Anwendung wie folgt aus, zampauf: - Verwenden Sie den Intel Trace Analyzer-Vergleich view um die serialisierte Anwendung mit der überarbeiteten zu vergleichen. Vergleichen Sie zwei Traces mit Hilfe des Vergleichs View, gehen zu View > Vergleichen. Der Vergleich View sieht ähnlich aus wie:
Im Vergleich View, können Sie sehen, dass die Verwendung einer nicht blockierenden Kommunikation dazu beiträgt, die Serialisierung zu entfernen und die Kommunikationszeit von Prozessen zu verkürzen.
NOTIZ Weitere Informationen zur Leistung Ihrer Anwendung auf Knotenebene finden Sie in der Dokumentation zu den entsprechenden Tools: Intel® VTune™ Profiler MPI-Codeanalyse und Analysieren von Intel® MPI-Anwendungen mit Intel® Advisor.
Mehr erfahren
Erkunden Sie die folgenden Ressourcen, um weitere Informationen zu Intel Trace Analyzer und Collector zu erhalten.
Hinweise und Haftungsausschlüsse
- Für Intel-Technologien ist möglicherweise eine aktivierte Hardware-, Software- oder Dienstaktivierung erforderlich.
- Kein Produkt oder keine Komponente kann absolut sicher sein.
- Ihre Kosten und Ergebnisse können variieren.
- © Intel Corporation. Intel, das Intel-Logo und andere Intel-Marken sind Marken der Intel Corporation oder ihrer Tochtergesellschaften. Andere Namen und Marken können als Eigentum anderer beansprucht werden.
- Durch dieses Dokument wird keine Lizenz (weder ausdrücklich noch stillschweigend, durch Rechtsverwirkung oder auf andere Weise) an geistigen Eigentumsrechten gewährt.
- Die beschriebenen Produkte können Konstruktionsfehler oder Fehler (sogenannte Errata) enthalten, die dazu führen können, dass das Produkt von den veröffentlichten Spezifikationen abweicht. Aktuelle gekennzeichnete Errata sind auf Anfrage erhältlich.
- Intel schließt alle ausdrücklichen und stillschweigenden Gewährleistungen aus, einschließlich, aber nicht beschränkt auf die stillschweigenden Gewährleistungen der Marktgängigkeit, der Eignung für einen bestimmten Zweck und der Nichtverletzung von Rechten Dritter, sowie jegliche Gewährleistung, die sich aus dem Verlauf der Leistung, dem Geschäftsverlauf oder der Verwendung im Handel ergibt.
Dokumente / Ressourcen
![]() |
intel Erste Schritte mit Intel Trace Analyzer und Collector [pdf] Benutzerhandbuch Erste Schritte mit Intel Trace Analyzer und Collector, Erste Schritte mit Intel, Trace Analyzer und Collector, Collector |