linux-mips
[Top] [All Lists]

Re: FPU emulator unsafe for SMP?

To: Jun Sun <jsun@mvista.com>
Subject: Re: FPU emulator unsafe for SMP?
From: Daniel Jacobowitz <dan@debian.org>
Date: Tue, 19 Feb 2002 23:32:22 -0500
Cc: Greg Lindahl <lindahl@conservativecomputer.com>, linux-mips@oss.sgi.com
In-reply-to: <20020219202434.F25739@mvista.com>
References: <3C6C6ACF.CAD2FFC@mvista.com> <20020215031118.B21011@dea.linux-mips.net> <20020214232030.A3601@mvista.com> <20020215003037.A3670@mvista.com> <002b01c1b607$6afbd5c0$10eca8c0@grendel> <20020219140514.C25739@mvista.com> <00af01c1b9a2$c0d6d5f0$10eca8c0@grendel> <20020219171238.E25739@mvista.com> <20020219222835.A4195@wumpus.skymv.com> <20020219202434.F25739@mvista.com>
Sender: owner-linux-mips@oss.sgi.com
User-agent: Mutt/1.3.23i
On Tue, Feb 19, 2002 at 08:24:34PM -0800, Jun Sun wrote:
> On Tue, Feb 19, 2002 at 10:28:35PM -0500, Greg Lindahl wrote:
> > 
> > Alpha seems to always save the fpu state (the comments say that gcc
> > always generates code that uses it in every user process.)
> >
> 
> I think the comment might be an execuse. :-)  Never heard of gcc
> generating unnecessary floating point code.

I have :)  It may do memory moves in them, for instance.  Not sure if
that makes sense on Alpha.

> > I suspect that the optimization of not saving the fpu state for a
> > process that doesn't use the fpu is the most critical optimization.
> > And that you do already.
> 
> If you do use floating point, I think it is pretty common to have
> only process that uses fpu and runs for very long.  In that case,
> leaving FPU owned by the process also saves quite a bit.

Not true.  For instance, on a processor with hardware FPU, setjmp()
will save FPU registers.  That means most processes will actually end
up taking the FPU at least once.


The general approach in Linux is to disable lazy switching on SMP.  I'm
95% sure that PowerPC does that.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

<Prev in Thread] Current Thread [Next in Thread>