使用OpenBLAS编译R

5

我试图构建 R-devel / R-patched。 我阅读了一些链接,这些链接与执行此操作的步骤有关。

1) https://www.r-bloggers.com/2022/01/building-r-4-2-for-windows-with-openblas/
2) https://www.r-bloggers.com/2020/05/building-r-4-for-windows-with-openblas/
3) https://github.com/r-windows/r-base

但不幸的是,没有任何成功。

在“1”中,我没有“Makefile.win”文件,也没有带有“-lf77blas -latlas”的文件。 在“2”中,手动创建的“full-build.sh”脚本无法执行任何操作。 在“3”中,Use_ATLAS=YES出现错误。

installing 'sysdata.rda'
make[3]: *** [../../../share/make/basepkg.mk:151: sysdata] Error 127
make[2]: *** [Makefile.win:22: all] Error 2
make[1]: *** [Makefile.win:32: R] Error 1
make: *** [Makefile:18: all] Error 2

这个错误与 basepkg.mk 中的这一行有关:
@$(ECHO) "tools:::sysdata2LazyLoadDB(\"$(srcdir)/R/sysdata.rda\",\"$(top_builddir)/library/$(pkg)/R\")" | \
  R_DEFAULT_PACKAGES=NULL LC_ALL=C $(R_EXE)

请问有人可以帮我吗?这三种方法哪里出了问题?如何正确地构建R Devel(如果可能的话,附带安装文件)?也可以使用AMD BLIS库进行编译吗(我有Ryzen 9 5950x)。

谢谢。

P.S. 我使用Windows 11和winlibs中的gcc-12.02

P.P.S. 如果可能,请提供一个使用AMD BLIS构建R的步骤...


这个问题并没有适用于所有情况的标准答案,因为从源码编译R的过程会根据你的具体系统和配置而有所不同。但是,以下一些常规提示可能会对你有所帮助:-确保在开始构建过程之前,在你的系统上安装了必需的依赖项。 -如果你正在使用ATLAS库,请确保已经安装了适合你的系统架构的正确版本(即32位或64位)。 -如果在构建过程中遇到错误,请尝试在线搜索解决方案或查阅R-devel邮件列表。 - Mohamed Elgazar
@LuckyOwl 我已经使用gcc在我的当前机器上编译和构建了OpenBLAS。因此,与ATLAS/OPENBLAS相关的所有库链接都放在了MkRules.local中。 - Dmitriy
1个回答

4
1) https://cran.r-project.org/bin/windows/base/howto-R-devel.html # the canonical guide for compiling R-devel on Windows using Rtools
2) https://www.r-bloggers.com/2022/01/building-r-4-2-for-windows-with-openblas/ # adapt parts of this guide to get openblas with R

根据上述两个链接,以下是一些基本步骤:

1. 安装 Rtools43

(i) 下载; (ii) 将其安装到默认位置(即C:\rtools43

2. 安装 MikTeX 和 Inno Setup

MikTeX(带有基本包和 inconsolata)用于构建软件包的vignettes和文档。Inno Setup 用于构建 R 安装程序。

3. 通用设置

  1. 运行 Msys2 shell (c:/rtools43/msys2.exe)

  2. 创建一个文件夹来存储源代码:mkdir /c/R-devel

  3. 更新 Msys2:pacman -Syuu 它可能首先只会更新核心内容,然后要求您关闭终端。您应该按照说明操作,然后重新启动 Msys2 shell 并再次运行 pacman -Syuu 以完全更新所有组件

  4. 安装 wget 和 subversion:pacman -Sy wget subversion

  5. 将工作目录更改为步骤 3.2 中创建的文件夹:cd /c/R-devel

  6. 这里 获取最新的 Tcl/Tk 捆绑包,文件名类似于 tcltk-5493-5412.zip

     TCLBUNDLE=tcltk-5493-5412.zip
     wget https://cran.r-project.org/bin/windows/Rtools/rtools43/files/$TCLBUNDLE
    
  7. 获取最新的 R 版本(R-devel),并解压缩 Tcl:

     svn checkout https://svn.r-project.org/R/trunk
     cd trunk
     unzip ../$TCLBUNDLE
    

4. 在 /c/R-devel/trunk/src/gnuwin32/ 中添加一个 MkRules.local

您可以使用 Notepad++ 创建一个新的 MkRules.local 文件,并包含以下内容(请在第2步中将 ISDIR = ... 编辑为相应的目录):

USE_ATLAS = YES
EOPTS = -march=native -pipe
QPDF = /usr
ISDIR = C:/Program Files (x86)/Inno Setup 6

5. 调整 /c/R-devel/trunk/src/extra/blas/Makefile.win

您可以使用Notepad++将该行代码:-L../../../$(IMPDIR) -lR -L"$(ATLAS_PATH)" -lf77blas -latlas 修改为 -L../../../$(IMPDIR) -lR -fopenmp -lopenblas

-          -L../../../$(IMPDIR) -lR  -L"$(ATLAS_PATH)" -lf77blas -latlas
+          -L../../../$(IMPDIR) -lR -fopenmp -lopenblas

6. 编译 R

  1. 运行Msys2 shell并切换到适当的工作目录:cd /c/R-devel/trunk/src/gnuwin32/

  2. 设置环境变量如下(请在以下命令中更新MiKTeX安装目录):

     export PATH=/x86_64-w64-mingw32.static.posix/bin:$PATH
     export PATH=/c/Users/xxxxxxxx/AppData/Local/Programs/MiKTeX/miktex/bin/x64/:$PATH
     export TAR="/usr/bin/tar"
     export TAR_OPTIONS="--force-local"
    
  3. 测试工具是否可用:which make gcc pdflatex tar

  4. 构建R安装程序:

     make rsync-recommended
     make distribution
    
  5. 安装程序将位于:/c/R-devel/trunk/src/gnuwin32/installer/R-devel-win.exe

7. 测试我们的R编译是否使用了OpenBLAS

以下的R代码应该比从CRAN下载的标准Windows R运行得更快:

m <- 10000
n <- 2000
A <- matrix (runif (m*n),m,n)
system.time (S <- svd (A,nu=0,nv=0))

user  system elapsed 
4.02    0.65    7.83

抱歉我沉默了这么久,但仍然出现同样的错误:安装'sysdata.rda' make[4]: *** [../../../share/make/basepkg.mk:151: sysdata] Error 127 - Dmitriy
我按照你描述的所有步骤进行了实施,但很遗憾没有任何效果。可能问题与我的Windows/Rtools配置有关吗? - Dmitriy
安装 "sysdata.rda" make[4]: *** [../../../share/make/basepkg.mk:151: sysdata] 错误 127 make[3]: *** [Makefile.win:22: all] 错误 2 make[2]: *** [Makefile.win:32: R] 错误 1 make[1]: *** [Makefile:18: all] 错误 2 make: *** [Makefile:399: distribution] 错误 2 - Dmitriy
@Dmitriy,每次你需要运行Msys2 shell(c:/rtools43/msys2.exe),你能尝试以管理员身份运行它吗(右键单击msys2.exe并选择该选项)? - Hieu Nguyen
是的,我做了。没有效果,仍然出现相同的错误。 - Dmitriy
1
现在它正常工作!谢谢! - Dmitriy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接