1. R性能检测

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

2. Rcpp性能检测

2.1 安装依赖软件

Pre-requested tools
1
$ sudo dnf install gperftools-devel google-perftools graphviz ghostscript kcachegrind

2.2 编译

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

Profiler Rcpp code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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 调试

使用方法为:

Profiling
1
2
3
Mypkg:::start_profiler("/tmp/profile.out")
run_cpp_codes()
Mypkg:::stop_profiler()

查看profile结果:

Profiling results
1
2
3
4
5
6
7
8
## 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

参考资料

更新记录

2018年10月4日

Comments