- SSEによる常微分方程式の並列計算(ルンゲクッタ法) -
yosirin-hello / yosi-s@galaxy.ocn.ne.jp
注 : 本文はまだ完成したものではありません.
文章・図が変更される可能性があります. ご了承下さい.
| 1. はじめに |
|
| 前回の記事では, オイラー法をSSE化して常微分方程式の並列計算をしました. 今回はオイラー法よりも計算精度が高いルンゲクッタ法をSSE化しようとおもいます. | |
| 2. ルンゲクッタ法の数式レベルの最適化 |
|
| オイラー法では, 次のステップの計算は勾配関数f(t,x)を1回だけ使い,
線形近似で求めていくという考え方でした. それに対してルンゲクッタ法(4次の場合)は,
次のステップの計算をするために, 勾配関数f(t,
x)をそれぞれパラーメータを変えて4回使い,
補間で計算精度を高めるというものです. 私は高速化に関心があるので,
ルンゲクッタの公式の導出は数値計算の文献にまかせます. Fig1. が一般的な数値計算の文献に載っているルンゲクッタの4次の公式です. この公式は, 掛け算や割り算などの計算コストが高い無駄な計算が多く含まれています. これを数式レベルで最適化したものがFig2. になります. ![]() Fig2. の擬似コードを見てみると, 割り算がすべて無くなったことがわかります. この擬似コードは, 計算コストが高い割り算を無くすことができないか, 掛け算を少なくできないか(足し算で補えないか), 前もって計算しておいた方が良い定数はないか, ということに重点を置いて最適化しました.
ルンゲクッタ法の説明から外れますが, 以下の経験がこの研究で得ることができました. ・ 擬似コードで実現しようとしている概念を把握することは, 非常に重要だということ ・ 最適化をするときに, 擬似コード→高級言語による実装→アセンブリ言語による実装の順で考えていくと, とてもやりやすいということ ・ 最初からアセンブリ言語で考えてしまうと, 最適化できる部分を見逃してしまい易くなってしまうということ . |
|
研究中です. しばらくお待ちください.
Copyright © 2002 yosirin-hello All rights
reserved.