Re: 関数を記述して呼び出すと、実行時間が大幅に短縮されるのはなぜですか? そして、最も効率的な時間/空間の複雑さのためにJSLを書くための経験則は何ですか?私もそれを期待しません。 パラメータのコピーとローカル変数の設定に関連して、関数呼び出しにはわずかなオーバーヘッドがあります。
しかし...使用可能なメモリの半分以上を使用する巨大な配列が含まれている場合、関数でローカル変数を使用すると、メモリが再び必要になる前にメモリが解放されます。このJSLを検討してください:
x = J(20000,20000,0);
...
x = J(20000,20000,0);
最初の割り当てには 3GB のメモリが必要です。 2 番目の割り当てでは、最初の割り当てを解放する前に追加の 3GB が必要です (x が上書きされた場合)。x が関数内でグローバルではなくローカルである場合、ローカル x が最後に忘れられたときに x のメモリが解放されます。関数の。 そうでない場合、4GB マシンは古い x をディスクにページングし、x を置き換える新しいメモリ用にメモリをゼロにします。 次に、ディスクにページした内容を忘れます。
それがあなたがしていることのように聞こえる場合は、これを試して証明してください:
x = J(20000,20000,0);
...
x=0; // forget the old allocation first
x = J(20000,20000,0);
Re: 関数を記述して呼び出すと、実行時間が大幅に短縮されるのはなぜですか? そして、最も効率的な時間/空間の複雑さのためにJSLを書くための経験則は何ですか?...そして hptime() はマイクロ秒関数です。 (ハイパフォーマンス? hp が何を表しているのかわかりません。)
関数の書き込みと呼び出しによって実行時間が大幅に短縮されるのはなぜですか? そして、時間/空間の複雑さを最も効率的に実現するための JSL を作成するための経験則は何でしょうか?やあみんな、
私のタスクの 1 つは、Fit Life by X を使用して信頼性分析を行うことです。
そうすることで、出力する 2 つの JSL スクリプトができます。全く同じ結果しかし、持っていますさまざまなコーディングアプローチ。
最初のアプローチでは、複数のコードをカスケード接続するだけです。 疑似コードは次のようになります。
// Plot Fit Life by X #1
Fit Life by X(...);
// Plot Fit Life by X #2
Fit Life by X(...);
// Plot Fit Life by X #3
Fit Life by X(...);
// And so on
2 番目のものには、異なる X、Y、センサー列で繰り返される単一の関数があります。 疑似コードは次のようになります。
// Function that contains Fit Life by X
reli_analysis = function(
{input parameters},
{local variables},
Fit Life by X(...);
);
// Call the above function multiple times
reli_analysis(input parameters set #1);
reli_analysis(input parameters set #2);
reli_analysis(input parameters set #3);
// And so on
私が経験したことは、2 番目のコードは最初のコードよりもはるかに高速であり、ほぼ 10 倍のオーダーです。 (実際のデータセットを使用した実際の JSL の実行時間 (実時間で測定) は、コード #2 では約 17 秒でしたが、コード #1 では約 170 秒でした)
以下の3つの質問があります。
1. すべてのコードを明示的に書き出すよりも、関数を呼び出す方がはるかに速いのはなぜですか?
2. コードの時間および/または空間の複雑さを最も効率的にするために一般的に行うべき他のプラクティスやヒントは何ですか?
3. JSL に CPU 時間や実時間などのタイミング関数が組み込まれているかどうかはわかりません。 today() 関数を使用してコードの実行時間を計測しましたが、これには多くの手動コーディングが必要です。 また、この方法で計算された経過時間は、実行中の他のタスクがあるかどうかによって常に若干異なります。
手伝ってくれてどうもありがとう。
JMP バージョン: 17.0
自動化とスクリプト作成品質およびプロセスエンジニアリングウィンドウズRe: 関数を記述して呼び出すと、実行時間が大幅に短縮されるのはなぜですか? また、最も効率的な時間/空間の複雑さを実現する JSL を記述するための経験則は何ですか?別の可能性: 以前のグラフが開いていて、データ テーブルが新しいグラフを作成するために変更されている場合、古いグラフはデータ テーブルへの各変更に応答している可能性があります。関数バージョンでは、古いグラフがより早く閉じられる可能性があります。