News CPU-Unterstützung von Spielen wird wichtiger

Anpassen an unterschiedliche Cachegrößen? Stell ich mir ein wenig illusorisch vor mit den ständig wechselnden Cachegrößen.
 
Wenn man aber Daniel Pohl Glauben schenken darf, dann lassen sich gerade die Berechnungen für Games enorm paralellisieren.
Da ist zum einen das Raytracing, welches sich ja theoretisch in so viele Threads aufspalten lässt, wie man Bildpunkte darstellen will.
Zum anderen lässt sich mit dem selben Ansatz z.B. auch die Hit Detection die ja heute oft immer noch nicht ordentlich funktioniert abwickeln.
Also zumindest was Spiele angeht, muss man sich um die Paralellisierung keine Sorgen machen. Das sieht man ja auch daran, dass es durchaus schon ordentliche Engines gibt, die von 4 Kernen problemlos profitieren können. Warum sollten sie es auch nicht. Für die Darstellung eines neuen Frames werden ja wahnsinnig viele verschiedene Berechnungen angestellt. Physik, KI, Player Input, etc.
 
Raytracing hat aber nur was mit der grafikausgabe zu tun und die ist schon seit urzeiten parallel.

Sonst gäbe es nicht heute karten mit mehreren hundert shadereinheiten, zig ROPs usw.


Warum sollten sie es auch nicht. Für die Darstellung eines neuen Frames werden ja wahnsinnig viele verschiedene Berechnungen angestellt. Physik, KI, Player Input, etc.

weil das so nicht immer geht.

du kannst z.b. nicht den Input und die Kollision parallel ausführen.

Was machst du dann im Fall einer Kollision ? verwirfst du den Input ? führst den input nochmal durch ?

Was ist wenn du ein item einsammeln würdest, dich aber eine rakete trifft und du gleichzeitig springst ?

trifft dich die rakete und du fliegst weg ? bekommst du das item ? wird der sprung verschluckt ? kannst du ausweichen ?


Bei der KI wäre das noch eträglich, die reagiert dann eben immer 1 frame verspätet. Das geht aber eben nicht überall.
 
WORD!

Der Mann spricht einem aus der Seele. Wie lange gibt es jetzt Multicore? Jahre. Und immernoch finden sich Spieleklitschen die es nicht gebacken bekommen sowas auszureizen.
Naja schnelles Geld eben - so verbugt wie die Games heut zu Tage auf den Markt kommen brauch man sich über sowas garnet wundern. :)
 
Sie bringen doch Larrabee für was braucht man dann noch eine aufwendige, teure CPU Optimierung? Die besten Engines brauchen wenig CPU Power, sieht man gut an Bishock(single Core reicht) und Crysis(dualcore). Einfach Grafikkarte wechseln und weiter gehts. Vorallem steigert sich die Leistung der Grafikkarten viel schneller als bei CPUs: https://www.computerbase.de/2009-08/test-14-grafikkarten-vergleich/

Wird mal eine neue CPU bzw. Architektur benötigt ist meist auch ein neues Board und neuer Arbeitsspeicher fällig und dann wirds richtig teuer. Trotzdem hat Intel recht, Quad ist schon lange Stand der Dinge und 6-Kerne ist der nächste Schritt. Von wegen dualcore übertakten, die werden bald noch stärker einbrechen...
 
Wobei die Grafikkarten ihre enorme Leistungssteigerung ja in den letzten Generationen auch nur über eine Erhöhung der Anzahl an Shader-Units erreicht haben.
Wenn man so will, ist eine 4770 z.B. ein 128 Kerner.
 
Hat das schon wer gasagt ? hab nur bis seite 3 gelesen.. hat sich schon alles so oft wiederholt:

Als Beispiele nennt er die Multicore-Optimierungen, aber auch die Berücksichtigung des unterschiedlichen Aufbaus verschiedener CPUs, etwa bei den Cache-Größen.

Ist ja kla das Intel will das der Cache Berücksichtigt wird. Der ist ja annähernd nutzlos bei Spielen^^
Beispiel von Q9400 zum Q9550. von 6 auf 12 MB Cache. Im CB Test sieht man das lediglich der Takt und CPU-Kerne wichtig sind.
Jetzt krieg ich gleich wieder haue, weil ich sage 12MB Cache sind unsinn. Noch zumindest. :lol:

