在调用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语法(<<<..>>>),因此我不建议您写的内容在任何特定情况下实际上都是理智的,只是试图回答您的问题。

09-28 07:05