[Rcpp-devel] Sugar seems slower than Rcpp.

Romain Francois romain at r-enthusiasts.com
Tue Jan 4 17:42:46 CET 2011


Le 04/01/11 16:35, Andrew Redd a écrit :
> Cedric,
> This was addressed  about 2 weeks ago on the list, please read the
> archives.  Basic point, Rcpp/sugar will not be faster than basic
> functions in R. Do something more complicated to see improvements.  I
> would suggest something that involves lots of copies and edits, that
> will mess with R's memory management but be much more efficient in
> compiled code.
>
> -Andrew

Hmmm. I suspect someone might be able to speed up "sum". Essentially it 
contains lots of tests for NA that might be expensive if none of the 
input data is NA.

Not sure I want to be that someone just yet.

> On Tue, Jan 4, 2011 at 8:14 AM, Cedric Ginestet
> <c.ginestet05 at googlemail.com <mailto:c.ginestet05 at googlemail.com>> wrote:
>
>     Happy new year to everyone,
>
>     I have made a very straightforward comparison of the performance of
>     standard R, Rcpp function and sugar, and found that the latter
>     produces the poorest performance. Let me know what you think and how
>     I could improve such performance assessment.
>
>     ###################################################
>     Summing1 <- cxxfunction(signature(x="numeric"), '
>            NumericVector xV(x);
>            double out = sum(xV);
>            return wrap(out);
>     ',plugin="Rcpp")
>     Summing2 <- cxxfunction(signature(x="numeric"), '
>            NumericVector xV(x);
>            double out = 0.0;
>            for(int i=0; i<xV.size(); i++) out += xV[i];
>            return wrap(out);
>     ',plugin="Rcpp")
>     ###################################################
>     # Results.
>     n <- 1000000; x <- rnorm(n)
>     Summing1(x); Summing2(x); sum(x)
>     #######################
>     gives:
>     [1] -396.6129
>     [1] -396.6129
>     [1] -396.6129
>
>     ###################################################
>     # Time.
>     system.time(Summing1(x));    # Sugar
>     system.time(Summing2(x));    # Rcpp
>     system.time(sum(x));               # R-base
>     ###################
>      > system.time(Summing1(x));
>         user  system elapsed
>        0.016   0.000   0.016
>      > system.time(Summing2(x));
>         user  system elapsed
>        0.008   0.000   0.011
>      > system.time(sum(x));
>         user  system elapsed
>        0.000   0.000   0.003
>
>
>     Sugar appears to be the slowest! What about Rcpp basic loop? Why
>     isn't as fast as the standard sum() in R-base?
>     Cheers,
>     Cedric
>
>     --
>     Cedric Ginestet
>     Centre for Neuroimaging Sciences (L3.04)
>     NIHR Biomedical Research Centre
>     Institute of Psychiatry, Box P089
>     Kings College London
>     De Crespigny Park
>     London
>     SE5 8AF


-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/fT2rZM : highlight 0.2-5
|- http://bit.ly/gpCSpH : Evolution of Rcpp code size
`- http://bit.ly/hovakS : RcppGSL initial release




More information about the Rcpp-devel mailing list