2011-04-26 49 views
17

在使用来自inline package的cxxfunction的R中,如何更改cpp编译程序的优化标志?R:使用内联程序包时的C++优化标志

默认情况下,在我的机器上,它编译为-g -O2。但我想使用-O3优化来获得速度。如果这有什么不同,我使用Rcpp插件。

我已经尝试创建自己的插件,并试图设置cxxfunction的不同参数,但没有任何工作。

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

感谢您的帮助,让我知道如果你需要任何澄清

回答

15

有几个选项:

  1. 最好的解决办法是修改这个由R所有情况,以便创造例如文件~/.R/Makevars并设置CFLAGS,CXXFLAGS,...在那里。这会影响所有使用R CMD INSTALL ...,R CMD SHLIB ...等pp和cxxfunction()从内联使用它,它也适用于这里。

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

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

不用说,我喜欢选项1并自己使用它。

编辑:我过去使用的第四种(和原油!!)方法是编辑$R_HOME/Makeconf和/或Makeconf.site

+0

我使用了选项1,它马上就能工作!很多! – tlamadon 2011-04-26 12:45:52

+0

感谢您的确认和接受,您也可以通过点击向上的三角形给予这个'加价' – 2011-04-26 12:47:52

+0

我会,但显然我的名声太低(低于15):-) – tlamadon 2011-04-26 12:59:16

0

我可以建议一个黑客。编写一个小包装程序(也称为cpp),它调用真正的cpp并将所有参数传递给它,除了它通过-O3进行优化。然后确保你的程序的可执行文件的路径分辨率R.

第一次出现
+2

这相当粗糙。 – 2011-04-26 12:30:48

+1

有罪! – hawk 2011-04-26 16:37:15

+2

但它工作;我们都做了类似的事情来完成工作。 – 2011-04-26 16:48:06