[Rcpp-devel] Sugar seems slower than Rcpp.
Romain Francois
romain at r-enthusiasts.com
Tue Jan 4 18:13:14 CET 2011
Le 04/01/11 17:42, Romain Francois a écrit :
> 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.
Also, you might want to consider calculating xV.size() once (out of the
loop) instead of xV.size() times.
So for example:
Summing2 <- cxxfunction(signature(x="numeric"), '
NumericVector xV(x);
double out = 0.0;
int n = xV.size() ;
for(int i=0; i<n; i++) out += xV[i];
return wrap(out);
',plugin="Rcpp")
For me this is faster than R:
> n <- 10000000; x <- rnorm(n)
> system.time(Summing1(x));
utilisateur système écoulé
0.040 0.000 0.039
> system.time(Summing2(x));
utilisateur système écoulé
0.011 0.000 0.011
> system.time(sum(x));
utilisateur système écoulé
0.017 0.000 0.017
Someone will deal with the sugar version later.
Romain
>> 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