ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ
基本事項
ソフトウェア構成
UltraLong構造体
UltraMath
FFT
プログラミング例
UltraPrecisionユーティリティ
FFT試験
レガシ演算速度
FFT演算速度
数値/浮動小数点/精度
定数システム
レガシ四則算
FFT乗算
ニュートン法
逆数法
数学関数
時間評価システム
限界値自動決定システム
数学定数算出

演算時間評価システム

時間評価システム

最終更新日:2006/06/12  更新

●概要

 数学の関数を級数やニュートン法などにより算出させる場合、その演算速度を知るためには、実測するのが一番良いが、関数によっては精度があがると、数十時間、数日間に及ぶものがある。これでは計測は困難である。

 そう言うことで、今まで筆者は、級数などに含まれる基本演算(主として四則算)の組合せを抽出し、エクセルなどを利用してマニュアルで演算速度を算出してきた。これは、当らずとも遠からずで、目安になった。有用であるが面倒くさい方法である。

 今回、これをシステム化し、パラメータなどを与えると自動的に算出する仕組みを構築したので紹介する。

●内容

  1. 四則演算時間を実測テーブルから予測する。
  2. これらのテーブルを使って、FFTLimit、ReciproLimit、MulSLimit の各システム変数を自動決定する。

●原理

  1. Comp、Add/Subt、MulI、DivI、MulS、FMul、RDiv、LMul、LDiv の時間を実測し、これをテーブルとして保有する。一部は多項式近似にて内外挿する。
  2. GetOperationTime関数やEstimateCalculationTime 評価関数にて、演算群と演算桁数を指定して、演算群に対する演算時間予測をns単位で得る。 内部では線形補間で時間を求めている。

●演算時間表

  表としては、以下のものがある。

レガシ演算時間表

 Comp、Add/Subt、MulI、DivI のレガシ演算群。 原理的に桁数に比例するので、線形補間にて任意の桁数での時間を求められる。


レガシ演算時間のグラフ

○レガシ乗除算時間表

 LMul、LDiv の時間。この時間は精度が大きくなると、CPUによっては、数時間になるので、3万桁程度で実測は終了させ、最小自乗法により二次式で近似し、残りを外挿してテーブルを完成させている。但し、値の範囲が大きく、小さな部分では誤差が大きくなるので、1024桁までは実測値、それ以降を二次式で求めている。


レガシ乗除算時間のグラフ(外挿結果)(赤がLDiv)

○MulS時間表

 LMul(レガシ乗算) によるMulS で、S(短い多倍長) として、16、32、64、128、256、512、1024 桁としたもの。 この場合は、二次元テーブルとなる(長いほうの桁と短い方の桁)が、両方向に線形なので、線形補間で求められる。


MulS演算時間のグラフ

○FFT演算時間表

 FMul、RDiv の時間。FFT系の演算時間は非線形(階段波形)になるので、原理を踏まえて実測する。つまり桁数が、2N と 2N + 1 の間で不連続となるので、実測する場合は、桁数の分解能が 8 桁なので、2N と 2N + 8 のペアで実測する。また、FMulでは 2N + 8 と、2N+1 は、ほぼ原理的に同じ時間となるので、そのように調整する。これにて、階段波形であっても、線形補間が成立する。RDiv では、FMul と少し様子が異なる。2N と 2N + 8 での不連続は同じであるが、2N + 8 と、2N+1 間は、ほぼ線形に変化する。これは、求める桁数とニュートン収束回数がほぼ比例するからである。


FFT乗除算演算時間のグラフ(赤がRDiv)


FMul時間だけのグラフ

○自動選択乗除算

 Mul、Div の演算時間。これらに対する表はなく、既存の表と、システム変数にてその都度算出される。