如何分析 Rcpp 代码(在 linux 上)
How to profile Rcpp code (on linux)
我用 Rcpp 制作了一个 R 包,其中整个模拟在 c++ 中 运行,结果在 R 中分析。现在我需要分析我的函数以便优化它们,但 R 分析器无法区分C++ 函数内部发生了什么,我不知道如何 运行 当函数只能是 运行 来自 R 内部时的 C++ 分析器。
到目前为止,我找到了一些使用 gperftools 的建议 (questions and tutorials),但指南不完整(也许他们假定我缺乏一定程度的知识?),缺少链接,我保留 运行宁入墙。因此这个问题。这是我所在的位置:
- 安装 gperftools(我使用 pacman 从 extra/gperftools 安装)
- 在 C++ 头文件中包含 gperftools/profiler.h
- 在 C++ 代码中围绕我要分析的内容添加 ProfilerStart("myprof.log") 和 ProfilerStop()
- 使用 -lprofiler 编译
- 运行 "$CPUPROFILE="myprof.log" R -f myscript.R"
当前的墙是 gcc 告诉我的 "Undefined Symbol: ProfilerStart",所以我认为链接有问题?
我对 gperftools 印象不是很深刻。此外,它似乎是一个检测分析器,基于采样的分析器更易于使用并且可能 运行 更快。英特尔的 VTune 是一款出色的基于采样的分析器,如果您是教育用户,可以免费使用。即使您没有,您的组织也可能已经拥有许可证。
关于您的 gperftools 问题,是的,这是一个 linker 问题。由于您决定不共享任何相关信息(link 命令?编译命令?实际错误消息?)我们无法进一步帮助您。
毕竟是链接错误,是我第一次使用Makevars,经验不足造成的。
在步骤 #4 中,我将“-lprofiler”添加到 PKG_CXXFLAGS
,用于编译,而我本应将其添加到 PKG_LIBS
。我进行了更改,现在分析器工作正常。这是我的 Makevars:
PKG_CXXFLAGS += -Wall -pedantic -g -ggdb #-fno-inline-small-functions
PKG_LIBS += -lprofiler
CXX_STD = CXX11
我用 Rcpp 制作了一个 R 包,其中整个模拟在 c++ 中 运行,结果在 R 中分析。现在我需要分析我的函数以便优化它们,但 R 分析器无法区分C++ 函数内部发生了什么,我不知道如何 运行 当函数只能是 运行 来自 R 内部时的 C++ 分析器。
到目前为止,我找到了一些使用 gperftools 的建议 (questions and tutorials),但指南不完整(也许他们假定我缺乏一定程度的知识?),缺少链接,我保留 运行宁入墙。因此这个问题。这是我所在的位置:
- 安装 gperftools(我使用 pacman 从 extra/gperftools 安装)
- 在 C++ 头文件中包含 gperftools/profiler.h
- 在 C++ 代码中围绕我要分析的内容添加 ProfilerStart("myprof.log") 和 ProfilerStop()
- 使用 -lprofiler 编译
- 运行 "$CPUPROFILE="myprof.log" R -f myscript.R"
当前的墙是 gcc 告诉我的 "Undefined Symbol: ProfilerStart",所以我认为链接有问题?
我对 gperftools 印象不是很深刻。此外,它似乎是一个检测分析器,基于采样的分析器更易于使用并且可能 运行 更快。英特尔的 VTune 是一款出色的基于采样的分析器,如果您是教育用户,可以免费使用。即使您没有,您的组织也可能已经拥有许可证。
关于您的 gperftools 问题,是的,这是一个 linker 问题。由于您决定不共享任何相关信息(link 命令?编译命令?实际错误消息?)我们无法进一步帮助您。
毕竟是链接错误,是我第一次使用Makevars,经验不足造成的。
在步骤 #4 中,我将“-lprofiler”添加到 PKG_CXXFLAGS
,用于编译,而我本应将其添加到 PKG_LIBS
。我进行了更改,现在分析器工作正常。这是我的 Makevars:
PKG_CXXFLAGS += -Wall -pedantic -g -ggdb #-fno-inline-small-functions
PKG_LIBS += -lprofiler
CXX_STD = CXX11