Yulong Niu

个人博客

R和Rcpp的性能监测

Posted at — Oct 3, 2018

1. R性能检测

直接使用profvis包即可,例如示例

2. Linux系统Rcpp性能检测

2.1 安装依赖软件

$ sudo dnf install gperftools-devel google-perftools graphviz ghostscript kcachegrind

2.2 编译

在包(包名称为Mypkg)目录src建立如下文件:

#include <Rcpp.h>
#include <gperftools/profiler.h>

using namespace Rcpp;

// [[Rcpp::export]]
SEXP start_profiler(SEXP str) {
  ProfilerStart(as<const char*>(str));
  return R_NilValue;
}

// [[Rcpp::export]]
SEXP stop_profiler() {
  ProfilerStop();
  return R_NilValue;
}

包目录src的Makevars文件中添加-lprofile选项,例如PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lprofiler。之后,安装包,并重新载入。

2.3 调试

使用方法为:

Mypkg:::start_profiler("/tmp/profile.out")
run_cpp_codes()
Mypkg:::stop_profiler()

查看profile结果:

## text
pprof --text src/Mypkg.so /tmp/profile.out

## pdf
pprof --pdf src/Mypkg.so /tmp/profile.out > profile.pdf

## kcachegrind
pprof --callgrind src/Mypkg.so R/profile.out > profile.res

3. Mac系统Rcpp性能检测

使用Instruments工具的Time profiler功能,Instruments包括在XCode中。

参考资料

更新记录

2021年12月2日