Re: 為什麼編寫和調用函數可以顯著加快執行時間? 為最有效的時間/空間複雜度編寫 JSL 的經驗法則是什麼?我也不希望那樣。 函數調用的開銷很小,與復制參數和設置局部變量有關。
但是......如果涉及一個巨大的數組,使用超過一半的可用內存,在函數中使用局部變量將確保內存在再次需要之前被釋放。考慮這個 JSL:
x = J(20000,20000,0);
...
x = J(20000,20000,0);
第一次分配需要3GB內存。 第二次分配需要額外的 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 以獲得最有效的時間/空間複雜度的經驗法則是什麼?大家好,
我的任務之一是進行可靠性分析,其中我使用 X 的 Fit Life 進行分析。
為此,我有兩個輸出的 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
第二個函數只有一個函數,我們稱之為“用不同的 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
我的體驗是,第二個代碼比第一個代碼快得多,大約快了 10 倍。 (我的實際 JSL 與真實數據集的執行時間(通過掛鐘時間測量)從代碼 #2 約為 17 秒,而從代碼 #1 約為 170 秒)
我有以下三個問題:
1. 為什麼調用函數比顯式寫出所有代碼要快得多?
2. 為了確保我的代碼具有最有效的時間和/或空間複雜度,我通常應該採取哪些其他實踐/技巧?
3. 我不確定JSL是否有內置的CPU時間、掛鐘時間等計時功能? 我使用 Today() 函數對代碼執行進行計時,但它涉及大量手動編碼。 此外,根據是否有其他任務正在執行,以這種方式計算出的經過時間總是略有不同。
非常感謝你的幫助。
JMP 版本:17.0
自動化和腳本編寫質量和工藝工程視窗回覆:為什麼編寫和呼叫函數可以顯著加快執行時間?那麼,編寫 JSL 以獲得最高效的時間/空間複雜度的經驗法則是什麼?另一種可能性:如果打開了先前的圖表,並且正在更改資料表以製作新圖表,則舊圖表可能會對資料表的每次變更做出回應。也許功能版本會更快關閉舊圖表?