研究概要 |
非線形計算において運動方程式パッケージ内の各オブジェクトの呼び出し回数や処理に要する時間等のプロファイリングを実施し,まず行列演算に関わる高速化が最も効果的であることを確認した.そこで運動方程式オブジェクト内で使用している行列パッケージの高速化を実施した.まずC++プログラムにおける高速化について調査し,if文の評価式の最適化,インライン関数への置き換えを実施した.またC++では継承レベルが増えるほど実行速度が減速するが,列ベクトルと行ベクトルを別にモデル化した方が数学的表現と一致して理解しやすいと考え,抽象ベクトルオブジェクトを継承する形で上記ベクトルをモデル化した.ただし運動方程式オブジェクトにおいては$Vector^T\cdot Matrix \cdot Vector$形式の演算が多いため,この演算のための特別な関数を加え,高速化に留意している.運動方程式オブジェクトは,比較的大きな行列およびベクトルオブジェクトを多用するため,スタックにオブジェクト全体を入れると実行時フットプリントが大きくなるとともに時間もかかる.そのため,オブジェクト内の関数における引数の参照渡しを徹底した.また運動方程式オブジェクトでは大規模な自由度の計算を行うため,対称行列オブジェクの作成とともに,LAPACKを用いた行列パッケージのモデル化も実施した.これらモデル化された運動方程式および行列パッケージを実装し,パフォーマンス戦略を施していない従来の運動方程式オブジェクトと演算速度を比較したところ,約15%速くなり,簡単ではあるが効果的なパフォーマンス向上を図ることができた.
|