Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject CSR codeの高速化(線形代数ルーチンの高速化)
Date: 2010/10/29(Fri) 21:28:50
ContributorAkio 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ライブラリ


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)