アトミックオペレーションこんにちは。
このフィルタの経過時間を測定しようとしています(列 'PowerRail'の10秒移動平均を計算します)。
...
tStart = HP Time();
new_col << Formula( Summation( i = 1,10,Lag(dt:PowerRail,i))/10);
tStop = HP Time();
...
直線的に進む代わりに、新しいスレッドが呼び出され、操作を完了するための実際の時間が実現されていないようです。
現状では200μSと測定されていますが、現実的ではありません。「PowerRail」列を含むCSVファイルのサイズは11GBです。200μSが新しいスレッドを呼び出す時間です。
スクリプトが終了すると、JMPテーブルが開き、移動平均値がテーブルの表示領域に表示されますが、下にスクロールしても実際に列全体の処理が完了していないことがわかります。
実際の完了時間が測定されるように、アトミック操作で、つまり別のスレッドではなく式を実行することは可能ですか。
前もって感謝します。
再:アトミック操作対話的にパフォーマンスを検討しているのは、これは単なる参考です。JMPデバッガでスクリプトを実行し、ポンド記号#の上にある時計のように見えるボタンを選択します。ステップでの時間の割合、または計算を完了するための「ステップ」の数を返します。以下は、スクリプト、時差、およびデバッガのパフォーマンスです。Col移動平均()関数はfsatestメソッドです。
Names default to here(1);
dt = New Table("Test", New Column("random", numeric), New Column("MA1", numeric),
New Column("MA2", numeric),
New Column("MA3", numeric),
);
dt << add rows(2000000);
xmat = J(2000000, 2, Random Integer(1,10));
dt:random << Set values(xmat[0,1]);
wait(5);
t1 = HP Time();
dt:MA1 << Formula( Summation( i = 1,10,Lag(dt:random,i))/10, <<RUN formula=""></RUN>数値結果は次のとおりです。
t4 − t3 = 166。// コル移動平均の使用
t3 − t2 = 2246576。// Forループを使用する
t2 − t1 = 1038。// Summationを10で割った式を使う
これがデバッガパフォーマンスレポートのスクリーンショットです。

再:アトミック操作ええと
迅速な対応ありがとうございました。
'Run Formulas()'を使用して、フィルタを実行する時間は実際には4時間です。
再:アトミック操作式が実際に評価される前にスクリプトが続行されるのは正しいことです。通常はスクリプトの実行に時間がかかる場合があります。 Run Formulasを使用してスクリプトを待機させることができます。
Names default to here( 1 );
//Open sample data and create a column to modify
dt = Open("$Sample_Data/iris.jmp");
new_col = dt << New Column("Test",Numeric,"Continuous",Formula(1));
//Set the column formula
tStart = HP Time();
new_col << Formula( for(i=1,i<=100000, i++, i+1) );
tMiddle = HP Time();
print(tMiddle-tStart);
//Wait for the formula to finish calculating
dt << Run Formulas();
tStop = HP Time();
print(tStop-tStart);