2017-04-04 4 views
0

RcppとRcppEigenでC++コードを呼び出すRパッケージを開発しました。私Makevars.winはこのようになります(列挙は、私の質問を指すことを意味する)Windows/MacのRパッケージのC++コンパイルフラグ

  1. CXX_STD = CXX11

  2. PKG_CPPFLAGS = -fopenmp -O3 -Wall -ftree-ベクトル化-march =ネイティブ-mavx - MFMA

  3. PKG_CXXFLAGS + = $(SHLIB_OPENMP_CXXFLAGS)

  4. PKG_LIBS = -fopenmp

  5. PKG_LIBS + = $(LAPACK_LIBS)$(BLAS_LIBS)$(FLIBS)$(SHLIB_OPENMP_CXXFLAGS)私が使用したいと

  6. PKG_CPPFLAGSは+ = -I ../研//

が含まれますOpenMPを実行し、RパッケージをIntel MKLライブラリにリンクします。また、私のソースファイルにプラグイン// [[Rcpp::plugins(cpp11)]]// [[Rcpp::plugins(openmp)]]を追加しています。

パッケージをコンパイルするとすべて正常に動作しますが、デフォルトのコンパイルフラグ-O2-std=c++0xが表示されます。だから、私の質問は以下のとおりです。

A.(ちなみに、同じMakevarsを使用すると、右のC++バージョンを生成するので、Windowsに固有の何かがなければならない)-std=c++11を強制することになって1ではないでしょうか?

B.は3で2のfopenmpを繰り返しますか?

C. 5.が考慮されているかどうかを確認する方法。 Macで構築されたものと同じパッケージがWindows上よりもはるかに速く、設定も同じであるので、私はこれを求めている。私は、Microsoft R OpenとMacを使用してWindows上で同じコードのベンチマークを行っています。その場合、Windowsは高速です。

非常に貴重なご支援をいただき、ありがとうございます。

答えて

1

どこから始めますか?

まず第一に、コンパイルとリンクのオプションはRのMakeconf組合、あなたのパッケージのsrc/Makevarsに基づいています。あなたは値に追加することはできますが、置き換えることはできません。

第2に、関連するBLASはシステム設定の問題です。一般的にあなたのパッケージからそれを管理することはできません。

第3に、sourceCpp()cppFunction()のプラグイン。パッケージでは、直接宣言、つまりCXX_STD=CXX11を作成します。

第4に、Rcppを使用するCRANには約1000のパッケージがあります。場合によっては、これらの機能のいくつかを見るだけで役立ちます。多くはOpenMPを採用しています。

第5に、OpenMPはAppleのおかげでOS Xで厳しく挑戦しています。私はWindowsの状況を忘れてしまった。それははLinux上でを動作させるだけです。

+0

Windowsで動作します... macOSだけが特別な処理を必要とします。 – coatless

+0

説明をいただきありがとうございます。 –

+0

@DirkEddelbuettel私が不明であったように聞こえます...私はこれらのフラグが私のsrc/Makevarsにあり、Rパッケージをビルドするために使用されていると言いますが、CXX_STD = CXX11はWindowsでは考慮されません。なぜ私には分かりません。それから明らかに、私はOpenMPを使ってパッケージを見てきました(私の5につながった)。最後に、私は、パッケージがopenmpを使ってWindows上でうまく構築されていると言っている間に私ははっきりしているとも考えました。私の質問は、私のフラグが妥当で冗長ではないかどうか、なぜstd = C++ 11と-O3がWindowsでは考慮されていないのか(Mac上)です。 – itQ

関連する問題