Поддерживает ли CUDA рекурсию? - PullRequest
55 голосов
/ 05 сентября 2010

CUDA поддерживает рекурсию?

Ответы [ 12 ]

46 голосов
/ 05 сентября 2010

Поддерживается на аппаратном обеспечении NVIDIA, поддерживающем вычислительные возможности 2.0 и CUDA 3.1:

Новые языковые функции, добавленные в CUDA C / C ++, включают :

Поддержка указателей функций и рекурсии упрощает перенос многих существующих алгоритмов на графические процессоры Fermi

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

Указатели функций: http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers

Рекурсия: Я не могу найти пример кода на веб-сайте NVIDIA, но на форуме кто-то отправил это сообщение:

__device__ int fact(int f)
{
  if (f == 0)
    return 1;
  else
    return f * fact(f - 1);
}
12 голосов
/ 05 сентября 2010

Да, см. Руководство по программированию NVIDIA CUDA :

устройство функции поддерживают только рекурсию в коде устройства, скомпилированном для устройств вычислительной способности 2.0.

Вам нужна карта Ферми, чтобы использовать их.

9 голосов
/ 07 сентября 2011

Несмотря на то, что он поддерживает рекурсию только для определенных чипов, иногда вы можете избежать «эмулированной» рекурсии: посмотрите, как я использовал рекурсию во время компиляции для моего CUDA raytracer .

7 голосов
/ 04 апреля 2012

В выпуске CUDA 4.1 CUDA поддерживает рекурсию только для функции __device__, но не для функции __global__.

5 голосов
/ 06 декабря 2012

Только после вычисления на 2.0 совместимых устройств

3 голосов
/ 18 сентября 2012

Конечно, но для этого требуется архитектура Kepler. Посмотрите их последний пример классической быстрой сортировки.

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

Насколько я знаю, только последний Kepler GK110 поддерживает динамический параллелизм, который допускает такой рекурсивный вызов и порождение новых потоков внутри ядра. До Kepler GK110 это было невозможно. И обратите внимание, что не вся архитектура Kepler поддерживает это, только GK110.

Если вам нужна рекурсия, вам, вероятно, нужен Tesla K20. Я не уверен, поддерживает ли Ферми это, никогда не читал об этом. : \ Но Кеплер уверен, что делает. =)

2 голосов
/ 06 сентября 2010

CUDA 3.1 поддерживает рекурсию

2 голосов
/ 05 сентября 2010

Любой рекурсивный алгоритм может быть реализован с помощью стека и цикла.Это больше боли, но если вам действительно нужна рекурсия, это может сработать.

1 голос
/ 06 ноября 2012

Если ваш алгоритм задействует много рекурсий, то поддерживает или нет, он не предназначен для графических процессоров, либо перепроектируйте ваши algorthims, либо получите лучший процессор, в любом случае он будет лучше (я держу пари, что во многих случаях лучше)делать рекурсии на графических процессорах.

0 голосов
/ 18 декабря 2018

Да, он поддерживает рекурсию.Однако не стоит делать рекурсию на GPU.Потому что каждый поток собирается это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...