PS3 vs. xbox 360 grafik???

Luke64 schrieb:
Wie hier schon öfter erwähnt wurde, bestehenden Code einfach für die PS3 zu kompilieren führt dazu, dass die SPEs zwar schon vom Compiler irgendwie mit einbezogen werden (dafür ist der ja da), aber nicht dazu, dass die SPEs auch effizient genutzt werden. Das erreicht der Entwickler nur, wenn er seinen Code so anlegt, dass er [der Code] schön parallelisiert auf verschiedenen SPEs laufen kann.

Das Problem ist nur, dass ein Spiel bzw zumindest die visuelle Darstellung ein Szenengraph ist. Also ein gerichteter, azyklischer Graph. Der bietet mathematisch gesehen erstmal nahezu keinerlei Möglichkeiten prallelisiert zu werden, was schonmal ziemlich schlecht ist. Was man nun machen kann, ist es einzielne Teile, also Blätter aueinanderzupflücken.
Im Grunde sucht man nach inneren Schleifen die sich prallelisieren lassen.
Wenn wir jetzt mal eine, in diesem Fall recht sinnlose Schleife nehmen:

.
.
.
int a[10000];
for(int i = 0; i<10000; ++i)
{
a = 3*i;
}

Es wird also eine Reihe von Zahlen in das Array geschrieben 0,3,6,12 usw
Normalerweise macht ein Prozessor das ganze dann 10000mal. Da die n+1te Operation auch ohne n-te Operation ausgeführt werden kann, kann man auch zwei Schleifen draus machen. Eine geht von 0-4999 und eine von 5000-9999 und diese dann parallel von zwei Prozessoeren abarbeiten lassen.
Das Problem ist aber diese Stellen bzw Schleifen auch wirklich (automatisch) zu finden. Das kann der Compiler nicht allein.
Beispielsweise kann man eine Fibonacci Reihe (n+1 = n + n-1) selbst mit 4096 Prozessoren keinen Tick schneller machen als mit einem Prozessor, da diese Operation nicht parallelisierbar ist. Mathematisch einfach unmöglich!
Und ein Szenengraph kommt einer Fibonacci Reihe schon in gewisser Weise nah. Genau um dieses Thema wird es (hoffentlich) in meiner Diss gehen.
Ich hoffe ich konnte die generelle Problematik etwas verständlich darstellen.

€- Der geneigte Leser wird feststellen, dass meine obige Schleife einen Überlauf verursachen würde ;) Entweder i<9999 oder i++, wobei man immer erstere Variante wählen sollte!!!
 
chk23 schrieb:
Was meinst Du, wie die 48 unified shader des Xenos arbeiten, glaubst Du, wann welches Shaderprogramm in welchem Modus auf welcher Shadereinheit abläuft, müßte vom Entwickler "per Hand" gemanaged werden?

Das ist halt das "Problem" der In-Order-Architektur(Xbox360 & PS3) hier werden Insturktionen hintereinander abgearbeitet werden wesshalb im Compiler eine umständliche und weitgehend manuelle Parallelisierung vorgenommen werden muss im gegensatz zu Out-of-Order CPU's(desktop CPU's von INTEL, AMD) hier wird schon in der Hardware mittels Algorithmen versucht den Code optimal zu verteilen, das erfordert also nicht einen so sehr optimierten Code wie bei In-Order-CPU's
 
flo88 schrieb:
Ich bin ja kein Programmierer, aber dir ist bewusst, wie viel 64 Cores sind? Und dir ist bewusst das die PS3 8 davon hat (nicht mal ganz) und sich die Entwickler schon damit schwer tun?

Die Schwierigkeit bei der Programmierung für mehere Kernen ist einfach das es bisher nur Engine's gibt die für 2 oder 4 Kerne Programmiert wurden, das ist aber nicht das Ziel der Entwickler für die Zukunft.
Das Ziel ist es Engine's zu entwickeln die unabhängig von der Anzahl der Kerne skalierbar sind, und wenn das geschafft ist, und da führt der Weg nunmal hin, ist es auch völlig egal ob 8 , 64 oder 128 SPE's......
 
