在调用cuMemAlloc之后使用cuCtxDestroy内存分配是否安全?
例如。
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
最佳答案
不,分配是context的一部分。
销毁上下文时,还将销毁与其关联的所有资源,包括内存分配。
即使没有破坏上下文,如果尝试使用在另一个上下文下创建(即分配)的CUdeviceptr
,当该另一个上下文不是当前上下文时,也应收到“无效的设备指针”错误(或内核运行时错误,如果您将其传递给内核,例如“非法访问”)
还请注意,您在此处混合使用了驱动程序API和运行时API语法(<<<..>>>
),因此我不建议您写的内容在任何特定情况下实际上都是理智的,只是试图回答您的问题。