1

私が書いている(R)プログラムは、ある時点で、結果のプログラムを高速化するために、OpenMP命令を含むCソースコードファイルを書き込むことができます(これらのファイルには、主に、結果が配列に書き込まれる微分方程式のセットが含まれています-としてこれらのステップは独立して実行できます。ompセクションを使用して並列化することをお勧めします)。この方法で生成されたファイルは私のプログラムの別の部分で使用されることになっているので、実行時に使用してそれらをコンパイルするためにRも使用します。このアプローチには、を使用して特定のコンパイラを課す必要がないsystem(R CMD SHLIB...)という利点があるようです。R CMD SHLIBユーザー。

私が現在直面している問題は、-fopenmp(または-openmp)コンパイラ指令をに渡すことができず、RパッケージをビルドしていないときにR CMD SHLIB追加のコンパイラフラグ(または理想的には)を提供するMakevarsファイルを使用できないこと$SHLIB_OPENMP_CFLAGSです-私はこの場合は実行しないので、R CMD SHLIB指定したファイルをコンパイルします。ただし、OpenMPの並列化がないとSHLIB、この状況で対応するフラグを渡す方法がわかりません。

とにかくこのタスクに使用する可能性はありますかR CMD SHLIB、それともOpenMPコンパイル用のコンパイラーを内部的に指定することによって移植性を犠牲にする必要がありますか?

4

2 に答える 2

1

Rでそれを行うこともできます:

system("R CMD COMPILE filename.c CFLAGS=-fopenmp")
system("R CMD SHLIB filename.o")
于 2012-12-21T10:07:01.610 に答える
0

R CMD SHLIBMakefileまたはパッケージではなく使用する必要がある場合は、PKG_CPPFLAGSまたはなどの環境変数を変更する必要があると思います。PKG_CXXFLAGSこれは、R内から。を介して実行できますSys.setenv()

R自体がOpenMPを使用するようになり、最近のRシステムで必要なコンパイラオプションを使用できるようになりました。

edd@max:~$ grep OPENMP /etc/R/Makeconf 
SHLIB_OPENMP_CFLAGS = -fopenmp
SHLIB_OPENMP_CXXFLAGS = -fopenmp
SHLIB_OPENMP_FCFLAGS = -fopenmp
SHLIB_OPENMP_FFLAGS = -fopenmp
edd@max:~$ 

これは、Debian/Ubuntuシステムの標準R2.15.1からのものです。

于 2012-09-06T19:59:03.430 に答える