直接使用profvis包即可,例如示例。
$ sudo dnf install gperftools-devel google-perftools graphviz ghostscript kcachegrind
在包(包名称为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
。之后,安装包,并重新载入。
使用方法为:
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
使用Instruments
工具的Time profiler
功能,Instruments
包括在XCode
中。
2021年12月2日