与 Rcpp 等效的 lineprof

Posted

技术标签:

【中文标题】与 Rcpp 等效的 lineprof【英文标题】:lineprof equivalent for Rcpp 【发布时间】:2015-05-11 16:23:29 【问题描述】:

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

Rcpp 是否有 lineprof() 等效项?

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

【问题讨论】:

【参考方案1】:

补充@Dirk 的回答...

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

只是为了修正想法:

采样分析器可让您回答以下问题:我的程序在哪些代码路径上花费的时间最多?

(完整)缓存分析器可让您回答问题,哪些是我的程序中最常执行的代码路径?

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

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

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

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

    点击红色的大录制按钮,然后开始!

我会将了解仪器 + 时序分析器的其余说明留给您的 google-fu + 文档,但是(如果您使用的是 OS X)您应该了解此工具。

【讨论】:

我确实需要摆脱这个谢谢!如果您有机会提供一个完整的示例,并将其提交给Rcpp Gallery,那将是非常棒的!【参考方案2】:

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

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

【讨论】:

我知道 KCacheGrind 但工作示例听起来很棒 +1。根据上面的评论,如果您有机会重构一个示例,将其提交到 Rcpp 库,那将是非常棒的!但我会读到你指给我的地方!

以上是关于与 Rcpp 等效的 lineprof的主要内容,如果未能解决你的问题,请参考以下文章

从 Rcpp 中获取与基 R 相同的整数样本

让 gperftools 与 Rcpp 一起工作

R stats::sd() 与 arma::stddev() 与 Rcpp 实现的性能

在rcpp犰狳中将向量与double进行比较

与RCPP在Ubuntu Xenial扔的std :: runtime_error当段错误

与简单的 Rcpp 实现相比,为啥 zoo::rollmean 慢?