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.<br><br>
| RcppArmadillo will use the very same LAPACK and BLAS libs your R session<br>
| uses. So MKL, OpenBlas, ... are all options.  Eigen actually has its own code<br>
| outperforming LAPACK, so it doesn't  as much there.<br><br>Why do you think R outperforms RcppArmadillo in this example below? Anyway to speed this up?<br><br>require(RcppArmadillo)<br>require(inline)<br><br>arma.code <- '<br>
  using namespace arma;<br>  NumericMatrix Xr(Xs);<br>  int n = Xr.nrow(), k = Xr.ncol();<br>  mat X(Xr.begin(), n, k, false);<br>  mat U;<br>  vec s;<br>  mat V;<br>  svd(U, s, V, X);<br>  return wrap(s);<br>'<br>rcppsvd <- cxxfunction(signature(Xs="numeric"),<br>
                        arma.code,<br>                        plugin="RcppArmadillo")<br><br>A<-matrix(rnorm(5000^2), 5000)<br><br>> system.time(rcppsvd(A))<br>    user   system  elapsed <br>1992.406    4.862 1988.737 <br>
<br>> system.time(svd(A))<br>   user  system elapsed <br>652.496   2.641 652.614 <br><br><div class="gmail_quote">On Wed, Jun 13, 2012 at 11:43 AM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
On 13 June 2012 at 10:57, Julian Smith wrote:<br>
| I've been toying with both RcppArmadillo and RcppEigen the past few days and<br>
| don't know which library to continue using. RcppEigen seems really slick, but<br>
| appears to be lacking some of the decompositions I want and isn't nearly as<br>
| fast to code. RcppArmadillo seems about as fast, easier to code up etc. What<br>
| are some of the advantages/disadvantages of both?<br>
<br>
</div>That's pretty close.  I have been a fan of [Rcpp]Armadillo which I find<br>
easier to get my head around.  Doug, however, moved from [Rcpp]Armadillo to<br>
[Rcpp]Eigen as it has some things he needs.  Eigen should have a "larger" API<br>
than Armadillo, but I find the code and docs harder to navigate.<br>
<br>
And you should find Eigen to be a little faster. Andreas Alfons went as far<br>
as building 'robustHD' using RcppArmadillo with a drop-in for RcppEigen (in<br>
package 'sparseLTSEigen'; both package names from memmory and I may have<br>
mistyped).  He reported a performance gain of around 25% for his problem<br>
sets.  On the 'fastLm' benchmark, we find the fast Eigen-based decompositions<br>
to be much faster than Armadillo.<br>
<div><br>
| Can you call LAPACK or BLAS from either? Is there a wrapper in RcppEigen to<br>
| call LAPACK functions? Want some other decomposition methods, dont like the<br>
| JacobiSVD method in Eigen.<br>
<br>
</div>You need to differentiate between the Eigen and Armadillo docs _for their<br>
libraries_ and what happens when you access the Rcpp* variant from R.<br>
<br>
RcppArmadillo will use the very same LAPACK and BLAS libs your R session<br>
uses. So MKL, OpenBlas, ... are all options.  Eigen actually has its own code<br>
outperforming LAPACK, so it doesn't  as much there.<br>
<br>
Hope this helps,   Dirk (at useR!)<br>
<br>
|<br>
| ----------------------------------------------------------------------<br>
| _______________________________________________<br>
| Rcpp-devel mailing list<br>
| <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" target="_blank">Rcpp-devel@lists.r-forge.r-project.org</a><br>
| <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
<span><font color="#888888">--<br>
Dirk Eddelbuettel | <a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a> | <a href="http://dirk.eddelbuettel.com" target="_blank">http://dirk.eddelbuettel.com</a><br>
</font></span></blockquote></div><br>