RcppとRcppEigenでC++コードを呼び出すRパッケージを開発しました。私Makevars.win
はこのようになります(列挙は、私の質問を指すことを意味する)Windows/MacのRパッケージのC++コンパイルフラグ
CXX_STD = CXX11
PKG_CPPFLAGS = -fopenmp -O3 -Wall -ftree-ベクトル化-march =ネイティブ-mavx - MFMA
PKG_CXXFLAGS + = $(SHLIB_OPENMP_CXXFLAGS)
PKG_LIBS = -fopenmp
PKG_LIBS + = $(LAPACK_LIBS)$(BLAS_LIBS)$(FLIBS)$(SHLIB_OPENMP_CXXFLAGS)私が使用したいと
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は高速です。
非常に貴重なご支援をいただき、ありがとうございます。
Windowsで動作します... macOSだけが特別な処理を必要とします。 – coatless
説明をいただきありがとうございます。 –
@DirkEddelbuettel私が不明であったように聞こえます...私はこれらのフラグが私のsrc/Makevarsにあり、Rパッケージをビルドするために使用されていると言いますが、CXX_STD = CXX11はWindowsでは考慮されません。なぜ私には分かりません。それから明らかに、私はOpenMPを使ってパッケージを見てきました(私の5につながった)。最後に、私は、パッケージがopenmpを使ってWindows上でうまく構築されていると言っている間に私ははっきりしているとも考えました。私の質問は、私のフラグが妥当で冗長ではないかどうか、なぜstd = C++ 11と-O3がWindowsでは考慮されていないのか(Mac上)です。 – itQ