squallsdestiny schrieb:
Die Schwierigkeit bei der Programmierung für mehere Kernen ist einfach das es bisher nur Engine's gibt die für 2 oder 4 Kerne Programmiert wurden, das ist aber nicht das Ziel der Entwickler für die Zukunft.
Das Ziel ist es Engine's zu entwickeln die unabhängig von der Anzahl der Kerne skalierbar sind, und wenn das geschafft ist, und da führt der Weg nunmal hin, ist es auch völlig egal ob 8 , 64 oder 128 SPE's......

Wenn Du eine Möglichkeit findest, dass die Engine linear zu den Kernen skaliert, bekommts Du 100%ig den Turing Award! Also ran!
 
Xenobit schrieb:
Eben! Weg von Projektion und Polygonen zu Raytracing und NURBS.
Aber das Thema hatten wir beide schonmal, oder?

Ich glaub das war jemand anders :)

Aber ich denke auch irgendwann ist Rasterisierung am Ende dann steht der Rechenaufwand zur Performance in keinem Verhältnis mehr zueinander und dann kommt Raytracing ins spiel, das ja nahe zu 100% mit jedem zusätzlichem Kern skaliert.
 
Xenobit schrieb:
Wenn Du eine Möglichkeit findest, dass die Engine linear zu den Kernen skaliert, bekommts Du 100%ig den Turing Award! Also ran!

^^ , habe gewusst das das kommt, such schon verwfeifelt die iX / c't , da gab es eine sehr ausführlichen Bericht über das Thema.
Aber natürlich wird die Verlustleistung nach steigender Anzahl der Kerne immer höher, Ziel der Entwickler ist einfach nicht mehr festgelegt auf eine bestimmte Anzahl von Kernen zu sein, schon die UE3 soll auf bis zu 16 Kernen skalierbar sein, wie das in der Praxis aussieht, keine Ahnung.
 
@Xeno, danke für die durchdachte Antwort. Welch angenehme Abwechslung hier ;)
Das Problem ist nur, dass ein Spiel bzw zumindest die visuelle Darstellung ein Szenengraph ist. Also ein gerichteter, azyklischer Graph.
Bei der Darstellung alleine stimme ich dir zu. Jedoch ist die Darstellung einer Szene doch nur ein sehr geringer Teil dessen, was ein komplettes Spiel ausmacht. :)

Nur mal so abstrakt gedacht: wir haben in einem Spielablauf die Benutzereingaben, die Aktionen und Reaktionen der Gamelogik auf diese Eingaben und das Feedback an den Benutzer (Ausgabe).

Konzentrieren wir uns mal auf die rechenzeitintensiven Aufgaben für die CPU. Das sind die Aktionen des Spiels und die Reaktionen auf die neue Situation durch die Benutzereingaben. Dazu gehören z.B.: Animation, KI, Objektkollision & Physik und Sound. Diese Dinge lassen sich doch hervorragend parallelisieren - gerade die Kollisionsabfragen und die (damit verbundene) Physik ergeben meist tonnenweise Rechenoperationen, die sogar untereinander parallelisiert bearbeitet werden könnten (z.B. wenn 2 Objekte, die sich nicht beeinflussen können, behandelt werden).

Für das Rendering der Ausgabe müssen dann natürlich alle Daten, die für die Darstellung relevant sind, vorliegen.

Es gibt immer gewissen Synchronisationspunkte im Rechenablauf eines Spiels. Aber wenn man diese geschickt plant, lassen sich um diese Punkte herum die zu erledigenden Aufgaben mithilfe der 7 SPEs so verteilen, dass die Abarbeitung deutlich schneller läuft.

Und das bringt mich genau zu meiner obigen Aussage: einfach den bestehenden Code compilen nutzt kaum die Power aus. Der code muss schon logisch so strukturiert sein, dass er zu dieser Struktur mit wenig Synchronisation passt.
 
Xenobit schrieb:
Wenn Du eine Möglichkeit findest, dass die Engine linear zu den Kernen skaliert, bekommts Du 100%ig den Turing Award! Also ran!
Von linear hat er nichts geschrieben ;)

Edit: @squallsdestiny hab dich korrekt umgewandelt, sorry. :)
Edit 2: wieder zurückgewandelt. Nun muss aber auch gut sein. :D
 
