0

我有一个带有 CUDA 的卷积核,它经常被调用(它用于实时渲染)。每次我想调用内核时我应该 cudaMalloc 和 cudaFree 吗?我试图存储一个指向 cudaMalloc 结果的指针,并在内核执行之前通过 cudaMemcpy'ing 来继续,但我遇到了奇怪的行为(比如内核执行后的空内存)

我也在考虑使用固定内存,但如果我每次都必须分配和释放它,它甚至可能会减慢应用程序的速度。对于经常被调用的内核,我应该如何处理?

4

2 回答 2

3

不,没有理由为每个内核调用进行 malloc/free。Malloc 的内存在您释放它之前一直有效。我们有很多代码在分配的内存上执行许多内核,有和没有 cudaMemcpy 以更改其间的内容。

你的问题一定出在其他地方。尝试将其归结为显示问题的最小可能示例并发布代码。

于 2012-04-13T00:32:37.810 回答
2

听起来你正在做的事情应该有效。

也许您的内核中有错误。尝试在内核启动后添加 cudaThreadSynchronize 和 cudaGetLastError 调用以进行调试。

如果没有更多信息,我无法为您提供更多建议。

于 2012-04-13T00:33:29.167 回答