Ich habe einen Convolution-Kernel mit CUDA, der sehr oft aufgerufen wird (es wird für ein Echtzeit-Rendering verwendet). Soll ich jedesmal cudaMalloc und cudaFree aufrufen wenn ich den Kernel aufrufen will? Ich habe versucht, einen Zeiger auf das CudaMalloc-Ergebnis zu speichern und durch cudaMemcpy's Dinge vor der Ausführung des Kernels, aber seltsames Verhalten (wie leeren Speicher nach der Kernel-Ausführung)CUDA - muss ich jedes Mal Speicher reservieren und freigeben?
Ich dachte auch über die Verwendung von gepinnten Speicher aber wenn Ich muss es jedes Mal zuweisen und freigeben, wenn es die Anwendung sogar verlangsamen könnte. Wie soll ich für einen Kernel vorgehen, der sehr oft aufgerufen wird?
Vielen Dank, der Call cudaGetLastError hat geholfen, anscheinend habe ich mehr Threads und Blöcke zugewiesen, als meine Grafikkarte könnte. – paulAl
Sie sollten cudaGetLastError-Aufrufe nach all Ihren Cuda-Funktionen setzen, um Fehler von ihnen abzufangen. Wenn CUDA stirbt, stirbt es still ... –