gpt4 book ai didi

c++ - 时序运算符+、运算符-、运算符*和运算符/

转载 作者:行者123 更新时间:2023-11-28 07:33:15 29 4
gpt4 key购买 nike

我有一个运算符重载的简单数学 vector 类。我想为我的运算符(operator)获取一些计时结果。我可以通过计时以下代码轻松计时我的 +=、-=、*= 和/=:

Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;

然后我可以减去生成 iter 随机 vector 所需的时间。在我的测试中,Vector 是 3 维的,iter = 10,000,000。

我尝试用 +,-,*,/做类似的事情:

Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;

然后减去生成 iter 随机 vector 和执行 iter 赋值所花费的时间,但这给出了一个“负”时间,让我相信编译器正在以某种方式优化操作,或者发生了一些奇怪的事情。

我在 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 是创建 iter 随机 vector 所花费的时间,time_iter_ass 是 iter 赋值操作所花费的时间。

我的问题是如何仅对 operator+ 函数进行准确计时,而不是对任何赋值或随机 vector 生成进行计时?

最佳答案

当优化开启时,您真的无法为类似的事情获得准确的时间。原因在于编译器具有移动代码的能力。

如果使时间存储变量可变,则它们之间的相对位置不会因移动而受到优化。但是,它们周围的代码是,除非它们正在分配或调用采用易变变量的函数(这包括使 *this 易变的易变成员函数)。

如果您期望线性执行,优化可以对代码做很多奇怪的事情。

关于c++ - 时序运算符+、运算符-、运算符*和运算符/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245899/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com