# [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approach?"



## Falk (2. Oktober 2007)

*We had the opportunity to talk with Jan Paul van Waveren, programmer at id Software, about AMDs triple core approach.*

_PCGH: Is there enough space between Dual and Quadcore CPUs to optimize for? I.E. is it feasible to optimize for two cores, three cores etc. or rather optimize for many cores, regardless of the exact number?_

*Jan Paul van Waveren:* So far most game engines have exploited task parallelism to take advantage of multiple cores. Separate tasks are identified and executed on different cores. Typically the game engine is considered a pipeline and this pipeline is broken up into multiple steps/tasks, where each step runs on a different core. For example QUAKE 4 breaks the pipeline into two steps:

1. game code + renderer front end
2. renderer back end

Going to three cores you can split the pipeline further:

1. game code
2. renderer front end
3. renderer back end

Going to even more cores the pipeline can be broken up further, or other parts of the code can be split off and run in parallel:

1. AI code
2. effect physics
3. game code
4. texture streaming & de-re-compression
5. sound engine
6. renderer

The above is close to what the Enemy Territory: QUAKE Wars game engine does. Having 6 separate tasks, or steps in your pipeline, does not necessarily mean the engine scales all the way up to a system with 6 cores. Some tasks may take more time to complete than others, and multiple tasks and their associated threads may run on a single core. Exploiting task parallelism can be very effective. However, it is not always easy to identify different tasks that take up similar amounts of time such that all cores are tasked equally. Furthermore, it typically requires a lot of programmer time to cleanly separate the task such that they can run in parallel.

_PCGH: What kind of differentiation can you imagine for gaming workloads to be distributed between three cores?_

*Jan Paul van Waveren:* To scale well on systems with an arbitrary number of cores it is more effective to exploit data parallelism. In this case each core performs the same task but on different pieces of distributed data. For instance, instead of running the AI in a separate thread, each AI character can run in a separate thread. Each thread performs the same task, in that it advances the state of one AI, but each thread works on a different AI character. Another example would be texture decompression, where multiple threads could be used to decompress subsections of an image, as opposed to having one thread decompress a whole image.

_PCGH: Is a console-game, especially a Xbox360 port, a natural to profit from three but not necessarily four cores?_

*Jan Paul van Waveren: *Current high profile game engines are designed for multiple platforms, including the PC, Mac, XBox 360 and PS3. As such the engine is not specifically designed for a fixed number of cores. Instead the engine is setup to have enough separate tasks, or exploit enough data parallelism such that it scales well on all platforms. From a programming perspective the ideal number of cores is one single super fast core. However, with a definite trend to a growing number of cores on today's CPUs there is no easy way around it, and more programming time will have to be spent to take advantage of all the cores.

_PCGH: Thanks for the interview!_

---------------------

Other gaming related interviews on PCGH Extreme:
*Technical Q&A S.T.A.L.K.E.R. Clear Sky*
*Interview: Tim Sweeney (Epic) talks Triple-Core*


----------



## HeNrY (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Sehr nettes Interview


----------



## Adrenalize (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Geht das nur mir so, oder steht da zwischen den Zeilen, dass Triple Core halt im Grunde ein Quadcore für Arme ist? 
Ich meine, ok, offenbar produziert AMD derart viel Ausschuss, dass es sich lohnt, die kaputten Quadcores separat zu vermarkten.


> Es handelt sich nach Amatos Worten um das normale Quad-Core-Die, bei dem einer der vier Prozessoren stillgelegt wird. Dass Ausbeuteprobleme bei der Herstellung (Yield Rate) zu dieser Entscheidung beigetragen haben könnten, wollte Amato nicht bestätigen.


 Quelle
Aber den Hype darum kann ich nicht nachvollziehen...

Extra optimieren wird da sicher niemand dafür, man legt die Engine halt bestenfalls auf Quadcore aus oder lässt noch mehr Threads laufen. Im Grunde ist es erstmal wichtig, überhaupt threaded zu programmieren, dann merkt der Anwender auch etwas davon. Sowohl bei Triple als auch bei Quad.


----------



## Stefan Payne (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*



Adrenalize schrieb:


> Geht das nur mir so, oder steht da zwischen den Zeilen, dass Triple Core halt im Grunde ein Quadcore für Arme ist?
> Ich meine, ok, offenbar produziert AMD derart viel Ausschuss, dass es sich lohnt, die kaputten Quadcores separat zu vermarkten.


