我有一个运算符重载的简单数学矢量类。我想为我的运营商获得一些计时结果。我可以很容易地时候我+ =, - =,* =,和通过定时下面的代码/ =:定时运算符+,运算符,运算符*和运算符/
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;
然后我可以减去它采用的用以产生ITER随机向量的时间。在我的测试中,Vector是三维的,iter = 10,000,000。
我试图做类似的事情有+, - ,*,/:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;
然后减去才能产生ITER随机向量和执行ITER任务的时间,但是这给了一个“负”这导致我相信编译器正在以某种方式优化操作,或者有些奇怪的事情正在发生。
我在Fedora Linux机器上使用-O3使用gcc-4.7.2。
这是我的定时代码:
clock_t start, k = clock();
do start = clock();
while(start == k);
F()();
clock_t end = clock();
double time = double(end-start)/double(CLOCKS_PER_SEC);
cout << time - time_iter_rand_v - time_iter_ass;
这里F是函数对象执行上面的代码。 time_iter_rand_v是创建iter随机向量所需的时间,time_iter_ass是iter分配操作所用的时间。
我的问题是如何获得只是运算符+函数的准确时间而不是任何赋值或随机向量生成?
你好吗? – Gian
我使用的时钟()从 –
pippin1289
编译器不能使时钟倒退,可以吗?显然你的*时间码*是错误的。 – EJP