so far
p0is3n
 
Weiß ja nicht welche Tests du dir so anschaust, aber gerade in Spielen spielt bringt mehr Cache was.
 
@Realsmasher: danke für die ausführliche erklärung. Mal ganz spannend etwas aus nem anderen blickwinkel zu sehen.

Wobei die Erstellung von Parallesierungen (seq, parallel, unabhängig), wie von dir beschrieben, wohl das größte Problem im Zusammenhang mit der Technik von heute darstellt.

Trotzdem finde ich den Ansatz oder Wunsch, vorhandene Resourcen auszuschöpfen sehr löblich.
Denn was zum Beispiel heute noch aus der XBOX 360 gezaubert wird ( Batman Arkham Asylum) ist echt gigantisch.
Soetwas würde ich den PC auch wünschen.
 
Zuletzt bearbeitet:
naja aber wenn der PC so angepasst wäre wie die xbox dann würden nur noch games verdammt gut drauf laufen...aber man will ja nicht nur zocken...mir ist es eignt egal inwieweit intel amd oder wer auch immer den herstellern verrät was als nächstes ansteht
 
Die Performance ist beim PC vorhanden...nur müsste sie entsprechend genutzt werden...ist bei Multiplattform Programmierung eben nicht so einfahc und obs sich rentiert ist die Frage.

Die andere Sache ist die Rückwärtskompatibilität. Da muss jeder sehen wie weit er das treiben will...man kann und muss nicht erwarten das der aktuellsteTitel auch noch auf alter Hardware lauffähig ist. Ist ja momentan auch nicht so. Den Schnitt muss man machen sonst schleppt man ewig den alten Kram mit sich herum...
 
Hmm, löst spontan bei mir gemischte Gefühle aus die Rede.

Er hat auf jeden Fall recht, das viele Spieleschmieden die Technik überhaupt nicht ausreizen und im Nebensatz auch oft darauf verzichten Spiele gescheit zu optimieren und skalierbar zu machen.

Gerade Multicore Unterstützung ist echt lächerlich derzeit. Bei einem Großteil beschränkt sich die Optimierung auf OS = Core 1 und Spiel = Core 2, Ende. Gerade hier sollte man wirklich mal intensiver versuchen die Sache zu verbessern, was jedoch mit horrenden Kosten und einer verlängerten Entwicklungszeit verbunden sein dürfte.

Die vollständige Skalierung eines Spiels je nach CPU ist vollkommen utopisch. Ich denk der Wahn schön schnell neue Generationen auf den Markt zu werfen, in der Hoffnung das es jemand kauft ist heute das primäre Problem. Spieleentwickler haben mehr zu tun als nur auf CPUs zu optimieren, gerade weil die CPU gerade bei Spielen doch mittlerweile nur eine Helferrolle eingenommen hat.

Wenn ich mir überleg das meine Kiste einen Q6600 und ne 8800 GTX drin hat (mittlerweile auch schon 2J alt wenn ich mich nicht vollkommen vertu) und was mittlerweile neues rausgekommen ist (egal ob GPU und CPU), dann muss ich trotzdem sagen das es kaum nützlich ist momentan Geld zu investieren (ausser man hat wirklich einen spinnealten PC).

Gleiches Problem bei DirectX. Wo wird 10 richtig genug? 10.1? Fast nirgends und wenn ja dann oft nur mit brutalen Performanceeinbrüchen. Die Industrie würde sich selbst einen gefallen tun die Releasezyklen zurückzudrehn und sich gegenseitig besser abzusprechen.

Gruß

P.S.
Was passiert wenn man eine Struktur ausnutzen MUSS, um Spiele leistungsfähig zu machen sieht man der PS3. Beschissener Entwicklungssupport, schwere Optimierung und Auslastung der Architektur mit dem Ergebnis das Spiele noch teurer werden... grandios!
 
Die Performance ist beim PC vorhanden...nur müsste sie entsprechend genutzt werden

Und genau das ist doch das Problem.

