2012-03-30 8 views
2

Ich erhalte die folgende Warnung, die ich nicht verstehe, wenn CUDA Code kompilieren:CUDA ptxas Warnungen (Stackgröße für den Eintritt)

CUDACOMPILE: ptxas Warnung: Stackgröße für Entry-Funktion ‚_Z24gpu_kernel_get_3d_pointsiPK8RtmPointS1_PKfS3_P10RtmPoint3DPif‘ kann nicht statisch bestimmt

Der Kernel-Prototyp ist:

__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) 

Alle Zeiger sind Zeiger auf Gerätespeicher. Ich sehe nicht, warum der Compiler ein Problem haben sollte, das die Stapelgröße bestimmt. Es gibt einige lokale Variablen im Kernel, aber nicht viele. Irgendwelche Ideen? Ist diese Warnung wichtig?

+1

Ich stieß auf ein ähnliches Problem. Ich vermute, dass das Problem etwas mit Rekursion zu tun hat. – xhe8

Antwort

2

Es scheint, wie Sie Ihren Kernel dynamisch Speicher auf der GPU Heap Zuteilung wird mit malloc() oder neue Betreiber. Dies kann sich negativ auf die Leistung Ihres Kernels auswirken.

2

Diese Warnung tritt auf, wenn eine Funktion rekursiv ist. Cuda versucht, den Stapelraum vor der Ausführung zuzuordnen, was keine große Sache ist, es sei denn, Sie verwenden Rekursion. Das Problem dabei ist, dass die Stackgröße nicht vorhersehbar ist. Die Tiefe der Rekursion ist kein bekannter Wert, daher ist der Speicher, den der Stapel verwendet, nicht bekannt. Diese Warnung ist nicht wirklich relevant, aber wenn Sie den GPU-Stapel mit Ihren Daten überschreiten, müssen Sie die Stapelgröße manuell erhöhen.

Verwandte Themen