[Rcpp-devel] Rcpp internal benchmark tool
Romain Francois
romain at r-enthusiasts.com
Sat Dec 8 15:44:15 CET 2012
Hello,
I've been using the microbenchmark package extensively and took
inspiration from it to implement a Timer class in Rcpp to measure
performance at a lower level.
The class is pretty raw right now. platform specific details are
abstracted out. So the only things needed are:
- include the Timer.h header, which is **not** automatically added in
Rcpp.h:
#include <Rcpp/Benchmark/Timer.h>
- create a Timer object :
Benchmark::Timer timer ;
- call "step" to record each step, measuring the time from the previous
step to now.
timer.step( "something" ) ;
Here is a full example measuring a few things:
#include <Rcpp.h>
#include <Rcpp/Benchmark/Timer.h>
using namespace Rcpp ;
// [[Rcpp::export]]
SEXP measure(){
int n = 1000000 ;
// start the timer
Benchmark::Timer timer ;
for( int i=0; i<n; i++){
GetRNGstate() ;
PutRNGstate() ;
}
timer.step( "get/put" ) ;
for( int i=0; i<n; i++){
GetRNGstate() ;
rnorm(10, 0.0, 1.0 );
PutRNGstate() ;
}
timer.step( "get/put + rnorm(10, 0,1) " ) ;
for( int i=0; i<n; i++){}
timer.step( "empty loop" ) ;
NumericVector res( timer ) ;
for( int i=0; i<res.size(); i++) res[i] = res[i] / n ;
return res ;
}
> measure()
get/put get/put + rnorm(10, 0,1)
empty loop
2086.945600 5067.034550
0.000622
Those numbers are numbers of nanoseconds per iteration of each loop
as I said the class is pretty raw, so if people have ideas to improve it.
See the header:
https://r-forge.r-project.org/scm/viewvc.php/pkg/Rcpp/inst/include/Rcpp/Benchmark/Timer.h?view=markup&root=rcpp
and the implementation:
https://r-forge.r-project.org/scm/viewvc.php/pkg/Rcpp/src/Timer.cpp?view=markup&root=rcpp
Romain
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
R Graph Gallery: http://gallery.r-enthusiasts.com
blog: http://romainfrancois.blog.free.fr
|- http://bit.ly/RE6sYH : OOP with Rcpp modules
`- http://bit.ly/Thw7IK : Rcpp modules more flexible
More information about the Rcpp-devel
mailing list