BEARBEITEN:
Einige andere Punkte wurden in http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 angesprochen .
- GPU nicht so gut für die Rekursion
- GPU nicht so gut zum schweben
- Die GPU funktioniert möglicherweise besser für den neuen Ansatz des maschinellen Lernens, nicht jedoch für die herkömmlichen Engine-Algorithmen
Original :
@ Maxwell86 hat bereits hervorragende Links und Ressourcen gegeben. Achten Sie auf die Zeta-Schach-Engine. Es ist eine GPU-Schachengine. Leider hat die GPU ihre Nützlichkeit bei der Schachprogrammierung nicht bewiesen. In der Tat ging das Zeta-Schach-Engine-Projekt absolut nirgendwo hin.
Die GPU funktioniert sehr gut bei Floating-Berechnungen und Algorithmen, die parallel geschaltet werden können. Dies erfordert Unabhängigkeit. Aber wenn wir uns einen typischen Min-Max- (oder Alpha-Beta-) Baum ansehen (der von jeder Schachengine verwendet wird)
Der rechte Zweig hängt vom linken Zweig ab. Insbesondere wenn wir einen Cutoff (Fail-High) erhalten, müssen wir nicht einmal die verbleibenden Knoten durchsuchen. Leider ist dies nicht etwas, was eine GPU effizient tun kann. Es ist möglich, ein GPU-Programm für Alpha-Beta zu schreiben, aber die GPU-Threads (bekannt als Kernel) müssen angehalten werden, um zu warten. Im Gegensatz zu einer CPU kann ein GPU-Kennel nicht einfach zu etwas anderem wechseln (einem Prozess, der als Thread-Switch oder sogar als Prozess-Switch bezeichnet wird).
Unser vorhandenes Algorithmus- und Engine-Wissen wurde für die CPU-Welt abgeleitet. Der gesamte Algorithmus müsste für die GPU erneut untersucht werden. Leider gibt es nicht viel Interesse und Forschung darüber.
Ich habe keine Erfahrung mit der GPU-Programmierung, aber normalerweise sind GPUs sehr effizient darin, einfache Befehle parallel auszuführen. Anscheinend ist dies nicht der Fall für den Suchbaum, der für Schachmaschinen verwendet wird. Daher verliert die GPU ihren Rechenvorteil gegenüber einer CPU.
Dies ist natürlich der aktuelle Stand der GPU-Programmierung für Schach-Engines, aber die GPU-Programmierung ist relativ neu, sodass sie möglicherweise in Zukunft Lösungen für die aktuellen Probleme finden.
Hier sind ein paar interessante Links, insbesondere der Blog über die Implementierung einer Schachengine für die GPU ist sehr aufschlussreich.
quelle
Das LC0-Projekt (Leela Chess Zero), eine Open-Source-Adaption von AlphaZero für Schach, zeigt die Vorteile von GPUS, Gleitkommaleistung und Speicherbandbreite in großen neuronalen Netzen.
http://lczero.org/
https://en.wikipedia.org/wiki/AlphaZero
https://groups.google.com/forum/#!forum/lczero
quelle
Ich beendete meinen aktuellen Lauf auf Zeta v099a, meiner experimentellen GPU-Schach-Engine.
https://github.com/smatovic/Zeta
Die tatsächliche Schlussfolgerung der aktuellen Iteration ist, dass eine einfache Engine mit Standard-Schachprogrammiertechniken nach OpenCL portiert werden kann, um auf einer GPU ausgeführt zu werden. Es wäre jedoch aufwändiger, die Engine in Bezug auf berechnete Knoten pro Sekunde wettbewerbsfähig zu machen ( Geschwindigkeit), Heuristik (Expertenwissen) und Skalierung (paralleler Suchalgorithmus).
Computer-Schach, als ein Informatik-Thema, entwickelte sich über Jahrzehnte, beginnend in den 40er und 50er Jahren, und erreichte 1997 mit dem Match Deep Blue vs. Kapsarow einen Höhepunkt. Heutzutage werden Schachengines durch das Spielen von Tausenden und Abertausenden von Spielen optimiert, sodass es zwei verschiedene Aufgaben sind, eine Schachengine auf dem GPU zum Laufen zu bringen und eine wettbewerbsfähige Schachengine auf dem GPU zum Laufen zu bringen.
quelle
Ich habe einige Erfahrungen mit CUDA und Schachprogrammierung (keine Engine-Programmierung). Diese Frage kam mir auch oft in den Sinn. Hier ist meine Meinung, ich habe das nie studiert.
Zunächst ist es so gut wie sicher, dass es mit dem aktuellen Design der Schachengines unmöglich ist. Sonst würde es einfach jemand machen.
Ob Sie es in einem völlig neuen Design verwenden können, ist eine größere Frage. Es gibt kein Problem mit Ganzzahloperationen, aber es ist klar, dass Sie primitiven Code ohne ernsthafte Verzweigung auf vielen Entitäten ausführen müssen.
Meiner Meinung nach sollten alle Baumberechnungen auf CPU laufen.
Aber ich kann mir vorstellen (ich sage nicht, dass es möglich ist), dass einige Teilauswertungsfunktionen so viele Auswertungen wie möglich an Positionen vornehmen, um der CPU mehr Zeit zu geben und ihm zu helfen, den Baum auf eine bessere Art und Weise zu bauen, sagen wir Eine solche Funktion könnte berechnen, wie ernsthaft die Berechnung für jede Position sein sollte.
Sie können die Anzahl der angegriffenen Quadrate, der angegriffenen Teile, der Feuerkraft um Könige und in einigen Teilregionen an Bord von Dingen, die mit der Bauernstruktur zu tun haben, berechnen. Sie könnten wahrscheinlich GPU-optimierten Code für diese machen. Sie können wahrscheinlich kostenlos eine Menge nützlicher Informationen erhalten (keine CPU-Zeit, kein Warten auf die CPU), aber Sie müssten wirklich genial sein, um die volle Leistung moderner GPUs für solche kleinen Dinge zu nutzen.
Es ist wahrscheinlich nicht sehr interessant, ein komplett neues Motordesign zu entwickeln, um etwa 30% mehr Geschwindigkeit zu erreichen. Und um beispielsweise die Geschwindigkeit der GPUs auf dem neuesten Stand der Technik um das 20-fache zu steigern, müssten Evaluierungsfunktionen wirklich fremd sein.
Und als letztes sehe ich hier ein Problem. Sie können einen Code auf der CPU ausführen, ohne viele Überlegungen anzustellen, aber in einem CPU + GPU-Szenario müssten Sie mit wirklich unterschiedlichen Verhältnissen von CPU und GPU umgehen. Geschwindigkeiten und Kernzahlen. Sie benötigen für 16-Kerne-Cluster mit schwacher GPU einen anderen Code als für langsame CPUs mit superschneller GPU, um alle Hardwarefunktionen nutzen zu können. Ein Benchmarking von CPU und GPU und die Ausführung von mehr Code auf dem schnelleren Computer wäre wünschenswert. Aber trotzdem denke ich, dass Sie nicht annähernd 3000 Kerne nur mit Auswertungsfunktion (en) füttern können.
Bearbeiten: Um die Dinge klarer zu machen, schickte die CPU regelmäßig GPU-Arrays mit Positionen, um teilweise Auswertungen vorzunehmen. Vielleicht war das nicht klar aus dem, was ich geschrieben habe.
Viele Probleme, um diese Arbeit zu machen.
quelle
Ich sehe nur Vorteile bei der Verwendung einer GPU-basierten Schach-Engine und sehe dabei keine ernsthaften Probleme. Vielleicht haben Sie Probleme, versuchen Sie es mit einem Standard-Schachprogramm, und wissen nicht viel über die anderen. Ich fange gerade an, ein Schachprogramm von der ersten Zeile an als zweites CUDA-basiertes Programm zu schreiben, nachdem ich einige erste Programmiertests auf CUDA ohne besonderen Sinn gemacht habe. Bald kann ich einige erste Leistungstests durchführen und Spiele gegen andere Motoren testen. Vielleicht in der nächsten Woche. Ich fange gerade an, es zu erstellen, aber ich beende es schon fast und die meisten Funktionen sind bereits fertig.
quelle