CPU v. GPU per motori di scacchi


16

Le GPU sono migliori in alcuni tipi di calcoli, ad esempio la generazione di bitcoin e l'esecuzione di simulazioni climatiche.

I motori di scacchi trarrebbero beneficio se calcolassero con le GPU anziché le CPU?

Forse una persona esperta può evidenziare le differenze tra i due e illuminarci sul fatto che le GPU siano (non) adatte al tipo di calcoli che eseguono i motori di scacchi.

Risposte:


13

MODIFICARE:

Pochi altri punti sollevati in http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 .

  • GPU non così buona per la ricorsione
  • GPU non così buona per il floating
  • La GPU potrebbe funzionare meglio per il nuovo approccio di apprendimento automatico, ma non per i tradizionali algoritmi del motore

Originale :

@ Maxwell86 ha già fornito link e risorse eccellenti. Presta attenzione al motore di scacchi zeta. È un motore di scacchi GPU. Sfortunatamente, la GPU non ha dimostrato la sua utilità nella programmazione degli scacchi. In effetti, il progetto del motore di scacchi zeta non è andato assolutamente da nessuna parte.

La GPU funziona molto bene su calcoli e algoritmi mobili che possono essere collegati in parallelo. Ciò richiede indipendenza. Ma se osserviamo un tipico albero min-max (o alpha-beta) (usato da ogni motore di scacchi)

inserisci qui la descrizione dell'immagine

Il ramo destro dipende dal ramo sinistro. In particolare, se riusciamo a ottenere un cutoff (fail-high), non avremmo nemmeno bisogno di cercare i nodi rimanenti. Sfortunatamente, questo non è qualcosa che una GPU può fare in modo efficiente. È possibile scrivere un programma GPU per alpha-beta, ma i thread GPU (noti come kernel) dovranno essere messi in pausa per attendere. A differenza di una CPU, un canile GPU non può semplicemente passare a qualcos'altro (un processo noto come thread-switch o persino switch-process).

Il nostro algoritmo e conoscenza del motore esistenti sono stati derivati ​​per il mondo della CPU. L'intero algoritmo dovrebbe essere reinvestito per la GPU. Sfortunatamente, non c'è molto interesse e ricerca al riguardo.


Non è necessario scaricare il minimox stesso. Esistono alcuni sottoattività (ad es. Ricerca del percorso alfa di Botvinnik, hash della scheda, valutazione statica, ecc.) Che sono molto adatti per la GPU. Detto questo, non ho alcuna conoscenza di alcuna ricerca in questo settore.
user58697,

Vero. Ma se la ricerca principale stessa non può essere scaricata, non dovrebbe esserci alcun punto per scaricare le piccole attività.
HelloWorld,

3
Questa è una risposta eccellente Dove sullo schermo è l'interruttore +3? Non riesco a trovarlo!
giovedì

7

Non ho esperienza con la programmazione GPU, ma, in genere, le GPU sono molto efficienti nell'esecuzione di comandi semplici in modo parallelo. Apparentemente, questo non è il caso dell'albero di ricerca utilizzato per i motori di scacchi. Pertanto, la GPU perde il suo vantaggio computazionale rispetto a una CPU.

Naturalmente, questo è lo stato attuale della programmazione GPU per i motori di scacchi, ma la programmazione GPU è relativamente nuova, quindi forse troveranno soluzioni per gli attuali problemi in futuro.

Ecco un paio di link interessanti, in particolare il blog sull'implementazione di un motore di scacchi per GPU è abbastanza approfondito.



Le cose che le GPU sono brave a includere matematica frazionaria, operazioni vettoriali e parallelizzazione richiedono una sincronizzazione minima. I motori di scacchi hanno l'ultimo, ma non i primi due.
intx13


2

Ho finito la mia attuale corsa su Zeta v099a, il mio motore di scacchi sperimentale gpu.

https://github.com/smatovic/Zeta

La conclusione effettiva dell'attuale iterazione è che un semplice motore, con tecniche standard di programmazione degli scacchi, può essere portato su OpenCL per funzionare su una gpu, ma ci vorrebbe più sforzo per rendere competitivo il motore in termini di nodi calcolati al secondo ( velocità), euristica (conoscenze specialistiche) e ridimensionamento (algoritmo di ricerca parallela).

