Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.11.2010, 13:17

Irrlicht: FastMath oder AccurateMath??

Hallo zusammen!

Ich bin gerade dabei, die Irrlicht-Engine mit Direct3D9-Unterstützung zu compilieren. Jetzt gibt es da aber verschiedene BuildTargets. Für mich in Frage kommen:
Win32 - Release - fast math - dll
Win32 - Release - accurate math - dll

Aus den Namen geht ja hervor, dass fast math die schnellere Variante ist, dafür aber ungenauer als accurate math. Nun frage ich mich, wie groß der Unterschied da wohl sein mag und ob man auf einem halbwegs modernen PC etwas davon merkt, dass accurate math langsamer ist als fast math. Wenn man davon nichts merkt, würde ich natürlich zu accurate math tendieren. Ansonsten sollte es doch auch kein Problem sein, mein erstes Projekt nochmal neu auf fast math zu kompilieren, wenn ich feststelle, dass es mit accurate math zu langsam läuft.

Trotzdem interressiert mich mal, wie groß da der Unterschied ist.


lg Paul

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

2

01.11.2010, 22:13

Also ich kann dir die Frage leider nicht ganz genau beantworten (hab nie irrlicht benutzt, oder direct3d :D)

Allerdings bevor du garkeine Antwort bekommst, schreib ich einfach mal was :D

Ich gehe mal davon aus, dass fast math floating points (single precision) meint, und accurate math wohl mit doubles arbeitet. Heutzutage ist es so, dass man, wenn es um die CPU geht, bei float oder double keinen wirklichen unterschied merkt. Soweit ich weiß rechnen die CPUs sowieso nicht floats oder doubles, sondern irgendeiner anderen bitzahl, sodass es für sie kaum einen unterschied macht.

Wenn es allerdings um hardware-grafikbeschleunigung mit der GPU geht, da macht es sehr wohl einen unterschied, da die hardware teilweise ausschließlich floats unterstützt. Bei doubles wird dann auf software emulierung zurückgegriffen und es wird sehr langsam. Als Beispiel: Ich habe vor einigen Wochen mal mit OpenGL VertexBufferObjects (muss dir nicht unbedingt was sagen) gearbeitet. Dort war es so, dass ich, wenn ich die Geometriedaten als doubles zur Grafikkarte geschickt habe, keine HW-Unterstützung mehr bekommen habe. Sobald ich das ganze auf floats umgestellt hatte, hatte ich teilweise die 10-20fache performance von vorher.

Ich würde dir generell zur fast math variante raten. Wirklich hohe Präzision braucht man eigentlich nur bei Spezialanwendungen. Falls es aber doch Probleme gibt, hindert dich ja niemand zu wechseln.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

02.11.2010, 11:47

Durchsuch doch einfach mal den Irrlicht Quellcode nach IRRLICHT_FAST_MATH. Da findest du z.B. in der irrMath.h an ein paar Stellen wo Approximationen benutzt werden und auch Kommentare dazu, wie genau die sind.

4

02.11.2010, 13:10

Okay ich denke damit hast du mich von FastMath überzeugt.

Vielen Dank

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

02.11.2010, 14:45

Die Sache hat kaum etwas von wegen double vs float zu tun sondern viel eher damit dass die beiden Varianten wohl das precision Flag im FPU Control Word entsprechend setzen (z.B. über Compilerflag) und dass die Fast Variante offenbar eben irgendwelche Approximationen und vielleicht andere Optimierungen (SSE?) verwendet. Du musst eben abwägen zwischen Genaugikeit und Geschwindigkeit. Wieviel das ausmacht wird dir kaum jemand sagen können da dass wohl stark von deiner Anwendung abhängt. Da hilft nur eines: Nachmessen...

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

02.11.2010, 15:28

Wird das nicht einfach an D3DCREATE_FPU_PRESERVE durchgereicht?

7

02.11.2010, 15:52


Wird das nicht einfach an D3DCREATE_FPU_PRESERVE durchgereicht?

von diesen Details habe ich keine Ahnung :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

02.11.2010, 15:53

Ist ja auch egal. Wie gesagt, wenn du wissen willst wieviel es ausmacht musst dus eben testen...

Werbeanzeige