CPU v. GPU para mecanismos de xadrez


16

As GPUs são melhores em certos tipos de cálculos, por exemplo, gerar bitcoins e realizar simulações climáticas.

Os mecanismos de xadrez se beneficiariam se calculassem com GPUs em vez de CPUs?

Talvez uma pessoa experiente possa destacar as diferenças entre os dois e nos esclarecer se as GPUs são (des) adequadas para o tipo de cálculos que os mecanismos de xadrez executam.

Respostas:


13

EDITAR:

Poucos outros pontos levantados em http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 .

  • GPU não é tão bom para recursão
  • GPU não é tão bom para flutuar
  • A GPU pode funcionar melhor para a nova abordagem de aprendizado de máquina, mas não para os algoritmos de mecanismo tradicionais

Original :

O @ Maxwell86 já forneceu excelentes links e recursos. Preste atenção ao mecanismo de xadrez zeta. É um mecanismo de xadrez de GPU. Infelizmente, a GPU não provou sua utilidade na programação de xadrez. De fato, o projeto do motor de xadrez zeta não chegou a lugar algum.

A GPU funciona muito bem em cálculos e algoritmos flutuantes que podem ser paralelos. Isso requer independência. Mas se olharmos para uma típica árvore min-max (ou alfa-beta) (usada por todos os mecanismos de xadrez)

insira a descrição da imagem aqui

O ramo direito depende do ramo esquerdo. Em particular, se pudermos obter um ponto de corte (alto com falha), nem precisaríamos procurar os nós restantes. Infelizmente, isso não é algo que uma GPU possa fazer com eficiência. É possível escrever um programa de GPU para alfa-beta, mas os threads da GPU (conhecidos como kernels) precisarão ser pausados ​​para aguardar. Ao contrário de uma CPU, um canil de GPU não pode simplesmente mudar para outra coisa (um processo conhecido como comutador de threads ou até comutador de processos).

Nosso conhecimento existente sobre algoritmos e mecanismos foi derivado para o mundo da CPU. Todo o algoritmo precisaria ser reinvestigado para a GPU. Infelizmente, não há muito interesse e pesquisas sobre o assunto.


Você não precisa descarregar o minimax em si. Existem certas subtarefas (por exemplo, localização do caminho alfa de Botvinnik, hash de placa, avaliação estática etc.) que são muito adequadas para GPU. Dito isto, não tenho conhecimento de nenhuma pesquisa nessa área.
user58697

Verdade. Mas se a pesquisa principal em si não puder ser descarregada, não haverá sentido em descarregar as pequenas tarefas.
SmallChess

3
Esta é uma excelente resposta. Onde na minha tela está o interruptor +3? Não consigo encontrar!
THB

7

Não tenho experiência com programação de GPU, mas, normalmente, as GPUs são muito eficientes na execução de comandos simples de maneira paralela. Aparentemente, esse não é o caso da árvore de pesquisa usada para mecanismos de xadrez. Portanto, a GPU perde sua vantagem computacional sobre uma CPU.

Obviamente, esse é o estado atual da programação da GPU para mecanismos de xadrez, mas a programação da GPU é relativamente nova, então talvez eles encontrem soluções para os problemas atuais no futuro.

Aqui estão alguns links interessantes, especialmente o blog sobre a implementação de um mecanismo de xadrez para GPU, que é bastante esclarecedor.



As coisas que as GPUs são boas incluem matemática fracionada, operações vetoriais e paralelização que exigem sincronização mínima. Os motores de xadrez têm o último, mas não os dois primeiros.
Intx13


2

Eu terminei minha corrida atual no Zeta v099a, meu mecanismo experimental de xadrez gpu.

https://github.com/smatovic/Zeta

A conclusão real da iteração atual é que um mecanismo simples, com técnicas de programação de xadrez padrão, pode ser portado para o OpenCL para rodar em uma gpu, mas seria necessário mais esforço para tornar o mecanismo competitivo em termos de nós calculados por segundo ( velocidade), heurística (conhecimento especializado) e dimensionamento (algoritmo de pesquisa paralela).

