Die Leistung des erstellten Programms ist nicht so gut wie ich erwartet hatte! Ich weiß nicht, wo der Engpass liegt, also möchte ich es herausfinden!
Verwenden Sie in diesem Fall ein Profilierungswerkzeug.
Ich werde den Quellcode vom Link zur Download-Seite unten auf http://goog-perftools.sourceforge.net/ löschen. Die neueste Version vom 11. Oktober 2014 ist gperftools-2.2.1.tar.gz. Installieren Sie nach dem Entpacken mit ./configure, make, make install wie gewohnt.
Es ist nicht erforderlich, Google-Perftool nur in der Befehlszeile zu verwenden. google-perftool erstellt ein visuell leicht verständliches Diagramm, das als Anrufdiagramm bezeichnet wird. Da diese Abbildung im Punktformat generiert wird, empfiehlt es sich, auch das Tool "graphviz" zum Konvertieren dieser Punktformatdatei in ein Format wie eps zu installieren.
Ich werde den Quellcode von der Download-Seite von http://www.graphviz.org/ löschen. Entpacken und installieren Sie auch ./configure, make, make Wenn Sie versuchen, aus dem Quellcode zu installieren, werden Sie sich wahrscheinlich in ./configure beschweren, da es viele abhängige Bibliotheken gibt. Wenn Sie nur die von google-perftool generierte Punktdatei in eps konvertieren möchten, sind die meisten von ihnen funktional nicht erforderlich. Ignorieren Sie sie also und machen Sie make, make install.
Fügen Sie das lib-Verzeichnis, in dem google-perftool installiert ist, zu LD_LIBRARY_PATH hinzu. Schreiben Sie es in ./bash_profile usw.
export LD_LIBRARY_PATH=/home/tanaka/lib:$LD_LIBRARY_PATH
Verknüpfen Sie libprofiler.so, wenn Sie das Programm kompilieren, das Sie profilieren möchten.
$ g++ -o hoge.exe hoge.cpp -g -lprofiler
Führen Sie das Programm aus, indem Sie den Namen der Analysedatei des Ausgabeziels angeben.
$ export CPUPROFILE=prof.out; ./hoge.exe
PROFILE: interrupts/evictions/bytes = xxx/x/xxxx
Dadurch wird prof.out generiert. Geben Sie daher das ursprüngliche Programm und die Analysedatei an und zeigen Sie das Ergebnis an. Werfen Sie einen Blick auf die Oberseite der Funktion, deren Ausführung lange dauert.
$ pprof hoge.exe prof.out
Using local file prof.out.
Welcome to pprof! For help, type 'help'.
(pprof) top
Total: 355 samples
286 80.6% 80.6% 286 80.6% __write_nocancel
16 4.5% 85.1% 16 4.5% __read_nocancel
14 3.9% 89.0% 17 4.8% __lseek_nocancel
・
・
・
Die zweite Spalte von links gibt den Prozentsatz der von der Funktion belegten Ausführungszeit an. Da __write_nocancel die Funktion ist, die schließlich von write (2) aufgerufen wird, weiß dieses Programm, dass write (2) der Engpass ist.
Erstellen Sie ein Aufrufdiagramm, das das Verhältnis der Ausführungszeit zur Größe des Objekts anzeigt und es visuell im Format wie ein Flussdiagramm in der Reihenfolge anzeigt, in der die Funktionen wie folgt aufgerufen werden.
$ pprof --dot hoge.exe prof.out > prof.dot
$ dot -T eps prof.dot > prof.eps
Einige der am häufigsten verwendeten sind:
Wenn Sie yum oder apt-get (mit dieser Berechtigung) verwenden können, ist es möglicherweise einfach, perf oder oprofile zu installieren und zu verwenden. (Denn als ich versuchte, perf aus dem Quellcode in mein Home-Verzeichnis zu installieren, habe ich configure oder make durcheinander gebracht und aufgegeben.)
Wenn google-perftool Linux-Kernel 2.6.31 oder höher ist, ist es meiner Meinung nach einfach zu verwenden, da es bei der Installation von der Quelle weniger wahrscheinlich auslöst.
Recommended Posts