Re: fenv support vs. SMP systems
Joel Sherrill <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAF9ehCUPzqpLDGv7CihHaDaSSMuMj0zDxbYpHAkrmkwMb17U_A@mail.gmail.com> |
On Mon, Jul 13, 2020 at 1:19 AM Sebastian Huber < [email protected]> wrote: > Hello, > > the new fenv support alters usually some floating-point status and > control register. This register is usually specific to the processor > executing the code. In an SMP system, the current approach can lead to > an inconsistent system if the register is not included in the thread > context (for example in RTEMS these registers are considered to be > system wide and are only initialized during the system startup). What do > I mean with inconsistent system? For example, you set the rounding mode > on processor A to from X (= default) to Y, then the you migrate to > processor B and suddenly use the default rounding mode X. Another > example is to do a division by zero on processor A and then migrate to > processor B and check the exception flags. > That's all true and unfortunately well beyond the definition of fenv(): https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fenv.h.html It uses the term "application" and does not use either "process" or "thread". The C99 standard has more text but doesn't seem to add anything in this area. This is from the introductory paragraph but doesn't add much: ""The floating-point environment refers collectively to any floating-point status flags and control modes supported by the implementation.178) A floating-point status flag is a system variable whose value is set (but never cleared) when a floating-point exception is raised, which occurs as a side effect of exceptional floating-point arithmetic to provide auxiliary information.179) A floating point control mode is a system variable whose value may be set by the user to affect the subsequent behavior of floating-point arithmetic." It does use the term "system variable" but that doesn't scope it to process or thread. I hope the control register is at least part of the RTEMS FP context switch area on all ports. At least then the POSIX term "application" is "thread". Searching for implementations, I saw no hint that any implementation on any architecture for an open source OS addressed anything beyond setting the floating point environment for a thread. If there is any practice that addresses even an entire process, I am unaware of it. --joel > > -- > Sebastian Huber, embedded brains GmbH > > Address : Dornierstr. 4, D-82178 Puchheim, Germany > Phone : +49 89 189 47 41-16 > Fax : +49 89 189 47 41-09 > E-Mail : [email protected] > PGP : Public key available on request. > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. >