O Computer Chess, como um tópico da ciência da computação, evoluiu ao longo de décadas, começando nos anos 40 e 50, e atingiu um pico em 1997 com a partida Deep Blue vs. Kapsarow. Atualmente, os mecanismos de xadrez são ajustados ao jogar milhares e milhares de jogos; portanto, fazer com que um mecanismo de jogo de xadrez funcione na gpu e um mecanismo de jogo de xadrez competitivo funcionando na gpu são duas tarefas diferentes.


0

Tenho alguma experiência com programação CUDA e xadrez (não com programação de motores). Esta pergunta também me veio à mente muitas vezes. Aqui está a minha opinião, eu nunca estudei isso.

Bem, primeiro, é praticamente certo que, com o design atual dos motores de xadrez, é impossível. Caso contrário, alguém simplesmente faria isso.

Se você pode usá-lo em um design completamente novo, essa é uma questão maior. Não há problema com operações inteiras, mas claramente existe uma grande coisa que você deve executar código primitivo sem ramificação séria em muitas entidades.

Na minha opinião, todos os cálculos em árvore devem ser executados na CPU.

Mas posso imaginar (não digo que seja possível) algumas funções parciais de avaliação que apenas fazem o máximo possível de avaliações nas posições, para dar mais tempo à CPU, para ajudá-lo a construir a árvore de uma maneira melhor, digamos uma dessas funções poderia calcular a gravidade do cálculo em cada posição.

Você pode calcular o número de quadrados atacados, peças atacadas, poder de fogo em torno dos reis e, em algumas sub-regiões a bordo, coisas relacionadas à estrutura dos peões, provavelmente você pode criar um código otimizado para GPU. Provavelmente, você pode obter muitas informações úteis de graça (sem tempo de CPU, sem espera de CPU), mas seria preciso ser um verdadeiro gênio para usar toda a potência das GPUs modernas para coisas tão pequenas.

Provavelmente não é uma coisa muito interessante a fazer para criar um design completamente novo de motores para obter, digamos, 30% de velocidade extra. E, digamos que a aceleração 20x em GPUs de última geração, você teria que tornar as funções de avaliação realmente estranhas.

E a última coisa sobre isso é o que vejo como um problema. Você pode executar um código na CPU sem pensar muito, mas no cenário CPU + GPU você teria que lidar com proporções realmente diferentes de CPU e GPU. velocidades e contagens principais. Você precisaria de código diferente para o cluster de 16 núcleos com GPU fraca do que na CPU lenta com GPU super rápida para usar todos os recursos de hardware. Seria desejável fazer benchmarking de CPU vs. GPU e, em seguida, executar mais código na máquina mais rápida. Mas ainda assim, acho que você não chegará nem perto de alimentar uma besta de 3000 núcleos apenas com funções de avaliação.

Edit: Apenas para esclarecer, a CPU envia regularmente matrizes de GPU de posições para fazer avaliações parciais. Talvez isso não estivesse claro pelo que escrevi.

Muitos problemas para fazer isso funcionar.


0

Vejo apenas benefícios no uso de um mecanismo de xadrez baseado em GPU e não vejo nenhum problema sério nisso. Talvez você tenha esses problemas, tente usar um programa de xadrez padrão, não saiba muito sobre os outros. Eu apenas comecei a escrever um programa de xadrez a partir da primeira linha, como um segundo programa baseado em CUDA, depois de fazer alguns primeiros testes de programação em CUDA sem um sentido específico. Em breve, posso fazer alguns testes de desempenho e testar jogos contra outros mecanismos. Talvez durante a próxima semana. Eu apenas começo a criá-lo, mas já estou perto de finalizá-lo e a maioria das funções já concluídas.


O Google provou a GPU ideal para aprendizado de máquina, mas a GPU não é boa para a programação tradicional de xadrez.
SmallChess 5/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.