Subject | : CSR codeの高速化(線形代数ルーチンの高速化) |
Date | : 2010/10/29(Fri) 21:28:50 |
Contributor | : Akio Morita |
CSR@MakeZL[]のホットスポットは、 * tfeigensystem()から呼び出される tqr(), thess() * tflinearsolve()から呼び出される tsolvm() の二つであり、条件によるが、固有値・固有ベクトル分解で 60%、 逆行列計算で 35%のCPUタイムが費されています。 この種の問題を解く数学的なアルゴリズムの研究と実装の改良は、 数値計算の研究領域では日進月歩であり、CPU毎に最適化された パッケージやSMPや並列計算機に最適化された実装が存在しています。 数値線形代数では、BLAS/LAPACKが事実上の標準インターフェースであり、 こうしたアルゴリズムの改良や実装最適化の成果はBLAS/LAPACK API経由であれば、 比較的簡単に利用することが可能です。 amorita branchにて実験的に、Eigensystem[]の内部実装を BLAS/LAPACKに置き換え、 高速なBLAS実装として知られる GotoBLAS2をバックエンドにした実装で、 実一般行列(N=512程度)の固有値・固有ベクトル分解で約5倍程度の高速化が得られ、 CSR@MakeZL[]の実行時間でも手元のサンプルでは 40%程度の時間短縮効果が出ています。 # 標準の BLAS/LAPACKでは速くなりません 追試・開発したい方は、次の環境で実験出来ます * amorita branch revision 3366以降 * LAPACK extension module * CSR extension module * 最適化 or 並列化された BLAS/LAPACKライブラリ