RcppEigen 和矢量化

RcppEigen and Vectorization

在 Eigen 常见问题解答中,它指出 you need to enable vectorization in the compiler

我正在尝试使用 RcppEigen 开发 R 包。如果用户无需手动编译带有指定标志的包即可获得最佳性能,我希望如此。

希望在 Eigen 库中启用矢量化的 R 包的最佳实践是什么?

完全按照常见问题解答中的说明进行操作并设置编译器标志。在测试当前编译器支持的内容后,您可能必须从脚本 configure 中打开它们——并且 CRAN 可能仍会告诉您这些标志不可移植。

此外,为了修正这里的术语,我们的 RcppEigen 中没有 "library":RcppEigen 仅使用 Eigen 中的 headers,它被设计为模板化 header-only 包。

我也是初学者,花了很多时间试图理解 Rcpp 可能与你有关@jds。我想在我的 Dell Precision M2800 上使用 AVX 架构启用矢量化,所以我使用以下块三次将 -mavx2 标志添加到我的 configure 文件中:

CXXFLAGS= -O3 -std=c++11 -Wall -mavx2

此代码更改将我的代码(一系列双嵌套 for 循环)从 4.1 秒加速到 1.4 秒!

了解如何通过使用 configureclean[=27= 构建框架包来修改 sourceCpp 使用的编译器标志] 文件来创建你的 Makevars 文件,正如@nrussell 在

中所展示的那样