CUDA ptxas предупреждений (размер стека для входа)

Я получаю следующее предупреждение, которое не понимаю при компиляции кода CUDA:

CUDACOMPILE: предупреждение ptxas: размер стека для функции ввода '_Z24gpu_kernel_get_3d_pointsiPK8RtmPointS1_PKfS3_P10RtmPoint3DPif' не может быть определен статически

Прототип ядра:

__global__ void gpu_kernel_get_3d_points(int count1, const RtmPoint *pPoints1, const RtmPoint *pPoints2, const float *PL, const float *PR, 
RtmPoint3D *pPoints3D, int *pGlobalCount, float bbox)

Все указатели являются указателями на память устройства. Я не понимаю, почему у компилятора должна быть проблема с определением размера стека. В ядре есть несколько локальных переменных, но их немного. Есть идеи? Это предупреждение имеет значение?

2 ответа

Кажется, ваше ядро ​​динамически распределяет память в куче графического процессора, используя malloc() или оператор new. Это может отрицательно повлиять на производительность вашего ядра.

Это предупреждение появляется, когда функция рекурсивная. Cuda пытается выделить пространство стека перед выполнением, что не имеет большого значения, если только вы не используете рекурсию. Проблема в том, что размер стека не предсказуем. Глубина рекурсии не известна, поэтому объем памяти, которую будет использовать стек, неизвестен. Это предупреждение на самом деле не актуально, но если вы превысили стек графических данных своими данными, вы должны вручную увеличить размер стека.

Другие вопросы по тегам