【发布时间】:2013-06-21 23:52:03
【问题描述】:
我有一个简单的数学向量类,其中运算符重载。我想为我的操作员获得一些计时结果。我可以通过对以下代码进行计时来轻松地计时我的 +=、-=、*= 和 /=:
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 机器上使用 gcc-4.7.2 和 -O3。
这是我的计时码:
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+ 函数的准确计时而不是任何分配或随机向量生成?
【问题讨论】:
-
你的计时怎么样?
-
我正在使用
的时钟() -
编译器不能让时钟倒转,可以吗?很明显你的计时码是错误的。
-
我建议将您的计时码添加到问题中。这可能是错误的一点。
-
优化的问题(Adrian 回答)似乎很中肯:stackoverflow.com/q/6130100/1715716
标签: c++ performance benchmarking