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

CUDA - do I have to allocate and free memory each time?

本文关键字:分配 释放 内存 CUDA      更新时间:2023-10-16

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

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

不,没有理由为每个内核调用 malloc/free。恶意的内存在释放它之前一直有效。我们有很多代码可以在分配的内存上执行许多内核,无论有没有cudaMemcpy,以更改两者之间的内容。

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

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

也许你的内核中有一个错误。尝试在内核启动后添加 cudaThreadSync 和 cudaGetLastError 调用进行调试。

没有更多信息,我不能为您提供比这更多的建议。