作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
我分析了我的程序,它花费了 20% 的 CPU 时间来计算以下表达式:
abs(x) > abs(y)
其中 x,y 是 double 浮点变量。
有没有办法将表达式重构为更快的变体?
以下行(在两个不同的地方调用)每行占用 CPU 时间接近 10%:
(这是函数 Image_3::TestGradientAtPoint 的一个片段)
if (abs(maxx[ch]) < abs(a)) maxx[ch] = a;
01187AC9 mov eax,dword ptr [ch]
01187ACC sub esp,8
01187ACF fld qword ptr [ebp+eax*8-68h]
01187AD3 fstp qword ptr [esp]
01187AD6 call abs (11305F9h)
01187ADB fld qword ptr [ebp-70h]
01187ADE fstp qword ptr [esp]
01187AE1 fstp qword ptr [ebp-0F8h]
01187AE7 call abs (11305F9h)
01187AEC add esp,8
01187AEF fcomp qword ptr [ebp-0F8h]
01187AF5 fnstsw ax
01187AF7 test ah,41h
01187AFA jne Image_3::TestGradientAtPoint+176h (1187B06h)
01187AFC mov eax,dword ptr [ch]
01187AFF fld qword ptr [ebp-70h]
01187B02 fstp qword ptr [ebp+eax*8-68h]
探查器指出对 abs() 的调用占用了 20% 的 CPU 时间。我按 10^8 次迭代的顺序调用该方法 - 我正在处理大图像。
我忘记说了,但是代码是在 Debug 模式下运行的,我需要在这里稍微优化一下,因为我希望仍然能够在合理的时间内使用 MSVC 调试器。
我是一名优秀的程序员,十分优秀!