我已经分析了我的程序,它花费了 20% 的 CPU 时间,基本上评估以下表达式:
abs(x) > abs(y)
其中 x,y 是双精度浮点变量。
有没有办法将表达式重构为更快的变体?
以下行(在两个不同的地方调用)在每行占用接近 10% 的 CPU 时间:
(这是 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 次迭代的顺序调用该方法 - 我正在处理大图像。
编辑
我忘了说,但代码是在调试模式下运行的,我需要在这里对其进行一些优化,因为我希望仍然能够在合理的时间内使用 MSVC 调试器。