R:使用内联包时的C ++优化标志

时间:2011-04-26 11:32:20

标签: c++ r inline rcpp

在R中使用inline package中的cxx函数时,如何更改cpp编译器的优化标志?

默认情况下,在我的计算机上,它会使用-g -O2进行编译。但我想使用-O3优化来提高速度。我使用Rcpp插件,如果这有任何区别。

我尝试创建自己的插件,并尝试设置cxx函数的不同参数,但没有任何效果。

我想一个选项是使用R CMD SHLIB而不是cxxfunction来编译它。但是Rcpp建议使用inline,因为他们的大多数测试用例都在使用它。

感谢您的帮助,如果您需要任何澄清,请告诉我

2 个答案:

答案 0 :(得分:15)

有几种选择:

  1. 最佳解决方案是修改此以用于R 的所有用法,因此请创建例如文件~/.R/Makevars并设置CFLAGS,CXXFLAGS,.. 。 那里。这将影响R CMD INSTALL ...R CMD SHLIB ...等所有使用情况以及来自内联使用它的cxxfunction(),它也适用于此。

  2. 特定于内联和Rcpp:修改插件,这就是它是一个插件系统的原因。请参阅Rcpp:::Rcpp.plugin.maker()

  3. cxxfunction()切换回cfunction(),因此请勿使用插件并手动设置所有参数。

  4. 毋庸置疑,我喜欢选项1并自己使用它。

    编辑:我过去常用的第四种(粗略!!)方法是修改$R_HOME/Makeconf和/或Makeconf.site

答案 1 :(得分:1)

我可以建议一个黑客。编写一个小包装程序(也称为cpp),它调用真正的cpp并将所有参数传递给它,除了它传递-O3进行优化。然后确保您的程序首先出现在R.

的可执行路径解析中