Schachprogramm arbeitet mit der GPU schneller als mit der CPU?

5 Antworten

Gibt zwar auch so Sachen wie Eröffnungsbuch, aber das ist im Kern Backtracking. Auf jede Zugmöglichkeit des Spielers simuliert es rekursiv alle Zugmöglichkeiten des Gegners, darauf rekursiv wieder alle Zugmöglichkeiten des Spielers... und gibt immer die jeweils bestmögliche Wahl mit Bewertung hoch. Die Laufzeit nimmt also exponentiell zu. Man kann die Pyramide der Aufrufe auf verschiedene Prozessoren aufteilen und parallelisieren, das heißt, bestimmte Prozessoren übernehmen die Zugfolgen, die von jeweils einem Zug mit geringerer Rekursionstiefe ausgingen und irgendwie wird das bei Rückkehr wieder zusammenkoordiniert. Aber wenn man viele Zugmöglichkeiten hat, bringt das auch nur vielleicht zwei Züge Vorausschau oder 400 Elo mehr in derselben Zeit. Jetzt ist mir noch aufgefallen, daß der Minimax einen Faux-Pas des Spielers übergehen würde. Was also tun? Man läßt den Zufall walten und den Spieler statt aller Möglichkeiten einfach nur ein paar zufällige Züge wählen, man unterstellt ihm also schonmal ein wenig Dummheit oder eingeschränktes Handeln vorweg. Das macht man ein paarmal hintereinander und summiert die rückgegeben aufsummierten Bewertungen für eine Endbewertung auf. Und gerade hier könnten sich diese GPUs auch als dienlich erweisen, weil sie dann nämlich dann das Schachbrett und die Zugabfolgen mit günstigen visuellen Teilmustern vergleichen und diese auf Kongruenz und Brauchbarkeit bewerten, wobei sie sie mit evolutionären Algorithmen heuristisch und zufällig vermengen und variieren. Die Muster macht es dann auch automatisch in der jeweils passenden Spielsituation über ihre Fitnessbewertung wieder präsent, aber ob man mit denen als Einschränkung dann wieder backtracken muß oder ob sie sich so schon richtig selber verketten, das habe ich noch nicht kapiert. Irgendwo hieß es, Machine Learning hätte wegen der neuen Grafikprozessoren eine Renaissance erlebt. Tschuldigung für das Geschwafel zum Schluß. Ich weiß auch bloß, wie eine einfache OCR geht, aber wenn man dann noch einen Zufallsgenerator so als Mix & Match ins Spiel bringt, könnte sich was ergeben.

precursor 
Fragesteller
 01.02.2019, 12:43

Recht herzlichen Dank für deine hilfreiche Antwort !

0

Ich habe etwas genauere Erklärungen.

Eine GPU ist darauf ausgelegt, viele Berechnungen gleichzeitig auszuführen. Die GPU ist aber sowohl in ihrem Befehlssatz, als auch in ihrer Rechenleistung pro Kern etwas eingeschränkter, als eine CPU. Bedeutet für dich: Eine GPU kann mehr Leistung zur gleichen Zeit erbringen, dafür aber nur weniger komplexe Berechnungen anstellen.

Unter Umständen ist es besser, bestimmte Berechnungen auf die GPU auszulagern. Ein Beispiel hierfür wäre Bitcoin-Mining, was letztlich nichts anderes ist, als das Ausprobieren, eine Zahl zu finden, die eine bestimmte Voraussetzung erfüllt. Die Arbeit, also die Berechnung eines Wertes, mit dem sich die Erfüllung der Voraussetzung feststellen lässt, ist denkbar einfach. Da du diese Rechenoperation sehr oft anwenden musst, bis du eine Zahl gefunden hast, die funktioniert, kannst du diese Aufgabe gut auf die GPU auslagern, da diese die Rechenoperation mit vielen Zahlen gleichzeitig ausprobieren kann.

Es kann also unter Umständen schneller sein, die GPU zu benutzen. Dies ist aber meistens nicht der Fall.

Ein herkömmliches Programm kann mit dieser starken Nebenläufigkeit nicht viel anfangen. Immerhin muss dein Browser nicht tausend mal gleichzeitig deine Lesezeichen laden, sondern bloß ein einziges Mal beim Start des Browsers.

