在调用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
答案 0 :(得分:1)
不,分配是context的一部分。
当你破坏上下文时,你也会销毁与之相关的任何资源,包括内存分配。
即使没有你的上下文破坏,如果你试图在另一个上下文中使用CUdeviceptr
创建(即已分配),当其他上下文不是最新的时,你应该得到一个“无效的设备指针”错误(或者内核运行时错误,如果将其传递给内核,例如“非法访问”)
另请注意,您在此处混合使用驱动程序API,使用运行时API语法(<<<..>>>
),因此我并不是建议您在任何特定情况下实际上理解为什么,只是尝试回答您的问题