相关疑难解决方法(0)

使用Rcpp的代码比使用g ++编译的代码运行得更快

我运行的是完全相同的代码在两个方面:与编译它g++的编译器,以及调用它RRcpp.事实证明,当我运行它时,它运行速度快了近4倍R.

为什么会这样?是因为使用的编译器Rcpp不同吗?

这是我正在运行的代码c++:

#include <iostream>
#include <nlopt.hpp>
#include <time.h>
using namespace std;


int main()
{

  //--------------------------------//
  //         Initialization         //
  //--------------------------------//

  // Grid for x
  const int nx              = 60000;

  float xgrid[nx];
  const float xstep = 4 /(nx - 1);
  float it = 0;

  for(int i = 0; i < nx; i++){
    xgrid[i] = it*xstep;
    it++;
  }

  // Initialize value function V
  size_t sizeV     = nx*sizeof(float);
  float *V;
  V …
Run Code Online (Sandbox Code Playgroud)

performance r g++ rcpp

6
推荐指数
1
解决办法
119
查看次数

具有C / C ++和openMP的R包:如何在“ mypackage / src /”文件夹下制作“ Makevars”文件?

我正在Mac OSX上开发具有一些底层C/C++代码和openMP支持的R包。该C++代码是使用Rcpp包编写的。我的全局“ Makevars”文件位于~/.R/文件夹下。该文件如下所示。

CC=clang-omp
CXX=clang-omp++

PKG_CFLAGS=Wall -pedantic
PKG_CFLAGS= -fopenmp
PKG_CXXFLAGS= -fopenmp
PKG_LIBS= -fopenmp -lgomp
Run Code Online (Sandbox Code Playgroud)

在这种配置下,一切正常!

但是,现在我想Makevars为它自己的编译生成特定于程序包的文件,以使程序包可移植。我尝试的只是将全局Makevars文件移动到我的R pakcage src文件夹中。但是,编译器抱怨找不到openMP头文件omp.h

** libs
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Library/Frameworks/R.framework/Versions/3.2/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.2/Resources/library/bigmemory/include" -I"/Library/Frameworks/R.framework/Versions/3.2/Resources/library/BH/include"  -fopenmp -fPIC  -Wall -mtune=core2 -g -O2  -c RcppExports.cpp -o RcppExports.o
RcppExports.cpp:12:10: fatal error: 'omp.h' file not found
#include <omp.h>
         ^
1 error generated.
make: *** [RcppExports.o] Error 1
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include …
Run Code Online (Sandbox Code Playgroud)

c macos r openmp rcpp

5
推荐指数
1
解决办法
4270
查看次数

无法使用 c++11 编译简单的 Rcpp 函数

问题背景

升级到后,我似乎无法编译一个使用// [[Rcpp::plugins(cpp11)]]. 我试过了:

  • Makevars根据这个答案进行编辑
  • 升级后运行xcode-select --install以下有关在下编译 C 的链接讨论
  • 更改 include, string/string.h会导致相同的错误

代码

我起草的函数是为了生成错误:

#include <Rcpp.h>
#include <string.h> // std::string, std::stod
using namespace Rcpp;

// [[Rcpp::plugins(cpp11)]]

// [[Rcpp::export]]
NumericVector convertToDouble(Rcpp::StringVector x) {
    // Numeirc vector to store results
    NumericVector res;
    // Double for converted values
    double converted_double;
    for(Rcpp::StringVector::iterator it = x.begin(); it != x.end(); ++it) {
        // Get [] for vector element
        int index …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp c++11 macos-mojave

2
推荐指数
1
解决办法
721
查看次数

标签 统计

r ×3

rcpp ×3

c ×1

c++ ×1

c++11 ×1

g++ ×1

macos ×1

macos-mojave ×1

openmp ×1

performance ×1