Wir haben Universalprozessoren d.h. der Prozessor soll universell für alles einsetzbar sein.

Das heißt auch das er universell jedes Programm beschleunigen müsste, so gut es geht.

Früher war das Usus, siehe out of order und superskalar. Heute wälzt man die Arbeit auf die Entwickler ab.

Wobei der Enwickler oftmals gar keinen Einfluss hat, da der Compiler diese Arbeit zum großen Teil übernimmt.
Das kann so im Endeffekt nicht funktionieren.
 
@Realsmasher

Die einzelnen Cores können sehr wohl direkt miteinander kommunizieren.
Die Parallelisierung ist eine Frage des Wollens und natürlich auch des mathematischen Verständnisses.
Zum Einen gibt es dafür die Numerik, welche nicht ohne Grund (also nicht nur zum Studenten quälen) existiert und von möglichst vielen zusätzlichen Recheneinheiten profitiert bzw. dafür geschaffen wurde.
Zum Anderen sind auch so nicht alle Aufgaben, die eine CPU ableisten muss voneinander abhängig.
Bei Spielen z.B. sollte es ein Einfaches sein, die KI, die Physik, die Bereitstellung der Daten für die GPU, etc. zu parallelisieren.
 
Zuletzt bearbeitet:
Die einzelnen Cores können sehr wohl direkt miteinander kommunizieren.

klar können sie das, aber nicht mit einzelnen werten.

Ich gebe dir ein Beispiel : Du willst 8 zahlen aufaddieren und eine Summe daraus bilden.

Seuqntiell brauchst du dafür 7 Additionen -> 7 Takte.

Der ideale parallele Algorithmus sieht so aus :

Schritt 1 : 1+2 - 3+4 - 5+6 - 7+8
Schritt 2 : 12 + 34 - 56 + 78
Schritt 3 : 1234 + 5678

Das macht 3 Takte und damit 133% Speedup. Diesen Speedup erhält man auch dank Superskalarität derzeit ohne irgentetwas zu tun.(solange man inlining im compiler aktiviert hat).
Allerdings eben nur bis 4 parallele Schritte dank maximal 4fach superskalaren Architekuren.


Was machst du nun auf einem aktuellen Quadcore prozessor ?

Bei diesem benötigt die Kommunikation zwischen den Kernen weit über 10 takte. (von der pipeline ganz zu schweigen)

Aus diesem Grund können die einzelnen Schritte NICHT auf den unterschiedlichen Kernen berechnet werden, da die Kommunikation länger dauern würde als das Zwischenergebnis vor Ort zu berechnen.

Dieser Ablauf kann überhaupt nicht auf einem aktuellen Mehrkernprozessor beschleunigt werden und das obwohl es ein erstklassiges NC Problem ist.


Allgemein gilt diese Unmöglichkeit für alle Algorithmen bei denen die Recheneinheiten zeitnah kommunizieren müssen und zusätzlich für alle Algorithmen mit einer Platzkomplexität von n (d.h. die genausoviele Werte einem anderen Kern mitteilen müssten wie sie Schritte ausgeführt haben)


Aber bitte, dir steht jederzeit frei uns eine Lösung zu präsentieren wie du das realisieren willst. Ich bin gespannt :)


Die Parallelisierung ist eine Frage des Wollens und natürlich auch des mathematischen Verständnisses.

Dir fehlt leider das theoretische Verständnis was sich überhaupt parallelisieren lässt.

Am besten den Link den ich auf Seite 3 gepostet habe nochmal durchlesen und verstehen.

Alternativ tut es auch eine Breitensuche mit google nach P-Vollständigkeit.
 
Ich wüsste gerne warum es dann bei einigen Engines einen sehr deutlichen Vorteil gibt je merh Kerne zur verfügung stehen. Wie haben denn die Porgrammierer das gemacht? Das nicht jeder Kern 100% mehr Leistung bringt ist klar aber wenn jeder einen sichtbaren Performancezuwachs bringt scheint es ja irgendwie durchaus zu klappen.

edit: Das soll keine Anmache sein aber offensichtlich scheinst du davon Ahnung zu haben und da es mich wirklich interessiert frage ich ^^
 
