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.
| 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? 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 <e...@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@lists.r-forge.r-project.org > | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > -- > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com >
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel