Warum bieten so wenige Computerspielehersteller auf die CPU spezialisierte Binarys an?
-
Immerhin haben manche CPUs schon SSE3, SSE4 usw. und das kann doch für so manches Game noch etwas Performance herausholen.
Alles was dazu nötig wäre, wäre den Quellcode entsprechend für die jeweiligen Features zu compilieren und verschiedene Binarys an die CPU angepaßt zu erstellen, aber bis auf wenige Spiele (AFAIK Riddick, Deus EX2 und Stalker) machen das nur sehr wenige Spieleentwickler.
Alles was man kriegt ist eine EXE für alles und die ist in der Regel für den kleinsten gemeinsamen Nenner compiliert.
Im schlimmsten Fall also für den Pentium 1 als 32 Bit Binary.
-
Keine Optimierungen? schrieb:
Immerhin haben manche CPUs schon SSE3, SSE4 usw. und das kann doch für so manches Game noch etwas Performance herausholen.
Ich bezweifle diese Annahme. Spiele sind selten Numbercrunching.
-
ich kann nicht einschätzen inwiefern das heute noch relevant ist, aber ich habe als tech lead in der spieleindustrie gearbeitet und 2006 das letzte große produkt veröffentlicht (internationaler vollpreistitel). der performance-unterschied zwischen einem kompilat mit und einem ohne sse(2) war damals nicht messbar. außer problemen hat es absolut gar nichts gebracht.
disclaimer: es wurde in deutschland entwickelt und durfte natürlich kein geld kosten, deshalb haben wir uns auf die fähigkeiten des compilers/optimizers verlassen, also keine handoptimierung für simd vorgenommen. insofern ist die relevanz meiner erfahrung fragwürdig.
offtopic-rant: spieleentwickler in deutschland ist der mieseste job überhaupt.
-
gergamedev schrieb:
offtopic-rant: spieleentwickler in deutschland ist der mieseste job überhaupt.
Warum?
Die Bezahlung entspricht wahrscheinlich auch in anderen Ländern nicht dem Arbeitsaufwand, oder?
-
Also SSE2 wird sehr wahrscheinlich ueberall benutzt, wo es Sinn macht. Darueberhinaus gibt es bei manchen schon DLLs die darauf schliessen lassen, dass der Prozessor stark beruecksichtigt wird. Woher nimmst du also deine Annahme?
aber ich habe als tech lead in der spieleindustrie gearbeitet und 2006 das letzte große produkt
Bei Witschaftssimulationen ist das wahrscheinlich egal.
-
@Keine Optimierungen?
Wirklich viel kann man mit SSE & Co. nur bei Teilen rausholen die üblicherweise von der Engine erledigt werden, speziell Physik und Grafik.
Und da gibt es soweit ich weiss durchaus Engines die die entsprechenden CPU Features verwenden. Das geht nämlich auch ohne spezialisierte Binaries, indem man einfach abfragt was die CPU kann und dann zur Laufzeit einfach die beste mögliche Funktion auswählt.
Video-Codecs machen das ja auch nicht anders -- wäre ja ziemlich unpraktisch wenn es 10 verschiedene ffmpeg/x264/... versionen gäbe. Nen?
-
macht der intel compiler automatisch.
optimierungen gibt es an vielen stellen, manche math funktionen werden auf sse umgebogen, manchmal memcopy, oder loops die etwas initialisieren. aber wirklich viel bringt sowas automatisches selten.
-
raps schrieb:
aber wirklich viel bringt sowas automatisches selten.
Das kommt eben drauf an, was man macht. Wenn man diese Funktionen wirklich oft benutzt, dann bringt das entsprechend viel. Aber einmal im Programmverlauf ein Array zu initialisieren oder 10 Zahlen zu addieren - das ist Pillepalle. Das Problem ist, dass diese CPU-Erweiterungen recht speziell sind. Es bringt richtig viel, wenn man immer wieder die gleiche Operation auf Mega- oder Gigabytes von Daten durchführt. Das sind die Aufgaben, die am Computer richtig lange dauern, daher ist es auch gut, dass es diese Erweiterungen gibt. Sonst könnten wir heute nicht Videos in Echtzeit bearbeiten oder "mal nebenher" noch ein hochauflösendes Video gucken. Aber für Allerweltsprogramm, auch Spiele, bringt das so gut wie nichts. Spiele sind da schon etwas besonderes, da sie eigentlich schon in die Kategorie fallen, triviale Operationen zigmilliardenfach duchzuführen. Aber dieser Bedarf ist sogar so extrem, dass dafür extra die GPUs erfunden wurden, wodurch der Prozessor heutzutage bloß noch die Spiellogik verarbeitet. Und die mag zwar auch anspruchsvoll sein, aber fällt meistens nicht in die Kategorie, die man durch SIMD-Techniken optimieren kann.
-
SeppJ schrieb:
raps schrieb:
aber wirklich viel bringt sowas automatisches selten.
Das kommt eben drauf an, was man macht. Wenn man diese Funktionen wirklich oft benutzt, dann bringt das entsprechend viel. Aber einmal im Programmverlauf ein Array zu initialisieren oder 10 Zahlen zu addieren - das ist Pillepalle. Das Problem ist, dass diese CPU-Erweiterungen recht speziell sind. Es bringt richtig viel, wenn man immer wieder die gleiche Operation auf Mega- oder Gigabytes von Daten durchführt.
nein, leider nicht, wenn ein memcpy mit simplen int-moves schon am speicher saturiert (rep mov), wird eine vektorisierte version lediglich overhead haben, es wird nicht schneller. egal ob 16byte oder 16GByte auf die man memcopy macht.
Das sind die Aufgaben, die am Computer richtig lange dauern, daher ist es auch gut, dass es diese Erweiterungen gibt. Sonst könnten wir heute nicht Videos in Echtzeit bearbeiten oder "mal nebenher" noch ein hochauflösendes Video gucken.
das sind hand optimierte dinge, keine automatischen compiler optimierungen wie in meinem vorherigen beitrag angesprochen den du quotest.
Aber für Allerweltsprogramm, auch Spiele, bringt das so gut wie nichts.
auto optimierungen bringen fast nichts. hand optimierte vectorisierung kann viel bringen, ich sass die letzten 3wochen um etwas von 80ms auf 4ms zu dreucken auf konsole, ohne SIMD waere es nicht moeglich gewesen.
Spiele sind da schon etwas besonderes, da sie eigentlich schon in die Kategorie fallen, triviale Operationen zigmilliardenfach duchzuführen. Aber dieser Bedarf ist sogar so extrem, dass dafür extra die GPUs erfunden wurden, wodurch der Prozessor heutzutage bloß noch die Spiellogik verarbeitet. Und die mag zwar auch anspruchsvoll sein, aber fällt meistens nicht in die Kategorie, die man durch SIMD-Techniken optimieren kann.
man kann sehr vieles mit SIMD optimieren, dass es sowenig gemacht wird, liegt daran was 'gergamedev' gesagt hat, viel aufwand -> viel kosten. manchmal konzentriert man sich dann auf ein paar wenige dinge die optimiert werden, oft aber kauft man eher eine 3rd party lib wie z.B. granny, speed-tree, havokm kynapse etc. die schon 'perfekt' optimiert sind (sowohl SIMD als auch high level algorithmen). 90% der zeit geht in 10% des binaries ab und gerade bei spielen sind es oft ein paar wenige funktionen die peaken, z.B. kostet oft ein raycast der AI in die physic mehr als die ganze fuzzi logic fuer den actor. oft ist das so performance irrelevant, dass das behaviour mit einem script gesteuert wird, die visibility raycasts hingegen sind asynchron, multithreaded, SIMDfied etc.