如何解决如何使用Rcpp :: pluginsopenmp制作可移植文件,该文件可以是Rcpp :: sourceCpp 具体示例
作为一个简单的可能的内存绑定示例,假设我正在查看要Rcpp::sourceCpp
的C ++文件:
#include <Rcpp.h>
// [[Rcpp::plugins(openmp)]]
// [[Rcpp::export(rng = false)]]
double sum_par(Rcpp::NumericVector x,int n_threads){
double out(0.);
double *xp = &x[0];
int const nx = x.size();
#ifdef _OPENMP
#pragma omp parallel for num_threads(n_threads) reduction(+:out)
#endif
for(int i = 0; i < nx; ++i)
out += xp[i];
return out;
}
/*** R
set.seed(1)
x <- rnorm(100)
sum (x)
#R> [1] 10.88874
sum_par(x,1L)
#R> [1] 10.88874
sum_par(x,2L)
#R> [1] 10.88874
*/
当编译器不支持OpenMP时,将不会编译该文件。问题是如何创建一个可移植的示例,使用户可以Rcpp::sourceCpp
的方式适用于有和没有OpenMP支持的用户。
具体示例
我最近在CRAN上发布了psqn软件包。 an example in the package展示了如何使用包中的共享头。但是,当我用macOS进行CRAN检查时,Rcpp::sourceCpp
this unit test中的文件时会产生错误。
我尝试将Rcpp::sourceCpp
调用包装在try
中,然后由于错误而使用C ++文件的一个版本,该错误不包含[[Rcpp::plugins(openmp)]]
行,但由于某种原因{ 1}}不适用于try
。我收集到可以像在RcppArmadillo中那样制作一个配置文件,但是我以前从未(成功)使用R包来完成此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。