|
|
●概要 UltraPrecitionがインストールされた環境、CPUに於けるUltraPrecision による演算時間を予測する。 実測値を加工し、線形補間により算出している。 ●条件 この関数が動作するには、予め、ユーティリティにより、"システム測定/設定"メニューにてテーブルを生成しておく必要がある。 対応するテーブルがないと、値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, ByVal Mode As Integer) As String ns で表された時間を文字列にする。nS、μS、mS、S などが自動的に変換される。有効桁数は4桁程度となる。(それ以上は無意味なので)
<用例> ShowCalculateTime(123400000000, 0 ) → 123.4 S ○二進展開評価関数 ・BinaryMethodCount(ByVal A As Long) As Integer XA を二進展開法で冪乗する場合の乗算回数を返す。 一般に乗算回数は、Log2A - 1 と 2*Log2A - 1 の間の値となる。 |