用c ++和matlab测量FPS和执行时间

时间:2014-05-10 23:46:44

标签: c++ matlab time frame-rate measure

有谁知道如何衡量C ++和MATLAB的FPS或执行时间?我正在寻找一种正确的方法来衡量它。我想制作一个简单的程序(如MATLAB中的边缘检测或使用OpenCV和C ++),并希望比较最终的处理速度。

有些算法以毫秒为单位计算时间,其他算法以微秒计算。

我在C ++中找到了几种方法,比如使用time_t starttime_t end(按时钟处理器的时间)和日历时间。对于MATLAB,他们使用tictoc来计算时间。

另外,对于C ++,我也找到了这种方法:https://www.dropbox.com/s/nb33hc3wumcpxb2/Timer.PDF

我想在C ++和MATLAB中找到与计算时间相同的方法。

1 个答案:

答案 0 :(得分:0)

当你说"相同的方法"时,实际上只有一种方法可以访问系统时钟。有多个方法来做这件事,但他们最终都依赖于同样的事情。另外,您引用我们的论文依赖于使用Windows和Visual C,因此这不适用于Mac OS或Linux。因此,我将尝试为MATLAB和C ++提供与平台无关的方法。在任一平台中,这将尽可能地为您提供执行时间。

MATLAB

您可以使用tictoc命令。您从tic命令开始,然后进行处理,然后以t = toc结束。因此,t将包含tictoc之间经过的时间。

这是一个简单的例子:

tic;
for i = 1 : 100000
    M = rand(100,100); %// Generate a 100 x 100 uniformly random matrix
t = toc;
fprintf('The amount of time that has elapsed is %f seconds\n', t);

如果您想计算FPS,只需测量执行一个图像/帧的算法所需的时间,然后取倒数。此时间为秒/帧,因此要计算FPS,请采用倒数。

C ++

您可以使用ctime库,并使用time(NULL)电话。这将返回自大纪元(1970年1月1日)以来的秒数。与MATLAB示例一样,这是一个C ++示例:

#include <ctime>

void func() {
  using namespace std;

  // Begin 
  int start = time(NULL);

  // Put in processing code here

  // End - time in seconds
  int finish = time(NULL);

  // Measure time elapsed
  int time_elapsed = finish - start;
}

要计算FPS,请按照我对MATLAB示例所做的操作。

使用C ++的另一种方式(但有公平警告)

如果你想要微秒精度来测量C ++中的时间,你可以使用clock()函数。你可以这样做:

#include <ctime>

void func() {
  using namespace std;

  // Begin 
  clock_t start = clock();

  // Put in processing code here

  // End - time in microseconds
  clock_t finish = clock();

  // Measure time elapsed
  double time_elapsed = double(finish - start) / CLOCKS_PER_SEC;
}

但是,clock()函数将测量CPU时间而不是实际经过的时间,因此如果您决定这样做,则需要小心。查看此帖子了解更多详情:Easily measure elapsed time