BlackBirdSR
2005-11-04, 13:26:06
Benchmark: Realstorm
Rendering: Nutzt ausschließlich CPU für alle Berechnungen
http://www.realstorm.de/realstorm/data/RealStorm_Bench2004.exe
http://www.realstorm.com/
Vor einiger Zeit gab es ja einen Thread für Realstorm Benchmarks:
http://www.forum-3dcenter.org/vbulletin/showthread.php?p=1464134#post1464134
Ich habe damals angefragt, wie es mit SSE2 und 64Bit aussieht, und warum diese und jene CPUs sich so verhält. Es gab natürlich auch eine Antwort.
Da wir nun endlich ein passendes Forum dafür haben:
Zur Engine an sich:
-------------------
Der Code den ich benutze (ich bin der Programmierer der Engine) ist reiner
C-Code, bis dato sind keine Assembler Elemente enthalten, also weder
Optimierungen fuer SSE, SSE2, 64Bit, HyperThreading oder
Herstellerspezifische Optimierungen.
Wir benutzen zur Zeit den Intel Compiler 4.5 und Visual-C6. Diese
Compilerkombination hat fuer uns die beste Performance ergeben (auch wenn
die Versionen schon relativ alt sind). Als Compilereinstellungen wird für
Pentium II und kompatible der Code generiert.
Wuerden spezifische Prozessoroptimierungen mehr Performance bringen?
--------------------------------------------------------------------
Ich gehe davon aus, dass man mit Prozessorspezifischen Optimierungen das
eine oder andere % an Performance in der RealStorm Engine gewinnen koennte,
doch in dem Falle unserer Engine wären die Unterschiede nicht sehr gross.
(Erklaerung folgt spaeter). Ein weiteres Problem fuer uns (mich) ist, dass
die Engine ein "Hobby"-Projekt ist, und von daher nur begrenzte Zeit in die
Engine einfliessen kann (was ich persoenlich sehr bedauerlich finde)
Was sind die Performance-"Fresser" bei RealStorm?
-------------------------------------------------
Generell habe ich zwei Probleme bei der Programmierung und Strukturierung
der Engine.
(a)
Die Optimierungen der Engine verschlingen ein Unmenge an Speicherplatz fuer
Tabellen, die fuer jedes Bild neu generiert werden muessen.
Ein Beispiel: Pro Pixel liegen insgesamt 80 Byte Buffer ab (jeweils 32Bit
Float Werte fuer Licht R,G,B; Texture X,Y, Position X,Y,Z; etc)
Durch diesen Gesamtspeicherbereich (bei 640x480 Pixel sind das 24MB) muss
die Engine 3Mal vollständig pro Bild durchlaufen (Adaptive Subsampling in 3
Passes), was den Datencaches wenig foerderlich ist ;-) (Adaptive Supsampling
in 3 Passes)
Noch ein Beispiel:
Es gibt eine Tabelle derart "byte SchattenObjObj[MAXOBJ][MAXOBJ]", bei
MAXOBJ=5000 liegt hier eine Tabelle von 25MB ab, die fuer jedes Bild
generiert wird, und bei der bei der Schattenberechnung nur bedingt linear
zugegriffen werden kann, das mag der Datencache leider auch nicht ;-)
(b)
Die Inneren Schleifen sind aufgrund der Komplexitaet und der Anzahl der
Primitiven (Mathematische Polygone zweiter Ordnung wie Kugeln, Zylinder,
Ellipsoide,etc) und der ingesamt verwendeten 9 Texturebene (3 davon
procedural) leider vom Code her sehr gross, so dass es auf einigen
Prozessoren dazu kommt, das der L1_Instruction Cache zu klein ist.
Das macht die Innerloops dann leider nicht so schnell, wie ich es gerne
haette, aber auch eine Optimierung auf spezielle Prozessortypen wuerde
dieses Problem leider nicht loesen.
Es gibt also kurz gesagt zwei Schwachstellen im Code:
- zu grosse Tabellen -> L2-Data Cache Misses
- zu langer Code in den inneren Schleifen -> L1-Instruction Cache Misses
Zum Resultbrowser
-----------------
Wir arbeiten gerade an einer neuen Version, die auch die Erkennung von
Athlon64,FX und den neuen Pentium4 Prozessorkernen korrekt durchfuehrt.
Diese wird dann dem neuen Benchmark beigelegt sein, "RealStorm Radiosity
Bench2005". (<- pssst :-)
Wir wollen uns in dem neuen Benchmark Dingen widmen, die auch mit den
neuesten Grafikkarten nicht realisierbar sind, also wirkliche Volume Lights
(Weichschatten) und Realtime Radiosity). Hier kann man sicher keine 30fps
erwarten, aber dafuer hat man einen rechenintensiven und schoen anzusehenden
Prozessor-Benchmark.
Grüße aus Kiel,
Michael Piepgras
Engine Programming
www.realstorm.com
Rendering: Nutzt ausschließlich CPU für alle Berechnungen
http://www.realstorm.de/realstorm/data/RealStorm_Bench2004.exe
http://www.realstorm.com/
Vor einiger Zeit gab es ja einen Thread für Realstorm Benchmarks:
http://www.forum-3dcenter.org/vbulletin/showthread.php?p=1464134#post1464134
Ich habe damals angefragt, wie es mit SSE2 und 64Bit aussieht, und warum diese und jene CPUs sich so verhält. Es gab natürlich auch eine Antwort.
Da wir nun endlich ein passendes Forum dafür haben:
Zur Engine an sich:
-------------------
Der Code den ich benutze (ich bin der Programmierer der Engine) ist reiner
C-Code, bis dato sind keine Assembler Elemente enthalten, also weder
Optimierungen fuer SSE, SSE2, 64Bit, HyperThreading oder
Herstellerspezifische Optimierungen.
Wir benutzen zur Zeit den Intel Compiler 4.5 und Visual-C6. Diese
Compilerkombination hat fuer uns die beste Performance ergeben (auch wenn
die Versionen schon relativ alt sind). Als Compilereinstellungen wird für
Pentium II und kompatible der Code generiert.
Wuerden spezifische Prozessoroptimierungen mehr Performance bringen?
--------------------------------------------------------------------
Ich gehe davon aus, dass man mit Prozessorspezifischen Optimierungen das
eine oder andere % an Performance in der RealStorm Engine gewinnen koennte,
doch in dem Falle unserer Engine wären die Unterschiede nicht sehr gross.
(Erklaerung folgt spaeter). Ein weiteres Problem fuer uns (mich) ist, dass
die Engine ein "Hobby"-Projekt ist, und von daher nur begrenzte Zeit in die
Engine einfliessen kann (was ich persoenlich sehr bedauerlich finde)
Was sind die Performance-"Fresser" bei RealStorm?
-------------------------------------------------
Generell habe ich zwei Probleme bei der Programmierung und Strukturierung
der Engine.
(a)
Die Optimierungen der Engine verschlingen ein Unmenge an Speicherplatz fuer
Tabellen, die fuer jedes Bild neu generiert werden muessen.
Ein Beispiel: Pro Pixel liegen insgesamt 80 Byte Buffer ab (jeweils 32Bit
Float Werte fuer Licht R,G,B; Texture X,Y, Position X,Y,Z; etc)
Durch diesen Gesamtspeicherbereich (bei 640x480 Pixel sind das 24MB) muss
die Engine 3Mal vollständig pro Bild durchlaufen (Adaptive Subsampling in 3
Passes), was den Datencaches wenig foerderlich ist ;-) (Adaptive Supsampling
in 3 Passes)
Noch ein Beispiel:
Es gibt eine Tabelle derart "byte SchattenObjObj[MAXOBJ][MAXOBJ]", bei
MAXOBJ=5000 liegt hier eine Tabelle von 25MB ab, die fuer jedes Bild
generiert wird, und bei der bei der Schattenberechnung nur bedingt linear
zugegriffen werden kann, das mag der Datencache leider auch nicht ;-)
(b)
Die Inneren Schleifen sind aufgrund der Komplexitaet und der Anzahl der
Primitiven (Mathematische Polygone zweiter Ordnung wie Kugeln, Zylinder,
Ellipsoide,etc) und der ingesamt verwendeten 9 Texturebene (3 davon
procedural) leider vom Code her sehr gross, so dass es auf einigen
Prozessoren dazu kommt, das der L1_Instruction Cache zu klein ist.
Das macht die Innerloops dann leider nicht so schnell, wie ich es gerne
haette, aber auch eine Optimierung auf spezielle Prozessortypen wuerde
dieses Problem leider nicht loesen.
Es gibt also kurz gesagt zwei Schwachstellen im Code:
- zu grosse Tabellen -> L2-Data Cache Misses
- zu langer Code in den inneren Schleifen -> L1-Instruction Cache Misses
Zum Resultbrowser
-----------------
Wir arbeiten gerade an einer neuen Version, die auch die Erkennung von
Athlon64,FX und den neuen Pentium4 Prozessorkernen korrekt durchfuehrt.
Diese wird dann dem neuen Benchmark beigelegt sein, "RealStorm Radiosity
Bench2005". (<- pssst :-)
Wir wollen uns in dem neuen Benchmark Dingen widmen, die auch mit den
neuesten Grafikkarten nicht realisierbar sind, also wirkliche Volume Lights
(Weichschatten) und Realtime Radiosity). Hier kann man sicher keine 30fps
erwarten, aber dafuer hat man einen rechenintensiven und schoen anzusehenden
Prozessor-Benchmark.
Grüße aus Kiel,
Michael Piepgras
Engine Programming
www.realstorm.com