float oder double für OpenGL?


  • Mod

    DerHomogene schrieb:

    Erst einmal, danke für die Antworten. Ist Float tatsächlich schneller? Ich habe mal gelesen, dass Double eher direkt von der CPU unterstützt wird und float eh in double dann aufgepumpt wird. Na, da habe ich wohl falsch gelesen.

    Du has nicht falsch gelesen, du hast bloss etwas von vor 10-15 Jahren gelesen. Auch wenn die Technik nicht mehr ganz so rasant fortschreitet wie im letzten Jahrtausend, so sind 10 Jahre doch immer noch ein gewaltiger Sprung in der Computertechnik und man sollte solch alte Quellen mit Vorsicht geniessen.

    Ist es so, dass der Compiler mit SSE etc besser mit floats optimieren kann?

    Wenn du "doppelt so viele gleichzeitig verarbeiten" als Optimierung ansiehst, dann ja.

    Komisches Apple-Bashing

    Hat deine Geschichte irgendeinen fuer diesen Thread relevanten Punkt oder willst du einfach nur oeffentlich demonstrieren, dass du keinen blassen Schimmer hast, wer die Standard-JVM fuer OS X schreibt?



  • Danke für die Aufklärung und nein ich habe keine Ahnung wer die JVM für Apple schreibt, ist doch wohl auch Oracle oder? Gibt es Gründe warum Java unter OSX so schlecht läuft wie es läuft?



  • Ich meine in C++ ist Apple ja vorbildlich, da wird mit Clang gearbeitet und das Qt-Paket mit Qt-Creator arbeitet auch standardmäßig mit Clang zusammen, was ich mir wiederum für Windows wünschen würde.



  • rapso schrieb:

    typedef float myReal;
    

    +1



  • 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