gpt4 book ai didi

java - 如何衡量用 Java 编写的代码的速度? (人工智能算法)

转载 作者:太空狗 更新时间:2023-10-29 22:36:57 25 4
gpt4 key购买 nike

如何衡量用 Java 编写的代码的速度?

我计划开发软件,使用目前可用的所有 AI 和 ML 算法来解决数独问题,并将时间与简单的蛮力方法进行比较。我需要测量每个算法的时间,我想请教一下最好的方法是什么?非常重要,无论 CPU 功率/内存如何,程序都必须在任何机器上都有用。

谢谢。

最佳答案

正如其他人所建议的,System.currentTimeMillis() 非常好,但请注意以下注意事项:

  • System.currentTimeMillis() 测量经过的物理时间(“挂钟时间”),而不是 CPU 时间。如果其他应用程序正在机器上运行,您的代码将占用更少的 CPU,速度也会降低。因此,仅在其他闲置系统上工作。
  • 同样,多核系统上的多线程应用程序可能会获得额外的隐藏 CPU。耗时度量并不能捕获多线程应用程序的全部复杂性。
  • Java 需要一些“热身”。 VM 将首先解释代码(这很慢),如果给定的方法被使用了太多次,那么 JIT 编译器会将该方法转换为 native 代码。只有在那个时候,该方法才能达到最高速度。我建议您在调用 System.currentTimeMillis() 之前执行一些“空循环”。
  • System.currentTimeMillis() 的精度很少为 ​​1 毫秒。在许多系统上,精度不超过 10 毫秒,甚至更长。此外,JVM 有时会运行 GC,导致明显的暂停。我建议您将测量组织成一个循环,并坚持至少运行几秒钟。

这会产生以下代码:

for (int i = 0; i < 10; i ++) {
runMethod();
}
int count = 10;
for (;;) {
long begin = System.currentTimeMillis();
for (int i = 0; i < count; i ++)
runMethod();
long end = System.currentTimeMillis();
if ((end - begin) < 10000) {
count *= 2;
continue;
}
reportElapsedTime((double)(end - begin) / count);
}

如您所见,前十次“空”运行。然后程序在循环中运行该方法,根据需要多次运行,以使循环至少花费 10 秒。十秒应该足以消除 GC 运行和其他系统错误。当我测试哈希函数实现时,我用了两秒钟,即使函数本身根本没有触发内存分配,我仍然得到高达 3% 的变化。

关于java - 如何衡量用 Java 编写的代码的速度? (人工智能算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403921/

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