Zuletzt bearbeitet:
Kommt doch immer ganz auf die Anforderungen an.


Wenn ich ein Spiel habe bei dem es 4 große Verbraucher gibt, sagen wir spaßeshalber KI, Physik, Geometrie und Input und alle benötigen gleichviel Leistung, dann gelingt es relativ problemlos einen quadcore voll auszulasten und von nahe 300% mehr performance zu profitieren.


Nun lassen wir die Situation mal anders aussehen. Nehmen wir z.b. an eine Explosion erscheint auf dem Bildschirm, das heißt es muss extrem viel Kollision auf einmal berechnet werden.

Dann kippt für die Zeit der Explosion das Gleichgewicht und dieser Part braucht, sagen wir 75% der Gesamtrechendauer. Nun nehmen wir im speziellen die kollision, da diese sehr schwer zu parallelisieren ist. Wenn man es genau machen will geht es praktisch garnicht.

D.h. also 75% sequentieller Anteil ergibt sich während dieser Situation und schon erhalten wir nurnoch maximal 33% mehr Leistung durch die anderen Kerne.


Das ganze wohlbemerkt innerhalb eines Spiels.

Die Warscheinlichkeit jedoch, das ein Spiel überhaupt genau 4 gleich große Verbraucher haben wird, ist aber relativ unwarscheinlich.


Insbesondere recht einseitige Titel sind nun betroffen, also Titel bei denen die Last auf einen Teilbereich entfällt. Bei diesen ist nicht mit viel zu rechnen.



Klar geht das derzeit noch, 4 kerne sind jetzt nicht so übel. Denkt man jedoch etwas weiter...also mir würde es derzeit schon sehr schwer fallen auch nur 8 atomare Teile eines Spiels zu nennen die nicht voneinander abhängig sind.
 
Also wirds auch immer schwerer Spiele auf mehrere Kerne hin zu optimieren.
Demnach dürfte man mit einem soliden Quad längere Zeit gut beraten sein.
DAs Problem ist auch, dass die Entwicklung eines Spiels/Engine einfach zu lange dauert, und die Hardware der Software vorraus ist.
Eigentlich müssten die Spieleentwickler viel enger mit Intel/AMD/Nvidia zusammenarbeiten und die neuesteste Hardware gelifert bekommen, sprich die Codierungen etc. damit das Spiel auch schön skaliert.
Oft ist aber ziemlich oft gegenteiliges der Fall.
 
Zuletzt bearbeitet:
@Realsmasher

Soso, ich habe also keinen Ahnung, was sich überhaupt parallelisieren lässt. :hammer_alt:
Kannst du mir mal bitte sagen was du studiert hast, oder studierst, dass du dir diese Gewissheit leisten kannst.

Es gibt als Beispiel numerische Verfahren, die Werte nicht berechnen sondern schätzen. ;)
Und je mehr Kerne Schätzwerte bilden und diese prüfen desto schneller ist man fertig.

Ausserdem würde mich interessieren wo du diesen Wert von 10 Taktzyklen für die Kommunikation zwischen den einzelnen Cores hergeholt hast.
Nach deiner Ansicht wäre jeder aktuelle Superrechner garnicht möglich, weil dort zum Teil die Kommunikation zwischen den Kernen wesentlich länger dauert.

Nun nehmen wir im speziellen die kollision, da diese sehr schwer zu parallelisieren ist. Wenn man es genau machen will geht es praktisch garnicht.

Ah schön, selbst jemand der keine Ahnung von dem Thema hat, hat schonmal was von Ageia gehört.
Deren Physikkarten haben genau das schon vor über 3 Jahren in ihren Demonstations-Benchmarks im Konsumermarkt gemacht.
Gerade solche Dinge wie Physik lassen sich wunderbar parallelisieren. :daumen:

PS: Du stellst es irgendwie so hin, als wäre nahezu jede komplexe Rechnung nur in einer Sequenz lösbar und deshalb Multicores unnötig.
 
Nu bin ich gespannt...ist mal richtig interessant...meine Fachrichtung ist leider was völlig anderes, auch wenns irgendwie zur Situation passt aber von Programmieren hab ich keine Ahnung...
 
Zurück
Oben