iimpact schrieb:
Kleine Korrektur es sind nur 6 nutzbare SPE's für den Spielebetrieb auf einem läuft der Hypervisor.
Öh... Hypervisor in Spielen? Der Hypervisor ist nur für das "alternative Betriebsystem" aktiv afaik. Macht auch kaum sinn, die eigene Software zu überwachen, oder...? Aber das Betriebsystem der PS3 läuft auf jeden Fall irgendwo mit. Das braucht aber sicher keine komplette SPE für sich, eher einen Teil der PPE und (manchmal) einen Teil einer SPE.
 
Luke64 schrieb:
Öh... Hypervisor in Spielen? Der Hypervisor ist nur für das "alternative Betriebsystem" aktiv afaik. Macht auch kaum sinn, die eigene Software zu überwachen, oder...? Aber das Betriebsystem der PS3 läuft auf jeden Fall irgendwo mit. Das braucht aber sicher keine komplette SPE für sich, eher einen Teil der PPE und (manchmal) einen Teil einer SPE.

Soweit wie ich das verstanden ist es eben nicht möglich den Hypervisor "irgendwo mit laufen zu lassen". Es wird ein kompletter SPE dafür benötigt. Das ist ja das Problem an den SPE's so wie ich es verstanden habe.
 
Luke64 schrieb:
Konzentrieren wir uns mal auf die rechenzeitintensiven Aufgaben für die CPU. Das sind die Aktionen des Spiels und die Reaktionen auf die neue Situation durch die Benutzereingaben. Dazu gehören z.B.: Animation, KI, Objektkollision & Physik und Sound. Diese Dinge lassen sich doch hervorragend parallelisieren - gerade die Kollisionsabfragen und die (damit verbundene) Physik ergeben meist tonnenweise Rechenoperationen, die sogar untereinander parallelisiert bearbeitet werden könnten (z.B. wenn 2 Objekte, die sich nicht beeinflussen können, behandelt werden).
Da stimme cih Dir zu. Bei der 360 wird ja beispielsweise 1 Core verwendet um DD 5.1 zu codieren und man hat beispielsweise die PhysX SDK von Ageia auf einen Core zugeschnitten (ich arbeite selbst auch damit). Die alles trägt zur Immersion des Spiels bei, steigert aber nicht die grafische Darstellung. Spiele profitieren von mehreren Cores durchaus, aber nicht auf grafischer Ebene.
Da wäre es dann sinnvoll zwei GPUs zu verwenden. Die SLI oder CrossfireKarten zeigen ja wie es geht und wie die Performance steigt.
Wenn ich eine Konsole bauen dürfte, würde ich einen DualCore Prozessor und 2 GPUs nehmen. Beides Technologien die schon da und billig zu produzieren sind. Und zwei GPUs sind kinderleicht zu verwenden, bzw muss man sich als Entwickler damit überhaupt nicht beschäftigen.
 
iimpact schrieb:
Soweit wie ich das verstanden ist es eben nicht möglich den Hypervisor "irgendwo mit laufen zu lassen". Es wird ein kompletter SPE dafür benötigt. Das ist ja das Problem an den SPE's so wie ich es verstanden habe.
Ja das ist richtig - ein Hypervisor hat aber die Funktion, gewisse Teile der Hardware zu kapseln und damit zu überwachen - damit eben nicht direkt darauf zugegriffen werden kann. Im Falle des PS3 Hypervisors ist das die Grafikkarte, die bei Linux weggekapselt wird, sodass man nicht auf die 3D-Funktionen zugreifen kann. Ein Hypervisor macht aber bei Spielen keinen Sinn, denn welchen Zugriff sollte er unterbinden? Deshalb meinte ich: Hypervisor läuft einfach nicht bei Spielen. Bei Spielen läuft nur das OS mit einigen Funktionen mit (z.B. Online-Nachrichten Empfangen, Downloads und so was).
Unter Linux stehen nur 6 SPEs zur Verfügung, da läuft der HV ja auch.
 
2 CPU Kerne mit guter Prefetch und Branch Prediction, eine multi GPU core lösung, dedizierter Soundhardware und alles wäre im lack ^^

@Luke64

Ah okay danke, dachte der läuft auch im Spielebetrieb mit.
 
Zurück
Top Bottom