用于带状线性系统的 3 级 BLAS 加速求解器。

计算科学 拉帕克 布拉斯
2021-12-18 17:35:05

目前我考虑以下问题。我有一个巨大的密集带状矩阵A我想分解并用来解决线性系统Ax=b.b大约有 100 多列。目前我使用DGBTRF从 LAPACK 分解A. 该程序是 3 级 BLAS 加速程序,可以快速有效地工作。最后一步,解决Ax=LUx=b完成使用DGBTRS不是 3 级 BLAS 加速的。在当前的 LAPACK 版本 3.5 中,这个求解器仍然几乎按顺序在b. 即代码如下所示:

IF( lnoti ) THEN
  DO 10 j = 1, n - 1
    lm = min( kl, n-j )
    l = ipiv( j )
    IF( l.NE.j ) CALL dswap( nrhs, b( l, 1 ), ldb, b( j, 1 ), ldb )
    CALL dger( lm, nrhs, -one, ab( kd+1, j ), 1, b( j, 1 ), ldb, b( j+1, 1 ), ldb )
10 CONTINUE
END IF
DO 20 i = 1, nrhs
   CALL dtbsv( 'Upper', 'No transpose', 'Non-unit', n, kl+ku,$ ab, ldab, b( 1, i ), 1 )
20 CONTINUE

我的问题是是否存在启用了 3 级 BLAS、性能更好的前向/后向替换例程变体?

1个回答

不幸的是,目前看来,利用三角形/带状结构的唯一 BLAS 例程都是 2 级和 2 级_tbmv_tbsv后者出现在上面的代码片段中。(您要求的是“ _tbsm”。)

您的问题的答案取决于“启用 3 级 BLAS”的解释。目前没有“ _tbsm”,所以没有。另一方面,您可以从现有的 3 级例程;构建“ _tbmm”和“ ” 所以是的。_tbsm_trmm_trsm_gemm


顺便说一句,如果这确实是一个缺失的功能,请随时在LAPACK 论坛中发布功能请求。