R中的lineprof
包对于分析函数的哪些部分占用时间和分配/释放内存非常有用。
Rcpp是否有lineprof()
个等同物?
我目前使用std::chrono::steady_clock
等来获取Rcpp
函数中的块时间。备择方案? Rstudio IDE
在这里提供了一些帮助吗?
答案 0 :(得分:2)
查看高性能计算的任何体面介绍,例如my talks page的(较旧)演示文稿中的一些幻灯片,其中包括KCacheGrind(KDE前端到Valgrind的一部分)的工作示例以及Google Perftools
从更抽象的意义上讲,你需要接受C ++!= R这一事实,而不是所有工具都有相同的对应物。特别是Rprof
,用于分析构建的几个CRAN包的R profiler基于R 解释的事实。 C ++不是,所以情况会有所不同。但是编译的分析与编译和调试一样古老,所以你会发现很多教程。
答案 1 :(得分:2)
补充@ Dirk的答案......
如果您正在使用OS X,Time Profiler Instrument是Apple的Instruments一套检测工具的一部分,那就是优秀的采样分析器。
只是为了解决问题:
采样分析器可让您回答问题,我的程序在执行时花费的代码路径是什么?
一个(完整的)缓存分析器可以让您回答问题,这是我程序中最常执行的代码路径吗?
这些是不同的问题 - 您的最热门代码路径已经足够优化,即使在该路径中执行的指令总数非常高,执行它们所需的时间也可能是这样。相对较低。
如果您想使用工具来分析R包中使用的C ++代码/例程,最简单的方法是:
(function() {
'use strict';
function MainController($scope, $location, $anchorScroll) {
$scope.doneLoading = false;
$scope.hasPageLoadError = false;
$scope.pageLoadErrorMsg = "";
console.log("getting main");
$scope.scrollTo = function(id) {
$location.hash(id);
//console.log($location.hash());
$anchorScroll();
};
$scope.doneLoading = true;
}
myApp.controller("MainController", MainController);
,以检测所有Rcpp:::test()
测试代码:
我会将理解乐器和时间分析器中的其余说明留给google-fu +文档,但是(如果你是在OS X上)你应该知道这个工具。