M3 Pro Mac对比2019款Intel Mac的R矩阵运算基准测试性能异常缓慢
M3 Pro vs Intel 2019 MacBook Pro R语言矩阵运算性能差异排查
问题描述
对比新款M3 Pro MacBook Pro与旧款2019款Intel MacBook Pro的R语言基准测试,发现矩阵运算性能差距极大:例如2500×2500叉积矩阵(b = a' * a)运算,Intel款耗时0.0902秒,M3款耗时7.53秒。需排查该差异是硬件本身问题,还是配置设置导致。
设备与环境信息
Intel MacBook信息
- 硬件:2.3 GHz 8核Intel Core i9
- R环境信息:
> devtools::session_info(info="all") ─ Session info ─────────────────────────────────────────────────────────────────────────────────────────────────────── setting value version R version 4.3.2 (2023-10-31) os macOS Sonoma 14.4.1 system x86_64, darwin20 [1] /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library BLAS /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib lapack /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib lapack_version 3.11.0
M3 MacBook信息
- R环境信息:
version R version 4.4.0 (2024-04-24) os macOS Sonoma 14.4.1 system aarch64, darwin20 BLAS /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib lapack /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib lapack_version 3.12.0
基准测试结果
Intel测试结果
> benchmarkme::benchmark_std(runs = 10) # 编程基准测试(5项): 计算3,500,000个斐波那契数(向量运算):0.174秒 计算1,000,000对整数的最大公约数(递归):0.577秒 创建3,500×3,500希尔伯特矩阵(矩阵运算):0.216秒 创建3,000×3,000托普利茨矩阵(循环):1.07秒 60×60矩阵的Escoufier方法(混合运算):3.05秒 # 矩阵计算基准测试(5项): 创建、转置、变形5,000×5,000矩阵:0.503秒 2,500×2,500正态分布随机矩阵自乘1000次:0.146秒 排序7,000,000个随机值:0.627秒 2,500×2,500叉积矩阵(b = a' * a):0.0902秒 5,000×500矩阵的线性回归(c = a \ b'):0.047秒 # 矩阵函数基准测试(5项): 3,000×3,000矩阵的乔利斯基因子分解:0.413秒 2,500×2,500随机矩阵的行列式计算:0.495秒 640×640随机矩阵的特征值计算:0.672秒 2,500,000个随机值的FFT变换:0.233秒 1,600×1,600随机矩阵的逆矩阵计算:0.575秒
M3测试结果
> benchmarkme::benchmark_std(runs = 10) # 编程基准测试(5项): 计算3,500,000个斐波那契数(向量运算):0.0826秒 计算1,000,000对整数的最大公约数(递归):0.192秒 创建3,500×3,500希尔伯特矩阵(矩阵运算):0.101秒 创建3,000×3,000托普利茨矩阵(循环):0.488秒 60×60矩阵的Escoufier方法(混合运算):0.406秒 # 矩阵计算基准测试(5项): 创建、转置、变形5,000×5,000矩阵:0.162秒 2,500×2,500正态分布随机矩阵自乘1000次:0.0794秒 排序7,000,000个随机值:0.481秒 2,500×2,500叉积矩阵(b = a' * a):7.53秒 5,000×500矩阵的线性回归(c = a \ b'):0.629秒 # 矩阵函数基准测试(5项): 3,000×3,000矩阵的乔利斯基因子分解:4.13秒 2,500×2,500随机矩阵的行列式计算:1.48秒 640×640随机矩阵的特征值计算:0.349秒 2,500,000个随机值的FFT变换:0.0689秒 1,600×1,600随机矩阵的逆矩阵计算:1.16秒
原因分析与解决方案
核心判断
M3在多数编程基准测试中性能远超Intel款,说明硬件本身无问题,性能差异源于软件配置或架构适配问题。
可能原因
- BLAS库架构优化差异:两台设备均使用系统默认的vecLib BLAS,但Apple Silicon版本的vecLib在对称矩阵叉积这类运算上的优化不如x86版本,或R在arm64架构下调用BLAS的逻辑存在性能瓶颈。
- R版本适配问题:Intel使用R 4.3.2,M3使用R 4.4.0,新版本在arm64架构的矩阵运算模块可能存在未修复的性能bug。
- LAPACK版本差异:M3的LAPACK版本为3.12.0,Intel为3.11.0,新版本在特定计算路径上的适配存在问题。
解决方案
- 更换BLAS库:安装arm64版本的OpenBLAS替代系统vecLib,测试性能是否提升:
- 执行
install.packages("OpenBLAS")安装 - 修改
.Rprofile添加Sys.setenv("R_BLAS" = "/path/to/OpenBLAS/libopenblas.dylib"),或通过RStudio的全局设置指定BLAS库
- 执行
- 降级R版本:安装R 4.3.2的arm64版本,排查是否为新版本适配问题
- 排查官方bug:查看R官方bug追踪系统,确认是否有其他用户报告arm64架构下矩阵运算的性能问题
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

