Ho un pacchetto R per il quale ho spostato un algoritmo MCMC contenente algebra di matrice su C++
utilizzando il pacchetto RcppEigen
che ha notevolmente migliorato la velocità.Come posso migliorare il file Makevars per un pacchetto Rcpp (RcppEigen)?
Tuttavia, R CMD check
ha pronunciato la seguente NOTE
su Linux (Thanks to R-Forge):
* checking installed package size ... NOTE
installed size is 6.6Mb
sub-directories of 1Mb or more:
libs 6.1Mb
Questo avviso non è probabilmente guidato dalle dimensioni incredibili del mio codice C++ (which is only around 150 lines), così come appare solo su Linux, ma probabilmente dalla mia incapacità di configurare correttamente il file Makevars
. (Non ho mai usato make
o un makefile
prima).
Anche quando ha inviato il pacchetto a CRAN
, Brian Ripley ha scritto qualcosa su questo NOTE
che mi ha fatto pensare che si tratti di un problema Makevars
: "Deriva dai simboli di debug."
Il mio Makevars
è lo standard Rcpp
Makevars
(indicato di seguito) prodotto da Rcpp.package.skeleton
.
Le mie domande:
- Come posso configurare la mia
Makevars
in un modo che riduce la dimensione della libreria compilata su Linux (vale a dire, sbarazzarsi delNOTE
)? - Quali sono le buone risorse su come entrare nella magia di
Makevars
perRcpp
?
(non ho trovato nulla nel Gallery e la R extension manual on this è stato anche per me incomprensibile)
mia Makevars
:
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`
PKG_CPPFLAGS = -I. -I../inst/include
mia Makevars.win
:
## This assume that we can call Rscript to ask Rcpp about its locations
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = $(shell $(R_HOME)/bin/Rscript.exe -e "Rcpp:::LdFlags()")
PKG_CPPFLAGS = -I. -I../inst/include
Grazie per la risposta, tanto per chiarire: che cosa il vostro stanno dicendo è fondamentalmente (a) non c'è davvero nessun problema, la dimensione proviene dalla struttura di 'Eigen', (b) non sono raccomandati flag 'CXXFLAGS' da impostare per' RcppEigen', e (c) se si vogliono cambiare i flag andare e imparare la sintassi _basic Makefile e options_. Ti sto capendo correttamente? – Henrik
Sì a a) ec); diciamo ciò di cui hai bisogno in b) e ti diamo; guarda i documenti, gli esempi e il pacchetto skeleton di RcppEigen, ma in pratica ti serve solo LinkingTo: RcppEigen. Tu usi RcppEigen e non la copia separata di Eigen, giusto? –
Sì, utilizzo 'RcppEigen' e probabilmente ho usato' RcppEigen.package.skeleton' (dato che ho 'RcppEigen' prima di' Rcpp' su Depends e LinkingTo in 'DESCRIPTION'). La mia domanda è forse se ha senso impostare ad es. la famosa opzione '-O3' (e se sì, come)? – Henrik