【发布时间】:2012-01-17 03:10:18
【问题描述】:
基本上是这样的(不是真正的代码):
for(int i = 0; i < 1000000000; ++i)
{
Vert v0 = mesh.polygons[i].edges[0].vert0;
Vert v1 = mesh.polygons[i].edges[0].vert1;
Vector3 center = (v0.pos + v1.pos) / 2;
}
v0.pos 的类型为 Vector3<float, float, float>,但也可以是 Vector3<double, double, double>。
这样做安全吗?:
Vector3 center = (v0.pos + v1.pos) * 0.5;
这似乎是过早的优化,但它必须尽可能快,才能在数十亿点(点云)上调用。
【问题讨论】:
-
衡量这两种选择的性能时会发生什么?如果不测量目标平台上的结果,就无法谈论这一级别的优化。
-
同意格雷格。另外,请记住,您应该在速度之前关注正确性。很多时候,编译器会为你优化大部分内容(尤其是当你使用文字时)。
-
@Chad:我希望不是浮点数。
-
内存访问将成为那里的瓶颈。在现代硬件上,mul 和 div FP 操作在性能上非常相似。优化可能在 10 年前更有用。
-
我刚刚测试过了。是的,VC++ 似乎用
*.5替换了/2。
标签: c# c++ .net performance optimization