我有一个带有CUDA的卷积内核,它经常被调用(它用于实时渲染)。每次我想调用内核时,我应该cudaMalloc和cudaFree吗?我试图存储一个指向cudaMalloc结果的指针,然后在内核执行之前只通过cudaMemcpy来处理,但我遇到了奇怪的行为(比如内核执行后的空内存)
我还在考虑使用固定内存,但是如果我每次都必须分配并释放它,它甚至可以减慢应用程序的速度。我应该如何处理经常被调用的内核?
答案 0 :(得分:3)
不,没有理由为每个内核调用malloc / free。 Malloc的内存在你释放之前一直有效。我们有很多代码在已分配的内存上执行许多内核,使用和不使用cudaMemcpy来更改其间的内容。
您的问题必须在其他地方。尝试将其归结为显示问题的最小可能示例并发布代码。
答案 1 :(得分:2)
听起来你正在做的事应该起作用。
也许您的内核中存在错误。在内核启动调试后尝试添加cudaThreadSynchronize和cudaGetLastError调用。
如果没有更多信息,我无法向您提供更多建议。