2017-09-25 2 views
0

J'ai fait un paquet R avec Rcpp où des simulations entières sont exécutées en C++ et les résultats sont analysés en R. Maintenant, j'ai besoin de profiler mes fonctions pour les optimiser, mais les profileurs R peuvent 't distinguer ce qui se passe à l'intérieur des fonctions C++, et je ne sais pas comment exécuter les profileurs C++ lorsque les fonctions ne peuvent être exécutées qu'à partir de R.Comment profiler le code Rcpp (sur Linux)

Jusqu'à présent, j'ai trouvé quelques suggestions pour utiliser gperftools (questions et tutorials) mais les guides sont incomplets (peut-être qu'ils supposent un niveau de connaissance qui me manque?), Ont des liens manquants, et je continue de courir dans les murs. D'où cette question. Voici où je suis:

  1. gperftools (Installer j'ai installé à partir supplémentaires/gperftools avec pacman)
  2. comprennent gperftools/profiler.h sur l'en-tête C de
  3. Ajouter AnalyseurDébut ("myprof.log") et ProfilerStop() dans le code C++ autour de ce que je veux le profil
  4. Compile avec -lprofiler
  5. Run "$ CPUPROFILE =" myprof.log "R -f myscript.R"

Le mur actuel est gcc me dit "Undefined Symbol: ProfilerStart", donc je pense qu'il y a quelque chose de mal avec la liaison?

+0

Eh bien, il a travaillé pour moi dans le passé comme le montre quelques-unes des plus anciennes slidedecks sur mon site ... –

Répondre

0

C'était une erreur de liaison après tout, causée par mon manque d'expérience car c'est la première fois que j'utilise Makevars. Dans l'étape n ° 4, j'ai ajouté "-lprofiler" à PKG_CXXFLAGS, qui est utilisé dans la compilation, alors que j'aurais dû l'ajouter à PKG_LIBS. J'ai fait le changement et maintenant le profileur fonctionne très bien. Ceci est mon Makevars maintenant:

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

1

Je ne suis pas vraiment impressionné par gperftools. En outre, il semble être un profileur d'instrumentation, les profileurs basés sur l'échantillonnage sont plus faciles à utiliser et sont susceptibles de fonctionner plus rapidement. Intels VTune est un excellent profileur basé sur l'échantillonnage, disponible gratuitement si vous êtes un utilisateur éducatif. Même si vous ne l'êtes pas, votre organisation peut déjà avoir des licences.

En ce qui concerne votre problème de gperftools, oui, c'est un problème d'éditeur de liens. Comme vous avez décidé de ne partager aucune des informations pertinentes (commande de liaison? Commande de compilation? Messages d'erreur réels?), Nous ne pouvons pas vous aider davantage.

+0

Vous avez tout à fait raison, je devrais avoir inclus mes Makevars dans la question. Je suppose que je m'attendais à ce que les gens me recommandent d'autres profileurs entièrement? – mozsalles