2011-04-26 14 views
17

En R cuando se utiliza la función cxx del inline package, ¿cómo se cambia el indicador de optimización para el compilador cpp?R: indicador de optimización C++ cuando se utiliza el paquete en línea

Por defecto, en mi máquina, compila con -g -O2. Pero me gustaría utilizar la optimización -O3 para ganar velocidad. Yo uso el plugin Rcpp si eso hace alguna diferencia.

He intentado crear mi propio complemento, y he intentado establecer los diferentes argumentos de la función cxx, pero nada funcionó.

Supongo que una opción sería compilarlo usando R CMD SHLIB en lugar de usar cxxfunction. Pero Rcpp recomienda el uso de inline porque la mayoría de los casos de prueba lo están usando.

gracias por su ayuda, que me haga saber si necesita cualquier aclaración

Respuesta

15

Hay un par de opciones:

  1. La mejor solución es modificar esta de todo el uso de R por tanto, crear p.ej un archivo ~/.R/Makevars y establece CFLAGS, CXXFLAGS, ... allí. Esto afectará todo el uso por R CMD INSTALL ..., R CMD SHLIB ... etc. pp y como cxxfunction() desde la línea lo usa, funciona aquí también.

  2. Específico para inline y Rcpp: modifique el complemento, es por eso que es un sistema de complemento. Ver Rcpp:::Rcpp.plugin.maker().

  3. Cambia de cxxfunction() a cfunction(), por lo tanto, no uses un complemento y configura todos los argumentos manualmente.

No hace falta decir que me gusta la opción 1 y la uso yo mismo.

Editar: Un método cuarto (y crudo !!) Solía ​​usar en el pasado es editar $R_HOME/Makeconf y/o Makeconf.site.

+0

¡Utilicé la opción 1 y funcionó de inmediato! ¡Muchas cosas! – tlamadon

+0

Gracias por confirmar y aceptar, también puede dar este 'voto positivo' haciendo clic en el triángulo hacia arriba :) –

+0

Lo haría, pero aparentemente mi reputación es muy baja (menos de 15) :-) – tlamadon

0

puedo sugerir un corte. Escriba un pequeño programa envoltorio (también llamado cpp) que llame al cpp real y le pase todos los argumentos tal como están, excepto que pasa -O3 para la optimización. A continuación, asegúrese de que su programa se produce primero en la resolución ruta ejecutable para R.

+2

Eso es bastante crudo. –

+1

culpable de los cargos! – hawk

+2

Pero diablos funciona; todos hemos hecho cosas similares para hacer el trabajo. –

Cuestiones relacionadas