[Rcpp-devel] Forcing a shallow versus deep copy

Changi Han changi.han.wen at gmail.com
Fri Jul 12 13:49:45 CEST 2013


I apologize if my emails were badly phrased, or disrespectful. No intention
of saying anything was broken, suspicious or wrong.

I second Gabor. His described use case matches mine. The outer loop is an
optimization routine coming from other libraries. Rcpp is used to speed up
the objective, gradient and hessian computations and hence the data is
constantly passed along to all of these functions. Another use case to
consider is recursion with data passed along. A toy example is gib(0) =
values(0); gib(1) = values(1); gib(x) = gib(x-1) + gib(x-2) + values(x).
Values = vector of non negative integers. A naive implementation with aux
memory allocation may cause the number of copies in memory to grow with
exponential order in x.


> In case ii) I'd try to use a different design and make it more like i):
> You
> > generally do not want to call down from R to object code a bazillion
> times as
> > there is always some overhead, and multiplying even something rather
> > efficient by a veryBigNumber can make small times large in the aggregate.
>
> Sure and sugar, rcpparmadillo and other facilities do make it easier to
> move
> more functionality into C++; nevertheless, it can be the case that a
> relatively
> small amount of R code repeatedly
> invoked is responsible for the performance hit in a program and from
> the viewpoint
> of reducing complexity and increasing maintainability it can be
> desirable to just
> move that minimum portion to the C++ side minimizing the dual language
> aspect
> of the code.  By making call overhead as fast
> as one can while retaining any automatic Rcpp features then this
> is facilitated.  If its not possible in general then if it were just
> possible
> for Armadillo objects and selected other situations then this would
> still be nice.
>
> >
> > Dirk
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130712/05f7a3df/attachment.html>


More information about the Rcpp-devel mailing list