Поддерживает ли CUDA рекурсию?
Поддерживает ли CUDA рекурсию?
Ответ 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.
Вам нужна карта Ферми, чтобы использовать их.
Ответ 3
Несмотря на то, что он поддерживает только рекурсию для определенных фишек, вы иногда можете уйти с "эмулируемой" рекурсией: посмотреть, как я использовал рекурсию во время компиляции для своего трассировщика CUDA.
Ответ 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. Он говорит, что рекурсия еще не поддерживается. Таким образом, он не имеет ничего общего с временем выполнения, но сам аппарат