3

在评估我的算法时,我应该在 Java 中使用 CPU 时间还是用户时间?我在这里使用了信息:How to get CPU, system, and user time for benchmarking , to get these values...

开始了:

"User time" is the time spent running your application's own code.
"System time" is the time spent running OS code on behalf of your application (such as for I/O).

我们也经常提到“CPU时间”:

"CPU time" is user time plus system time. It's the total time spent using a CPU for your application.

哪个最适合 CS 实验?

4

2 回答 2

3

当然,这取决于您的算法。

如果您的算法本身不执行 I/O,则用户时间是衡量其好坏的最准确的衡量标准。

但是,如果您的算法进行例如基于磁盘的排序,则包含 I/O 的时间更合适。

请注意,尽管 Java VM 本身也运行自己的代码,最值得注意的是 GC,从操作系统的角度来看,这也算作用户时间,所以如果你想真正彻底,你可以尝试通过以下方式最小化 GC 的影响记录 GC 运行时间并从操作系统测量的用户时间中减去它们。(另一方面,您可以争辩说,如果这两种算法在相同的条件下运行,并且其中一个触发的 GC 运行次数比另一个多得多,那么这就是算法本身的错误。)

更新:对不起,我刚刚阅读了您链接的页面,当然,如果您测量线程的用户时间,则上述内容不适用,只有当您查看整个(重量级)进程的用户时间时。

于 2012-06-18T22:33:23.340 回答
2

通常流逝的时间是唯一重要的事情。如果您可以编写一个使用多个内核的程序(这会增加 CPU 时间)但会减少用户等待的时间,那么这是更可取的。经过时间包括 IO、用户和系统时间。

于 2012-06-19T07:24:16.807 回答