SAUSAGE采用了一种基于多核处理器和SIMD指令集的多波前求解器,是一种高效的直接求解器。简介如下。
稀疏矩阵直接求解器主要分为波前法,多波前法,超结点法。波前法最早是为了求解有限元方程组而提出的,其主要思想是按照单元的顺序而非按照结点顺序依次进入波前,当前波前中只存储和活动波前中存在的单元以及和该单元相关联的结点,当和该单元相邻的结点都完成消元后,该单元即可移出波前。
随着计算机技术的发展以及实际工程中所求解问题越来越大,波前求解器效率低,无法并行的特点已经无法满足实际的需求,因此现在的商业稀疏直接求解器大都采用了容易并行化的多波前算法。SAUSAGE中的稀疏直接求解器也正是基于多波前算法,其与波前法在数学上其实并无本质区别,而且也是在波前法上发展起来的,但从算法角度还是有很大的不同:多个无关联结点可以同时消去,且各自占有不同的波前空间,之后再将各个波前中有关联的数据叠加起来。
(1) 稀疏矩阵重排序
对于大规模稀疏矩阵,如果直接对原始矩阵分解,那么分解过程中通常会产生大量的非零元(zero fills ),内存消耗巨大,比如100万规模的稀疏矩阵,不做任何处理就直接分解,那么可能需要数百个GByte甚至数千GByte的存储空间。所以使稀疏矩阵的三角分解具有实际的应用价值,必须在分解之前对其结点编号进行重新排序,以尽可能多的在分解过程中减少非零元的填入。这样不仅可以大大减少对存储空间的需求,更可以有效减少计算时间。SAUSAGE中采用全局几何剖分和局部最小度排序的组合方法对原始矩阵的结点编号进行重新排列,可以有效减少填入元的数量以及提高计算效率。局部排序也是在多核心上并行执行的,因此效率很高。当然,对于重排序SAUSAGE仍然有很大的改进余地,我们也将继续对其算法进行改进以进一步减少填入元数量。
(1) 符号分析
一般在实际进行分解之前,要先通过结点之间的关联进行一次模拟分解,以确定填入元的位置以及分解因子所需存储空间的大小。
这样可以避免在分解过程中动态的搜索填入元位置以及动态分配新填入元的内存,一般这一模拟分解的步骤称之为符号分析或符号分解,而实际的分解称为数值分解。事实上将分解分为符号分解和数值分解比直接进行数值分解具有更高的效率,也会产生更少的内存碎片(内存碎片问题在大规模,大存储需求的计算中非常重要)。符号分析不仅仅要确定分解因子的稀疏结构(sparse property ),还要确定消去树(elimination tree )以指导后面的数值分解的过程。
(1) 数值分解及三角回代。
其他