"disguise" might be a more appropriate name? I like the idea. Thanks,
baptiste On 11 August 2010 21:59, Romain Francois <rom...@r-enthusiasts.com> wrote: > Hi, > > For one thing, the construct : > > arma::mat B = Rcpp::as< arma::mat>( A ) ; > > probably makes copies along the way. I'm not sure what right now, but we > might a different construct, something like: > > arma::mat B ; > Rcpp::borrow<arma::mat>( B, A ) ; > > where borrow would have this signature perhaps > > template <typename T> > void borrow( T& target, SEXP origin ) ; > > > This would avoid some of these unnecessary copies. Not sure borrow is the > right verb though. > > Also, the compiler might implicitely inline dum1 and dum2 because they are > so simple, so the performance might be the same, I'm not sure about that > though ... > > Romain > > > > Le 11/08/10 21:30, baptiste auguie a écrit : >> >> I think I understand the principle, however with my best effort I >> cannot find a test case. Here I thought I'd be passing an arbitrarily >> large arma matrix to some function, but again the timing is not >> convincing (in fact, I had to stop the execution once with the dummy2 >> version), >> >> using namespace Rcpp ; >> using namespace RcppArmadillo ; >> >> extern "C" { >> >> arma::mat dum1(arma::mat B) >> { >> return (B*38); >> } >> >> arma::mat dum2(const arma::mat& B) >> { >> return (B*38); >> } >> >> RCPP_FUNCTION_2(NumericMatrix, dummy1, NumericMatrix A, int N) { >> arma::mat B = Rcpp::as< arma::mat>( A ) ; >> return wrap(dum1(repmat(B, N, N))); >> } >> >> RCPP_FUNCTION_2(NumericMatrix, dummy2, NumericMatrix A, int N) { >> arma::mat B = Rcpp::as< arma::mat>( A ) ; >> return wrap(dum2(repmat(B, N, N))); >> } >> >> } >> >> } >> >> Regards, >> >> baptiste >> >> >> On 11 August 2010 19:21, Davor Cubranic<cubra...@stat.ubc.ca> wrote: >>> >>> On August 11, 2010 02:48:23 am rom...@r-enthusiasts.com wrote: >>>> >>>> Le 10 août 2010 à 22:10, baptiste auguie >>> >>> <baptiste.aug...@googlemail.com> a écrit : >>>>> >>>>> OK, thanks. I have not been able to produce a minimal code that >>>>> would exhibit an improved performance using this >>>>> passing-by-reference idea. >>>> >>>> Hi, >>>> >>>> It would usually make a difference when copying the object that is >>>> passed by value is "expensive" to copy. Rcpp objects are very cheap >>>> to copy and both copies refer to the same actual data (the same >>>> SEXP). >>>> >>>> For internal code my recommendation would be to always use pass by >>>> reference and do an explicit call to clone when a real copy >>>> (different SEXP) is needed. >>> >>> In other words, if you were passing large arma::mat's, then const >>> references should make a real difference. >>> >>> Davor >>> >> _______________________________________________ >> 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 >> > > > -- > Romain Francois > Professional R Enthusiast > +33(0) 6 28 91 30 30 > http://romainfrancois.blog.free.fr > |- http://bit.ly/aAyra4 : highlight 0.2-2 > |- http://bit.ly/94EBKx : inline 0.3.6 > `- http://bit.ly/aryfrk : useR! 2010 > > _______________________________________________ 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