Floating Point Determinism - Brauche Eure Unterstützung beim testen



  • Core i7 2600
    und
    Core2Duo T9600
    auch OK.

    PS:
    zuhause habe ich Windows und wenig Hardware. Morgen in der Arbeit mal schauen ob ich den Code kompiliert bekomme.



  • Jetzt doch unter windows?

    Anderes OS und/oder anderer compiler wäre auch mal interessant, aber ist nicht unbedingt eine Anforderung von mir, dass es damit läuft.
    Natürlich ist die Portierung einiges an Arbeit, weil man dann die bibliotheken noch kompilieren muss.

    Noch weitere AMD-Kandidaten vielleicht?



  • Mit Problemen rechne ich hier eher durch...
    * unterschiedliche Compiler
    * unterschiedliche Compiler-Flags
    * kleine Änderungen im Code, die dazu führen dass der Compiler anders optimiert

    Siehe z.B. http://msdn.microsoft.com/en-us/library/e7s85ffb.aspx

    GCC wird da aber u.U. andere Vorstellungen davon haben was gut und richtig ist.

    Was eine (x86 bzw. AMD64 kompatible) CPU zu tun hat, ist dagegen im IEEE 754 sehr genau definiert. D.h. wenn da was anders läuft, ist es ein Bug.

    Trotzdem würde ich persönlich ein "delta only" Modell mit float/double nicht machen wollen, wäre mir insgesamt zu riskant.



  • ~~Gerade hat ein Freund von mir getestet:
    AMD Atholon(tm) X2" Dual Core Processor 5000+ 2.60 GHz
    Ergebnis: 1385279624

    Also die erste CPU die "anders" ist...

    Ich werd dann mal die Funktionen verwenden die das ganze regulieren sollen und nochmal testen.~~

    Mir reicht es auch wenn das ganze nur mit einem compiler und OS benutzt wird, aber selbst das ist nicht ganz einfach wies aussieht...

    Edit: Entwarnung, er hatte ne falsche exe. Er kriegt auch die selbe zahl raus.



  • Ich verstehe das Problem nur teilweise und habe folgende Fragen:

    - In welchem Wertebereich sind die floating points?
    - Wieviele Nachkommastellen sind wichtig?
    - Kann man das zur Eindeutigkeit evtl. in integer umwandeln?



  • berniebutt schrieb:

    - In welchem Wertebereich sind die floating points?

    Theoretisch ist der volle wertebereich möglich. Wieviel im moment von der physics engine genutzt wird - gute frage.

    berniebutt schrieb:

    - Wieviele Nachkommastellen sind wichtig?

    Alle! Wenn nur 1 bit kippt kann das auf dauer zu starken veränderungen führen (Chaos Theory :D) und außerdem ist die checksumme dann direkt falsch

    berniebutt schrieb:

    - Kann man das zur Eindeutigkeit evtl. in integer umwandeln?

    Dann müsste man die ganze physics engine umschreiben und ich denke nicht das das sinnvoll ist. Außerdem will ich auch selbst floating point zahlen benutzen.

    Edit: Das auf der letzten Seite war ne falschmeldung, ich hatte ihm ne falsche exe geschickt, deswegen war die nummer falsch gewesen.
    Bisher hat also noch jeder das selbe rausbekommen.

    hustbaer schrieb:

    Was eine (x86 bzw. AMD64 kompatible) CPU zu tun hat, ist dagegen im IEEE 754 sehr genau definiert. D.h. wenn da was anders läuft, ist es ein Bug.

    Der standard schreibt es vielleicht sehr genau vor, das heißt aber nicht das sich alle genau dran halten.

    Z.B. benutzt intel 80 bit register zum rechnen mit floating points, amd nur 64. Das allein kann schon für Probleme sorgen. Glücklicherweise scheints aber bisher überall gut zu gehen.

    Wenn noch weitere Tests gemacht werden wäre das natürlich sehr gut 🙂


  • Mod

    Q schrieb:

    Alle! Wenn nur 1 bit kippt kann das auf dauer zu starken veränderungen führen (Chaos Theory :D) und außerdem ist die checksumme dann direkt falsch

    Ich habe jetzt nicht den Thread gelesen, aber wenn du Chaos hast, kannst du mit Fließkommazahlen sowieso nichts exaktes bekommen, weil diese auch endlich sind. Eigentlich kann dir ein Computer überhaupt nicht helfen.



  • CRC: 4207241492. Getestet mit einem Core i7 2720QM auf einem virtuellen Windows 7 x64. Da kommt nichts anderes raus, egal was man probiert.

    Kann man sowas eventuell auch auf einem ARM zum laufen bringen? Wenn jemand das Zeug für Android kompilieren mag, habe ich hier noch einen Snapdragon und einen Tegra 2.



  • SeppJ schrieb:

    Q schrieb:

    Alle! Wenn nur 1 bit kippt kann das auf dauer zu starken veränderungen führen (Chaos Theory :D) und außerdem ist die checksumme dann direkt falsch

    Ich habe jetzt nicht den Thread gelesen, aber wenn du Chaos hast, kannst du mit Fließkommazahlen sowieso nichts exaktes bekommen, weil diese auch endlich sind. Eigentlich kann dir ein Computer überhaupt nicht helfen.

    Es geht nicht um die Genauigkeit der Ergebnisse, sondern um die Reproduzierbarkeit. Bei den selben Rechnungen muss auf mehreren verschiedenen Computern immer das selbe rauskommen. Darum geht es.

    /rant/ schrieb:

    CRC: 4207241492. Getestet mit einem Core i7 2720QM auf einem virtuellen Windows 7 x64. Da kommt nichts anderes raus, egal was man probiert.

    Kann man sowas eventuell auch auf einem ARM zum laufen bringen? Wenn jemand das Zeug für Android kompilieren mag, habe ich hier noch einen Snapdragon und einen Tegra 2.

    Gut zu hören! Auch danke für die Teilnahme!

    Bisher wurde erst 2 mal AMD getestet, wäre gut, wenn sich da noch was tut 🙂



  • Habs gerade auf nem Intel Core i5 650 (W7, 64 Bit) und auf nem AMD Athlon 64 3500+ (XP, 32 Bit) getestet. Hatte auch beide Male 4207241492.


Anmelden zum Antworten