CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC具体允许何种操作?
关于CUDA内存池属性
CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC的疑问解答 首先看官方文档(doxygen)对该属性的描述:
当释放操作与分配操作之间无依赖关系时,允许复用已完成的释放内存。
要理解这个属性,关键是明确**“依赖关系”的指向和定义**:
- 这里的“依赖”指的是CUDA流或事件层面的同步依赖,而非释放操作与它对应的原始分配操作之间的逻辑依赖。
- 该属性控制的是内存池在什么情况下可以复用已通过异步释放(如
cuFreeAsync())归还的内存块——只有当待复用的释放操作,和发起新分配的操作之间没有流/事件依赖时,内存池才允许直接复用已完成释放的内存。
针对你的疑问:
- 你提到的“释放操作依赖于某分配操作”,本质是释放操作所在的流中,该释放任务排在对应分配后的计算任务之后,必须等前面的任务完成后,释放才会真正生效。这种依赖是释放操作与自身流内前置任务的依赖,和新的分配操作无关。
- 当新的分配操作需要执行时,只要它和释放操作之间没有流同步依赖(比如新分配在另一个独立流中,且没有等待释放流的完成),那么一旦释放操作实际完成(即其流内前置任务都执行完毕),内存池就会按照该属性的规则,允许将这块内存复用给新的分配请求。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

