搭载M1芯片的macOS上R 4.1运行矩阵运算速度远低于Windows和Linux是什么原因?
M1芯片Mac运行原生R矩阵运算速度远低于Windows/Linux的原因及解决方案
核心原因
- CRAN官方发布的R 4.1 arm64原生版本默认搭载的
libRblas.dylib为纯C编写的参考实现BLAS库,没有任何硬件指令集优化,也不支持多线程运算,矩阵运算性能极低。你观察到的sessionInfo中显示的BLAS路径并不代表实际调用了Apple Accelerate框架的优化BLAS,该版本R默认没有链接Accelerate的BLAS库。 - Windows端使用的Microsoft R Open默认搭载英特尔MKL数学核心库,是针对x86平台高度优化的BLAS/LAPACK实现,默认开启多线程运算,矩阵乘法类操作的性能是参考实现BLAS的几十到上百倍。Linux端使用的OpenBLAS同样为优化版多线程BLAS库,因此性能和MKL接近。
解决方法
方案1:替换默认BLAS为Apple Accelerate优化库
操作步骤如下:
- 备份原有默认BLAS文件,执行终端命令:
sudo cp /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.dylib /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.dylib.backup
- 将R的BLAS软链接指向Accelerate框架的优化BLAS:
sudo ln -sf /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.dylib
操作完成后重启R,再次运行基准测试,crossprod运算耗时会降至数秒级别,和Windows/Linux端测试结果对齐。
方案2:使用优化版R分发
直接升级到R 4.3及以上稳定版,或通过Homebrew安装R,上述版本默认已经链接优化BLAS库,无需手动修改配置。
方案3:安装arm64版OpenBLAS
手动编译安装针对M1优化的OpenBLAS库,替换默认BLAS文件,性能表现和Accelerate框架相当。
补充说明
R 4.1版本存在sessionInfo偶发不显示BLAS路径的已知小问题,不影响实际库调用逻辑,只要完成软链接替换即可生效。
内容的提问来源于stack exchange,提问作者QuantumJazz
相关产品推荐
相关产品推荐

