Using the Rcpp Timer

January 6, 2013
By

(This article was first published on Rcpp Gallery, and kindly contributed to R-bloggers)

Sine the 0.10.2 release, Rcpp contains an internal class Timer which can be used for fine-grained benchmarking. Romain motivated Timer in a post to the mailing * list where Timer is used to measure the different components of the costs of random number generation.

A slightly modified version of that example follows below.

#include <Rcpp.h>
#include <Rcpp/Benchmark/Timer.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericVector useTimer() {
    int n = 1000000;

    // start the timer
    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("g/p+rnorm()");

    for(int i=0; i<n; i++) {
        // empty loop
    }
    timer.step( "empty loop" ) ;

    NumericVector res(timer);
    for (int i=0; i<res.size(); i++) {
        res[i] = res[i] / n;
    }
    return res;
}

We get the following result, each expressing the cost per iteration in nanoseconds:

useTimer()
    get/put g/p+rnorm()  empty loop 
  1.634e+03   2.573e+03   2.620e-04 

The interesting revelation is that repeatedly calling GetRNGstate() and PutRNGstate() can amount to about 60% of the cost of RNG draws. Luckily, we usually only have to call these helper functions once per subroutine called from R (rather than repeatedly as shown here) so this is not really a permanent cost to bear when running simulations with R.

It also show the usefulness of a fine-grained timer at the code level.

To leave a comment for the author, please follow the link and comment on his blog: Rcpp Gallery.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.