gcc - FPU ist langsam

16/07/2010 - 13:20 von Franz Bachler | Report spam
Hallo Leute,

mir ist aufgefallen, dass unter MinGW, welches ja auf gcc basiert, die
Fließkomma-Berechnungen ziemlich langsam (etwa 2 - 3 x langsamer als bei
anderen [Windows-]Compilern) durchgeführt werden.

Dann bin ich auf diese Seite gestoßen

http://www.network-theory.co.uk/doc...ro_70.html

und habe mal das ganze zusammenfasst auf

// use double-precision rounding for MinGW
unsigned short cw=0x027F;
asm("fldcw %0" : : "m" (*&cw));
// this works only if cw is a global variable
// asm("fldcw _cw");

Gleich zu Beginn des Programmes ausgeführt und die Geschwindigkeit passt
wieder.

Frage: Wie verhàlt sich das unter Linux?

Wird da die FPU gleich in den richtigen Modus geschaltet oder sollte man
hier auch nachhelfen?

Grüsse
Franz
Franz Bachler, A-3250 Wieselburg
E-Mail: fraba (at) gmx.at
Homepage: http://members.aon.at/fraba
oder http://home.pages.at/fraba
 

Lesen sie die antworten

#1 Michael Baeuerle
16/07/2010 - 13:38 | Warnen spam
Franz Bachler wrote:

mir ist aufgefallen, dass unter MinGW, welches ja auf gcc basiert, die
Fließkomma-Berechnungen ziemlich langsam (etwa 2 - 3 x langsamer als bei
anderen [Windows-]Compilern) durchgeführt werden.

Dann bin ich auf diese Seite gestoßen

http://www.network-theory.co.uk/doc...ro_70.html

und habe mal das ganze zusammenfasst auf

// use double-precision rounding for MinGW
unsigned short cw=0x027F;
asm("fldcw %0" : : "m" (*&cw));
// this works only if cw is a global variable
// asm("fldcw _cw");



Das beeinflusst demnach aber die Genauigkeit mit der die FPU rechnet,
dass sich dabei die Geschwindigkeit aendert ist eigentlich nur ein
Nebeneffekt (d.h. man bekommt ihn nicht umsonst).

Gleich zu Beginn des Programmes ausgeführt und die Geschwindigkeit passt
wieder.

Frage: Wie verhàlt sich das unter Linux?

Wird da die FPU gleich in den richtigen Modus geschaltet oder sollte man
hier auch nachhelfen?



Welcher Modus "richtig" ist haengt wohl vom Anwendungsfall ab, je
nachdem ob man "schnell" oder "genau" haben will.

Was ein guter Default ist, da gehen die Meinungen offenbar auseinander.
Ich zitiere deine obige Quelle:
|
| On BSD systems such as FreeBSD, NetBSD and OpenBSD, the hardware
| double-precision rounding mode is the default, giving the greatest
| compatibility with native double precision platforms.
|
| On x86 GNU/Linux systems the default mode is extended precision (with
| the aim of providing increased accuracy).


Micha

Ähnliche fragen