Arnie <jefferyronaldarnett@msn.comwrote:
Quote:
We ran into a pretty significant performance penalty when casting floats.
To be honest, it doesn't really sound that significant to me. Read
on...
Quote:
We've identified a code workaround that we wanted to pass along but also was
wondering if others had experience with this and if there is a better
solution.
<snip>
Quote:
I'd like to share findings regarding C# (float) cast.
>
As we convert double to float, we found several slow down issues.
We realized C# (float) cast can be costly if not used appropriately.
<snip>
Quote:
In my understanding and articles on the Net, the slow down comes from
writing intermediate value back to memory as follows. The extra trips
are costly.
I see no reason to believe that there's an extra value written to the
*heap* (rather than the stack), and no reason why the JIT shouldn't use
a register for the intermediate value without an explicit local
variable.
<snip>
I have included a short but complete program below which uses an array
of a million elements and iterates each method a thousand times. Here
are the results on my laptop:
Log10Fast: 64489ms
Log10Slow: 70420ms
CopyFast: 3841ms
CopySlow: 4070ms
So your optimisation improves things by about 10% for the Log10 case
and about 5% for the Copy case.
Quote:
Otherwise, we will need to optimize our code by hand using temporary
variable technique as in the example.
Well, we have many instances of this kind of "inline" casts in our code.
And have you any reason to believe that's *actually* the bottleneck in
your code? Do you regularly convert a billion floats and care about
200ms of performance loss?
I don't understand why the results are as they are (it would be worth
looking at the JITted, optimised code to find out) - but even so, I
certainly wouldn't start micro-optimising all over the place. Find out
where the *actual* bottleneck in your code is, and consider reducing
readability/simplicity for the sake of performance just in the most
significant parts. Don't start doing it all over the place, which
sounds like the course of action you're considering at the moment.
--
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet Blog:
http://www.msmvps.com/jon.skeet
World class .NET training in the UK:
http://iterativetraining.co.uk