cudaFree()是异步的吗?

Blu*_*ack 9 cuda gpu

我的问题就像标题一样.实际上,我正在寻找一种异步释放设备内存的方法.

谢谢!

ala*_*and 8

九年后,有了一个解决方案:添加了 CUDA 11.2 cudaFreeAsync(与 一起cudaMallocAsync)。


Sij*_*ijo 7

cudaFree()不是异步的.当从Host调用cudaFree()时,将在内部调用同步调用.

我不明白你需要异步释放内存.

  • 想象一下依赖内核启动的管道,其中一些需要临时分配.如果主机线程可以异步地将`cudaMalloc`s和`cudaFree'插入到这样的管道中,那就太好了. (5认同)
  • 在出现大问题的情况下,您可以使用异步释放内存为其他流腾出空间.换句话说,您将能够在单个GPU中处理许多流的大问题. (3认同)

Mr *_*ooz 5

cudaFree()是同步的.如果您真的希望它是异步的,您可以创建自己的CPU线程,为其提供工作队列,并cudaFree从主线程注册请求.

也就是说,异步释放似乎是一个奇怪的请求.也许你可以解释为什么你希望它是异步的.您是否希望在触发CUDA事件后立即发生自由?

  • 那讲得通。也许这会起作用:产生一个新的 CPU 线程,它调用 cudaSetDevice、cudaDeviceSynchronize,然后是 cudaFree(这可能不适用于 4.0 之前的工具包)。 (2认同)