对于R使用替代的BLAS有几个优点,参见例如https://cran.r-project.org/web/packages/gcbd/vignettes/gcbd.pdf。
Microsoft https://mran.revolutionanalytics.com/documents/rro/installation/#sysreq正在使用英特尔的MKL,而不是默认的参考BLAS,以加快计算速度。
我的问题是:
将英特尔的MKL库**手动与R**的最新版本(https://cran.r-project.org/bin/windows/base/)链接起来的确切步骤是什么?
更新20-07-2016:是关于如何为64位R构建基于OpenBLAS的Rblas.dll的详细说明≥3.3.0:http://www.avrahamadler.com/r-tips/build-openblas-for-windows-r64/
发布于 2017-03-17 10:11:34
比在Windows上针对Intel MKL库重新编译R更简单的解决方案是
options(repos=r)
中的第24行替换为options(repos="https://cran.rstudio.com")
(或者您最喜欢的CRAN存储库--您也可以使用"https://cran.revolutionanalytics.com",该存储库具有所有包的最新每日构建),以确保它将安装最新的CRAN包,而不是过时的mran.microsoft.com镜像,后者的包版本已经过时,于2019年4月15日冻结。用#注释掉第153、154和155行然后重新启动RStudio以检查它是否工作,在我的IntelCorei7-4700HQ2.4GHz4内核/8线程笔记本电脑上使用小的SVD基准:
getMKLthreads()
4
# Singular Value Decomposition
m <- 10000
n <- 2000
A <- matrix (runif (m*n),m,n)
system.time (S <- svd (A,nu=0,nv=0))
user system elapsed
15.20 0.64 4.17
在没有安装Intel MKL的情况下,相同的基准运行在
user system elapsed
35.11 0.10 35.21
所以我们得到了超过8倍的速度增长!
MicrosoftROpen6.2与Intel MKL启动并运行的屏幕截图:
或者,如果您不喜欢将文件从MRO复制到最新的R安装,也可以将这些文件从免费的Intel MKL安装复制到您的R安装中,以获得多线程操作(如下所示):
从这些文件夹中复制所有内容
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\mkl
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\compiler
至
C:\Program Files\R\R-3.6.1\bin\x64
不知道微软是怎么回事,为什么他们不再支持MRO.为什么他们也放弃了Mac支持..。
我希望,鉴于Intel MKL现在是免费的,R核心人员迟早会提供一个预编译的R版本,该版本被编译成使用Intel MKL库,或者可能在运行时检测到Intel MKL是否安装了,如果安装了,就使用它。我认为这很重要,特别是因为一个好的多线程BLAS的容易获得也决定了一个人如何开发软件包--例如,如果一个好的多线程BLAS对所有的OSes都可用,那么人们就会转向使用RcppArmadillo,而不管安装了什么BLAS (但在RcppArmadillo上如果没有安装Intel MKL,它会给出更糟糕的时间安排),如果不是RcppEigen,那将是最好的选择,因为它有自己的多线程矩阵代数,而不管编译R所针对的是哪个BLAS .
在Ubuntu顺便说一下,很容易让R使用Intel,而不必重新编译R,如下所示:https://github.com/eddelbuettel/mkl4deb
PS的轻微问题是,运行setMKLthreads(4)会使RStudio崩溃(尽管官方MRO3.5.3中已经出现了问题),但是在R控制台中它确实工作正常.
发布于 2019-06-12 11:14:51
我能够将R3.6.0与您使用构建器创建的自定义dll链接起来。基本上,您必须导出与Rblas.dll
和Rlapack.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
使用dumpbin /dependents Rlapack.dll
,您可以看到它们依赖于libiomp5md.dll
,您可以在mkl安装的redist
文件夹中找到它。
方法2
这种方法使用更多的磁盘空间,但它更简单。从这些文件夹中复制所有内容
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\mkl
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\compiler
至
C:\Program Files\R\R-3.6.1\bin\x64
在目标文件夹中,创建两个mkl_rt.dll
副本,并重命名其中一个Rblas.dll
,另一个Rlapack.dll
替换原始文件并保留mkl_rt.dll
。
发布于 2018-12-28 04:07:27
刚尝试了R3.5.1的安装。我将Microsoft与CRAN一起安装,并复制libiomp5md.dll并覆盖Rblas.dll、Rlapack.dll,从MKL的对应方链接到Windows上的CRAN (类似于上面的另一个答案,但也需要复制文件libiomp5md.dll )。这很好,根据version.compare包,CRAN R运行得和MRO一样快(https://github.com/andrie/version.compare)。
https://stackoverflow.com/questions/38090206
复制相似问题