摘要:我们的软件使用了一个实用程序功能,该功能被称为百万次,因此我们必须优化它。我注意到,通过在这个效用函数中简单地调整我们的代码,执行速度从执行的10秒降低到0.6秒。下面是在实用功能的好办法:即使它不应该显示较慢的代码
从编码1(在10秒内完成):
double d = (a * x3 + b * y3 + c)/l;
if (std::abs(d) > inMaxDToL) return false;
d = (a * x4 + b * y4 + c)/l;
if (std::abs(d) > inMaxDToL) return false;
return false;
代码2(在0.6秒finised):
double d = (a * x3 + b * y3 + c)/l;
if (std::abs(d) > inMaxDToL) return false;
return false;
我所做的就是返回在代码2中较早出现错误。显然,在第一个代码中,第1 + 2行相当于第3 + 4行的工作负载。所以我想知道为什么删除3 + 4行可以加速处理这么多?
也减少来自10S执行时间0.6秒另一个TWEAK是取代的门店函数调用:
if (!inBetween(x1, y1, x2, y2, x3, y3)) return false;
其内容:
if ((x2 - x1) * (x2 - x3) > epsilon) return false;
if ((y2 - y1) * (y2 - y3) > epsilon) return false;
该代码也从加速10s到0.6ms。
我正在使用Visual Studio 2013及其编译器。
我在这里错过了什么吗?
编辑:以使其更清晰:
- 这几行只是一个效用函数的一部分
- 我刻意的为了调试目的
好像两者可以被优化到只有'返回false;'因为没有副作用,所有的情况最终都是'false'。 – aschepler
不能说关于Visual Studio,但在Linux上,您可以使用某种类型的操作生成SIMD指令。 – user902384
当你说秒时,你确定不是指毫秒吗?我看不出这些例子中的任何一个可能会花费超过100毫秒。 – klutt