小编典典

C程序的执行时间

all

我有一个旨在在多个处理器上并行运行的 C 程序。我需要能够记录执行时间(可能是 1
秒到几分钟不等)。我已经搜索过答案,但他们似乎都建议使用该clock()函数,然后计算程序占用的时钟数除以该Clocks_per_second值。

我不确定该Clocks_per_second值是如何计算的?

在 Java 中,我只是在执行前后以毫秒为单位取当前时间。

C中有类似的东西吗?我看过了,但我似乎找不到比第二个分辨率更好的方法。

我也知道探查器是一种选择,但我希望自己实现一个计时器。

谢谢


阅读 81

收藏
2022-05-20

共1个答案

小编典典

CLOCKS_PER_SEC是一个在 中声明的常数<time.h>。要获取 C 应用程序中任务使用的 CPU 时间,请使用:

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 系统上。

JavaSystem.currentTimeMillis()没有衡量同样的事情。它是一个“挂钟”:它可以帮助您测量程序执行所需的时间,但它不会告诉您使用了多少
CPU 时间。在多任务系统(即所有系统)上,这些可能大不相同。

2022-05-20