疎行列格納形式 — CAE用語解説
疎行列格納形式
CSR形式とかCOO形式とか聞くんですけど、疎行列の格納形式って何種類もある必要があるんですか?
用途によって最適な形式が違うからだよ。COO(Coordinate)形式は「行番号・列番号・値」のトリプレットで格納するから、行列を組み立てるフェーズ(FEMの要素剛性行列の足し込み)に向いている。でも行列-ベクトル積のように繰り返し計算するなら、CSR(Compressed Sparse Row)の方が行方向のアクセスが連続メモリになるから圧倒的に速いんだ。
定義
CSRとCSCの違いは何ですか?
CSRは行方向にデータを圧縮、CSC(Compressed Sparse Column)は列方向に圧縮する。CG法のような反復ソルバーでは行列-ベクトル積を頻繁に行うからCSRが主流。一方、MATLABの内部やSuperLUのような直接法ではCSCが使われることが多い。要はデータアクセスの方向に合わせて選ぶってことだね。
CAEにおける位置づけ
普通のCAEユーザーとして、格納形式を意識する場面ってありますか?
商用ソルバーを使う分にはあまり意識しないかもしれないけど、OpenFOAMやPETScでカスタムソルバーを書くときは必須知識だよ。あと、大規模モデルでメモリ不足になったときに「なぜこの行列がこんなにメモリを食うのか」を理解するには格納形式の知識が役立つ。例えば対称行列なら上三角だけ格納すればメモリが半分で済む。
行列を組み立てるときはCOOで、計算するときはCSRに変換する、みたいな流れですか?
まさにそう。PETScやscipyでもcoo_matrix→csr_matrixの変換APIが用意されている。実務のFEMコードでは、要素ループでCOO形式のトリプレットを蓄積して、最後にCSRに変換してからソルバーに渡すのが定番パターンだよ。
関連用語
疎行列格納と合わせて勉強すべき概念は何ですか?
COOで組み立ててCSRで計算、って流れがきれいでわかりやすいです。メモリ不足のときも格納形式を意識してみます。
うん。あとGPU計算では別のフォーマット(ELLやHYB)が使われることもあるから、GPUソルバーを使うときも格納形式の選択が重要だよ。
CAE用語の正確な理解は、チーム内のコミュニケーションの基盤です。 — Project NovaSolverは実務者の学習支援も視野に入れています。
CAEの未来を、実務者と共に考える
Project NovaSolverは、疎行列格納形式における実務課題の本質に向き合い、エンジニアリングの現場を支える道具づくりを目指す研究開発プロジェクトです。
プロジェクトの最新情報を見る →関連トピック
なった
詳しく
報告