Du bist nicht angemeldet.

Werbeanzeige

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

16.07.2011, 17:11

Wie gut sind Compileroptimierungen?

Hallo.
Kann mein Compiler (MSVC 2010 EXPRESS) meine Physikengine so gut optimieren dass sie mit einer Assemblerengine mithalten kann
oder nicht?

Und nehmen große Engines (Unreal, Cryengine, Soure) eigentlich ausschließlich Assembler für ihre Physikberechnungen?

Vielen Dank für eure Antworten.
Johannes Schneider.
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

drakon

Supermoderator

Beiträge: 6 525

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

16.07.2011, 18:07

Heutige Compiler sind verdammt gut. Meistens besser als es eine Person machen könnte.

Der meiste Code wird in einer Hochsprache, wie C++ geschrieben. Dazu gibt es dann gewisse Stellen, welche optimiert sind. Dort werden dann am ehesten prozessorspezifische Befehle benutzt, um eine Berechnung zu beschleunigen.

Dass man das aber wirklich braucht/es sich lohnt ist eher unwahrscheinlich, wenn man nicht gerade modernen, markt tauglichen Code schreiben muss.

3

16.07.2011, 18:10

Ich bin kein Experte, aber ich hab mal gehört, dass Compiler Code so gut optimieren, dass man den nur noch mit extremen Aufwand verstehen und mit noch viel größerem Aufwand selbst so gut hinbekommt. Natürlich gibt es hier und da Stellen, wo die Optimierung versagt, aber insgesamt sind die wohl doch schon sehr gut.
Und der Aufwand heutzutage in Assembler zu programmieren lohnt sich einfach nicht. Sowas wie die Cryengine will ja auch auf unterschiedlichen Plattformen laufen, wo man den Code dann einzeln anpassen und optimieren müssen. Ganz zu schweigen von dem Zeitaufwand, es überhaupt einmal in Assembler zu schreiben und die zahlreichen Fehler, die man ziemlich sicher machen wird.

Viel interessanter ist es, Physikberechnungen auf die Grafikkarte auszulagern. Und selbst bei Cuda, womit man ja fast per Definition nur highperformance Code schreiben will, wird Cuda C benutzt (mittlerweile soll sogar schon C++ funktionieren). Also vergiss Assembler lieber.

Achja, nur der Vollständigkeit halber: Man muss eh immer zuerst auf Algorithmenebene optimieren.
Lieber dumm fragen, als dumm bleiben!

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

16.07.2011, 18:12

Compiler (gerade der von MS) wissen viel mehr als die meisten Assembler-Programmierer. Gerade was Pipelining, Jumps und Stalls, sowie Taktzeiten von Befehlen angeht.
Assembler zu schreiben ist heutzutage nur noch Spaß an der Freude oder eine Lern-Übung. Sinn macht es aus Sicht von Performance ganz sicher keinen. Es will (gerade bei Physik-Engines) auch wirklich niemand sich mit Assembler rumärgern müssen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

5

16.07.2011, 18:23

Optimierungen via Intrinsics oder SIMD-ASM sollte man nur in spezifischen Fällen nutzen, in denen man sich erstens sicher ist, dass der Compiler nicht in der Form optimiert und es zweitens auch Sinn macht. Deine Physik-Engine wird wahrscheinlich nicht mit den AAA-Physikengines vergleichbar sein, insofern denke ich, dass du durchaus auf die eine oder andere Optimierung verzichten kannst. Zusätzlich ist Assembler so gut wie überhaupt nicht wartbar und auch nicht besonders kompatibel zu anderen Systemen. Wie schon erwähnt bringt es viel mehr die Mathematik oder den Algorithmus zu optimieren, auch strukturelle Optimierungen darf man nicht unterschätzen.

Die großen Engines haben im generellen eher weniger Assembler, jedenfalls wenn sie einer modernen Generation entstammen. Falls du wirklich deine Physik-Engine nochmal optimieren willst, würde ich dir Intrinsics empfehlen. Mit Intrinsics kannst du wunderbar deine Floating-Point Operationen auf die FPU auslagern, welches den Code in einigen Fällen um einiges schneller macht. Für die meistens C++-Compiler gibt es ansonsten noch extra SSE-Flags, die eine erhöhte SSE-Optimierung bewirken.

Software wird heute nicht mehr in ASM geschrieben, zum Glück.

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

6

16.07.2011, 18:43

Ein Glück.
Ich dachte schon ich muss anfangen mein Assemblerbuch zu lesen :D


... Ist bei Assembler IRGENDWAS genormt ?? Also das scheint eine unglaubliche Anarchie zu sein D:
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

16.07.2011, 18:54

Wenn man's 'ne Weile macht, dann machen manche Sachen durchaus Sinn. Andere nicht so. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

drakon

Supermoderator

Beiträge: 6 525

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

16.07.2011, 19:01

Alles, was im x86 Befehlssatz drin ist, ist eigentlich (bei Computern, wie wir sie kennen) verfügbar. Alles, was darüber hinaus geht ist nicht unbedingt selbstverständlich (auch wenn sich die Basis breiter wird).
Das ist dann auch das Problem (und die Ansatzstelle) beim Optimieren. Ein Compiler erzeugt Code, der so gut wie überall laufen soll und benutzt daher standardmässig keine Erweiterungen. Und auch wenn er sie benutzen könnte kann er es manchmal nicht, weil es nicht-triviale Codeänderungen vorgenommen werden müssten, damit er das könnte, was er nicht per se machen darf (muss äquivalent sein). Ein Mensch könnte das dann sehen und halt auch einfacher Begründen warum er man diese Änderung machen darf und die Erweiterung (mit Fallback) benutzen.
Für Compiler ist diese Anarchie also ein Fluch. Für Leute, die den Code optimieren allerdings ein Segen. :)

Beiträge: 775

Beruf: Student

  • Private Nachricht senden

9

16.07.2011, 21:37

*Deutlich* interessantere Optimierungen gerade für Physikengine sind Paralellisierung & GPU-Verlagerung - keines von beiden macht dir der Compiler. Viel falsch machen kann man hier aber auch ^^.

10

17.07.2011, 11:18

Zitat

Wie gut sind Compileroptimierungen?
nicht gut.:D:D:D

Ich kann nur empfehlen den verlinkten Thread mal ganz zu lesen, das ist ein einziger VC Bugreport^^

gruß

Werbeanzeige