[Rcpp-devel] Differences between RcppEigen and RcppArmadillo

Douglas Bates bates at stat.wisc.edu
Thu Jun 14 01:07:30 CEST 2012


On Wed, Jun 13, 2012 at 5:16 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> 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);
> | '

Because the arma code is evaluating the singular vectors (U and V) as
well as the singular values (S) whereas the R code is only evaluating
the singular values.  There is considerably more effort required to
evaluate the singular vectors in addition to the singular values.

> | 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
> _______________________________________________
> 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


More information about the Rcpp-devel mailing list