使用 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 语法 ( <<<..>>>
) 混合使用,因此我并不是在暗示您所写的内容在任何特定情况下实际上都是正常的,只是试图回答您的问题。
关于c++ - 在我调用 cuCtxDestroy 之后重用 cuMemAlloc 内存是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957054/