Thank you JJ, that makes sense. I had no idea that R could be so taxing when bench-marking.
On Thu, Dec 20, 2012 at 1:27 PM, JJ Allaire <jj.alla...@gmail.com> wrote: > It's possible that the overhead of making R function calls is swamping all > of the other performance data here. I've re-written the example w/ > sourceCpp and with the calls to the C++ version happening inside C++ rather > than R. This yields more like 100:1 speedup: > > #include <Rcpp.h> > using namespace Rcpp; > > double get_var(const NumericVector& v,double m,int l) { > double a = 0; > for (int i = 0; i <l;i++) { > a += (v[i]-m)*(v[i]-m); > } > return(a/l); > } > > double get_sum(const NumericVector& v,int l) { > double s = 0; > for (int i = 0; i <l;i++) { > s += v[i]; > } > return(s); > } > > // [[Rcpp::export]] > double rcppVar(const NumericVector& v) { > int n = v.size(); > double v_mean = get_sum(v,n)/n; > double v_var = get_var(v,v_mean,n); > return v_var; > } > > // [[Rcpp::export]] > void callRcppVar(const NumericVector& v) { > for (int i=0; i<100; i++) > rcppVar(v); > } > > > /*** R > a=1:1000000 > system.time(callRcppVar(a)) > system.time(for (i in 1:100) var (a)) > */ > > > a=1:1000000 > > > system.time(callRcppVar(a)) > user system elapsed > 0.003 0.001 0.005 > > > system.time(for (i in 1:100) var (a)) > user system elapsed > 0.591 0.128 0.719 >
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel