【问题标题】:Time taken to execute a function shows 1.#INF00执行函数所用时间显示 1.#INF00
【发布时间】:2013-12-30 09:17:03
【问题描述】:

我必须根据每秒解码的帧数来衡量解码器的性能。即计算 FPS。

下面是我的代码 sn-p 的样子:

//global variables
clock_t start,stop;
double totTime, FPS;


main()
{
   while(End_of_file)
   {
      start=clock();

      //Decode function is called here

      stop=clock();

      totTime=stop-start;

      FPS=1/(totTime/CLOCKS_PER_SEC);

      printf("\n %lf fps\n",FPS);
   }
}

printf 语句有时会打印出正确的值,但有时它会给出一个值 1.#INF00,根据我搜索的内容,这是一个浮点异常,也称为 positive infinity,当我们尝试将一个正数除以零。所以我的问题是为什么将 totTime=start-stop; 视为 0 ?其次,如果不是clock(),那么我如何获得decode函数所花费的时间。

任何与此相关的建议都会非常有帮助。提前致谢。

【问题讨论】:

  • 您的“正常”时间(不是 FPS)是否非常接近于零?计算机速度很快,clock 的分辨率相当低(在我的系统上为 1 毫秒)。此外,肯定会有很多抖动(磁盘访问、鼠标移动等)。尝试运行解码程序 1000 次甚至更多次。
  • @Jongware:感谢您的评论。那么如果它接近于零,那么是否有任何其他机制来检查执行函数所花费的时间?
  • 这将是“尝试运行解码例程 1000 次甚至更多次”部分。
  • 但我需要计算视频中每一帧的解码时间。
  • 好的,所以您不是在寻找“分析”,而是在寻找“实时”解决方案。这有帮助吗? stackoverflow.com/questions/6749621/…

标签: c clock performance-testing


【解决方案1】:

正确的宏是CLOCKS_PER_SEC,而不是CLOCK_PER_SEC

此外,您可以使用clock_gettime(),而不是使用clock(),因为您只是想要时间。

【讨论】:

  • 抱歉,这是一个打字错误。否则我会遇到编译错误。
  • 抱歉在windows平台上工作。 clock_gettime() 在 linux 中。
  • 您的代码是否花费了很多时间?我的意思是,如果你在代码之前和之后添加 printfs,你能看到它们很慢还是很快?
  • 我认为您应该尝试计算整个 while 循环所花费的时间,而不是计算每次迭代的时间。即使进行一些复杂的数学运算,您也无法获得更精确的时间。
猜你喜欢
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多