ti-enxame.com

O CUDA suporta recursão?

O CUDA suporta recursão?

53
JuanPablo

Ele faz em hardware NVIDIA suportando capacidade de computação 2.0 e CUDA 3.1:

Novos recursos de idioma adicionados ao CUDA C /C++ incluem :

Suporte para função Ponteiros e recursão facilitam Para portar muitos algoritmos existentes para GPUs Fermi

http://developer.nvidia.com/object/cuda_3_1_downloads.html

Ponteiros de função: http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers

Recursão: Não consigo encontrar um exemplo de código no site da NVIDIA, mas no fórum alguém publique isto:

__device__ int fact(int f)
{
  if (f == 0)
    return 1;
  else
    return f * fact(f - 1);
}
46
Stringer

Sim, veja o NVIDIA CUDA Programming Guide :

device functions suporta apenas recursão no código do dispositivo compilado para dispositivos da capacidade de computação 2.0.

Você precisa de um cartão Fermi para usá-los.

12
Matias Valdenegro

Mesmo que ele apenas suporte recursão para chips específicos, às vezes você pode se safar com a recursão "emulada": veja como eu usei a recursão em tempo de compilação para o meu raytracer CUDA .

9
ttsiodras

Na versão CUDA 4.1, o CUDA suporta a recursão apenas para a função __device__, mas não para a função __global__.

7
username_4567

Somente após a capacidade de computação 2.0 em dispositivos compatíveis

5
Arturo Garcia

Claro que sim, mas requer que a arquitetura Kepler o faça. Confira seu exemplo mais recente sobre o tipo rápido clássico.

http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/

Até onde sei, apenas o mais recente Kepler GK110 suporta o paralelismo dinâmico, que permite este tipo de chamada recursiva e geração de novos threads dentro do kernel. Antes do Kepler GK110, não foi possível. E note que nem toda arquitetura Kepler suporta isso, apenas o GK110.

Se você precisar de recursão, você provavelmente precisará do Tesla K20. Não tenho certeza se Fermi suporta, nunca leio sobre isso. :\ Mas o Kepler com certeza faz. =)

3
Hong Zhou

CUDA 3.1 suporta recursão

2
Jan C

Qualquer algoritmo recursivo pode ser implementado com uma pilha e um loop. É muito mais uma dor, mas se você realmente precisar de recursão, isso pode funcionar.

2
dicroce

Se o seu algoritmo invoca muitas recursões, então suporte ou não, ele não é projetado para GPUs, seja redesenho seus algoritmos ou obtenha uma CPU melhor, de qualquer forma, será melhor (eu aposto em muitos casos, maginitudes melhores) e fazer recursões em GPUs.

1
user0002128

Sim, é suportado na versão atual. Mas apesar do fato de que é possível executar funções recursivas, você deve ter em mente que a alocação de memória da pilha de execução não pode ser prevista (a função recursiva deve ser executada para saber a profundidade real da recursão), portanto sua pilha pode resultar não ser suficiente para seus propósitos e pode precisar de um incremento manual do tamanho padrão da pilha

0
Mr.PotatusVII

Sim, suporta recursão. No entanto, não é uma boa ideia recursão na GPU. Porque cada thread vai fazer isso.

0
palebluedot