John Carmack's Fast Inverse Square Root



  • Bei stackoverflow (http://stackoverflow.com/questions/1349542/john-carmacks-unusual-fast-inverse-square-root-quake-iii) habe ich folgendes Statement gefunden:

    Of course these days, it turns out to be much slower than just using an FPU's sqrt (especially on 360/PS3), because swapping between float and int registers induces a load-hit-store, while the floating point unit can do reciprocal square root in hardware.

    It just shows how optimizations have to evolve as the nature of underlying hardware changes.

    Was haltet ihr davon? Ist das tatsächlich so?



  • Probier' es doch einfach aus.
    Und die "fast inverse square root" ist auch nicht vom Carmack, hat er mehrfach in Vorträgen und Interviews erklärt.


  • Mod

    Was der genaue Grund ist, kann ich dir spontan nicht sagen, aber die anderen beiden Aussagen sind korrekt:
    -Carmack's inverse Quadratwurzelmethode (bzw. das, was man unter diesem Namen kennt, aber in Wirklichkeit viel älter und von jemand anderem ist) ist langsamer als das was dir eine typische, moderne FPU bietet. Schon lange. Kannste einfach ausprobieren.
    -Und es ist somit ein wunderbares Beispiel dafür, dass Computeroptimierungstipps nicht für alle Zeit gültig sind. No shit, Sherlock.

    edit: Zu langsam.



  • das kommt sehr auf die cpu und die implementierung an, allgemeingueltig kann man das nicht sagen. z.B. muss es unter 64bit auf windows kein register swapping geben weil alle operationen theoretisch im SSE register ablaufen koennen, kommt also drauf an was der compiler macht.



  • Man sollte vielleicht noch erwähnen dass die erwähnten Performanceeinbußen beim Laden von Floating Point-Daten in ein Integer-Register durch das Load-Hit-Store (Daten müssen in den Speicher geschrieben werden und dann wieder in das Integer-Register eingelesen werden) PowerPC-spezifisch sind (XBox 360, Playstation 3).

    Das Ganze ist also wie bereits erwähnt abhängig von der Hardware, auf der das Verfahren durchgeführt wird. Ich will damit nicht ausschließen, dass das heutige FPUs nicht eventuell doch im Allgemeinen schneller hinbekommen, dennoch sollte man es vielleicht für die jeweilige Zielplattform einfach mal auszuprobieren. Das Load-Hit-Store-Argument gilt jedenfalls nicht (in dieser Form) für x86/x64-Architekturen (zumindest nicht wenn man wie rapso erwähnt auf SSE-Registern arbeitet).

    Finnegan


Anmelden zum Antworten