[Rcpp-devel] Differences between RcppEigen and RcppArmadillo

Dirk Eddelbuettel edd at debian.org
Thu Jun 14 00:16:31 CEST 2012


On 13 June 2012 at 15:05, Julian Smith wrote:
| I agree that RcppEigen is a little bit faster, but ease of use is important to
| me, so I feel like RcppArmadillo might win out in my application.

Yup, that my personal view too.
 
| | RcppArmadillo will use the very same LAPACK and BLAS libs your R session
| | uses. So MKL, OpenBlas, ... are all options.  Eigen actually has its own
| code
| | outperforming LAPACK, so it doesn't  as much there.
| 
| Why do you think R outperforms RcppArmadillo in this example below? Anyway to
| speed this up?

That is odd. "I guess it shouldn't." I shall take another look -- as I
understand it both should go to the same underlying Lapack routine.  I may
have to consult with Conrad on this.

Thanks for posting a full and reproducible example!

Dirk
 
| require(RcppArmadillo)
| require(inline)
| 
| arma.code <- '
|   using namespace arma;
|   NumericMatrix Xr(Xs);
|   int n = Xr.nrow(), k = Xr.ncol();
|   mat X(Xr.begin(), n, k, false);
|   mat U;
|   vec s;
|   mat V;
|   svd(U, s, V, X);
|   return wrap(s);
| '
| rcppsvd <- cxxfunction(signature(Xs="numeric"),
|                         arma.code,
|                         plugin="RcppArmadillo")
| 
| A<-matrix(rnorm(5000^2), 5000)
| 
| > system.time(rcppsvd(A))
|     user   system  elapsed
| 1992.406    4.862 1988.737
| 
| > system.time(svd(A))
|    user  system elapsed
| 652.496   2.641 652.614
| 
| On Wed, Jun 13, 2012 at 11:43 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
| 
| 
|     On 13 June 2012 at 10:57, Julian Smith wrote:
|     | I've been toying with both RcppArmadillo and RcppEigen the past few days
|     and
|     | don't know which library to continue using. RcppEigen seems really slick,
|     but
|     | appears to be lacking some of the decompositions I want and isn't nearly
|     as
|     | fast to code. RcppArmadillo seems about as fast, easier to code up etc.
|     What
|     | are some of the advantages/disadvantages of both?
| 
|     That's pretty close.  I have been a fan of [Rcpp]Armadillo which I find
|     easier to get my head around.  Doug, however, moved from [Rcpp]Armadillo
|     to
|     [Rcpp]Eigen as it has some things he needs.  Eigen should have a "larger"
|     API
|     than Armadillo, but I find the code and docs harder to navigate.
| 
|     And you should find Eigen to be a little faster. Andreas Alfons went as far
|     as building 'robustHD' using RcppArmadillo with a drop-in for RcppEigen (in
|     package 'sparseLTSEigen'; both package names from memmory and I may have
|     mistyped).  He reported a performance gain of around 25% for his problem
|     sets.  On the 'fastLm' benchmark, we find the fast Eigen-based
|     decompositions
|     to be much faster than Armadillo.
| 
|     | Can you call LAPACK or BLAS from either? Is there a wrapper in RcppEigen
|     to
|     | call LAPACK functions? Want some other decomposition methods, dont like
|     the
|     | JacobiSVD method in Eigen.
| 
|     You need to differentiate between the Eigen and Armadillo docs _for their
|     libraries_ and what happens when you access the Rcpp* variant from R.
| 
|     RcppArmadillo will use the very same LAPACK and BLAS libs your R session
|     uses. So MKL, OpenBlas, ... are all options.  Eigen actually has its own
|     code
|     outperforming LAPACK, so it doesn't  as much there.
| 
|     Hope this helps,   Dirk (at useR!)
| 
|     |
|     | ----------------------------------------------------------------------
|     | _______________________________________________
|     | 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
| 
| 

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


More information about the Rcpp-devel mailing list