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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

01.08.2014, 15:22

Solange dieser aber nicht auf die Frage antwortet, wie er das denn bisher genau macht, kann man ihm allerdings nicht sonderlich gut helfen.
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]

Techie

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

12

01.08.2014, 22:49

Was bei Performance noch hilft.

Addition mit negativen Zahlen soll angeblich schneller sein als Subtraktion.

"int" wird schneller verarbeitet als andere typen.
"double" wird schneller verabeitet als "float".

Das war wass ich so bisher weis. Jedoch wenn eine Prozedur mir zu lahm war dann habe ich einfach mit dem Profiler geschaut wo es hakt
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

13

01.08.2014, 23:46

Zitat von »Techie«

Addition mit negativen Zahlen soll angeblich schneller sein als Subtraktion.

Nicht die Maschinenbefehle auf x86/x64, die sind exakt gleich schnell.

Zitat von »Techie«

"int" wird schneller verarbeitet als andere typen.

Ne, das ist so gesagt nicht richtig. Jedenfalls nicht auf x86 oder gar x64. Inbesondere ist int heutzutage nicht mehr der Typ der Arichtekturbreite. Siehe x64.
Dort werden alle Integertypen prinzipiell gleich schnell verarbeitet. Auf x64 sogar ja auch noch 64 Bit Integer.
Die typischen Operationen, alles Bitweise, Addition, Subtraktion Multiplikation ist dort ~ gleich schnell in allen Breiten. Einzig und allein bei der Division sind in der Regel bei kleineren Typen deutlich schneller.

Zitat von »Techie«

"double" wird schneller verabeitet als "float".

Das "double" schneller ist als "float" stimmt auch nicht. Tatsächlich ist hier der theoretische Unterschied wenn man die Befehle auch in der Regel sehr gering und in der Regel nicht beachtenswert. Auf der veralteten x87 FPU gibt es sogar intern nur einen einzigen 80 Bit breiten Typ mit dem gerechnet werden kann. Zu einem größeren Unterschied kommt es dagegen zum Beispiel dann, wenn die Auto-Vektorisierung einspringt. "double" ist wie der Name sagt doppelt so groß und nimmt daher doppelt soviel Platz in den 128 Bit SSE Registern weg. Das heißt dort ist der Durchsatz bei "double" prinzipiell halbiert weil dort nur 2 Operationen anstatt 4 gleichzeitig ausgeführt werden können.

Außerdem ist je nach Anwendung außerhalb von Mikrobenchmarks aber noch etwas anderes viel limitierender: Der Cache. Große Typen also zum Beispiel "double" nehmen, wenn sie dauerhaft in einer Datenstruktur gespeichert werden dauerhaft Cache weg. Und das doppelt so viel und das wird in den aller meisten Fällen viel schwerer wiegen als alles andere. Das Gleiche trifft natürlich auch bei 64 Bit Integer vs extrem Beispiel 8 Bit zu.

Prinzipiell meine zusätzlichen Optimierungstipps für x86/x64 in extremer Kürze:
Datenstruktur, Parallelisierung, Cacheoptimierungen(Allokationen, Datenorientierung, passende Typen...), Funktionszeiger("virtual")/Verzweigungen vermeiden("Conditional Move"), ggf. manuelle Vektorisierung(SIMD), ...
Daneben natürlich profilen und beim Testen wirklich gewissenhaft sein. Da gibt es extrem viele Dinge die man falsch machen kann und das Ergebnis verfälschen oder nicht vergleichbar machen. Das habe ich selbst sehr häufig erfahren müssen.

Und ja, das geht langsam richtig Offtopic weil ich immer noch nicht glaube, dass es hier um so ein Problem handelt. Wenn hier so Unwissen verbreitet wird, kann ich das schwer ignorieren.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (01.08.2014, 23:53)


14

02.08.2014, 01:01

Bei 35 FPS würde das nicht ruckeln....

Darauf möchte ich kurz damit eingehen...

MfG
Check

15

04.08.2014, 11:07

Ich habe ein paar von euren ansetzten zu herzen genommen und läuft wesentlich besser.
Ich habe desweiteren die Textur und knoten anzahl auf weiter Sicht runter gefahren.


Jetzt stehe ich vor dem nächsten Problem :/
kann mir einer sagen wie man mesh statisch verändert
(Die allgemeine Position verändern ohne es beim rendern zu machen)

Mit anderen Worten beim auslesen aus einen x file die Position direkt auf einen bestimmten punkt legen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

04.08.2014, 13:30

Wozu willst du das tun?
Dafür gibt's doch Transformationsmatrizen.

17

04.08.2014, 15:16

Ich will im laufenden Render Prozess kaum noch Rechnungen haben, weil ich relativ viele Objekte mit unterschiedlichen Positionen rendere
Wodurch selbst Translation von rund 1000 Objekten auch gleich wieder im laufenden render Prozess zeit kostet.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

04.08.2014, 15:23

Und dann willst du für 1000 Objekte jeweils eine eigene Kopie ihres Meshes erzeugen, in der die Position schon fest in den Eckpunkten drin ist, oder wie?
Wenn ja: Damit machst du alles nur schlimmer. Die paar Multiplikationen/Additionen sind für die Grafikkarte ein Witz - viel wichtiger ist, dass du möglichst große Batches renderst, d.h. möglichst wenige Draw Calls hast (natürlich dabei auch nicht übermäßig viel rendern, was eh nicht sichtbar ist).

Generelle Empfehlung: Erst optimieren, wenn es sein muss, und dann an der richtigen Stelle und nicht im Vorhinein auf Verdacht. Benutze Profiler, um die heißen Stellen im Code zu finden. Gerade wenn man wenig Erfahrung hat, liegt man mit dem Bauchgefühl, was schnell und was langsam ist, sehr häufig falsch. Dann "optimiert" man an auf falsche Weise und an der falschen Stelle, und am Ende wird's langsamer statt schneller.

19

08.08.2014, 10:35

Und natürlich die üblichen Punkte:

  • Release- statt Debug-Build
  • nicht aus Visual Studio heraus starten sondern die exe einzeln feuern
  • I/O (Festplatte, Konsole, Datenbanken) möglichst Vermeiden
  • etc.p.p.

Faustformel Optimierung:
Don't do it!
Faustformel Optimierung für Profis:
Don't do it now!

So Far...
Laguna
Portfolio runvs.io | Gamejolt | itch.io | PEWN | Twitter

Techie

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

20

08.08.2014, 11:20

Mein Post beruht auf einen Artikel der anscheinend gelöscht wurde, mittlerweile verstehe ich auch warum :D

Hier ist noch ein interessanter Artikel dazu:
http://www.codeproject.com/Articles/6154…de-Optimization
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige