Hi Will,
Hi Kristian,
yesterday I missed the forest for the trees...
What is actually going on here is that recent Compilers/Optimisers
are clever enough to perform that transformation: replace a powf()
with constant base by a expf() with precomputed logarithm.
Just depending on the compiler and seemingly the way how SSE is used,
this leads to various degrees of slightly different numerical results.
The generated assembly really looks quite different on GCC-7 vs. GCC-8.
And the O0-case still uses the powf() variant and thus gets significant
different results.
Today, for this experiment, I have now replaced that code explicitly
to always use the expf() with a precomputed logarithm. For this test case,
I also needed to do the same on the global volume (and I see various further
instances of the same pattern, e.g. in LFO or with punch, which we just do not
touch with that simple sine test).
After those adjustments I now get precisely the same numbers with the
Release builds both on my PC and my laptop. With that first simple
test with just a single sine note of course (I expect more such hickups
down the road)
However, I still get different results with Debug builds vs Release
builds. And this is due to the AnalogFilter. Since we're using
--fast-math, the optimiser is allowed to reorder statements, which
seemingly leads to some build-up of differences in the feedback
loop of that filter. But, as said, the results on the Release
builds as such do match now on my Desktop and Laptop.
-- Hermann
_______________________________________________
Yoshimi-devel mailing list
Yoshimi-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/yoshimi-devel