在调用cuCtxDestroy后重用cuMemAlloc内存是否安全?

时间:2018-04-21 14:59:39

标签: c++ memory cuda gpu

在调用cuMemAlloc后使用cuCtxDestroy内存分配是否安全?

E.g。

cuCtxCreate()
void *d_buffer;
cuMemAlloc(d_buffer, ....);
cuCtxDestroy();

// In another place but same thread
cuCtxCreate();
kernel_call<<<..>>>(d_buffer); // Use the device allocation previously created

1 个答案:

答案 0 :(得分:1)

不,分配是context的一部分。

当你破坏上下文时,你也会销毁与之相关的任何资源,包括内存分配。

即使没有你的上下文破坏,如果你试图在另一个上下文中使用CUdeviceptr创建(即已分配),当其他上下文不是最新的时,你应该得到一个“无效的设备指针”错误(或者内核运行时错误,如果将其传递给内核,例如“非法访问”)

另请注意,您在此处混合使用驱动程序API,使用运行时API语法(<<<..>>>),因此我并不是建议您在任何特定情况下实际上理解为什么,只是尝试回答您的问题