float oder double für OpenGL?



  • Also raten doch mehr zu typedef als zu Templates. Mit Templates habe ich noch nie gearbeitet, musste man da nicht Deklaration und Definition der Klasse nur im Header machen? Und ist das nicht viel schwieriger zu handeln als ein einfaches typedef?


  • Mod

    soviele fragen 🙂

    erstmal die off topic
    java ist auf osx so scheisse, weil apple die updates kontrolliert und sich viel zeit laesst. Ich hatte auch mal etwas in java geschrieben weil es auf OSX laufen sollte und ich "runs everywhere" glaubte und dann startete es auf OSX garnicht. musste dann eine version aelter zum kompilieren nutzen und da fehlte eine sache die ich nutze. cumbersome.
    Aber das ist nur ein ganz kleiner teil von apple. Du kannst ja auch mit c++ darauf arbeiten. (wie du schon sagtest).

    zum topic.
    floats und doubles werden eigentlich gleich schnell vom prozessor verarbeitet, compiler optimieren eher schlecht als recht auf SSE. auf anderen platformen ist double um einiges langsammer (arm, cell,...), aber das betrifft dich erstmal nicht.

    typedef und templates schliessen sich nicht aus. typedef kannst du nutzen um grundsaetzlich einen typen festzulegen. innerhalb eine vector klasse hingegen moechtest du vielleicht nicht explizit auf einen typedef zugreifen, da kannst du dann den typen als template parameter nutzen und damit das template typedefen

    typedef float myReal;
    typedef Vector<myReal> myVector;
    

    ints benutzt man weil es sich deterministischer verhaelt. bei float bekommst du unterschiedliche resultate je nachdem welche operationen du waehlst und in welcher reihenfolge du sie verarbeitest. aber damit solltest du dich nicht zu frueh befassen. spaeter schau dir mal: http://forum.devmaster.net/t/advanced-rasterization/6145 an.



  • Danke für die ausführliche Erklärung und den Link.

    Unter OSX hatte ich aber beim Testen die aktuelle Oracle Java8 JDK installiert. Es war exakt dasselbe JDK, von der Versionsnummer, wie unter Windows. Ist aber auch egal. Mit dem Qt-Creator, auf beiden Plattformen, komme ich bestens klar und die Ergebnisse sind wesentlich identischer als mit Java. Wenn dann noch Clang unter Windows gleich mit dem Qt-Creator mitgeliefert werden würde, wie unter OSX, dann wäre es perfekt.



  • Auf aktuellen CPUs ist double marginal schneller als float.

    Auf GPUs sind float berechnungen meist um einige faktoren schneller. Da Spiele so gut wie nie double verwenden.
    Faktoren gehen grob von 16/1 bis 4/1 für float/double performance.
    Wobei günstige GPUs schlechter und top Modele bessere faktoren haben.

    Double ist meist nur für Cuda oder OpenCL compute shader interessant. Und Modele mit double leistung werden entsprechend nicht für den Spielermarkt sondern für forschung/industrie bepreist.


  • Mod

    Osbios schrieb:

    Auf aktuellen CPUs ist double marginal schneller als float.

    Das solltest du noch einmal checken.



  • Osbios schrieb:

    Auf aktuellen CPUs ist double marginal schneller als float.

    nope


  • Mod

    Osbios schrieb:

    Auf aktuellen CPUs ist double marginal schneller als float.

    👎

    du bist raus </DieterModus>

    😉



  • double schneller als float kann eigentlich nur sein wenn man mit double nen Haufen Denormals vermeidet die man mit float hätte.

    Anders kann zumindest ich es mir nicht vorstellen.

    ps: Falls mein "Wissen" veraltet ist, und Denormals keine Penalty mehr bringen, lasst es mich bitte wissen 🙂



  • hustbaer schrieb:

    ps: Falls mein "Wissen" veraltet ist, und Denormals keine Penalty mehr bringen, lasst es mich bitte wissen 🙂

    Seit Sandy Bridge können Denormals afaik in den meisten Fällen ohne Performanceeinbruch bearbeitet werden. Auf älteren Architekturen kann man Flags setzen, um Denormals zu ignorieren (auf Null zu setzen), ansonsten können sie dort massiv zu Buche schlagen.



  • dot schrieb:

    Seit Sandy Bridge können Denormals afaik in den meisten Fällen ohne Performanceeinbruch bearbeitet werden.

    🕶
    Muss ich mal googeln wenn ich Zeit habe...

    dot schrieb:

    Auf älteren Architekturen kann man Flags setzen, um Denormals zu ignorieren (auf Null zu setzen), ansonsten können sie dort massiv zu Buche schlagen.

    Ja, das wusste ich beides. Die CPU wirft da (ohne flush to zero) bloss nen Trap/Interrupt, der Rest geht dann über Software-Emulation wenn ich mich richtig erinnere.



  • hustbaer schrieb:

    dot schrieb:

    Auf älteren Architekturen kann man Flags setzen, um Denormals zu ignorieren (auf Null zu setzen), ansonsten können sie dort massiv zu Buche schlagen.

    Ja, das wusste ich beides. Die CPU wirft da (ohne flush to zero) bloss nen Trap/Interrupt, der Rest geht dann über Software-Emulation wenn ich mich richtig erinnere.

    Afaik werden die Operation lediglich nicht direkt nativ von den Rechenwerken unterstützt und dann durch einen Haufen µops umgesetzt, passiert aber dennoch alles direkt in der CPU. Mit Traps und Softwareemulation wäre der Penalty vermutlich noch mindestens eine Größenordnung schlimmer...


  • Mod

    dot schrieb:

    Seit Sandy Bridge können Denormals afaik in den meisten Fällen ohne Performanceeinbruch bearbeitet werden.

    ich glaube es sind nur ein paar faelle die ohne einbruch laufen z.B. float add auf SSE. float mul auf SSE sollte schonwieder langsam sein. auf x87/fpu sollte das meiste weiterhin langsam sein.


Anmelden zum Antworten