Port-powerpc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: I want to rid ugly float load/stores used only for data movement
At 06:56 PM 2/22/2003, M L Riechers Mlr wrote:
On Sat, 22 Feb 2003 16:42:39 -0800 Jason R Thorpe
<thorpej%wasabisystems.com@localhost> wisdom imparted:
> On Sat, Feb 22, 2003 at 06:09:13PM -0500, David Edelsohn wrote:
>
> > MLR> Would anyone point me in the correct direction?
> >
> > Your intent cannot be implemented safely in GCC. If GCC knows it
> > has FPRs and FPRs hold 64-bit values (which they must), it will use them
> > for 64-bit moves. Cannot be avoided safely.
>
> That's kind of a bummer. I seem to recall the idea of "no-implicit-fp"
> coming up on the GCC mailing list recently, too. The reason people want
> is to eliminate unpredictable context switch times and/or speed up context
> switching.
>
> --
> -- Jason R. Thorpe <thorpej%wasabisystems.com@localhost>
Let me see if I'm getting the drift of this (I'm assuming for the
purpose of this exercise that the processor in question has a hardware
floating point unit, and WRT NetBSD powerpc and the NetBSD kernel
specifically):
1. If a process never touches a floating point instruction, then the
kernel never "issues" a floating point save area, and in effect
the process has no claim on float registers to save/restore on a
context switch (or giving the float reg set up when some other
process needs it).
Floating point register are never saved or restored on a context switch.
Each processor knows which was the last lwp that used FP (which "owns"
the FP unit). If another lwp request uses of FP unit, when the FP lazy
switch code will save the current FP state into owner's state area,
revoke the owner, set the owner to the new lwp, and then enable FP in
the saved-MSR of the lwp. Now FP instructions won't trap in the new
owner but will trap in the old lwp.
2. As soon as a process uses a float instruction for any reason (say
a gratuitous lfd/stfd instuction sequence solely for a data move),
then the process is saddled with a claim on float registers to
save/restore on a context switches -- although the same mechanism
used to trap the float use event in the first place might bar the
necessity to save/restore the registers, unless a float register
is used again in a context switch return.
Not true.
3. If most processes unmeaningly hit a gratuitous float event on most
context switches, then the kernel will be forced to spend a
significant amount of time saving/restoring float register sets.
Not true.
4. A process that did not use float at all might nevertheless be
affected by some (increased) unpredictability in its context
switch-in or switch-out, or in some other way. (Hmmm, I really
haven't thought that one through, but it occurs to me as a
possibility.
Not true
5. And, (not specifically following from your comments, but I'd like
to point out anyway), the trap to the kernel on first float
instruction use is itself a non-trivial event, which arguably
should happen only if the process is sincere in its intent to use
floating point arithmetic. Presumably, this alone would
disqualify the use of float resources for trivial memory to memory
data movements.
This I agree with.
Is this along the line of your notions, Jason? Further thoughts?
BTW, do you have a small C snipet that shows this happening?
--
Matt Thomas Internet: matt%3am-software.com@localhost
3am Software Foundry WWW URL: http://www.3am-software.com/bio/matt/
Cupertino, CA Disclaimer: I avow all knowledge of this message
Home |
Main Index |
Thread Index |
Old Index