J'ai une certaine expérience avec CUDA et la programmation d'échecs (pas la programmation de moteur). Cette question m'est également venue plusieurs fois à l'esprit. Voici mon avis, je n'ai jamais étudié ça.
Eh bien, tout d'abord, il est pratiquement certain qu'avec la conception actuelle des moteurs d'échecs, c'est impossible. Sinon, quelqu'un le ferait simplement.
Que vous puissiez l'utiliser dans un tout nouveau design, c'est une plus grande question. Il n'y a pas de problème avec les opérations entières, mais il est clair que vous devez exécuter du code primitif sans branchement sérieux sur de nombreuses entités.
À mon avis, tous les calculs d'arbre devraient fonctionner sur le processeur.
Mais je peux imaginer (je ne dis pas que c'est possible) des fonctions d'évaluation partielles qui font juste autant d'évaluations sur les positions que possible, pour donner plus de temps au CPU, pour l'aider à construire l'arborescence d'une meilleure façon, disons une de ces fonctions pourrait calculer la gravité du calcul à effectuer pour chaque position.
Vous pouvez calculer le nombre de carrés attaqués, les morceaux attaqués, la puissance de feu autour des rois et dans certaines sous-régions à bord, les choses liées à la structure des pions, vous pourriez probablement créer du code optimisé pour le GPU pour ceux-ci. Vous pouvez probablement obtenir gratuitement de nombreuses informations utiles (pas de temps CPU, pas d'attente CPU), mais vous devrez être un vrai génie pour utiliser toute la puissance des GPU modernes pour de si petites choses.
Ce n'est probablement pas très intéressant de faire pour créer une conception complètement nouvelle des moteurs pour obtenir disons 30% de vitesse supplémentaire. Et pour obtenir, disons, une accélération de 20 fois sur les GPU de pointe, vous devez rendre les fonctions d'évaluation vraiment étrangères.
Et dernière chose sur ce que je vois être un problème. Vous pouvez exécuter un code sur le CPU avec peu de réflexion, mais dans le scénario CPU + GPU, vous devrez faire face à des ratios vraiment différents de CPU et de GPU. vitesses et nombre de carottes. Vous auriez besoin d'un code différent pour un cluster à 16 cœurs avec un GPU faible que sur un processeur lent avec un GPU super rapide pour utiliser toutes les capacités du matériel. Il serait souhaitable de comparer le CPU et le GPU, puis d'exécuter plus de code sur la machine la plus rapide. Mais encore, je pense que vous ne serez pas du tout près de nourrir 3000 bêtes avec seulement des fonctions d'évaluation.
Edit: Juste pour que les choses soient claires, le CPU envoie régulièrement des tableaux GPU de positions pour effectuer des évaluations partielles. Peut-être que ce n'était pas clair d'après ce que j'ai écrit.
Beaucoup de problèmes pour que cela fonctionne.