【发布时间】:2015-05-11 16:23:29
【问题描述】:
R 中的lineprof 包对于分析函数的哪些部分占用时间和分配/释放内存非常有用。
Rcpp 是否有 lineprof() 等效项?
我目前使用std::chrono::steady_clock 等从Rcpp 函数中获取块计时。备择方案? Rstudio IDE 是否在这里提供了一些帮助?
【问题讨论】:
标签: r performance profiling rcpp
R 中的lineprof 包对于分析函数的哪些部分占用时间和分配/释放内存非常有用。
Rcpp 是否有 lineprof() 等效项?
我目前使用std::chrono::steady_clock 等从Rcpp 函数中获取块计时。备择方案? Rstudio IDE 是否在这里提供了一些帮助?
【问题讨论】:
标签: r performance profiling rcpp
补充@Dirk 的回答...
如果您在 OS X 上工作,Time Profiler Instrument(Apple 的 Instruments 检测工具集的一部分)是一个优秀采样分析器。
只是为了修正想法:
采样分析器可让您回答以下问题:我的程序在哪些代码路径上花费的时间最多?
(完整)缓存分析器可让您回答问题,哪些是我的程序中最常执行的代码路径?
这些是不同的问题 - 您最热门的代码路径可能已经优化到足够的程度,即使在该路径中执行的指令总数非常多,执行它们所需的时间也可能相对较低。
如果您想使用工具来分析 R 包中使用的 C++ 代码/例程,最简单的方法是:
Rcpp:::test(),以检测所有 Rcpp 测试代码:我会将了解仪器 + 时序分析器的其余说明留给您的 google-fu + 文档,但是(如果您使用的是 OS X)您应该了解此工具。
【讨论】:
查看任何关于高性能计算的体面介绍,例如来自my talks page (旧)演示文稿的一些幻灯片,其中包括 KCacheGrind(Valgrind 的 KDE 前端的一部分)和 Google Perftools 的工作示例。
在更抽象的意义上,您需要接受 C++ != R 的事实,并且并非所有工具都有相同的对应物。特别是Rprof,几个用于分析的 CRAN 包构建在其之上的 R 分析器是基于 R 被解释的事实。 C++ 不是,所以情况会有所不同。但是编译的分析与编译和调试一样古老,因此您会发现许多教程。
【讨论】: