gpt4 book ai didi

c - 在 C 问题中使用 time() 和 clock()

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:07 25 4
gpt4 key购买 nike

我正在做一项编程作业,但我得到了奇怪的结果。这个想法是计算处理器滴答数和运行算法所花费的时间。

通常代码运行得如此之快以至于花费的时间为 0 秒,但我注意到处理器滴答数在开始和结束时为 0,导致处理器滴答数为 0。

我使用 usleep 添加了一个延迟,这样花费的时间不为零,但处理器滴答仍然为零,时间戳之间的计算仍然为零。

几天来我一直在努力解决这个问题,但无法解决这个问题,非常欢迎任何建议。我的代码如下:

/* This program takes an input "n". If n is even it divides n by 2
* If n is odd, it multiples n by 3 and adds 1. Each time through the loop
* it iterates a counter.
* It continues until n is 1
*
* This program will compute the time taken to perform the above algorithm
*/
#include <stdio.h>
#include <time.h>

void delay(int);

int main(void) {
int n, i = 0;
time_t start, finish, duration;
clock_t startTicks, finishTicks, diffTicks;
printf("Clocks per sec = %d\n", CLOCKS_PER_SEC);
printf("Enter an integer: ");
scanf("%d", &n); // read value from keyboard
time(&start); // record start time in ticks
startTicks = clock();
printf("Start Clock = %s\n", ctime(&start));
printf("Start Processor Ticks = %d\n", startTicks);

while (n != 1) { // continues until n=1
i++; // increment counter
printf("iterations =%d\t", i); // display counter iterations
if (n % 2) { // if n is odd, n=3n+1
printf("Input n is odd!\t\t");
n = (n * 3) + 1;
printf("Output n = %d\n", n);
delay(1000000);
} else { //if n is even, n=n/2
printf("Input n is even!\t");
n = n / 2;
printf("Output n = %d\n", n);
delay(1000000);
}
}
printf("n=%d\n", n);
time(&finish); // record finish time in ticks
finishTicks = clock();
printf("Stop time = %s\n", ctime(&finish));
printf("Stop Processor Ticks = %d\n", finishTicks);
duration = difftime(finish, start); // compute difference in time
diffTicks = finishTicks - startTicks;
printf("Time elapsed = %2.4f seconds\n", duration);
printf("Processor ticks elapsed = %d\n", diffTicks);
return (n);
}

void delay(int us) {
usleep(us);
}

EDIT: 所以经过进一步研究,我发现 usleep() 不会影响程序运行时间,所以我在 asm 中写了一个延迟函数。现在我得到了处理器滴答的值,但我仍然得到零秒来运行算法。

void delay(int us) {
for (int i = 0; i < us; i++) {
__asm__("nop");
}
}

最佳答案

您可以使用以下公式计算耗时。

double timeDiff  = (double)(EndTime - StartTime) / CLOCKS_PER_SEC.

这是伪代码。

void CalculateTime(clock_t startTime, clock_t endTime)
{
clock_t diffTime = endTime - startTime;
printf("Processor time elapsed = %lf\n", (double)diffTime /CLOCKS_PER_SEC);
}

希望这对您有所帮助。

关于c - 在 C 问题中使用 time() 和 clock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674300/

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