web-dev-qa-db-ja.com

Windowsでインテルの算術カーネルライブラリ(MKL)をRにリンクする

Rに代替のBLASを使用すると、いくつかの利点があります。 https://cran.r-project.org/web/packages/gcbd/vignettes/gcbd.pdf

Microsoft R Open https://mran.revolutionanalytics.com/documents/rro/installation/#sysreq は、計算を高速化するためにデフォルトのリファレンスBLASの代わりにIntelのMKLを使用しています。

私の質問は:

正確にはIntelのMKLライブラリを手動でリンクする手順** = Windows上のR **の最新バージョン( https://cran.r-project.org/bin/windows/base / )?


PDATE 20-07-2016:ここでは、64ビットR for Windows for R≥3.3.0用のOpenBLASベースのRblas.dllをビルドする方法についての非常に詳細な説明を示します。 http: //www.avrahamadler.com/r-tips/build-openblas-for-windows-r64/

27
majom

Windowsでは、ディレクトリProgram Files/R/R-XX.XX.XX/bin/x64(たとえば、最新のRディストリビューション)の場合、ファイルlibiomp5md.dll、Rblas.dll、Rlapack.dllを次のように上書きします インテルMKLの対応物 マルチスレッドの行列演算を実行します。私にとって、これは通常、マトリックス演算の速度を約10倍向上させるため、それだけの価値があります。これで問題が解決するかどうかお知らせください。上記のDropboxリンクを経由する以外に、 Microsoft Open R をインストールするだけでこれらのファイルを取得し、そこから最新のRインストールにファイルをコピーすることもできます(RStudioに、 Microsoft Open Rの代わりにRの通常バージョン)。これは、R全体を再コンパイルする必要があるよりもずっと簡単です...

3
Tom Wenseleers

r 3.5.1のインストールを試しました。 Microsoft R OpenをCRAN Rと一緒にインストールし、libiomp5md.dllをコピーして、Rblas.dll、Rlapack.dllをMRO MKLの対応するものから上書きして、Windows上のCRAN Rにリンクします(上記の別の回答と同様ですが、ファイルlibiomp5md.dllをコピーする必要があります)同じように)。これはうまくいき、CRAN RはGithubのversion.compareパッケージ( https://github.com/andrie/version.compare )に従ってMROと同じくらい速く実行されます

2
tlyim

builder を使用して作成したカスタムDLLとR 3.6.0をリンクすることができました。基本的に、同じシンボルRblas.dllRlapack.dllがエクスポートする必要があります。 Compiler 19.0 Update 4 for Intel 64 Visual Studio 2017 environmentコマンドプロンプトを起動します。

シンボルを取得します。

dumpbin /exports Rblas.dll > Rblas_list
dumpbin /exports Rlapack.dll > Rlapack_list_R

「ヘッダー」と「フッター」を削除して両方のファイルを編集し、シンボル名(例:248 F7 00138CE0 dgeevx_)を含むすべての行をdgeevx_(名前のみ)のようにします。 builderディレクトリをPCのどこかにコピーし、その中で実行します。

# blas links fine
nmake libintel64 export=..path..\Rblas_list name=Rblas 
# save lapack errors in another list
nmake libintel64 export=..path..\Rlapack_list_R name=Rlapack 1> undefined_symbols_list

編集undefined_symbols_list各行の名前のみを保持し、違いのある新しいリストを作成します

findstr /v /g:undefined_symbols_list Rlapack_list_R > Rlapack_list
nmake libintel64 export=..path..\Rlapack_list name=Rlapack # this should link

dumpbin /dependents Rlapack.dllを使用すると、mklインストールのredistフォルダー内にあるlibiomp5md.dllに依存していることがわかります。

1