CPU v. GPU dla silników szachowych

16

Procesory graficzne są lepsze w niektórych rodzajach obliczeń, np. W generowaniu bitcoinów i przeprowadzaniu symulacji klimatycznych.

Czy silniki szachowe skorzystałyby, gdyby obliczono je za pomocą procesorów graficznych zamiast procesorów?

Może jakaś znająca się na rzeczy osoba może podkreślić różnice między nimi i uświadomić nam, czy procesory graficzne są (nie) odpowiednie do rodzaju obliczeń wykonywanych przez silniki szachowe.

Jessica Ortiz
źródło

Odpowiedzi:

13

EDYTOWAĆ:

Kilka innych kwestii poruszonych w http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 .

  • GPU nie jest tak dobra do rekurencji
  • Procesor graficzny nie jest tak dobry do pływania
  • Procesor graficzny może działać lepiej w przypadku nowego podejścia uczenia maszynowego, ale nie w przypadku tradycyjnych algorytmów silnika

Oryginał :

@ Maxwell86 podał już doskonałe linki i zasoby. Zwróć uwagę na silnik zeta-szachy. To silnik szachowy na GPU. Niestety GPU nie udowodniło swojej przydatności w programowaniu szachowym. W rzeczywistości projekt silnika szachowego zeta poszedł absolutnie nigdzie.

Procesor graficzny działa bardzo dobrze na obliczeniach zmiennoprzecinkowych i algorytmach, które mogą być równoległe. To wymaga niezależności. Ale jeśli spojrzymy na typowe drzewo min-max (lub alfa-beta) (używane przez każdy silnik szachowy)

wprowadź opis zdjęcia tutaj

Prawa gałąź zależy od lewej gałęzi. W szczególności, jeśli możemy uzyskać odcięcie (fail-high), nie musielibyśmy nawet przeszukiwać pozostałych węzłów. Niestety, nie jest to coś, co GPU może zrobić wydajnie. Możliwe jest napisanie programu GPU dla wersji alfa-beta, ale wątki GPU (znane jako jądra) będą musiały zostać wstrzymane, aby poczekać. W przeciwieństwie do procesora, hodowla GPU nie może po prostu przejść na coś innego (proces znany jako przełączanie wątków lub nawet przełączanie procesów).

Nasza obecna wiedza na temat algorytmów i silników została opracowana dla świata procesorów. Cały algorytm musiałby zostać ponownie zbadany dla GPU. Niestety nie ma dużego zainteresowania i badań na ten temat.

Witaj świecie
źródło
Nie musisz odciążać samej minimaksy. Istnieją pewne podzadania (np. Wyszukiwanie ścieżki alfa Botvinnika, haszowanie tablicy, ocena statyczna itp.), Które są bardzo dobrze dostosowane do GPU. To powiedziawszy, nie mam wiedzy na temat badań w tej dziedzinie.
user58697,
Prawdziwe. Ale jeśli samo wyszukiwanie główne nie może zostać odciążone, nie powinno być sensu odciążanie małych zadań.
HelloWorld,
3
To doskonała odpowiedź. Gdzie na moim ekranie jest przełącznik +3? Nie mogę tego znaleźć!
THB
7

Nie mam doświadczenia w programowaniu GPU, ale zazwyczaj GPU są bardzo wydajne w wykonywaniu prostych poleceń w sposób równoległy. Najwyraźniej nie jest tak w przypadku drzewa wyszukiwania używanego w silnikach szachowych. Dlatego GPU traci przewagę obliczeniową nad procesorem.

Oczywiście jest to obecny stan programowania GPU dla silników szachowych, ale programowanie GPU jest stosunkowo nowe, więc może znajdą rozwiązania dla obecnych problemów w przyszłości.

Oto kilka interesujących linków, zwłaszcza blog o implementacji silnika szachowego dla GPU jest dość wnikliwy.

Maxwell86
źródło
1
Przegapiłeś: zeta-chess.blogspot.com
HelloWorld,
Rzeczy, w których GPU są dobre, obejmują matematykę ułamkową, operacje wektorowe i równoległość wymagające minimalnej synchronizacji. Silniki szachowe mają ostatni, ale nie dwa pierwsze.
intx13,
2

Skończyłem bieżący bieg na Zeta v099a, moim eksperymentalnym silniku szachowym GPU.

https://github.com/smatovic/Zeta

Rzeczywistym wnioskiem obecnej iteracji jest to, że prosty silnik ze standardowymi technikami programowania szachowego można przenieść do OpenCL, aby działał na GPU, ale potrzeba więcej wysiłku, aby silnik stał się konkurencyjny pod względem obliczanych węzłów na sekundę ( prędkość), heurystyki (wiedza ekspercka) i skalowania (algorytm wyszukiwania równoległego).

