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 以获得最高效的时间/空间复杂度的经验法则是什么?另一种可能性是:如果打开了之前的图表,并且正在更改数据表以制作新图表,则旧图表可能会响应数据表的每次更改。也许函数版本会更快地关闭旧图表?