|
●概要 MegaPrecitionがインストールされた実機でのMegaPrecision の基本演算時間を予測する。附属のシステムツールにて、予め実機の基本演算時間が測定されている必要がある。 ●条件 この関数が動作するには、予め、ユーティリティにより、"システム設定"メニューにてテーブルを生成しておく必要がある。 対応するテーブルがないと、値0 が返る。 ●関数仕様 ○列挙体/構造体 評価する演算のパラメータを指定するための列挙体/構造体である。 Public Enum Operation Public Structure OperationParam Sub New(OP As Operation, SP As Integer, N As
Integer) ○時間関数チェック ・IsReadyEstimateTime() As Boolean 演算時間評価のためのテーブルが全て準備されていれば、True が返る。 ○個別時間関数 ・GetOperationTime(MainPrecision As Integer, Operation As Operation, SubPrecision As Integer) As Double Operation に演算種、Precision に主精度(演算する実際の桁数)、もし、MulS/MulSd の場合は、SubPrecision に、16〜1024 の桁数を8 の倍数で指定する。Div の場合でも、SubPrecision = 8 であれば、DivI と評価される。Mul の場合でも、SubPrewcision = 8 であれば、MulI、MulsLimit 以内であればMulS と評価される。自動選択乗除算が完全にシミュレートされる。単独演算の単位演算時間が ns で返る。 ○組合せ時間関数 ・EstimateCalculationTime(MainPrecision As Integer, Param() As OperationParam) As Double Param配列に、必要な演算のパラメータを与えると、それら全ての合計演算時間が返る。単位は、ns。 <用例> ・例1 公称精度が 8032桁で、 C = Add(W, Mul(Mul(X, X), Add(Y, Z))) では、 Calc() As OperationParam = {New OperationParam(Operation.Mul, 0, 2) EstimateCalculationTme(8032, Calc) とする。 ・例2 公称精度が 120032桁で、 Do (N が1億未満、Sが32桁の短い多倍長の場合) Calc() As OperationParam = {New OperationParam(Operation.MulS, 32, 1) EstimateCalculationTme(120032, Calc) が、1ループ当りの演算時間となる。 通常、Loop、If S.IsZero OrElse S.Exponent < -PP や、N = N + 1 は、無視して も時間評価には問題ない。 ○演算時間表示 ・ShowCalculationTime(ByVal Time As Double) As String 秒で表された時間を文字列にする。nS、μS、mS、S などが自動的に変換される。有効桁数は5桁程度となる。(それ以上は無意味なので) <用例> ShowCalculateTime(123.4) → 2 M 3.4 S
|