【发布时间】:2014-12-13 03:47:32
【问题描述】:
我正在尝试为编程问题建立一个在线法官(如UVA OJ)。在判断程序时,需要测试它们的效率(即它们处理测试输入的速度)。但是,在服务器中,CPU 通常非常强大,甚至可以非常快速地运行编码不佳的程序。而且,有些程序在流量低的时候可能会得到更多的CPU,而有些程序在流量大的时候可能会得到更少的CPU,这是不公平的。
所以我想知道,有没有一种方法可以衡量程序效率,而不管它在哪个 CPU 上运行?也许有一些 CPU 周期计算或类似的东西?
注意:
- 我在服务器端使用 PHP。
- 我可以在服务器中使用 Linux 命令。
- 我可以请求在服务器中安装 Linux 程序。
- 我想我可以将内存使用限制到一个进程(处理内存效率),但我不知道如何限制 CPU 使用。我问过here。
所以任何 Linux 或 PHP 解决方案都会很棒。
【问题讨论】:
-
您可能需要考虑 CPU 时间。它不同于程序启动和终止之间的时间。它衡量 CPU 实际运行程序所花费的时间,并且几乎不受其他进程的影响。
-
如果您的程序寿命很短,您还可以使用性能计数器来计算已完成的指令数。使用 PAPI,即 PAPI_TOT_INS 计数器。
-
@user4098326 是的,我想过,但问题是,CPU 时间可能在低流量时非常快,而在高流量时可能有点慢。因此,当使用该网站的人减少时,即使是糟糕的程序也可能通过。
-
@Adam 你能给我一些关于如何使用它的链接吗?
-
你在考虑挂钟时间。 CPU 时间是特定程序使用 CPU 所花费的时间。如果您的程序确实受 CPU 限制,那么这个时间应该保持不变。 Google 有很多 PAPI 示例,只有您知道哪些适合您的系统。 stackoverflow.com/questions/8160004/…
标签: performance cpu cpu-usage processing-efficiency