I'd like to second David Christini's problem.

Like Pavel, I have various RT applications that use doubles. (I never use
floats to avoid unnecessary bugs.) I use several math functions, 
specifically: exp(), sin(), cos() and sqrt();

Like David however, none of my systems are particularly stable.  As
Pavel suggested I think the instability is coming from memory related
issues, but not the user/kernel type. 

All of my modules are stable if I use a 'small' number of doubles,
and a 'small' number of operations on those doubles (per period in a
periodic rt thread.) I observe two possibly related phenomena--

1) as I increase the number of double operations in a cycle, the cpu will
        eventually lock up. This doesn't concern me, perhaps I'm asking
        too much of it --
                It works with something like 100 double fxns
        {ie. exp(),sin(),etc.} & 1000 double operations {ie +-*/}
        every 100 microseconds, on a 450MHz PIII.

2) as I increase the number of doubles I use, the system will eventually
        spontaneously reboot itself.  This phenomenon is unpredictable.
                ~100  double variables ->  works every time.
                        'every time' =  hundreds of trials for up to
                                        millions of periods per trial.
                ~1000 double variables -> reboots every time.
                ~100->1000 double variables -> works/reboots randomly.

        Obviously I observe this when using arrays of doubles, and the
        numbers I listed above are highly dependent on the number of
        operations I perform in a given period.  But even if I perform
        almost no operations in a loop (say, only one typecast), an array
        of 2000 doubles in my module will reboot the system upon
        insertion. Understand that for a given operation number, the
        number of stable double variables is a constant.

        Two examples:
        1) 1 array of 100 doubles & 10 other doubles
                ~400 operations & 99 functions
                -works fine every time
           1 array of 105 doubles & 10 other doubles
                ~400 operations & 99 functions (extra doubles aren't used)
                - reboots every time

        2) 4 arrays of 10 doubles & 30 other doubles
                ~150 operations & 78 functions
                - works fine every time
           4 arrays of 11 doubles & 30 other doubles
                ~150 operations & 78 functions (extra doubles aren't used)
                - reboots every time

If I use 'int' in place of 'double', (of course I can't use the math
fxns), but I find arrays of 100,000 members reliable, without any crash
or reboot. (I assume I could go to millions of members before running into
a problem.) 

After extreme frustration, I gave up pressing this issue about a month
ago, and just restricted myself to small double arrays. But I suspect that
my issues are related to David Christini's, so I thought I'd bring it up.

If anyone is interested in examining my problem,
let me know and I'll send out the code...

Chuck

On Tue, 11 Apr 2000, Pavel Andris wrote:
> David,
> I use kernel 2.2.13, RTL 2.0. My RT application uses double variables
> and operations heavily including sin(), cos(), sqrt(), atan2(). I also
> use shared memory (Tomek Motylewski's mbuff). I don't remember any
> crash caused by floating point operations. I'd expect your trouble is
> caused by something else (float/double confusion?, kernel/user memory
> context trouble?). 
> Regards, Pavel Andris

-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to