Speedoptimierung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Foppele

Betreff: Speedoptimierung

BeitragDo, Dez 06, 2007 9:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
sicher habt ihr das auch schonmal gehabt das eine Funktion länger zur Berechnung braucht, und dies dann zu einer spürbar niedrigen Framerate führt, möglicherweise noch unter den ca 25 FPS die vom Auge als flüssig empfunden werden.
Dann hilft ja alles nix und man muss sich Gedanken machen, wie man das gleiche Ergebnis mit weniger Aufwand erreicht.
Gibt es sowas wie eine Liste in der steht, welche Befehle/Operationen besonders lange dauern und deshalb sparsam verwendet werden sollten?
 

Dreamora

BeitragDo, Dez 06, 2007 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Liste nein, das weiss man einfach aus dem Grundlagenwissen zur Art wie Float etc läuft.

Log -> sehr langsam
SQR -> langsam
Verschachtelte schleifen für berechnungen -> sehr langsam (-> matrizen geholze in blitz code eine dumme idee, gibt tricks das zu umgehen, TForm... as wichtigster Ansatz)
Zuviele Pixelbasteleien sind auch tödlich, da ein Lock eines Buffers zur Sperrung des Uplinks führt das heisst ALLES steht (keine Mesh und Grafiktransfers) bis du die güte hast den Lock wieder aufzuheben.


Persönlich würde ich sagen, dass du einfach etwas versuchst brute force zu lösen was nicht funktionieren kann. wie in echtzeit die distanz aller entities zu allen anderen entities berechnen oder etwas ähnlich blödes.
Das geht nicht, da gibts auch nix zu optimieren.
Da muss man sich intelligentere Ansätze nutzen, wie Algorithmen zur räumlichen Unterteilung, als beispiel für das problem.

Es gibt für nahezu alles algorithmen, man muss nur im Netz suchen.

Etwas was die meisten Blitz3D programmierer leider nicht machen ist die saubere unterteilung von berechnungen in unterfunktionen so das man sie auf verschiedene Frames aufteilen kann. Alleine das reicht häufig schon aus um die probleme zu lösen.

Ich hab es mir zb als Ziel gesetzt, einen VoxelEditor zu basteln der +- in echtzeit polygonisiert um damit eine komplett neue Form von "Terrain" Editor zu schreiben, mindestens im Indiesektor.
Problem daran ist zum einen das Polygonisieren, zum anderen aber auch die handhabung der hunderttausenden von Polygonen sowie das Speichern und Laden der Daten was soviel heisst wie "ohne streamed Loading" is da nix zu holen, was in Blitz sicher sehr interessant wird.
Das ist viel Arbeit, nachforschen und entwickeln neuer algorithmen, denn wir reden hier selbst bei 1024x1024x1024 blöcklein in einer welt schon von 1GB rein für die handhabung der daten ohne da noch irgendwie texturierung drin zu haben etc.
Das soll dir nur verdeutlichen, dass gescheite Lösungen, die nicht einfach nur brutal bruteforcen häufig halt nicht einfach so vom himmel fallen und wochen dauern zur erarbeitung.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Do, Dez 06, 2007 12:11, insgesamt einmal bearbeitet

Hip Teen

BeitragDo, Dez 06, 2007 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
http://blitzbase.de/tutorials/shadow_4.htm
Da steht einiges zum Thema.
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

Foppele

BeitragDo, Dez 06, 2007 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Persönlich würde ich sagen, dass du einfach etwas versuchst brute force zu lösen was nicht funktionieren kann. wie in echtzeit die distanz aller entities zu allen anderen entities berechnen oder etwas ähnlich blödes.


Moin! Very Happy

Nee, das sowas Probleme macht merkt man ja meistens ziemlich schnell und ist ja auch zu erwarten. Meine Frage bezog sich auch nicht auf ein bestimmtes Problem. Wär halt praktisch wenn das schon mal jemand aufgeschrieben hätte, ich glaube bei C-lite stand sogar in der Hilfe unter jedem Befehl die ungefähre Geschwindigkeit.

Aber egal, dann muss ich halt selber testen.

Was hältst du generell von der Idee, in einer komplizierten Berechnung mehrere Zeitabfragen zu verteilen,
und wenn eine bestimmte Dauer überschritten wird den letzten Zwischenschritt zu speichern und im nächsten Durchgang an der selben Stelle weiterzumachen?
Wäre das nicht sowas wie Multithreading?

[EDIT]@HipTeen: Danke, genau sowas wollte ich!

[EDIT2]@Dreamora: Ein Voxel-Editor? Voxel engine kenn ich natürlich, finde ich übrigens ziemlich genial sowas.
 

Dreamora

BeitragDo, Dez 06, 2007 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin prinzipiell Fan von aufspalten von Berechnungen in mehrere Teilabschnitte und zwischenspeichern.

Multithreading direkt wäre das nicht aber virtuelles Multithreading (wie es Scriptsysteme häufig auch machen, mit TimeSlicing).

Es ist definitiv vorzuziehen wenn du echtzeit und anstrengendere Berechnungen kombinieren willst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Silver_Knee

BeitragDo, Dez 06, 2007 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Optimierungsthread! Da mal reingeschaut? Die Geordneten Listen die ich mir zusammengereimt hatte holten einiges raus (Klar hatte ja auch entsprechendes Problem: Verschiedene Schiffstypen mit unterschiedlichen Waffen eines unterschiedlichen Waffentypes...) aber sonst hat der Thread cnRS von meiner 10er FPS auf ne 30er gebracht ^^

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group