gpt4 book ai didi

c++ - 时钟()返回0

转载 作者:太空狗 更新时间:2023-10-29 19:57:52 27 4
gpt4 key购买 nike

当我运行下面的代码时,我得到了一个值 0,有几次我确实得到了 intAddition 的值。我已经尝试了很多我在网上找到的建议,但还没有成功。我的同学向我展示了他是如何做的,这与我的非常相似。他从他的程序中得到的值很小,从 1 到 3。

感谢您的帮助!

#include <iostream>
#include <time.h>
#include <stdio.h>

clock_t start, end;

void intAddition(int a, int b){
start = clock();
a + b;
end = clock();
printf("CPU cycles to execute integer addition operation: %d\n", end-start);
}

void intMult(int a, int b){
start = clock();
a * b;
end = clock();
printf("CPU cycles to execute integer multiplication operation: %d\n", end-start);
}

void floatAddition(float a, float b){
start = clock();
a + b;
end = clock();
printf("CPU cycles to execute float addition operation: %d\n", end-start);
}

void floatMult(float a, float b){
start = clock();
a * b;
end = clock();
printf("CPU cycles to execute float multiplication operation: %d\n", end-start);
}

int main()
{
int a,b;
float c,d;

a = 3, b = 6;
c = 3.7534, d = 6.85464;

intAddition(a,b);
intMult(a,b);
floatAddition(c,d);
floatMult(c,d);

return 0;
}

最佳答案

clock() 返回的值类型为 clock_t (实现定义的算术类型)。它代表“实现对处理器的最佳近似自与实现定义时代相关的开始以来程序使用的时间仅对程序调用”(N1570 7.27.2.1)。

给定一个 clock_t值,您可以通过将其乘以 CLOCKS_PER_SEC 来确定它代表的秒数,在 <time.h> 中定义的实现定义的宏. POSIX 需要 CLOCKS_PER_SEC为一百万,但在不同的系统上可能有不同的值。

请特别注意,CLOCKS_PER_SEC 的值不一定clock() 的实际精度相对应功能。

根据实现,两次连续调用 clock()如果消耗的 CPU 时间量小于 clock() 的精度,则可能会返回相同的值功能。在我测试的一个系统上,clock() 的分辨率功能为0.01秒; CPU 可以在那段时间执行很多指令。

这是一个测试程序:

#include <stdio.h>
#include <time.h>
#include <limits.h>
int main(void) {
long count = 0;
clock_t c0 = clock(), c1;
while ((c1 = clock()) == c0) {
count ++;
}
printf("c0 = %ld, c1 = %ld, count = %ld\n",
(long)c0, (long)c1, count);
printf("clock_t is a %d-bit ", (int)sizeof (clock_t) * CHAR_BIT);
if ((clock_t)-1 > (clock_t)0) {
puts("unsigned integer type");
}
else if ((clock_t)1 / 2 == 0) {
puts("signed integer type");
}
else {
puts("floating-point type");
}
printf("CLOCKS_PER_SEC = %ld\n", (long)CLOCKS_PER_SEC);
return 0;
}

在一个系统(Linux x86_64)上,输出是:

c0 = 831, c1 = 833, count = 0
clock_t is a 64-bit signed integer type
CLOCKS_PER_SEC = 1000000

显然在该系统上 clock()函数的实际分辨率是一或两微秒,并且两次连续调用 clock()返回不同的值。

在另一个系统(Solaris SPARC)上,输出是:

c0 = 0, c1 = 10000, count = 10447
clock_t is a 32-bit signed integer type
CLOCKS_PER_SEC = 1000000

在该系统上,clock() 的分辨率函数为 0.01 秒(10,000 微秒),clock() 返回的值几千次迭代都没有改变。

(至少)还有一件事需要注意。在 clock_t 的系统上是 32 位,带有 CLOCKS_PER_SEC == 1000000 ,该值可以在大约 72 分钟的 CPU 时间后回绕,这对于长时间运行的程序来说可能很重要。有关详细信息,请参阅您的系统文档。

关于c++ - 时钟()返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844613/

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