Auch dein Browser hat eine Vielzahl an Aufgaben und Rechenoperationen, die er erfüllt. Bloß unterscheiden sich diese Aufgaben zu stark, um sie auf die GPU verlagern zu können.

Du kannst dir die Berechnung in der GPU wie eine Art Pipeline vorstellen. Du hast Daten, die du der GPU fütterst, die GPU wendet vorher durch Shader festgelegte Rechenschritte auf diese Daten an, und raus kommt dein Ergebnis. Diese Rechenschritte (dieser Shader) wird jedoch auf alle Daten angewendet, die zum Zeitpunkt, an dem die GPU diesen Shader benutzt, an die GPU geliefert werden. Du kannst nicht für jeden Datensatz einen eigenen Shader festlegen, aber trotzdem noch deine Datensätze parallel bearbeiten.

Und hier kommen die eingangs erwähnten Nachteile der GPU zum Vorschein, denn zum Berechnen einer einfachen Aufgabe ist die CPU deutlich schneller, außerdem besitzt sie in der Regel einen deutlich größeren Befehlssatz, um eine Aufgabe zu lösen.

Hinzu kommt außerdem, dass deine GPU keinen Zugriff auf Systemressourcen hat. Deine GPU kann beispielsweise keine Daten von deiner Festplatte lesen, diese müssen von der CPU geladen und in den VRAM deiner GPU geladen werden.

Gruß

Woher ich das weiß:Berufserfahrung – Hauptberuflich IT-Consultant, Informatikstudium
precursor 
Fragesteller
 31.07.2018, 23:18

Recht herzlichen Dank für deine hilfreiche Antwort !

1

Weil es bei dem Progrmm nicht um einen puren Rechen- sondern um ein sich Fortschreibenen Prozess handelt und somit weniger Rechenleistung benötigt.

precursor 
Fragesteller
 31.07.2018, 21:45

Ok, verstehe ich nicht so richtig, aber vielen lieben Dank für deine gute Antwort !

0
verreisterNutzer  31.07.2018, 21:53
@precursor

Ich habe informatik studiert und arbeite in der IT und verstehe die Antwort auch nicht ;-)

5

Eine GPU ist spezialisiert auf sehr schnelles rechnen. Eine CPU kann auch vieles andere, dafür weniger schnell. Ein Schachprogramm muss sehr viel rechnen, darum geht es mit GPU deutlich schneller.

Woher ich das weiß:Berufserfahrung
precursor 
Fragesteller
 31.07.2018, 21:47

Ok, vielen Dank für deine Antwort !

Was ich allerdings nicht verstehe, ist, warum es dann die absolute Ausnahme ist, dass Schachprogramme mit der GPU statt der CPU rechnen.

0
verreisterNutzer  31.07.2018, 21:52
@precursor

Ein PC funktioniert ohne CPU nicht und auf der CPU zu programmieren ist deutlich leichter (und daher billiger) als auf der GPU.

2
Nube4618  31.07.2018, 22:03
@precursor

Weil viele Hersteller den Aufwand für diese doch aufwändige Erweiterung nicht leisten wollen oder können.

1

ähm ich versuche es auch mal zu erklären, muss nicht stimmen:

Eine GPU ist gut darin, viele Sachen gleichzeitig (parallel) zu rechnen. So kann man z.B. beim Schach alle möglichen Züge gleichzeitig ausprobieren und vergleichen, was am besten ist.

AlphaZero könnte ich mir vorstellen, ist ein "neuronales Netz" o. ä. Diese Technologie hat viele einzelne "Rechenschritte" die auch wieder gut parallel/gleichzeitig ausgerechnet werden können.

Eine CPU ist besser im nacheinander Rechnen. (CPU haben z.B: 4 Kerne (Quadcore) und machen 4 Sachen gleichzeitig, dafür mit 3 Ghz, GPUs hingegen haben über 1000 Kerne, aber nur selten mehr als 1 Ghz) so grob.

Ein gutes Sprichwort: Wenn du 1+1 rechnen willst, ist die CPU viel schneller als die GPU. Wenn du Eine Million mal 1+1 rechnen willst, ist die GPU viel schneller.

precursor 
Fragesteller
 31.07.2018, 23:16

Recht herzlichen Dank für deine hilfreiche Antwort !

1