As enormes unidades de processamento paralelo de hoje são capazes de executar autômatos celulares com eficiência?

20

Eu me pergunto se as unidades de computação massivamente paralelas fornecidas nas placas gráficas atualmente (uma que é programável no OpenCL , por exemplo) são boas o suficiente para simular autômatos celulares 1D (ou talvez autômatos celulares 2D?) De maneira eficiente.

Se escolhermos qualquer grade finita que se encaixe na memória do chip, podemos esperar que uma transição de um autômato celular definido nessa grade seja computada em (quase) tempo constante?

Presumo que autômatos celulares 2D exigiriam mais largura de banda para comunicação entre as diferentes partes dos chips do que autômatos 1D.

Eu também estaria interessado na mesma pergunta no caso de programação FPGA ou chips personalizados.

Stéphane Gimenez
fonte
Talvez seja mais relevante comparar com um chip "equivalente" que simula o mesmo autômato celular da maneira usual. (armazenando as células na memória no modelo habitual Von Newmann)
Jmad
Boa pergunta. Não tenho idéia de que tipo de algoritmo funciona bem em GPUs, por isso estou ansioso por respostas.
Raphael
1
Apesar dos FPGAs, exp probs são exp exps. Talvez relacionado aqui e aqui .

Respostas:

7

Excelente pergunta. Eu acredito que a resposta é sim.

Evoluir um autômato celular é essencialmente equivalente a realizar um cálculo de estêncil. Em algumas grades 1D, 2D ou 3D, valores sucessivos de pontos (ou células) são calculados com base no último valor da vizinhança do ponto. Em uma CA 1D simples, esse bairro pode ser a célula e as duas células à esquerda e à direita. Existem muitos exemplos de cálculos de estêncil sendo executados em GPUs; O conjunto de benchmarks SHOC do ORNL para OpenCL / CUDA contém um exemplo de estêncil 2D, por exemplo.

A idéia básica é fazer com que cada thread obtenha uma cópia local da vizinhança por vários pontos e depois calcule os próximos valores para os pontos determinados por essa vizinhança. Usando apropriadamente a hierarquia de memória em, por exemplo, CUDA (registros, memórias compartilhadas, constantes, textura e memórias globais) e o modelo de processamento SIMT (por exemplo, calculando adequadamente a função de transição sem introduzir divergência excessiva de urdidura), é possível obter um bom desempenho.

Essa resposta seria muito melhor se eu desse um exemplo, mas estou muito ocupado para escrever qualquer código no momento ... Mas, em teoria, acho que deveria ser possível simular com eficiência CAs em GPUs, modelando-as após estêncil cálculos. Muitas considerações são necessárias para escrever um bom cálculo de estêncil para GPUs.

Patrick87
fonte
5

Faça o que fizer, calcular o próximo estado para um autômato celular exige o mesmo número de células do que as células do autômato. Assim, para obter um tempo constante, você precisa do núcleo de computação que houver células.

Atualmente, o número deles na GPU é no máximo alguns milhares, enquanto o cálculo do próximo estado é tão simples que eu espero que o resultado seja vinculado à IO, ou seja, você pode obter uma boa aproximação do tempo necessário apenas considerando o movimentação de dados necessária (e se não for uma boa aproximação, a implementação tem uma ineficiência ou a arquitetura não é adequada, mas isso seria muito surpreendente).

Para o FPGA, a questão é mais difícil e provavelmente dependerá da mistura de unidades de memória e computação disponíveis. Se não estiver muito longe, você não terá memória suficiente para manter todas as unidades ocupadas e, se confiar na memória externa, estará no mesmo lugar que a GPU, a largura de banda da memória será o fator limitante e eu não surpreenda-se se a conclusão for de que não há vantagem sobre a GPU. (Observe que, embora eu trabalhe com FPGA, isso foi há anos, agora pode haver modelos FPGA com a combinação certa).

ASIC oferece mais flexibilidade. Você pode facilmente ter uma implementação sistólica (mas, com o fluxo de dados bidirecional, alguns sistólicos geralmente são restritos ao fluxo de dados unidirecional), cada célula física é uma lógica: pouco de memória e a lógica necessária para calcular seu próximo estado e é apresentada de modo que é vizinho físico, é lógico. Você está obviamente no reino do tempo constante. Dependendo das macros rígidas que você possui, é melhor ser um pouco menos óbvio e ter células físicas que reagrupam várias lógicas. O objetivo é maximizar o que é feito em um chip, ou seja, minimizar a comunicação com a parte externa do chip, assim que suas necessidades de comunicação forem proporcionais ao número de células, a largura de banda será limitada. Sim, isso significa que, se você precisar examinar todas as células de cada etapa, você provavelmente não é muito melhor do que com a GPU. (O costume completo forneceria apenas uma melhor integração, ou seja, mais células por chip).

Resumo: - se você deseja examinar todos os estados intermediários, a GPU é a abordagem mais eficaz - caso contrário, você precisa do volume para justificar um ASIC para ter algo melhor, o FPGA provavelmente não oferecerá vantagem suficiente se eles tem algum.

AProgrammer
fonte
2

Eu me pergunto se as unidades de computação massivamente paralelas fornecidas nas placas gráficas hoje em dia são boas o suficiente para simular autômatos celulares 1D (ou talvez autômatos celulares 2D?) Com eficiência.

sendo muito geral, sim, a computação em GPU é a melhor alternativa em hardware padrão disponível para todos.

O(1)nPnPO(1)

do lado do FPGA e do ASIC, eu sei que há pesquisas sobre a construção de uma CA física como uma grade de portas lógicas com estados, todos conectados por seus vizinhos; ou seja, matrizes sistólicas . A idéia seria não usar mais uma memória global, mas confiar nos estados de cada nó na grade. Uma máquina desse tipo seria revolucionária desde então, poderíamos parar de falar sobre um computador simulando uma autoridade de certificação e começar a falar sobre uma autoridade de certificação em execução como um computador (algumas delas estão completas).

labotsirc
fonte