Rcpp 的 lineprof 等价物

lineprof equivalent for Rcpp

R 中的 lineprof 包对于分析函数的哪些部分占用时间和 allocate/free 内存非常有用。

Rcpp 是否有 lineprof() 等价物?

我目前使用 std::chrono::steady_clock 等从 Rcpp 函数中获取块计时。备择方案? Rstudio IDE 在这里提供一些帮助吗?

查看对高性能计算的任何体面介绍,例如来自 my talks page(较旧)演示文稿的一些幻灯片,其中包括 KCa​​cheGrind(Valgrind 的 KDE 前端的一部分)以及Google 性能工具。

从更抽象的意义上讲,您需要接受这样一个事实,即 C++ != R 并且并非所有工具都有相同的对应项。特别是 Rprof,几个用于分析的 CRAN 包构建在其之上的 R 分析器基于 R 被 解释 的事实。 C++ 不是,所以情况会有所不同。但是分析编译与编译和调试一样古老,所以你会发现很多教程。

补充@Dirk的回答...

如果您在 OS X 上工作,Time Profiler Instrument, part of Apple's Instruments 检测工具集是一个 优秀的 采样分析器。

只是为了修正想法:

  • 采样分析器可以让您回答以下问题:我的程序执行最多的代码路径是什么?

  • 一个(完整的)缓存分析器可以让您回答这个问题,我的程序中最常执行的代码路径是什么?

这些是不同的问题——您最热门的代码路径可能已经足够优化,即使在该路径中执行的指令总数非常多,执行它们所需的时间可能相对较少低。

如果您想使用工具分析 R 包中使用的 C++ 代码/例程,最简单的方法是:

  1. 创建一个目标,指向您的 R 可执行文件,并使用适当的命令行参数 运行 您希望分析的任何函数:

  1. 将命令行参数设置为 运行 将执行 C++ 例程的代码 -- 例如,此代码 运行s Rcpp:::test(),以检测所有 Rcpp测试代码:

  1. 单击红色的大录制按钮,开始吧!

我会将理解仪器 + 时序分析器的其余说明留给你的 google-fu + 文档,但是(如果你在 OS X 上)你应该注意这个工具。