2017-09-25 1 views
0

Ich machte ein R-Paket mit Rcpp, wo ganze Simulationen in C++ ausgeführt werden und die Ergebnisse in R analysiert werden. Jetzt muss ich meine Funktionen, so dass ich sie optimieren kann, aber R Profiler können nicht unterscheiden, was in den C++ - Funktionen passiert, und ich weiß nicht, wie man C++ Profiler ausführt, wenn die Funktionen nur innerhalb von R ausgeführt werden können.Wie Profil Rcpp Code (auf Linux)

Bis jetzt habe ich einige Vorschläge gefunden, um gperftools (questions und tutorials) aber die Guides sind unvollständig (vielleicht nehmen sie ein Wissen an, das mir fehlt?), Haben fehlende Links und ich renne immer wieder in die Wände. Daher diese Frage. Hier ist, wo ich bin an:

  1. Install gperftools (I installiert von extra/gperftools mit Pacman)
  2. umfassen gperftools/profiler.h auf der C++ Header
  3. hinzufügen ProfilerStart ("myprof.log") und ProfilerStop() in der C++ Code um, was ich will zum Profil
  4. Compile mit -lprofiler
  5. Run "$ CPUPROFILE =" myprof.log "R -f myscript.R"

Die aktuelle Wand ist gcc sagt mir "Undefined Symbol: ProfilerStart", also denke ich, dass etwas mit der Verknüpfung nicht stimmt?

+0

Nun, es für mich in der Vergangenheit gearbeitet wie in einigen der älteren slidedecks auf meiner Seite gezeigt ... –

Antwort

0

Es war schließlich ein Linkfehler, verursacht durch meine mangelnde Erfahrung, da dies das erste Mal ist, dass ich Makevars benutze. In Schritt # 4 habe ich "-lprofiler" zu PKG_CXXFLAGS hinzugefügt, das beim Kompilieren verwendet wird, wenn ich es zu PKG_LIBS hinzufügen sollte. Ich habe die Änderung vorgenommen und nun funktioniert der Profiler einwandfrei. Das ist mein makevars jetzt:

PKG_CXXFLAGS += -Wall -pedantic -g -ggdb #-fno-inline-small-functions PKG_LIBS += -lprofiler CXX_STD = CXX11

1

Ich bin nicht wirklich sehr beeindruckt von gperftools. Es scheint auch ein Instrumentation Profiler zu sein, Sampling-basierte Profiler sind einfacher zu bedienen und werden wahrscheinlich schneller laufen. Intels VTune ist ein exzellenter Sampling-basierter Profiler, der für Bildungsbenutzer kostenlos zur Verfügung steht. Selbst wenn dies nicht der Fall ist, verfügt Ihre Organisation möglicherweise bereits über Lizenzen.

Wenden Sie sich an Ihr Problem mit gperftools, ja, das ist ein Linker-Problem. Da Sie sich entschieden haben, keine der relevanten Informationen zu teilen (link command? Compile command? Aktuelle Fehlermeldungen?) Können wir Ihnen nicht weiterhelfen.

+0

Sie sind ganz richtig, ich sollte wirklich haben inbegriffen meine Makevars in der Frage. Ich schätze, ich habe erwartet, dass die Leute mir andere Profiler ganz empfehlen würden? – mozsalles