首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Intel的数学内核库(MKL)与Windows上的R连接起来

将Intel的数学内核库(MKL)与Windows上的R连接起来
EN

Stack Overflow用户
提问于 2016-06-29 04:08:35
回答 4查看 10.5K关注 0票数 37

对于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/

EN

回答 4

Stack Overflow用户

发布于 2017-03-17 10:11:34

比在Windows上针对Intel MKL库重新编译R更简单的解决方案是

  1. https://mran.microsoft.com/download安装Microsoft,它附带过时的RVersion3.5.3,但也带有Intel多线程BLAS库
  2. https://cran.r-project.org/bin/windows/base/安装最新版本的R,即当前R3.6.2
  3. 将文件libiomp5md.dll、Rblas.dll和Rlapack.dll从C:\Program \Microsoft\R-3.5.3\bin\x64复制到C:\Program \R3.6.2\bin\x64(如果愿意,可以首先备份现有的默认非超线程Rblas.dll和Rlapack.dll文件)
  4. 将MicrosoftR开放库/包MicrosoftR、RevoIOQ、RevoMods、RevoUtils、RevoUtilsMath和doParallel从C:\Program \ Microsoft \Files\R-3.5.5\库复制到默认的包目录,例如C:\Documents\R\win-library\3.6
  5. 将文件Rprofile.site和Renviron.site从目录C:\Progral \Microsoft\R\3.5.5\etc复制到C:\Progral\R\R3.6.2\etc
  6. 将文件Rprofile.site 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基准:

代码语言:javascript
运行
复制
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的情况下,相同的基准运行在

代码语言:javascript
运行
复制
   user  system elapsed 
  35.11    0.10   35.21 

所以我们得到了超过8倍的速度增长!

MicrosoftROpen6.2与Intel MKL启动并运行的屏幕截图:

或者,如果您不喜欢将文件从MRO复制到最新的R安装,也可以将这些文件从免费的Intel MKL安装复制到您的R安装中,以获得多线程操作(如下所示):

  1. https://software.intel.com/en-us/mkl/choose-download安装Intel (免费)

从这些文件夹中复制所有内容

代码语言:javascript
运行
复制
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\mkl
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\compiler

代码语言:javascript
运行
复制
C:\Program Files\R\R-3.6.1\bin\x64
  1. 在目标文件夹中,创建两个mkl_rt.dll副本,并重命名其中一个Rblas.dll,另一个Rlapack.dll替换原始文件并保留mkl_rt.dll。
  2. 这将不会为您提供函数setMKLthreads()和getMKLthreads()函数,尽管它们可以设置intel MKL线程的nr,因为这些函数与MRO一起提供。但是对于大多数人来说,线程的默认nr设置为物理核的nr将是可以的.

不知道微软是怎么回事,为什么他们不再支持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控制台中它确实工作正常.

票数 15
EN

Stack Overflow用户

发布于 2019-06-12 11:14:51

我能够将R3.6.0与您使用构建器创建的自定义dll链接起来。基本上,您必须导出与Rblas.dllRlapack.dll相同的符号。启动Compiler 19.0 Update 4 for Intel 64 Visual Studio 2017 environment命令提示符:

获取符号:

代码语言:javascript
运行
复制
dumpbin /exports Rblas.dll > Rblas_list
dumpbin /exports Rlapack.dll > Rlapack_list_R

编辑两个文件,删除“页眉”和“页脚”,并使所有带有符号名称的行(例如:248 F7 00138CE0 dgeevx_)都与dgeevx_类似(只包含名称)。将builder目录复制到pc中的某个位置,然后在其中运行:

代码语言:javascript
运行
复制
# 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,只保留每一行的名称,并创建一个新列表,其中有不同之处

代码语言:javascript
运行
复制
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

这种方法使用更多的磁盘空间,但它更简单。从这些文件夹中复制所有内容

代码语言:javascript
运行
复制
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\mkl
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\redist\intel64\compiler

代码语言:javascript
运行
复制
C:\Program Files\R\R-3.6.1\bin\x64

在目标文件夹中,创建两个mkl_rt.dll副本,并重命名其中一个Rblas.dll,另一个Rlapack.dll替换原始文件并保留mkl_rt.dll

票数 14
EN

Stack Overflow用户

发布于 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)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38090206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档