【问题标题】:How to profile Rcpp code (on linux)如何分析 Rcpp 代码(在 linux 上)
【发布时间】:2017-09-25 20:03:58
【问题描述】:

我用 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"

当前的墙是 gcc 告诉我“Undefined Symbol: ProfilerStart”,所以我认为链接有问题?

【问题讨论】:

  • 嗯,它在过去对我有用,如我网站上的一些较旧的幻灯片所示...

标签: c++ r profiling rcpp gperftools


【解决方案1】:

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

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

【讨论】:

  • 你完全正确,我真的应该在问题中包含我的 Makevars。我想我希望人们会完全推荐我其他的分析器?
【解决方案2】:

毕竟这是一个链接错误,由于我是第一次使用 Makevars,所以缺乏经验。 在第 4 步中,我将“-lprofiler”添加到 PKG_CXXFLAGS,用于编译,而我应该将它添加到 PKG_LIBS。我进行了更改,现在分析器工作正常。这是我现在的 Makevars:

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

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2010-09-27
    • 2011-07-16
    • 2016-12-15
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多