используя openmp в Windows R, поддерживает ли rtools openmp? - PullRequest
4 голосов
/ 03 июня 2011

Я получил много сообщений об ошибках при попытке использовать openmp в коде c ++ для сборки моего пакета R на Windows 7:

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? Кто-нибудь знает, как использовать openmp в пакетах Windows R, пожалуйста?

Ответы [ 3 ]

7 голосов
/ 13 июля 2015

В 2015 году Rtools имеет поддержку openmp под Windows, которая прекрасно работает с Rcppp. Вот простой пример создания функции 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;
}

Нам также нужно создать src/Makevars.win с флагами компиляции openmp. В этом примере пример src/Makevars будет работать на Linux:

# src/Makevars.win

PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS)
4 голосов
/ 03 июня 2011

Нет, за обсуждения в списке рассылки R-devel .Он также появился в списке Rcpp-devel .

R Сам не использует OpenMP в Windows, поэтому Rtools не поддерживает его.В других ОС R, конечно, есть поддержка OpenMP.

3 голосов
/ 03 июня 2011

В отношении этих сообщений (список рассылки R-devel) я пытался использовать OpenMP в пакетах Windows R с помощью TDM-GCC .Кажется, он работает правильно.

Но я рекомендую использовать официально поддерживаемые ОС.Я не знаю, какие проблемы произойдут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...