在Windows上将英特尔的数学核心库(MKL)链接到R.

时间:2016-06-29 04:08:35

标签: r windows blas intel-mkl revolution-r

使用替代BLAS for R有几个优点,参见例如https://cran.r-project.org/web/packages/gcbd/vignettes/gcbd.pdf

Microsoft R Open https://mran.revolutionanalytics.com/documents/rro/installation/#sysreq使用Intel的MKL而不是默认的Reference BLAS来加速计算。

我的问题是:

将英特尔MKL库**手动链接到R **在Windows上的最新版本(https://cran.r-project.org/bin/windows/base/)的确切步骤是什么?

更新20-07-2016: 下面是如何为R≥3.3.0为Windows构建基于OpenBLAS的64位R Rblas.dll的详细说明:http://www.avrahamadler.com/r-tips/build-openblas-for-windows-r64/

3 个答案:

答案 0 :(得分:2)

我发现在Windows上如果在目录Program Files / R / R-3.3.3 / bin / x64中用你的Intel MKL counterpart覆盖文件Rblas.dll和Rlapack.dll,那么你将拥有多线程矩阵操作。对我来说,这通常会导致矩阵运算速度提高10倍,因此非常值得!如果这对您有用,请告诉我!

答案 1 :(得分:1)

仅尝试用于R 3.5.1安装。我与CRAN R一起安装了Microsoft R Open并复制libiomp5md.dll,并从MRO MKL对应者覆盖Rblas.dll,Rlapack.dll以链接到Windows上的CRAN R(类似于上面的另一个答案,但需要复制文件libiomp5md.dll以及)。根据Github(https://github.com/andrie/version.compare)上的version.compare包,这个工作很好,并且CRAN R的运行速度与MRO一样快。

答案 2 :(得分:0)

我能够将R 3.6.0与使用builder创建的自定义dll链接起来。基本上,您必须导出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,您可以看到它们取决于libiomp5md.dll, 您可以在mkl安装的redist文件夹中找到该文件。