5

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

到目前为止,我已经找到了一些使用 gperftools 的建议(问题教程),但指南不完整(也许他们假设我缺乏一定的知识水平?),缺少链接,而且我一直在碰壁。因此这个问题。这是我所在的位置:

  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 告诉我“未定义符号:ProfilerStart”,所以我认为链接有问题?

4

2 回答 2

2

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

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

于 2017-09-26T07:02:44.880 回答
1

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

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

于 2018-01-28T19:20:45.003 回答