与 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 (旧)演示文稿的一些幻灯片,其中包括 KCacheGrind(Valgrind 的 KDE 前端的一部分)和 Google Perftools 的工作示例。
在更抽象的意义上,您需要接受 C++ != R 的事实,并且并非所有工具都有相同的对应物。特别是Rprof
,几个用于分析的 CRAN 包构建在其之上的 R 分析器是基于 R 被解释的事实。 C++ 不是,所以情况会有所不同。但是编译的分析与编译和调试一样古老,因此您会发现许多教程。
【讨论】:
我知道 KCacheGrind 但工作示例听起来很棒 +1。根据上面的评论,如果您有机会重构一个示例,将其提交到 Rcpp 库,那将是非常棒的!但我会读到你指给我的地方!以上是关于与 Rcpp 等效的 lineprof的主要内容,如果未能解决你的问题,请参考以下文章
R stats::sd() 与 arma::stddev() 与 Rcpp 实现的性能