2016-08-16 5 views
1

perf ist ein Leistungsanalyse-Tool, das Hardware- und Softwareereignisse melden kann. Ich versuche, es mit einer MPI-Anwendung auszuführen, um zu erfahren, wie viel Zeit die Anwendung in jedem Kern für Datenübertragungen und Rechenoperationen aufwendet.Ausführen von Perf mit einer MPI-Anwendung

Normalerweise würde ich meine Bewerbung mit

mpirun -np $NUMBER_OF_CORES app_name 

laufen Und es würde auf mehrere Kerne erzeugen oder möglicherweise mehrere Knoten. Ist es möglich, perf oben hinzuzufügen? Ich habe versucht

perf stat mpirun -np $NUMBER_OF_CORES app_name 

Aber die Ausgabe für diese sieht aus wie eine Art Aggregat von mpirun. Gibt es eine Möglichkeit, Perf-Typ-Daten von jedem Kern zu sammeln?

Antwort

0

Etwas wie:

mpirun -np $NUMBER_OF_CORES ./myscript.sh 

funktionieren könnte mit myscript.sh enthalten:

#! /bin/bash 
perf stat app_name %* 

Sie sollten einige Parameter an den perf Anruf hinzufügen unterschiedlich Dateien mit dem Namen Ergebnis zu erzeugen.

0

perf kann nachgebrannte untergeordnete Prozesse folgen. die MPI-Prozesse auf dem gleichen Knoten befindet sich zu profilieren, können Sie einfach tun

perf stat mpiexec -n 2 ./my-mpi-app 

Sie perf record auch nutzen können. Es wird eine einzelne perf.data Datei erstellt, die die Profilinformationen für alle lokalen MPI-Prozesse enthält. Dies erlaubt jedoch nicht das Profilieren einzelner MPI-Ränge.

Um Informationen zu den einzelnen mpi Reihen herauszufinden, müssen Sie diese

mpiexec -n 2 perf stat ./my-mpi-app 

wird das Profil der einzelnen Reihen und funktioniert auch über mehrere Knoten laufen. Dies funktioniert jedoch nicht mit einigen perf Befehlen wie perf record.