Macht eigentlich jeder, ist nur im CPU Sektor nicht soo üblich bzw bekannt, das es gemacht wird/wurd.
Ein paar Beispiele sind z.B. die Selleries, manche Durons, aber auch der Core Solo ist eigentlich ein Core Duo mit 1 deaktiviertem Kern!! (zumindest zeitweise war ers)

Das bekannteste/beliebteste Beispiel dürft wohl das M0 Stepping des Northwood sein, bei dem der L3 Cache deaktiviert wurd...




Adrenalize schrieb:


> Extra optimieren wird da sicher niemand dafür, man legt die Engine halt bestenfalls auf Quadcore aus oder lässt noch mehr Threads laufen. Im Grunde ist es erstmal wichtig, überhaupt threaded zu programmieren, dann merkt der Anwender auch etwas davon. Sowohl bei Triple als auch bei Quad.


Es wäre ziemlich dämlich, für eine bestimmte Core Anzahl zu optimieren!

Man macht einfach das was man kann und programmiert generell für Multicore Systeme, manchesmal auch nur für dual Core, das man aber extra für X-Cores optimiert, ist ein irrtum.

Das Problem an Games ist einfach das sich der Programmcode nicht beliebig Parallelisieren lässt!!
Ergo ist die Skalierung mit mehreren Cores meist ziemlich beschissen, von 1 auf 2 hat man noch den größten Schub, danach wirds aber eher mau...


----------



## Adrenalize (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*



Stefan Payne schrieb:


> Ergo ist die Skalierung mit mehreren Cores meist ziemlich beschissen, von 1 auf 2 hat man noch den größten Schub, danach wirds aber eher mau...


Wobei es ja im Grunde gute Möglichkeiten gäbe, z.b. Soundeffekte und Physikeffekte zu verteilen. Dank Vista sind Spielereien wie EAX im Grunde ja obsolet, und auch die Rechenpower wäre vorhanden, um sämtliche Halleffekte usw. in Software zu berechnen. Hätte den Vorteil, dass jeder Onboardsoundchip alle Effekte kann, und die Spieleentwickler sich nicht mehr um die Hardware kümmern müssen.

Intels Präsentationen zu Raytracing sind ja auch interessant, da skalieren die Cores ja sehr gut mit.
Im Grunde gibts genug Ansatzstellen, wie Jan Paul van Waveren ja auch sagt, nur ist es halt mehr Arbeit, die Engine auf derartige Parallelität auszulegen.


----------



## Stefan Payne (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Ja, aber du vergisst, das der ganze Mist auch synchronisiert werden muss (kurzfassung: mag jeder Entwickler) und wirklich gut parallelisieren kannst das auch nicht.

Theoretisch klasse, in der Praxis kaum praktikabel.

Die Intel Präsentation kannst in die Tonne kloppen, ganz andere Baustelle!
Rendering lässt sich ja bekanntlich sehr gut parallelisieren, wie du inzwischen weißt, haben wir schon '32 Core Prozessoren' (ja ja, ich weiß...)  im Rendering bereich.

Das Problem ist aber das ganze Zeugs was neben dem Rendering noch erledigt werden muss, von der CPU und das lässt sich eben nicht soo gut parallelisieren.


----------



## riedochs (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Man müsste also das Programm/Spiel auf die jeweilige Anzahl der Prozessoren optimieren. Nur wer soll das bezahlen?


----------



## Stefan Payne (2. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Nein, nein...
Das _kann man nicht_ bzw man lässt es gleich!!

Wie schon im artikel geschrieben, entweder man programmiert ein Spiel Singlethreaded (Traum eines jeden ENtwicklers) oder man versucht von anfang an alles möglichst zu parallelisieren, wieviele Cores dann am Ende unterstützt werden, interessiert den Entwickler nicht, er versuchts halt für dieses Projekt optimal zu machen...

Natürlich sind Spiele nicht beliebig parallelisierbar, daher gibts recht starke grenzen, ich denke das die Grenze schon bei 4 Cores erreicht ist...

Das meinte er auch mit diesem Satz:


> Having 6 separate tasks, or steps in your pipeline, does not necessarily mean the engine scales all the way up to a system with 6 cores.



