[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