[PD] Raspberry Pi does denormals

Miller Puckette msp at ucsd.edu
Sun Jan 20 20:24:56 CET 2013


Hi all...

I think it's possible to get flush-to-zero behavior on the Pi (ARMv6) by
calling gcc with --fast-math.  At any rate what I found was that, if I
compiled without --fast-math, when numbers got small (e.g., when a
reverberator decays down past 10^-38 or so), the patch would suddenly jump
in CPI usage as if it were trappnig to the kernel (as it does for i386).
But when I added --fast-math the problem went away.

On i386 and x86_64, I believe that one can't get flush-to-zero (at least in
the "normal" non-SSE floating point instructions) so there's no choice but
to use a macro such as PD_BADFLOAT to protect against that.  So in m_pd.h the
PD_BADFLOAT macro is only "turned on" for Intel.

However I've been mistaken many times about all this in the past and won't
be surprised if I'm mistaken again.

cheers
Miller

On Sun, Jan 20, 2013 at 11:12:28AM -0500, Hans-Christoph Steiner wrote:
> 
> I think this is what you want, from 'man gcc'.  Its interesting to note that
> the NEON mode, which provides SIMD, also does not do denormals:
> 
> -mfpu=name
> -mfpe=number
> -mfp=number
>     This specifies what floating point hardware (or hardware emulation) is
>     available on the target.  Permissible names are: fpa, fpe2, fpe3, maverick,
>     vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16,
>     neon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16 and neon-vfpv4.  -mfp and
>     -mfpe are synonyms for -mfpu=fpenumber, for compatibility with older
>     versions of GCC.
> 
>     If -msoft-float is specified this specifies the format of floating point
>     values.
> 
>     If the selected floating-point hardware includes the NEON extension (e.g.
>     -mfpu=neon), note that floating-point operations will not be used by GCC's
>     auto-vectorization pass unless -funsafe-math-optimizations is also
>     specified.  This is because NEON hardware does not fully implement the IEEE
>     754 standard for floating-point arithmetic (in particular denormal values
>     are treated as zero), so the use of NEON instructions may lead to a loss of
>     precision.
> 
> 
> .hc
> 
> On 01/20/2013 06:54 AM, katja wrote:
> > I was assuming, or maybe just hoping? that Raspberry Pi (and ARM
> > devices in general) would not suffer from Denormal's disease like
> > Intel processors do. But guess what: Pi's float coprocessor is IEEE
> > 754 compliant and does all denormals by default (can check with
> > attached denorm-test.pd). Bummer! As if one would use an ARM device to
> > calculate the size of a Majorana particle, rather than doing simple
> > dsp. Do we really need to enable PD-BIGORSMALL() checks for this poor
> > little processor? There seems to be something called 'RunFast mode'
> > for Pi's float processor vfpv2, but I see no way how to enable this
> > via gcc. Option -ffast-math is allowed but doesn't do the trick. Can't
> > find an option to set vfpv2 specifically, in gcc docs.
> > 
> > Katja
> > 
> > 
> > 
> > _______________________________________________
> > Pd-list at iem.at mailing list
> > UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
> > 
> 
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list



More information about the Pd-list mailing list