PCGH_Carsten
Ex-Redakteur
Wir hatten die Gelegenheit mit Jan Paul van Waveren, Programmierer bei id-Software, über AMDs Dreikern-CPU-Pläne zu sprechen.
Unser Interview-Partner: Jan Paul van Waveren
PCGH: Ist zwischen Dual und Quad-Core-CPUs überhaupt genug Platz für spezielle Optimierungen? Sprich, ist es sinnvoll eine Optimierung für Zweikern-CPUs, eine für Dreikern-CPUs usw. zu haben oder ist es besser, gleich auf eine unbestimmte, hohe Zahl an CPU-Kernen zu optimieren?
Jan Paul van Waveren: Bisher haben die meisten Game-Engines Taks-Level-Parallelismus genutzt, um mehrere CPU-Kerne auszulasten. Unterschiedliche Aufgaben werden definiert und auf verschiedenen Kernen ausgeführt. Typischerweise betrachtet man die Game-Engine als eine Art Pipeline und diese wird in verschiedene Arbeitsstufen aufgebrochen, welche dann auf die verschiedenen Kerne verteilt werden.
Die Quake-4-Engine unterteilt dabei zum Beispiel in zwei Schritte:
Wenn man nun auf drei Kerne optimiert, kann man die Pipeline weiter aufteilen:
Geht man noch einen Schritt weiter, könnte man die Pipeline noch feiner unterteilen oder aber andere Teile des Codes können abgetrennt werden und parallel laufen:
1. Künstliche Intelligenz
2. Effektphysik
3. Spiel-Code
4. Streaming von Texturdaten sowie deren De- und Rekomprimierung
5. Sound-Engine
6. Renderer
Diese letztgenannte Aufteilung ist ziemlich dicht an dem dran, was Enemy Territory: Quake Wars macht. Allerdings bedeuten sechs Programmthreads nicht notwendigerweise, dass man auch eine gute Skalierung bis zu sechs CPU-Kernen hinbekommt. Manche Aufgaben können länger brauchen als andere, auch können mehrere Aufgaben und ihre entsprechenden Threads auf einem Kern laufen. Es ist nicht immer so einfach, Aufgaben so aufzusplitten, dass man alle Kerne gleichmäßig auslasten kann. Außerdem kostet es eine Menge Zeit für die Programmierer, die Aufgaben sauber aufzuteilen, sodass sie möglichst parallel laufen können.
PCGH: Welche Aufteilung kannst Du Dir für typische Spiele-Workloads vorstellen, um sie auf drei CPU-Kerne aufzuteilen?
Jan Paul van Waveren: Für eine möglichst gute Skalierung ist es besser, auf das sogenannte Daten-parallele Modell (im Gegensatz zum oben erwähnten Aufgaben-parallelen) auszuweichen. In diesem Modell arbeiten viele Kerne an denselben Aufgaben, aber alle an unterschiedlichen Daten. Zum Beispiel könnte man anstelle eines einzelnen KI-Threads einfach die KI für die verschiedenen Charaktere in jeweils eigenen Threads rechnen lassen. Jeder Thread erledigt dieselbe Aufgabe indem es die KI-Schritte berechnet, aber anhand unterschiedlicher Daten: Den verschiedenen Charakteren. Ein anderes Beispiel wäre Texturdekomprimierung. Da würden dann mehrere Threads genutzt, um Teile eines Bildes zu dekomprimieren anstatt dass ein einziger Thread das ganze Bild bearbeitet.
PCGH: Sind Konsolenspiele, speziell Xbox-360-Ports, prädestiniert um eher von drei, nicht unbedingt aber von vier CPU-Kernen zu profitieren?
Jan Paul van Waveren: Aktuelle Toptitel werden bereits für mehrere Plattformen wie PC, Mac, Xbox 360 und PS3. Daher ist auch die Engine nicht speziell an eine bestimmte Anzahl an Kernen gebunden. Stattdessen wird auf genügend parallele Threads gesetzt, um auf allen Zielplattformen gut zu skalieren. Vom Programmierer-Standpunkt aus ist das Optimum natürlich ein einziger, unglaublich schneller Kern. Da aber aktuelle CPUs über immer mehr Kerne verfügen, werden wir uns dem nicht entziehen können und immer mehr Programmierzeit investieren müssen, um diese Kerne auch auszureizen.
PCGH: Vielen Dank für deine Zeit und das Gespräch!
Das Interview führte Frank Stöwer, die Fragen stellten Frank Stöwer und Carsten Spille zusammen.
Unser Interview-Partner: Jan Paul van Waveren
PCGH: Ist zwischen Dual und Quad-Core-CPUs überhaupt genug Platz für spezielle Optimierungen? Sprich, ist es sinnvoll eine Optimierung für Zweikern-CPUs, eine für Dreikern-CPUs usw. zu haben oder ist es besser, gleich auf eine unbestimmte, hohe Zahl an CPU-Kernen zu optimieren?
Jan Paul van Waveren: Bisher haben die meisten Game-Engines Taks-Level-Parallelismus genutzt, um mehrere CPU-Kerne auszulasten. Unterschiedliche Aufgaben werden definiert und auf verschiedenen Kernen ausgeführt. Typischerweise betrachtet man die Game-Engine als eine Art Pipeline und diese wird in verschiedene Arbeitsstufen aufgebrochen, welche dann auf die verschiedenen Kerne verteilt werden.
Die Quake-4-Engine unterteilt dabei zum Beispiel in zwei Schritte:
- Spiel-Code und das Front-End des Renderers
- Render-Back-End
Wenn man nun auf drei Kerne optimiert, kann man die Pipeline weiter aufteilen:
- Spiel-Code
- Front-End des Renderers
- Render-Back-End
Geht man noch einen Schritt weiter, könnte man die Pipeline noch feiner unterteilen oder aber andere Teile des Codes können abgetrennt werden und parallel laufen:
1. Künstliche Intelligenz
2. Effektphysik
3. Spiel-Code
4. Streaming von Texturdaten sowie deren De- und Rekomprimierung
5. Sound-Engine
6. Renderer
Diese letztgenannte Aufteilung ist ziemlich dicht an dem dran, was Enemy Territory: Quake Wars macht. Allerdings bedeuten sechs Programmthreads nicht notwendigerweise, dass man auch eine gute Skalierung bis zu sechs CPU-Kernen hinbekommt. Manche Aufgaben können länger brauchen als andere, auch können mehrere Aufgaben und ihre entsprechenden Threads auf einem Kern laufen. Es ist nicht immer so einfach, Aufgaben so aufzusplitten, dass man alle Kerne gleichmäßig auslasten kann. Außerdem kostet es eine Menge Zeit für die Programmierer, die Aufgaben sauber aufzuteilen, sodass sie möglichst parallel laufen können.
PCGH: Welche Aufteilung kannst Du Dir für typische Spiele-Workloads vorstellen, um sie auf drei CPU-Kerne aufzuteilen?
Jan Paul van Waveren: Für eine möglichst gute Skalierung ist es besser, auf das sogenannte Daten-parallele Modell (im Gegensatz zum oben erwähnten Aufgaben-parallelen) auszuweichen. In diesem Modell arbeiten viele Kerne an denselben Aufgaben, aber alle an unterschiedlichen Daten. Zum Beispiel könnte man anstelle eines einzelnen KI-Threads einfach die KI für die verschiedenen Charaktere in jeweils eigenen Threads rechnen lassen. Jeder Thread erledigt dieselbe Aufgabe indem es die KI-Schritte berechnet, aber anhand unterschiedlicher Daten: Den verschiedenen Charakteren. Ein anderes Beispiel wäre Texturdekomprimierung. Da würden dann mehrere Threads genutzt, um Teile eines Bildes zu dekomprimieren anstatt dass ein einziger Thread das ganze Bild bearbeitet.
PCGH: Sind Konsolenspiele, speziell Xbox-360-Ports, prädestiniert um eher von drei, nicht unbedingt aber von vier CPU-Kernen zu profitieren?
Jan Paul van Waveren: Aktuelle Toptitel werden bereits für mehrere Plattformen wie PC, Mac, Xbox 360 und PS3. Daher ist auch die Engine nicht speziell an eine bestimmte Anzahl an Kernen gebunden. Stattdessen wird auf genügend parallele Threads gesetzt, um auf allen Zielplattformen gut zu skalieren. Vom Programmierer-Standpunkt aus ist das Optimum natürlich ein einziger, unglaublich schneller Kern. Da aber aktuelle CPUs über immer mehr Kerne verfügen, werden wir uns dem nicht entziehen können und immer mehr Programmierzeit investieren müssen, um diese Kerne auch auszureizen.
PCGH: Vielen Dank für deine Zeit und das Gespräch!
Das Interview führte Frank Stöwer, die Fragen stellten Frank Stöwer und Carsten Spille zusammen.
Zuletzt bearbeitet: