|
|
●概要 数学の関数を級数やニュートン法などにより算出させる場合、その演算速度を知るためには、実測するのが一番良いが、関数によっては精度があがると、数十時間、数日間に及ぶものがある。これでは計測は困難である。 そう言うことで、今まで筆者は、級数などに含まれる基本演算(主として四則算)の組合せを抽出し、エクセルなどを利用してマニュアルで演算速度を算出してきた。これは、当らずとも遠からずで、目安になった。有用であるが面倒くさい方法である。 今回、これをシステム化し、パラメータなどを与えると自動的に算出する仕組みを構築したので紹介する。 ●内容
●原理
●演算時間表 表としては、以下のものがある。 ○レガシ演算時間表 Comp、Add/Subt、MulI、DivI のレガシ演算群。 原理的に桁数に比例するので、線形補間にて任意の桁数での時間を求められる。
○レガシ乗除算時間表 LMul、LDiv の時間。この時間は精度が大きくなると、CPUによっては、数時間になるので、3万桁程度で実測は終了させ、最小自乗法により二次式で近似し、残りを外挿してテーブルを完成させている。但し、値の範囲が大きく、小さな部分では誤差が大きくなるので、1024桁までは実測値、それ以降を二次式で求めている。
○MulS時間表 LMul(レガシ乗算) によるMulS で、S(短い多倍長) として、16、32、64、128、256、512、1024 桁としたもの。 この場合は、二次元テーブルとなる(長いほうの桁と短い方の桁)が、両方向に線形なので、線形補間で求められる。
○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 間は、ほぼ線形に変化する。これは、求める桁数とニュートン収束回数がほぼ比例するからである。
○自動選択乗除算 Mul、Div の演算時間。これらに対する表はなく、既存の表と、システム変数にてその都度算出される。 |