我有一个旨在在多个处理器上并行运行的 C 程序。我需要能够记录执行时间(可能是 1 秒到几分钟不等)。我已经搜索过答案,但他们似乎都建议使用该clock()函数,然后计算程序占用的时钟数除以该Clocks_per_second值。
clock()
Clocks_per_second
我不确定该Clocks_per_second值是如何计算的?
在 Java 中,我只是在执行前后以毫秒为单位取当前时间。
C中有类似的东西吗?我看过了,但我似乎找不到比第二个分辨率更好的方法。
我也知道探查器是一种选择,但我希望自己实现一个计时器。
谢谢
CLOCKS_PER_SEC是一个在 中声明的常数<time.h>。要获取 C 应用程序中任务使用的 CPU 时间,请使用:
CLOCKS_PER_SEC
<time.h>
clock_t begin = clock(); /* here, do your time-consuming job */ clock_t end = clock(); double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
请注意,这会将时间作为浮点类型返回。这可能比一秒更精确(例如,您测量的是 4.52 秒)。精度取决于架构;在现代系统上,你很容易得到 10 毫秒或更低,但在较旧的 Windows 机器上(从 Win98 时代开始),它接近 60 毫秒。
clock()是标准C;它“无处不在”。有特定于系统的功能,例如getrusage()在类 Unix 系统上。
getrusage()
JavaSystem.currentTimeMillis()没有衡量同样的事情。它是一个“挂钟”:它可以帮助您测量程序执行所需的时间,但它不会告诉您使用了多少 CPU 时间。在多任务系统(即所有系统)上,这些可能大不相同。
System.currentTimeMillis()