使用LAPACK求解稠密矩阵时多大规模需切换到ScaLAPACK?
稠密线性求解从DGESV切换到ScaLAPACK的规模阈值判断
不存在绝对的通用切换阈值,需要结合硬件配置、业务场景需求综合判断,这里给出不同场景下的参考原则:
- 首先看单节点内存承载能力:双精度10000×10000的稠密矩阵仅占800MB左右,就算加上求解过程的临时缓存,普通单节点完全可以轻松承载,这个规模下用带优化BLAS库(MKL、OpenBLAS等)的
DGESV求解速度远高于ScaLAPACK,分布式架构固有的通信开销会完全抵消多节点算力增益。 - 到100000×100000的双精度稠密矩阵,仅矩阵本身就占80GB存储空间,已经超过绝大多数消费级、入门级服务器的单节点内存上限,这种场景下基本只能用ScaLAPACK做分布式求解,否则
DGESV会直接触发内存不足错误根本无法运行。 - 20000×20000到80000×80000的区间是典型的权衡区间:
- 如果单节点内存足够放下完整矩阵,且仅需要做单次求解,优先用
DGESV,不需要额外开发分布式通信逻辑,开发调试成本低,性能也不会弱于没做调优的ScaLAPACK实现。 - 如果需要反复求解同系数矩阵的多右端项问题,或者单节点CPU核心已经跑满还是达不到要求的求解耗时,且手头有可用的多机集群资源,再考虑切换到ScaLAPACK。
- 如果单节点内存足够放下完整矩阵,且仅需要做单次求解,优先用
另外还有两个不需要看规模就可以优先选ScaLAPACK的场景:
- 你的计算流程本身已经跑在MPI并行框架下,和其他分布式模块有耦合
- 除了求解方程组外还需要调用其他ScaLAPACK提供的分布式矩阵运算能力,不用额外做数据格式转换
最后要注意:切换到ScaLAPACK之后一定要做进程网格、数据块大小的针对性调优,否则很可能出现多节点跑还不如单节点DGESV快的情况。
内容的提问来源于stack exchange,提问作者Laetis
相关产品推荐
相关产品推荐

