Tengo cierta experiencia con CUDA y programación de ajedrez (no programación de motor). Esta pregunta también vino a mi mente muchas veces. Aquí está mi opinión, nunca estudié esto.
Bueno, primero, es prácticamente seguro que con el diseño actual de los motores de ajedrez es imposible. De lo contrario, alguien simplemente lo haría.
Si podría usarlo en un diseño completamente nuevo, esa es una pregunta más importante. No hay ningún problema con las operaciones de enteros, pero está claro que debe ejecutar un código primitivo sin ramificaciones serias en muchas entidades.
En mi opinión, todos los cálculos del árbol deberían ejecutarse en la CPU.
Pero puedo imaginar (no digo que sea posible) algunas funciones de evaluación parcial que solo hacen tantas evaluaciones en las posiciones como sea posible, para darle más tiempo a la CPU, para ayudarlo a construir el árbol de una mejor manera, digamos una de esas funciones podría calcular qué tan serio se debe hacer el cálculo en cada posición.
Puede calcular el número de casillas atacadas, piezas atacadas, potencia de fuego alrededor de reyes y en algunas subregiones a bordo, cosas relacionadas con la estructura de peones, probablemente podría hacer un código optimizado para GPU para estas. Probablemente pueda obtener mucha información útil de forma gratuita (sin tiempo de CPU, sin esperas de CPU), pero tendría que ser un verdadero genio para usar la potencia total de las GPU modernas para cosas tan pequeñas.
Probablemente no sea muy interesante hacer un diseño de motores completamente nuevo para obtener, digamos, un 30% de velocidad adicional. Y para obtener, digamos, una aceleración de 20x en las GPU de última generación, tendría que hacer que las funciones de evaluación sean realmente extrañas.
Y lo último en esto es lo que veo como un problema. Puede ejecutar un código en la CPU sin pensar mucho, pero en el escenario CPU + GPU tendría que lidiar con relaciones realmente diferentes de CPU y GPU. velocidades y recuentos de núcleos. Necesitaría un código diferente para el clúster de 16 núcleos con GPU débil que en una CPU lenta con GPU súper rápida para usar todas las capacidades del hardware. Benchmarking CPU vs GPU y luego ejecutar más código en la máquina más rápida sería deseable. Pero aún así, creo que no se acercará a alimentar 3000 núcleos de bestia solo con funciones de evaluación.
Editar: solo para aclarar las cosas, la CPU enviaba regularmente conjuntos de posiciones de GPU para realizar evaluaciones parciales. Tal vez eso no estaba claro por lo que escribí.
Muchos problemas para hacer que esto funcione.