有谁知道如何衡量C ++和MATLAB的FPS或执行时间?我正在寻找一种正确的方法来衡量它。我想制作一个简单的程序(如MATLAB中的边缘检测或使用OpenCV和C ++),并希望比较最终的处理速度。
有些算法以毫秒为单位计算时间,其他算法以微秒计算。
我在C ++中找到了几种方法,比如使用time_t start
和time_t end
(按时钟处理器的时间)和日历时间。对于MATLAB,他们使用tic
和toc
来计算时间。
另外,对于C ++,我也找到了这种方法:https://www.dropbox.com/s/nb33hc3wumcpxb2/Timer.PDF
我想在C ++和MATLAB中找到与计算时间相同的方法。
答案 0 :(得分:0)
当你说"相同的方法"时,实际上只有一种方法可以访问系统时钟。有多个方法来做这件事,但他们最终都依赖于同样的事情。另外,您引用我们的论文依赖于使用Windows和Visual C,因此这不适用于Mac OS或Linux。因此,我将尝试为MATLAB和C ++提供与平台无关的方法。在任一平台中,这将尽可能地为您提供执行时间。
您可以使用tic
和toc
命令。您从tic
命令开始,然后进行处理,然后以t = toc
结束。因此,t
将包含tic
和toc
之间经过的时间。
这是一个简单的例子:
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,请采用倒数。
您可以使用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 ++中的时间,你可以使用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