Iscaran schrieb:
Dachte ich mir auch gerade ... Visual Basic... das war ja sogar bereits 2008 weit mehr als Out. Egal. Ich hab heute gut gelacht.
Hotstepper schrieb:
...Man fragt sich nur wie die Spiele Entwickler es schaffen auf so saumässig langsamen 8 Kern CPUs wie in der Xbone oder PS4 zum laufen bekommen, wenn nicht durch parallelisieren und optimieren.
Man kann - auch wenn es architektonische Ähnlichkeiten der Hardware gibt - nicht die Konsolen mit dem PC vergleichen. Auf dem PC gibt es oft noch ein paar "Ebenen" zwischen dem Programm/Spiel und der Hardware, was auch bereits Leistung kostet. (Das kann je nach "Komplexität" durchaus auch mal mehr als 10% "Leistung" kosten.
Zu mal auch auf den Konsolen im Endeffekt 1 - 2 Kerne für das Betriebsystem reserviert sind, die anderen Kerne wiederum exklusiv für das Spiel. Die Task-Sheduler können in so einem Fall ganz anders agieren als am PC. Man kann wirklich Kerne "exkulusiv" nutzen, ohne das einem der Sheduler in den Weg kommt.
Aber auch an den Konsolen muss man die Programme in der Regel nur auf 6 Kerne optimieren, der Rest ist ja reserviert.
Wichtig ist hier in dem Thema - was leider etwas untergeht und an dem man merkt, dass viele die hier ihren Senf dazu geben, kaum Ahnung von der Materie haben:
Nicht jedes Problem lässt sich "beliebig" in n-Unterprobleme aufbrechen, die man effektiv Parallelisieren kann und sobald ein sequentieller Anteil vorhanden ist - zum Beispiel auch zur Steuerung des Programms - läuft man irgendwann unweigerlich gegen eine "Wand". Stichwort
Amdahlsches Gesetzt.
Und damit kommen wir auch zu Grafikkarten, die hier ja auch wieder aufgeführt werden: Grafikkarten arbeiten in der Regel nach dem »SIMD«-Prinzip: Single Instruction, Multiple Data. Eine GPU führt in der Regel eben eine "Berechnung" aus, die sie aber auf viele gleichzeitig aufkommende Daten anwendet. Dadurch kann man auch hier eine massive Parallelisierung umsetzen. Der Befehl "a+b" wird halt auf einen "Vektor" angewendet, den kann man aufsplitten und an x-Recheneinheiten aufteilen. Da die Daten voneinander "unabhängig" kann man solche "Probleme" gut parallelisieren. Es ist nämlich kein "Datenaustausch" notwendig. Bei entsprechenden "Daten" die von einander unabhängig sind, also nicht auf einander angewiesen sind, kann selbst eine CPU heute recht schnell rechnen - man siehe SSE und AVX.
Beispiel für Vektor [1, 2, 3, 4, 5] + [6, 7, 8, 9, 10]. Da einfach a+b gerechnet wird, kann man jede Zahl "einzeln" zusammen rechnen und alle 5 benötigten Werte zur gleichen Zeit. (Ja es ist stark vereinfacht!)
Und nichts anderes macht heute auch eine GPU. Jeder Shader-Cluster führt im Endeffekt nur "einen" Befehl aus auf voneinander unabhängige Daten.
Wenn man nun aber [1,2,3, a1+b1, a2+b2, a2+b2] + [6, 7, 8, 9, 10] rechnen würde, hätten wir bereits eine Abhängigkeit. Man kann in dem Fall erst mal nur 1+6, 2+6, 3+8 rechnen - man kann also nur noch 3 Aufgaben parallelisieren. Erst anschließend kann dann der rest aufgelöst werden.
Und genau das ist das Problem bei der "Parallelisierung" im Bereich von Spielen und Programmen. Man kann zwar verschiedene Aufgaben auslagern, aber die Aufgaben haben Abhängigkeiten untereinander und müssen ihre Daten synchronisieren und dieses Synchronisieren passiert in der Regel im "Maintask". Wirklich Geschwindigkeit erlangt man hier auch nur, wenn man bestimmte Aufgaben hat, die zwar die selbe Anweisung nutzen, aber voneinander unabhängige Daten haben.
Und ich merke, mein Beitrag wird wieder zu lang. Ich breche es daher hier ab.
![Zwinkern ;) ;)](/forum/styles/smilies/wink.gif)