[Rcpp-devel] R vectorisation vs. C++ vectorisation

Alexandre Bujard alexandre.bujard at gmail.com
Mon Nov 19 18:33:00 CET 2012


Hi Hadley,

To be fair with the R language, I would have compare with the use of real
primitives :

vaccBubu <- function(age, female, ily) {
    gender <- female * 1.25
    gender[!female] <- 0.75
    p <- (0.25 + 0.3 * 1 / (1 - exp(0.04 * age)) + 0.1 * ily) * gender
    p[p < 0] <- 0
    p[p > 1] <- 1
    p
}

You can see that it's still not as good as compiled versions but the gap is
not that big!





On Mon, Nov 19, 2012 at 4:31 PM, Hadley Wickham <h.wickham at gmail.com> wrote:

> Hi all,
>
> Inspired by "Rcpp is smoking fast for agent-based models in data
> frames" (http://www.babelgraph.org/wp/?p=358), I've been doing some
> exploration of vectorisation in R vs C++ at
> https://gist.github.com/4111256
>
> I have five versions of the basic vaccinate function:
>
> * vacc1: vectorisation in R with a for loop
> * vacc2: used vectorised R primitives
> * vacc3: vectorised with loop in C++
> * vacc4: vectorised with Rcpp sugar
> * vacc5: vectorised with Rcpp sugar, explicitly labelled as containing
> no missing values
>
> And the timings I get are as follows:
>
> Unit: microseconds
>                     expr    min     lq median     uq     max neval
>  vacc1(age, female, ily) 6816.8 7139.4 7285.7 7823.9 10055.5   100
>  vacc2(age, female, ily)  194.5  202.6  212.6  227.9   260.4   100
>  vacc3(age, female, ily)   21.8   22.4   23.4   24.9    35.5   100
>  vacc4(age, female, ily)   36.2   38.7   41.3   44.5    55.6   100
>  vacc5(age, female, ily)   29.3   31.3   34.0   36.4    52.1   100
>
> Unsurprisingly the R loop (vacc1) is very slow, and proper
> vectorisation speeds it up immensely.  Interestingly, however, the C++
> loop still does considerably better (about 10x faster) - I'm not sure
> exactly why this is the case, but I suspect it may be because it
> avoids the many intermediate vectors that R requires.  The sugar
> version is about half as fast, but this gets quite a bit faster with
> explicit no missing flags.
>
> I'd love any feedback on my code (https://gist.github.com/4111256) -
> please let me know if I've missed anything obvious.
>
> Hadley
>
> --
> RStudio / Rice University
> http://had.co.nz/
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20121119/4d88bda4/attachment-0001.html>


More information about the Rcpp-devel mailing list