R语言矩阵乘法%*%运行时长估算及超大矩阵转置相乘耗时咨询
R语言%*%矩阵乘法耗时估算方法及目标运算耗时参考
核心估算逻辑
R的%*%运算符底层调用BLAS线性代数库执行运算,矩阵乘法的理论时间复杂度为O(n×m×p):维度为n行m列的矩阵乘m行p列的矩阵,总计需要约2×n×m×p次浮点运算。实际耗时受BLAS库类型(参考BLAS/OpenBLAS/Intel MKL)、CPU核心数、主频、内存带宽、是否触发磁盘交换多个因素影响,不存在统一的固定数值,可通过小样本基准测试缩放推算。
具体估算操作步骤
- 先确认当前R环境的BLAS后端:执行命令
sessionInfo(),查看输出中的BLAS、LAPACK相关条目即可 - 选取同比例缩小的测试矩阵推算:比如先生成1450行×13000列的同类型矩阵,测试其乘转置的耗时记为t,你需要的14500×130000矩阵运算量是该测试的10³=1000倍,理想无内存瓶颈的情况下,目标运算耗时约为1000×t
14500×130000矩阵乘转置的耗时参考
该运算的结果矩阵为14500×14500维度,双精度存储约占1.6GB,原始矩阵双精度存储约占15GB,建议预留至少25GB可用内存避免触发磁盘交换,否则耗时会出现数倍到数十倍的增长。不同环境下的耗时参考如下:
- 单线程默认参考BLAS、3GHz左右主频CPU:12~20小时
- 8核CPU调用多线程OpenBLAS/Intel MKL:1.5~3小时
- 支持AVX512指令集的16核以上高端CPU搭配MKL:40分钟~1小时
优化建议
- 替换R默认的参考BLAS为OpenBLAS或Intel MKL,可获得数倍到十倍的性能提升
- 若原始矩阵为稀疏矩阵,不要使用基础
%*%运算,改用Matrix包的稀疏矩阵运算方法,耗时可降低几个数量级 - 运算前关闭其他占用内存的进程,避免触发磁盘交换拖慢速度
内容的提问来源于stack exchange,提问作者marb_021
相关产品推荐
相关产品推荐

