[Rcpp-devel] RcppArmadillo

Dirk Eddelbuettel edd at debian.org
Sat Feb 2 16:17:24 CET 2013

Hi Simon,

Welcome to the list.

On 2 February 2013 at 14:47, Simon Zehnder wrote:
| Dear Rcpp-Devels,
| this list was suggested to me by Dirk Eddelbüttel in regard to a question using C++ Extensions in relation with the Armadillo library. 
| At first I have to make compliments to the developers of Rcpp/RcppArmadillo. Dirk, Francois, this is a marvelous work! As someone programming a lot in C++ and using R Extensions regularly, it is cleaning away all this cumbersome programming dirt connected to SEXPs. 

| There are still remaining questions for me, which can be surely answered by the subscribers to this list: 
| 1. I saw the Rcpp.package.skeleton function and I ask myself, if a similar offer is made for RcppArmadillo for including automatically the Armadillo library in a package? 

Sure -- there is RcppArmadillo.package.skeleton() in the RcppArmadillo
package. Dito for RcppGSL and RcppEigen.
| 2. If I want to use Armadillo solely in the C++ files, not via inline functions as shown in the RcppArmadillo paper, should I use solely the Rcpp package? No, right? The RcppArmadillo package provides objects wrappers for Armadillo objects to be passed to R? 

If you want just C++ from R, use Rcpp.

If you want C++ and Armadillo from R, use RcppArmadillo. It depends on Rcpp
and brings it in.

Etc pp for other libraries. Rcpp and RcppArmadillo should provide the
scaffolding to build upon. 
| 3. My package is based on S4 classes and I saw the S4 class wrapping in the Rcpp package. I miss an example on this. Can you refer to any document or website for this issue? 

Look at the Rcpp documentation, including the recently introduced Rcpp
Gallery at http://gallery.rcpp.org for some examples.  I don't use S4 all
that much so I do not write many examples, but eg in RcppEigen context a few
more are found (as some of that work was motivated bty sparse matrices which
already have an S4 representation in R).

| 4. Further: What is your experience regarding performance with S4 classes and OOP in C++: Does it make a difference mapping the S4 class to a struct in C++ or using directly the attributes of the S4 class (like vectors, etc.) as Armadillo vectors etc. in C++?
| As I work a lot on the HPC in Aachen/Germany together with some of the contributors to the OpenMP API, I am highly influenced by the parsimonious approach, i.e. use only basic objects in C++ to get high performance (although I know, that one of the main work now in the OpenMP API is the extension to complex/user-defined objects inside the #pragmas). 

As I said, I do not use S4 all that much. But I am in favour of OOP :)
| 5. Using OpenMP with RcppArmadillo: Up to now I used almost exclusively the Scythe Statistical Library (http://scythe.wustl.edu), which is pretty fast. I encountered lately problems with it, using parallel computing (OpenMP). Also important in this regard is the possibility to apply a 'first-touch-principle' where all my approaches failed in Scythe, due to the object structure. 
| Now, I would like to use RccpArmadillo with OpenMP and 
| 		a) I want to get best performance: how would I proceed?

Just do it. We have OpenMP examples in the Rcpp docs. Ensure you have locks
from R, do not call back, and it tends to just work to be "multithreaded in
chunks" at the C++ level..

Scythe was very important and a first C++ library for R when it came out. I
could imagine that Armadillo is faster, but I have not seen comparisons.
| 		b) I want to apply the 'first-touch-principle': where do I apply it? What is the internal data structure in Rcpp-/RcppArmadillo-Objects that allocates the memory?

It's whatever you would do with native R objects at the C level, only easier :)
| I am very excited now to start work with the Rcpp/RcppArmadillo package in my own one, which is at least planned to be pushed to CRAN one day. 

We look forward to your contributions.  These are open projects, so if you
can think of patches to code or documentation, please let us know.
| I am looking forward to your answers

Hope this helps.


| Best
| Simon 
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com  

More information about the Rcpp-devel mailing list