Szachy komputerowe, jako temat informatyki, ewoluowały przez dziesięciolecia, poczynając od lat 40. i 50., i osiągnęły jeden szczyt w 1997 r. Meczem Deep Blue vs. W dzisiejszych czasach silniki szachowe są strojone przez granie w tysiące gier, więc uzyskanie silnika gry w szachy działającego na GPU i uzyskanie konkurencyjnego silnika gry w szachy na GPU to dwa różne zadania.

smatovic
źródło
0

Mam pewne doświadczenie z CUDA i programowaniem szachowym (nie programowaniem silnika). To pytanie również przyszło mi do głowy wiele razy. Oto moja opinia, nigdy tego nie studiowałem.

Po pierwsze, jest praktycznie pewne, że przy obecnej konstrukcji silników szachowych jest to niemożliwe. W przeciwnym razie ktoś po prostu to zrobiłby.

Czy można go użyć w zupełnie nowym designie, to większe pytanie. Nie ma problemu z operacjami na liczbach całkowitych, ale najwyraźniej jest ogromna rzecz, że musisz uruchomić prymitywny kod bez poważnego rozgałęzienia wielu jednostek.

Moim zdaniem wszystkie obliczenia drzewa powinny działać na procesorze.

Ale mogę sobie wyobrazić (nie mówię, że jest to możliwe) niektóre funkcje częściowej oceny, które po prostu dokonują jak największej liczby ocen pozycji, aby dać CPU więcej czasu, aby pomóc mu zbudować drzewo w lepszy sposób, powiedzmy jedna taka funkcja mogłaby obliczyć, jak poważne należy wykonać obliczenia dla każdej pozycji.

Możesz obliczyć liczbę zaatakowanych kwadratów, zaatakowane kawałki, siłę ognia wokół królów, aw niektórych podregionach na pokładzie, rzeczy związane ze strukturą pionków, prawdopodobnie możesz dla nich zrobić kod zoptymalizowany pod kątem GPU. Prawdopodobnie możesz uzyskać wiele przydatnych informacji za darmo (bez czasu procesora, bez czekania na procesor), ale musiałbyś być geniuszem, aby wykorzystać pełną moc nowoczesnych GPU do tak małych rzeczy.

Prawdopodobnie nie jest zbyt interesująca rzecz, aby stworzyć zupełnie nową konstrukcję silników, aby uzyskać powiedzmy 30% dodatkową prędkość. Aby powiedzieć, że powiedzmy 20-krotne przyspieszenie najnowocześniejszych układów GPU, musiałbyś sprawić, by funkcje oceny były naprawdę obce.

I ostatnia rzecz w tym, co uważam za problem. Możesz uruchamiać jeden kod na CPU bez większego zastanowienia, ale w scenariuszu CPU + GPU musiałbyś radzić sobie z naprawdę różnymi stosunkami CPU i GPU. prędkości i liczba rdzeni. Potrzebny byłby inny kod dla 16-rdzeniowego klastra ze słabym GPU niż na wolnym CPU z superszybkim GPU, aby móc korzystać z pełnych możliwości sprzętu. Pożądane byłoby porównywanie procesora z GPU, a następnie uruchamianie większej ilości kodu na szybszej maszynie. Ale nadal myślę, że nie zbliżysz się do karmienia 3000 rdzeni bestii tylko za pomocą funkcji oceny.

Edycja: Żeby było jasne, procesor regularnie wysyła tablice GPU pozycji w celu dokonania częściowej oceny. Może nie było to jasne z tego, co napisałem.

Wiele problemów, aby to zadziałało.

hoacin
źródło
0

Widzę tylko zalety korzystania z silnika szachowego opartego na GPU i nie widzę w tym żadnych poważnych problemów. Być może masz takie problemy, spróbuj użyć standardowego programu szachowego, nie wiem zbyt wiele o innych. Właśnie zaczynam pisać program szachowy od pierwszego wiersza, jako drugi program oparty na CUDA, po tym jak wykonałem pierwsze testy programistyczne na CUDA bez konkretnej sekwencji. Wkrótce mogę przeprowadzić pierwsze testy wydajności i przetestować gry z innymi silnikami. Może w przyszłym tygodniu. Właśnie zaczynam go tworzyć, ale jestem już blisko, kończę i większość funkcji jest już ukończona.

Rayjunx
źródło
Google udowodniło, że procesor graficzny jest idealny do uczenia maszynowego, ale procesor graficzny nie nadaje się do tradycyjnego programowania szachowego.
HelloWorld,