gpt4 book ai didi

performance-testing - Pharo 系统调整选项

转载 作者:行者123 更新时间:2023-12-05 00:16:22 26 4
gpt4 key购买 nike

我是 StackOverflow 的新手,正在寻找提示并帮助在 Windows 环境中调整 Pharo 5.0。

我的 PC 运行 Windows 10,CPU I5-4670K,频率为 4 Ghz,Plextor 512G SSD 作为加载和运行 Pharo 5.0 的 C 驱动器。

以下是我用来理解 Pharo 在性能和计算精度方面的行为的一组代码。

  | x y |
x := 0.
y := 400000000.
[1 to: 2000000000 do: [ :i |
x := x + 0.2]] timeToRun

执行耗时 2 分 8.281 秒。如果我从迭代次数中剔除一个零,则只需 1.762 秒即可完成。执行时间超过 70 次的迭代次数增加了 10 倍。似乎我遇到了系统边界,使得执行时间在两种情况之间增长远高于 10 倍。

感谢任何提示并帮助微调 Pharo 5.0 VM,以便我可以减少此类意外和不受欢迎的系统行为?

附言在执行过程中,Windows 任务管理器没有报告磁盘事件的任何变化。几乎所有的执行都是 RAM 和 CPU 操作。顺便说一句,除非你有一个更快的 PC,否则请不要尝试在迭代次数上再添加一个零,它花了很长时间我不得不中断执行。

最佳答案

欢迎来到 SO(以及 smalltalk 标签!)

首先注意临时y在这里没有发挥任何作用,因此我们可以将代码片段简化为

| x |
x := 0.
[1 to: 200000000 * 10 do: [ :i |
x := x + 0.2]] timeToRun

你比较过的
| x |
x := 0.
[1 to: 200000000 * 1 do: [ :i |
x := x + 0.2]] timeToRun

第一个版本的原因不仅仅是 10比第二个慢几倍的是前者中的块变量 iSmallInteger 移动域到 LargeInteger一。因此,每次块增加 i , 当 i已超越 SmallInteger边界,加法 i := i + 1这里发生的事情涉及 LargeInteger算术,比 SmallInteger 慢一。

以及多少次 LargeInteger算术发生?那么,计算我们只需要减去 SmallInteger maxVal来自 200000000 * 10 :
(200000000 * 10) - SmallInteger maxVal  = 926,258,177

这意味着 Pharo 正在对大整数 i 执行该数量的操作。 .

请注意,如果我们有
| x |
x := 0.
[
10 timesRepeat: [1 to: 200000000 * 1 do: [ :i | x := x + 0.2]]
] timeToRun

我们会花大约 10 1 次迭代速度的倍数。

附录

请不要将上述解释视为暗示 LargeInteger算术在 Pharo 中的表现很差。相反,Pharo 在使此类计算高效方面做得很好。

在幕后,Pharo 使用原语进行这些操作,同时为程序员提供独特且一致的 View 和 API Integer算术。事实上,如果你尝试在另一个没有 VM 支持的方言中做同样的事情 LargeInteger您将不得不等待很长时间才能计算出结果。

关于performance-testing - Pharo 系统调整选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991288/

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