Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Новые функции языка добавлены в CUDA C /С++ include:

Поддержка функции указатели и рекурсия упрощают для переноса многих существующих алгоритмов на Графические процессоры 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, но на forum кто-то разместил это сообщение:

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

Ответ 2

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

Пробовал прямо сейчас на моем компьютере с графическим процессором NVIDIA с возможностями 1.1 Compute. Он говорит, что рекурсия еще не поддерживается. Таким образом, он не имеет ничего общего с временем выполнения, но сам аппарат