我有这样的一段代码,其中鲨鱼告诉我这是一个性能瓶颈:是否有更快的方法来比较两个变量?
CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;
所有这些值CGFloat的。有没有更快的方法来找出哪一个更小,并将其分配给最短的距离?也许甚至通过引用而不是复制一个值?我该怎么做,以后如何访问?
顺便说一句,这是代码在非常严格的循环中执行。每秒约60次。
我有这样的一段代码,其中鲨鱼告诉我这是一个性能瓶颈:是否有更快的方法来比较两个变量?
CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;
所有这些值CGFloat的。有没有更快的方法来找出哪一个更小,并将其分配给最短的距离?也许甚至通过引用而不是复制一个值?我该怎么做,以后如何访问?
顺便说一句,这是代码在非常严格的循环中执行。每秒约60次。
你可能碰到的是拇指/手臂FPU问题。 iPhone应用默认编译为thumb,这是常规ARM表达式的16位子集。当在thumb模式下,浮点运算使用整型例程完成。您可以关闭此功能并提高浮点性能。参见“Break That Thumb For Best iPhone Performance”。
alt text http://gamesfromwithin.com/wp-content/uploads/2009/01/thumb.png
每秒60次是而不是一个严格的循环。就现代计算机而言,这非常轻松。
似乎没有一种明显的方法来改善表达;你确定Shark是否表明确切的陈述是一个问题,还是它指出了经常被调用的代码中更常见的问题?
从内存来看,现代CPU有6到9个管道,更可能是自上次检查以来。一旦优化器达到它,通常认为CPU很重的实际上很少。
要么或distanceB
(或两者)平方根的结果?鲨鱼踪迹往往会将操作的结果归咎于实际操作缓慢的操作。你是否真的需要取其两者的平方根,还是可以在平方距离上进行选择?
如果失败,(1)在瞄准ARMv6时关闭拇指,(2)使用__builtin_fminf(distanceA, distanceB)
。然后继续寻找应用程序中的真正瓶颈;每秒60次无需担心。
为什么你自己写这个而不是使用fmin()或fminf()? – NSResponder 2009-11-23 04:44:57