[Mono-dev] Weird performance problems possibly due to floats and precision issues?
Ivo at UFO-Net.nl
Wed Sep 21 06:04:21 EDT 2011
Op 21-9-2011 8:31, noisecrime schreef:
> Essentially the function has three nested loops, all of which iterate the
> same number of times every call. The inner loop is a single line of simple
> arithmetic instructions akin to x[i] = y[i] + (a * ( y[s] + y[t] + y[u] +
> y[v]) )/c. It normally completes in a few milliseconds, but when passing in
> the troublesome viscosity value it slows down quickly to taking half a
I have seen similar behaviour on MS .Net in an audio processing
application. The slowdown there was caused by arithmetic operations on a
non-value (NaN/Infinity/negative infinity). Such an operation will again
result in a non-value, which might explain why the slowdown propagates.
You could easily check for these values in your code.
I don't know exactly why these things cause such a slowdown. Maybe there
is some (hardware) exception processing getting in the way, but that's
just guessing. In my case it helped a lot to check the result for these
3 non-values, and set it to some valid value instead. It's not a proper
solution, but in my case helped to keep the application useable even for
incorrect input values.
More information about the Mono-devel-list