如何配置Rcpp代码(在linux上)

时间:2017-09-25 20:03:59

标签: c++ r profiling rcpp gperftools

我用Rcpp创建了一个R包,其中整个模拟在c ++中运行,结果在R中进行分析。现在我需要分析我的函数以便我可以对它们进行优化,但R剖析器无法区分C ++函数内部发生的情况,当函数只能从R里面运行时,我不知道如何运行C ++分析器。

到目前为止,我已经找到了一些使用gperftools(questionstutorials)的建议,但指南不完整(可能他们假定我缺乏一定程度的知识?),缺少链接,我一直跑到墙上。因此这个问题。这就是我所在的地方:

  1. 安装gperftools(我使用pacman从extra / gperftools安装)
  2. 在C ++标题中包含gperftools / profiler.h
  3. 在C ++代码中添加ProfilerStart(“myprof.log”)和ProfilerStop()围绕我想要分析的内容
  4. 使用-lprofiler编译
  5. 运行“$ CPUPROFILE =”myprof.log“R -f myscript.R”
  6. 当前的墙是gcc告诉我“未定义的符号:ProfilerStart”,所以我认为链接有问题?

2 个答案:

答案 0 :(得分:1)

我对gperftools并没有给人留下太深刻的印象。此外,它似乎是一个仪表分析器,基于采样的分析器更易于使用,并且可能运行得更快。 Intels VTune是一款出色的基于抽样的分析器,如果您是教育用户,则可免费使用。即使您不是,您的组织也可能已拥有许可证。

转向你的gperftools问题,是的,这是一个链接器问题。由于您已决定不共享任何相关信息(链接命令?编译命令?实际错误消息?),我们无法为您提供进一步的帮助。

答案 1 :(得分:0)

毕竟这是一个链接错误,由于我缺乏经验,因为这是我第一次使用Makevars。 在步骤#4中,我将“-lprofiler”添加到PKG_CXXFLAGS,用于编译,我应该将其添加到PKG_LIBS。我做了改变,现在探查器工作得很好。这是我的Makevars现在:

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