2012-04-13 87 views
0

我有一个CUDA卷积内核,它经常被调用(它用于实时渲染)。每次我想调用内核时,我应该使用cudaMalloc还是cudaFree?我试图存储的指针cudaMalloc结果和内核执行之前刚刚cudaMemcpy'ing事情继续进行,但我经历了怪异的行为(如内核执行后空内存)CUDA - 我必须每次都分配和释放内存吗?

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

回答

2

这听起来像你在做什么应该工作。

也许你的内核有bug。在内核启动调试后,尝试添加cudaThreadSynchronize和cudaGetLastError调用。

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

+0

谢谢你,cudaGetLastError调用帮助,显然我分配了比我的图形卡更多的线程和块。 – paulAl 2012-04-13 11:08:07

+0

您应该在所有cuda函数之后放置cudaGetLastError调用以从中捕捉错误。当CUDA死亡时,它静静地死去...... – 2012-04-16 05:57:41

3

不,没有理由为每个内核调用malloc/free。 Malloc的内存保持有效直到你释放它。我们有很多代码可以在分配的内存上执行许多内核,包含和不包含cudaMemcpy来更改它们之间的内容。

您的问题必须在别处。尝试将其解释为显示问题并发布代码的最小可能示例。