C++ CUDA-我每次都必须分配和释放内存吗?

C++ CUDA-我每次都必须分配和释放内存吗?,c++,cuda,nvidia,C++,Cuda,Nvidia,我有一个使用CUDA的卷积内核,它经常被调用(用于实时渲染)。每次我想调用内核时,我应该使用cudamaloc和cudaFree吗?我试图存储一个指向cudaMalloc结果的指针,并在内核执行之前通过cudaMemcpy’s进行操作,但我遇到了奇怪的行为(比如内核执行后内存变空) 我也在考虑使用固定内存,但如果每次都要分配和释放内存,甚至会减慢应用程序的速度。对于经常被调用的内核,我应该如何处理呢?不,没有理由为每个内核调用malloc/free。Malloc’ed内存在释放之前保持有效。我们

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


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

不,没有理由为每个内核调用malloc/free。Malloc’ed内存在释放之前保持有效。我们有很多代码在分配的内存上执行许多内核,使用和不使用cudaMemcpy来更改其间的内容


你的问题一定在别处。试着将其归结为显示问题的最小可能示例,并发布代码。

不,没有理由为每个内核调用malloc/free。Malloc’ed内存在释放之前保持有效。我们有很多代码在分配的内存上执行许多内核,使用和不使用cudaMemcpy来更改其间的内容


你的问题一定在别处。试着把它归结为显示问题的尽可能小的例子,然后发布代码。

听起来你所做的应该是可行的

也许你的内核中有一个bug。尝试在内核启动以进行调试后添加cudaThreadSynchronize和cudagetlastror调用


如果没有更多的信息,我不能给你更多的建议。

听起来你所做的应该有用

也许你的内核中有一个bug。尝试在内核启动以进行调试后添加cudaThreadSynchronize和cudagetlastror调用


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

谢谢,CUDAGETSTARROR调用很有帮助,显然我分配的线程和块比我的图形卡所能分配的要多。您应该在所有cuda函数之后放置CUDAGETSTARROR调用,以捕获它们的错误。当CUDA死机时,它会悄无声息地死机…谢谢你,cudaGetLastError调用帮助了我,显然我分配的线程和块比我的图形卡所能分配的要多。你应该在所有CUDA函数之后放置cudaGetLastError调用,以捕获它们的错误。当库达死的时候,它默默地死去。。。