利用RcppArmadillo建立支持openmp并行的R程序包(整合C++函数)

准备工作(安装程序包并配置环境变量):

R软件:https://www.r-project.org/

对应的Rtools:https://cran.r-project.org/bin/windows/Rtools/

Miktex:https://miktex.org/

R需要安装 Rcpp 和 RcppArmadillo程序包:

https://cran.r-project.org/web/packages/Rcpp/index.html

https://cran.r-project.org/web/packages/RcppArmadillo/index.html

(也可通过install.packages('Rcpp') 和 install.packages('RcppArmadillo')安装)

建立骨架包

在R中运行如下命令生成基于Rcpp的R包骨架(不支持并行)

library(Rcpp)

Rcpp.package.skeleton( "Test" )

getwd()

Test保存在getwd()所示的文件夹下, 有 man, R, src三个文件夹, 以及DESCRIPTION以及 NAMESPACE 以及 Read-and-delete-me 三个文本文件,这个三个文件没有任何扩展名。

man下面, 保存的是所有R函数以及R程序包的帮助文件文件, 遵循是Latex格式。需要逐项填写

R下面, 保存的是R函数的文件, 每个R函数单独一个文件

src下面, 放的是cpp文件, 即c++的源文件

默认的情况下,

man文件夹下, 会有 rcpp_hello_world.Rd 文件,

R文件夹下, 会有RcppExports.R文件

src 文件夹下, 会有 rcpp_hello_world.cpp 和 RcppExports.cpp两个C++源文件

这些文件在本例中均可以删除。

或者在R中运行如下命令生成基于RcppArmadillo的R包骨架(支持并行)

library(RcppArmadillo)

RcppArmadillo.package.skeleton("Test")

getwd()

默认情况下,与Rcpp相比,RcppArmadillo会在src文件夹下多生成Makevars和Makevars.win,这两个文件不需要修改,其他操作与Rcpp相同。

改写C++代码

源代码:实现从1到n的加法

#include <iostream>
#include <omp.h>

using namespace std;

int get_sum(int n) {

    int sum = 0;

    #pragma omp parallel for

    for(int i = 0; i < n; i++) {

        sum += i;

    }

    return sum;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章