R:C++使用内联包时的优化标志
在 R 中,当使用 内联包 中的 cxxfunction 时,如何更改 cpp 编译器的优化标志?
默认情况下,在我的机器上,它使用 -g -O2
进行编译。但我想使用 -O3 优化来提高速度。如果有什么区别的话,我会使用 Rcpp 插件。
我尝试创建自己的插件,并尝试设置 cxxfunction 的不同参数,但没有任何效果。
我想一种选择是使用 R CMD SHLIB 而不是使用 cxxfunction 来编译它。但 Rcpp 建议使用 inline
因为他们的大多数测试用例都在使用它。
感谢您的帮助,如果您需要任何说明,请告诉我
In R when using the cxxfunction from the inline package, how does one change the optimization flag for the cpp compiler?
By default, on my machine, it compiles with -g -O2
. But I would like to use the -O3
optimization to gain speed. I use the Rcpp
plugin if that makes any difference.
I have tried creating my own plugin, and I have tried to set the different arguments of the cxxfunction but nothing worked.
I guess one option would be to compile it using R CMD SHLIB
instead of using cxxfunction
. But Rcpp recommends the use of inline
because most of their test cases are using it.
thanks for your help, let me know if you need any clarification
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有几个选项:
最好的解决方案是修改此供 R 使用的所有内容,因此创建例如文件
~/.R/Makevars
并在那里设置 CFLAGS、CXXFLAGS...。这将影响R CMD INSTALL ...
、R CMD SHLIB ...
等 pp 以及内联使用中的cxxfunction()
的所有使用它,它在这里也可以工作。具体针对inline和Rcpp:修改插件,这就是它是插件系统的原因。请参阅
Rcpp:::Rcpp.plugin.maker()
。从
cxxfunction()
切换回cfunction()
,因此不要使用插件并手动设置所有参数。不用说,我喜欢选项 1,并且自己也使用它。
编辑:我过去使用的第四种(也是粗暴的!!)方法是编辑
$R_HOME/Makeconf
和/或Makeconf.site.
There are a couple of options:
The best solution is to modify this for all usage by R so create e.g. a file
~/.R/Makevars
and set CFLAGS, CXXFLAGS, ... there. This will affect all use byR CMD INSTALL ...
,R CMD SHLIB ...
etc pp and ascxxfunction()
from inline uses it, it works here too.Specific to inline and Rcpp: modify the plugin, that's why it is a plugin system. See
Rcpp:::Rcpp.plugin.maker()
.Switch back from
cxxfunction()
tocfunction()
, hence do not use a plugin and set all arguments manually.Needless to say, I like option 1 and use it myself.
Edit: A fourth (and crude !!) method I used to use in the past is to edit
$R_HOME/Makeconf
and/orMakeconf.site
.我可以建议一个黑客。编写一个小包装程序(也称为 cpp),它调用真正的 cpp 并将所有参数按原样传递给它,只是它传递 -O3 进行优化。然后确保您的程序首先出现在 R 的可执行路径解析中。
I can suggest a hack. Write a little wrapper program (also called cpp) which calls the real cpp and passes all arguments to it as is except that it passes -O3 for optimization. Then make sure your program occurs first in the executable path resolution for R.