On Wed, Jun 13, 2012 at 5:16 PM, Dirk Eddelbuettel <[email protected]> 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 <[email protected]> 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 > | | [email protected] > | | > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > | -- > | Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com > | > | > > -- > Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com > _______________________________________________ > Rcpp-devel mailing list > [email protected] > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel _______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
