[Rcpp-devel] R/Rcpp/RcppEigen Optimization WAS: NumericVector Double mismatch when indexing an array
Dirk Eddelbuettel
edd at debian.org
Tue Oct 23 17:03:27 CEST 2012
On 23 October 2012 at 09:46, Rodney Sparapani wrote:
| On 09/25/2012 04:45 PM, Dirk Eddelbuettel wrote:
| >
| > I use and recommend ~/.R/Makevars for that --- as setting certain values at
| > the package level is very verboten ("non portable code" and all that) as far
| > as CRAN is concerned.
| >
| > Now, that's the "how do you" part. As for "does it matter" that is a
| > different beast as -O2 (or better) is already the default for R on my systems
| > (running the vanilla Ubuntu packages based on my Debian packaging).
| >
| > Dirk
| >
|
| Hi Dirk:
|
| I hope this not too far off-topic. I don't want to show my messy code,
| but I learned a lot about optimization on my own system which I assume
| would be useful to others. I was comparing an MCMC sampler written in
| R with a line for line translation via inline/RcppEigen.
|
| So, getting back to this discussion... "The way" to do this is to
| optimize R from the get go and then Rcpp/RcppEigen/etc. inherit the
| appropriate switches. And, as Dirk said, the RPM of R in the repo does
| have -O2 (and a bunch of other switches which I don't know anything
| about). However, I found that R in the repo was no faster than my
| naive compilation of R from source which did not include -O2 (or any
| other black magic).
|
| What gives? What I found that does speed up the code dramatically
| is the -march switch. I guess that can't be repo-ed because it is
| CPU dependent, right? Here's the important settings that I used to
| compile R from source:
Using -march=native lets gcc pick the best one without you having to know
the label gcc may use.
That said, _distribution builds_ cannot use this as they will not know your
cpu, and need to provide code for all compatible platforms (eg all 'amd64').
But configuration and optimisation of R is (I fear) a little off-topic
here. Maybe try r-devel?
Dirk
|
| CC="gcc"
| CFLAGS="-g -O2 -march=amdfam10"
| CXX="g++"
| CXXFLAGS="-g -O2 -march=amdfam10"
|
| With these settings...
|
| MCMC Code Switches Relative Time
| R none or -O2 1.0
| RcppEigen none or -O2 0.09
| R -O2 -march=amdfam10 0.5
| RcppEigen -O2 -march=amdfam10 0.013
|
| --
| Rodney Sparapani, PhD Center for Patient Care and Outcomes Research
| Sr. Biostatistician http://www.mcw.edu/pcor
| 4 wheels good, 2 wheels better! Medical College of Wisconsin (MCW)
| WWLD?: What Would Lombardi Do? Milwaukee, WI, USA
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list