c++ - 在 Windows R 中使用 openmp,rtools 是否支持 openmp?

标签 c++ windows r openmp

当我尝试在 C++ 代码中使用 openmp 在 Windows 7 上构建我的 R 包时收到很多错误消息:

c:/rtools/mingw/bin/../lib/gcc/mingw32/4.5.0/libgomp.a(parallel.o):(.text+0x19): undefined      reference to `_imp__pthread_getspecific'
c:/rtools/mingw/bin/../lib/gcc/mingw32/4.5.0/libgomp.a(parallel.o):(.text+0x7a): undefined reference to `_imp__pthread_mutex_lock'
c:/rtools/mingw/bin/../lib/gcc/mingw32/4.5.0/libgomp.a(env.o):(.text+0x510): undefined reference to `_imp__pthread_mutex_init'

...

Rtools 不支持 openmp 吗? 请问有人知道如何在 Windows R 包中使用 openmp 吗?

最佳答案

2015 年,Rtools 支持 Windows 下的 openmp,与 Rcppp 配合良好。下面是一个为数值 vector 创建 squares 函数的简单示例:

// src/example.cpp

#include <Rcpp.h>
#include <omp.h>
// [[Rcpp::plugins(openmp)]]]

// [[Rcpp::export]]
Rcpp::NumericVector squares (Rcpp::NumericVector data)
{
  Rcpp::NumericVector result(data.size());
  #pragma omp parallel
  {
    Rcpp::Rcout << omp_get_num_threads() << std::endl;
    for (int i = 0; i < data.size(); i++) {
      result[i] = data[i] * data[i];
    }

  }
  return result;
}

我们还需要使用 openmp 编译标志创建 src/Makevars.win。在此示例中,示例 src/Makevars 将在 linux 上运行:

# src/Makevars.win

PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS)

关于c++ - 在 Windows R 中使用 openmp,rtools 是否支持 openmp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228924/

相关文章:

c++ - Qt和chm帮助文件格式

c++ - 多路进程间通信

c++ - 重新分配结构体的 std::vector

excel - 打开多个Excel实例时,如何设置Excel实例打开手动打开的文件?

r - 将特定版本的 R 添加到 docker 容器

r - 将 dist 对象列表保存到 R 中的表

html - 在网页中搜索链接,关注它们,并在 R 中返回没有链接的页面

c++ - 在 Linux-64 上编译 NeHe(或其他面向 32 位的)示例

c++ - GDB:如何在没有可用名称符号时打印函数参数值

windows - 如何在Batch的echo命令中使用重音符号?