gpt4 book ai didi

benchmarking - Netlogo 中的时间差异

转载 作者:行者123 更新时间:2023-12-04 03:56:10 26 4
gpt4 key购买 nike

谁能解释为什么以下两个部分之间存在性能差异?第二个定时器调用报告的数字比第一个定时器调用报告的数字小,这在统计上很重要。我唯一的想法是 Netlogo 可以将海龟缓存在内存中。这是预期的行为还是有错误?

to setup
clear-all
crt 100
let repetitions 10000

;;Timing assigning x to self
reset-timer
repeat repetitions
[
ask turtles
[
let x self
]

]
show timer

;;Timing assigning x to who of self
reset-timer
repeat repetitions
[
ask turtles
[
let x [who] of self
]
]
show timer
end

最佳答案

这不是因为 NetLogo 本身的任何东西,而是因为 NetLogo 运行在 JVM 上。 .作为其 just-in-time compilation (JIT) 的一部分,JVM 运行的代码越多,它就会学习优化代码。 .

到第二段运行时,JVM 已经有时间优化两个段共有的许多代码路径。确实,切换段的顺序,我得到了以下结果:

observer> setup
observer: 0.203
observer: 0.094
observer> setup
observer: 0.136
observer: 0.098
observer> setup
observer: 0.13
observer: 0.097
observer> setup
observer: 0.119
observer: 0.095
observer> setup
observer: 0.13
observer: 0.09

现在 let x self代码更快(它现在是运行的第二件事)!另请注意,我跑得越多,这两个时间都会减少 setup .这也是由于 JVM 的 JIT。

同样,如果我关闭 View 更新并运行您的原始代码,我会得到:
observer> setup
observer: 0.088
observer: 0.071
observer> setup
observer: 0.094
observer: 0.072
observer> setup
observer: 0.065
observer: 0.075
observer> setup
observer: 0.067
observer: 0.071
observer> setup
observer: 0.067
observer: 0.068
let x self代码开始较慢(出于上述原因),然后变得与人们预期的速度大致相同。关于为什么只有在关闭 View 更新时才会发生这种情况的原因有很多。 NetLogo 在关闭 View 更新的情况下做得更少

JVM 的 JIT 是极其优化的,但很复杂,而且很难推理。 There's a lot to consider if you want to write truly correct micro-benchmarks.

关于benchmarking - Netlogo 中的时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com