Das liegt halt daran, das man eben NICHT alles gleichzeitig berechnen _kann_ man kann manches zwar parallel rechnen, nur muss mans hinterher wieder zusammenfügen (logisch ) und genau da liegt das Problem bzw der Aufwand!

Bei Server/Workstation anwendungen ist dieser Schritt teilweise nicht erforderlich, daher können die auch eher und stärker von mehreren Prozessoren profitieren als bei Spielen, wo man streng genommen nur eine AUfgabe erledigt...

Bei Rendering kann man z.B. das zu berechnende Bild in mehrere Teile zerlegen und dann den CPUs sagen 'mach ma', bei Spielen ist das nicht soo einfach, das ist verdammt heikel und sollte nicht unterschätzt werden!!
Ebenso darf der Performancegewinn durch Multithreading nicht überschätzt werden.

Wenn ich 10 verschiedene Dinge gleichzeitig erledige (Webserver, Datenbanken z.B.) kann die Leistung durch mehrere Kerne auch stärker steigen als wenn ich nur eine Aufgabe erledige...


----------



## kmf (8. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*



Stefan Payne schrieb:


> ...
> Bei Server/Workstation anwendungen ist dieser Schritt teilweise nicht erforderlich, daher können die auch eher und stärker von mehreren Prozessoren profitieren als bei Spielen, wo man streng genommen nur eine AUfgabe erledigt...
> ...


Das ist so nicht ganz richtig Stefan. Auch auf Workstation müssen die Programme Multithreading unterstützen, sonst sind die auch nicht schneller.


----------



## Adrenalize (8. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*



kmf schrieb:


> Das ist so nicht ganz richtig Stefan. Auch auf Workstation müssen die Programme Multithreading unterstützen, sonst sind die auch nicht schneller.


Ich denke er meinte, eher, dass die Software dort teils unabhängig parallel laufen kann, z.b. ein Webserver-Programm mit mehreren Threads, das muss da nicht soviel synchronisieren.

Bei Spielen ist halt das Problem, dass man ja mehr oder weniger eine Echtzeitberechnung von Physik- oder soundeffekten braucht, weil jede Wartezeit die Framerate senkt, eben weil Grafik, Sound, Physik, KI und alles fertig sein müssen, bevor der Spieler seinen nächsten Befehl eingibt. Die Synchronität ist da sehr wichtig.
Man muss die aufgaben halt in diverse Threads teilen, und diese so arrangieren, dass es zu keinen unnötigen Wartezeiten kommt. Die Anzahl der Kerne ist latte, bis zu einer gewissen Zahl geht es halt schneller. Mit z.B. 8 Threads auf 8 Kernen können alle zeitgleich starten, 7 müssen dann aber evtl. auf den letzten Thread warten, insofern wird gewonnene Zeit wieder verbummelt. mit 4 Kernen bekommt der längste Thread einen Kern, und die anderen 7 werden auf die restlichen 3 Kerne verteilt. Dauert genauso lange, aber die Kerne arbeiten länger und bummeln nicht, bis der letzte Thread fertig ist.


----------



## Stefan Payne (8. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*



kmf schrieb:


> Das ist so nicht ganz richtig Stefan. Auch auf Workstation müssen die Programme Multithreading unterstützen, sonst sind die auch nicht schneller.


Hab ich doch geschrieben, siehe Adrenalzie 

Siehe z.B. den Cinebench bei mehreren Kernen, der teilt das BIld in mehrere Abschnitte auf und überlässt jedem Prozessor einen Teil davon...


----------



## PCGH_Carsten (8. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Du brauchst bloß auf Daten-Level-Parallelismus auszuweichen, dann passt das schon mit dem Overhead. Allerdings müssen dazu etliche Programmierer erstmal umdenken.


----------



## CyLord (8. Oktober 2007)

*AW: [PCGH Extreme] Interview with id:"What do you think about AMDs triple core approa*

Im Prinzip ist das kein neues Modell, mit dem Abschalten von Kernen. Gab ja auch schon 3700er, wo aus einem Zweikern- ein Einkernprozessor entstand.

Man versucht als Programmierer sicher noch die Einkernprozessoren besser zu unterstützen, da es immer noch genug Leute gibt, die so einen besitzen. Ich kann mich an ein Interview erinnern, da hat ein Entwickler gesagt, dass die Parallelisierung sich kontraproduktiv auf die älteren Lösungen auswirkt.


----------

