[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