CUDA - 我每次都必须分配和释放内存吗?
CUDA - do I have to allocate and free memory each time?
我有一个带有CUDA的卷积内核,它经常被调用(它用于实时渲染)。我应该每次调用内核时都应该cudaMalloc和cudaFree吗?我试图存储指向 cudaMalloc 结果的指针,并在内核执行之前继续执行 cudaMemcpy's 操作,但我遇到了奇怪的行为(例如内核执行后的空内存)
我也在考虑使用固定内存,但是如果我每次都必须分配和释放它,它甚至会减慢应用程序的速度。对于经常被调用的内核,我应该如何继续?
不,没有理由为每个内核调用 malloc/free。恶意的内存在释放它之前一直有效。我们有很多代码可以在分配的内存上执行许多内核,无论有没有cudaMemcpy,以更改两者之间的内容。
你的问题一定在别处。尝试将其归结为显示问题的最小示例并发布代码。
听起来你正在做的事情应该有效。
也许你的内核中有一个错误。尝试在内核启动后添加 cudaThreadSync 和 cudaGetLastError 调用进行调试。
没有更多信息,我不能为您提供比这更多的建议。
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- 整数内存分配/释放
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 未分配释放C++(C 字符串)指针
- 未分配被释放的指针(将堆栈实现为链表时)
- 在不释放所有动态分配的资源的情况下结束程序是否有风险
- Unique_ptr:在列表中放置时未分配释放的指针
- C++内存分配/释放和自由空间错误
- 带有QT的C 应用中的IIMEBRA代码给出malloc:***对象XXXXXX的错误:未分配释放的指针
- 删除引用时出现未分配释放的指针错误
- 指针的内存分配/释放
- 内存分配/释放错误(非常小的代码)
- c++堆内存分配/释放
- 内存管理——用于分配/释放I/O缓冲区的现代c++风格