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.