float vs. double



  • Ich berechne pro Frame ca. 9000 double Werte - kann ich mit einer Performancesteigerung rechnen, wenn ich von double auf float wechsle oder ist das gleich schnell?



  • *lol* von einem Skript der TU Berlin:

    int und long tun in etwa das gleiche; float und double auch. Der
    einzige Unterschied ist jeweils, dass long und double mehr Speicherplatz
    verbrauchen, daf¨ur aber auch mehr g¨ ultige Ziffern bereitstellen. Ich selber
    habe in der Praxis oft A¨ rger mit int und float gehabt, daher verwenden
    wir hier int nur, wenn die zu erwartenden Zahlen h¨ochstens zweistellig sind,
    und float nie.


  • Mod

    das hängt vom compiler und der cpu ab. bezogen auf z.b. VS03.NET und x86 bringt die sache nur was, wenn du dazu die cpu auf floatgenauigkeit stellst, den im gegensatz zu int-variablen wird die cpu nicht automatisch schneller rechnen je kürzer der datentypen, denn das hängt von der genauigkeit mit der intern gerechnet wird ab und per default ist das double. bei neueren cpus wirkt sich das lediglich auf ein paar operationen wie z.b. sqrt und fdiv aus.



  • Das könnte allerdings dann einen Unterschied machen, wenn du es mit so vielen floats oder doubles zu tun hast, dass die Wahl des Datentyps entscheidet, ob deine Daten noch in den Cache passen oder nicht. Da kann man dann aber natürlich auch keine allgemeingültige Aussage treffen, aber es kann sein, dass der Rückgriff aufs RAM zu einem Flaschenhals wird. Da müsstest Du Dir bei Deinem Code selbst mal Gedanken machen, ob das der Fall sein könnte und ob sich das negativ auf die Performance auswirken könnte. 9000 doubles hört sich diesbezüglich allerdings noch nicht kritisch an.

    EDIT: Prinzipiell gilt für solche Performance-Überlegungen: Wenn Du kannst, dann mach entsprechende Messungen, die genau deinen konkreten Fall betreffen. Das ist in jedem Fall besser als irgendwelche theoretischen Überlegungen.



  • hab von double auf float umgestellt und Messungen gemacht - es hat sich nichts Wesentliches verändert - jetzt werde ich mal mit SSE versuchen meine Vektor- und Matrizenrechnungen zu parallelisieren


  • Mod

    hast du auch die fpu auf float umgestellt?



  • hast du auch die fpu auf float umgestellt?

    nö - ich hab nur gehofft, dass 32 Bit Register kopieren weniger beansprucht, als 64 Bit Register - die FPU Genauigkeit umstellen halte ich für ein nicht so tolle Strategie – aber zu Testzwecken wäre es mal interessant – geht das einfach so mit ein paar Zeilen Assemblercode? Hast du vielleicht ein Codeschnippsel?



  • das geht in den kompiler settings ;), zumindest im Visual studio!


  • Mod

    Flow_cplus schrieb:

    das geht in den kompiler settings ;), zumindest im Visual studio!

    nein, dadurch wird das fpu statusword eigentlich nicht verändert afaik. das muss man schon selber machen.


Anmelden zum Antworten