- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用于实例化全局变量的类:
class BitUnpackPtrs
{
public:
ushort* d_dataIn;
BitUnpackPtrs() : d_dataIn(NULL) {};
~BitUnpackPtrs()
{
cudaFree(d_dataIn);
}
void update(...) { ... }
};
该类被全局实例化为句柄,以减少cuda内存的频繁分配。但是,当我的程序终止时,cuda-memcheck 会发出警告:
Program hit cudaErrorCudartUnloading (error 29) due to "driver shutting down" on CUDA API call to cudaFree.
处理这个问题的正确方法是什么?我可以删除 cudaFree,但如果稍后在非全局级别使用此类,则会导致内存泄漏。我可以在构造函数中使用标志来指示应如何处理内存。
或者,有没有一种方法可以检测 cuda 驱动程序是否正在关闭并且在该实例中不调用 cudaFree?
最佳答案
不要将此对象设置为全局对象,而是在您的 main()
函数(或被 main()
调用并包装应用程序的整个执行过程的某个地方)实例化它).这将确保您的 cudaFree()
调用在 CUDA 拆卸发生之前被调用。
另一种选择是使用带有 custom deleter 的 std::shared_ptr
,它调用 cudaFree()
。如果你这样做,那么 cudaFree()
调用将在最后一个“用户”销毁其共享指针的拷贝之后发生——这是在 main()
完成之前并且在 CUDA 拆解之前。
关于c++ - 如何在全局实例化变量上处理 cudaFree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43235548/
我正在尝试释放设备内存 dev_inp我在我的 CUDA + OpenGL 互操作代码中分配的。经过错误检查,我收到了 Invalid Device Pointer错误,程序在 cudaFree(de
我的问题就是标题。实际上,我正在寻找一种异步释放设备内存的方法。 谢谢! 最佳答案 cudaFree()不是异步的。从主机调用cudaFree()时,将在内部调用同步调用。 我不明白您实际上需要异步释
下面的代码计算两个向量 a 和 b 的点积。正确的结果是 8192。当我第一次运行它时,结果是正确的。然后当我第二次运行它时,结果是之前的结果 + 8192 等等: 1st iteration: re
我有一个用于实例化全局变量的类: class BitUnpackPtrs { public: ushort* d_dataIn; BitUnpackPtrs() : d_dataIn(
我想问一下在一些异步调用后调用cudaFree是否有效?例如 int* dev_a; // prepare dev_a... // launch a kernel to process dev_a (
关于 cudaDeviceReset() 的正确使用存在各种问题,但我无法找到以下问题的答案。 cudaDeviceReset() 上的文档说它明确销毁并清除当前进程中与当前设备关联的所有资源。 假设
我正在尝试分配设备内存,复制到它,在 GPU 上执行计算,将结果复制回来,然后释放我分配的设备内存。我想确保我没有超出限制,我想看看共享内存空间中是否有足够的内存来转储一些数组。 当我分配设备内存时,
CUDA 版本 10.1。帕斯卡GPU。所有命令都发布到默认流: void * ptr; cudaMalloc(&ptr, ...); launch_kernel>>(ptr); cudaDevice
我编写了一个类,其中堆中的构造函数内存是使用 cudaMallocHost() 和 cudaMalloc() 分配的。 如果我尝试释放内存 cudaFree() 或 cudaFreeHost(),GP
如果最后没有使用cudaFree(),使用它的应用程序/内核函数退出后,正在使用的内存是否会自动释放? 最佳答案 是的。 当您的应用程序终止时(无论是否正常),它的所有内存都会被操作系统回收,无论它是
我有一个由多个 CPU 线程组成的应用程序,每个 CPU 线程在我的 GPU 上的同一个 cudaContext 中创建一个单独的 cudaStream。我有一辆特斯拉 K20c。我正在使用 Wi
我是一名优秀的程序员,十分优秀!