我有一个简单的数学向量类,其中运算符重载。我想为我的操作员获得一些计时结果。通过对以下代码进行计时,我可以轻松地计时我的 +=、-=、*= 和 /=:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;
然后我可以减去生成迭代随机向量所需的时间。在我的测试中,Vector 是 3 维的,iter = 10,000,000。
我试图用 +,-,*,/ 做类似的事情:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;
然后减去生成迭代随机向量和执行迭代分配所需的时间,但这给出了“负”时间,让我相信编译器正在以某种方式优化操作,或者发生了一些奇怪的事情。
我在 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 是创建迭代随机向量所需的时间,time_iter_ass 是迭代分配操作所需的时间。
那么我的问题是如何仅获得 operator+ 函数的准确时间,而不是任何分配或随机向量生成?