5 Stimmen

Verwendung von openmp in Windows R, unterstützt rtools openmp?

Ich habe viele Fehlermeldungen erhalten, als ich versucht habe, openmp in einem C++-Code zur Erstellung meines R-Pakets unter Windows 7 zu verwenden:

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'

...

Unterstützt Rtools openmp nicht? Weiß jemand, wie man openmp in Windows R-Paketen verwenden kann?

12voto

ivan-k Punkte 781

Im Jahr 2015, Rtools hat openmp Unterstützung unter Windows, die sich gut mit Rcppp . Hier ist ein einfaches Beispiel für die Erstellung einer squares Funktion für numerische Vektoren:

// 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;
}

Außerdem müssen wir Folgendes schaffen src/Makevars.win mit dem openmp Kompilierungskennzeichen. In diesem Beispiel wird das Beispiel src/Makevars wird unter Linux funktionieren:

# src/Makevars.win

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

3voto

Dirk Eddelbuettel Punkte 345316

Nein, nach den Diskussionen auf der R-devel Mailingliste . Es wurde auch in der Rcpp-Devel-Liste .

R selbst verwendet OpenMP unter Windows nicht, daher gibt es auch keine Unterstützung in Rtools. Auf anderen Betriebssystemen hat R natürlich OpenMP-Unterstützung.

3voto

Triad sou. Punkte 2971

Unter Bezugnahme auf diese Stellen (R-devel mailing list), habe ich versucht, OpenMP in Windows R-Paketen zu verwenden, indem ich TDM-GCC . Es scheint richtig zu laufen.

Ich empfehle jedoch, offiziell unterstützte Betriebssysteme zu verwenden. Ich weiß nicht, welche Probleme auftreten werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X