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

发布于 2024-11-03 09:27:02 字数 422 浏览 4 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

信仰 2024-11-10 09:27:02

有几个选项:

  1. 最好的解决方案是修改此供 R 使用的所有内容,因此创建例如文件 ~/.R/Makevars 并在那里设置 CFLAGS、CXXFLAGS...。这将影响 R CMD INSTALL ...R CMD SHLIB ... 等 pp 以及内联使用中的 cxxfunction() 的所有使用它,它在这里也可以工作。

  2. 具体针对inline和Rcpp:修改插件,这就是它是插件系统的原因。请参阅Rcpp:::Rcpp.plugin.maker()

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

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

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

There are a couple of options:

  1. 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 by R CMD INSTALL ..., R CMD SHLIB ... etc pp and as cxxfunction() from inline uses it, it works here too.

  2. Specific to inline and Rcpp: modify the plugin, that's why it is a plugin system. See Rcpp:::Rcpp.plugin.maker().

  3. Switch back from cxxfunction() to cfunction(), 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/or Makeconf.site.

白鸥掠海 2024-11-10 09:27:02

我可以建议一个黑客。编写一个小包装程序(也称为 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文