Computer Chess, come argomento di informatica, si è evoluto nel corso dei decenni, a partire dagli anni '40 e '50, e ha raggiunto un picco nel 1997 con la partita Deep Blue vs. Kapsarow. Oggi i motori di scacchi sono sintonizzati giocando a migliaia e migliaia di giochi, quindi ottenere un motore di gioco di scacchi in esecuzione sulla GPU e ottenere un motore di gioco di scacchi competitivo in esecuzione sulla GPU sono due compiti diversi.


0

Ho una certa esperienza con CUDA e la programmazione di scacchi (non la programmazione del motore). Anche questa domanda mi è venuta in mente molte volte. Ecco la mia opinione, non l'ho mai studiato.

Bene, in primo luogo, è praticamente certo che con l'attuale progettazione dei motori di scacchi è impossibile. Altrimenti qualcuno lo farebbe semplicemente.

Se puoi usarlo in un design completamente nuovo, questa è una domanda più grande. Non ci sono problemi con le operazioni con numeri interi, ma chiaramente c'è una cosa enorme che devi eseguire codice primitivo senza diramazioni serie su molte entità.

A mio avviso, tutti i calcoli dell'albero dovrebbero essere eseguiti su CPU.

Ma posso immaginare (non dico che sia possibile) alcune funzioni di valutazione parziale che effettuano solo quante più valutazioni possibili sulle posizioni, per dare più tempo alla CPU, per aiutarlo a costruire l'albero in un modo migliore, diciamo una di queste funzioni potrebbe calcolare quanto serio calcolo dovrebbe essere fatto su ogni posizione.

Puoi calcolare il numero di quadrati attaccati, pezzi attaccati, potenza di fuoco attorno ai re e in alcune sottoregioni a bordo, cose relative alla struttura dei pedoni, potresti probabilmente creare un codice ottimizzato per GPU per questi. Probabilmente puoi ottenere molte informazioni utili gratuitamente (nessun tempo di CPU, nessuna CPU in attesa), ma dovresti essere un vero genio per usare la potenza completa delle GPU moderne per cose così piccole.

Probabilmente non è cosa molto interessante da fare per creare un design completamente nuovo di motori per ottenere diciamo il 30% di velocità in più. E per esempio diciamo 20 volte più veloce su GPU all'avanguardia, dovresti rendere le funzioni di valutazione davvero aliene.

E l'ultima cosa su ciò che vedo essere un problema. Puoi eseguire un codice sulla CPU senza pensarci troppo, ma nello scenario CPU + GPU dovresti avere a che fare con rapporti davvero diversi di CPU e GPU. velocità e conteggi fondamentali. Avresti bisogno di un codice diverso per il cluster a 16 core con GPU debole rispetto alla CPU lenta con GPU super veloce per utilizzare le funzionalità complete dell'hardware. Il benchmarking tra CPU e GPU e quindi l'esecuzione di più codice sulla macchina più veloce sarebbe auspicabile. Tuttavia, penso che non ti avvicinerai in alcun modo all'alimentazione di una bestia da 3000 core solo con le funzioni di valutazione.

Modifica: solo per chiarire le cose, la CPU invia regolarmente array di posizioni GPU per effettuare valutazioni parziali. Forse non era chiaro da quello che ho scritto.

Molti problemi per farlo funzionare.


0

Vedo solo vantaggi nell'utilizzare un motore di scacchi basato su GPU e non vedo alcun problema serio nel farlo. Forse hai problemi a provare a usare un programma di scacchi standard, non sai molto degli altri. Ho appena iniziato a scrivere un programma di scacchi dalla prima riga in poi, come secondo programma basato su CUDA dopo aver effettuato alcuni primi test di programmazione su CUDA senza un senso specifico. Presto potrò fare alcuni primi test prestazionali e testare giochi contro altri motori. Forse durante la prossima settimana. Ho appena iniziato a crearlo, ma sono già vicino e lo finisco e la maggior parte delle funzioni è già terminata.


Google ha dimostrato la GPU ideale per l'apprendimento automatico, ma la GPU non è adatta alla programmazione di scacchi tradizionale.
HelloWorld
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.