c++ - 在我调用 cuCtxDestroy 之后重用 cuMemAlloc 内存是否安全?

标签 c++ memory cuda gpu

使用 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/

相关文章:

main 之外的 C++ 对象初始化

c++ - 关于从设备向主机复制数据时的推力::execution_policy

c++ - 此代码是否违反一个定义规则?

c++ - 对自己的库函数的 undefined reference

memory - 编程时保留 STM32F4 内存

java - Java Android 中的位图回收()

C++ - 理解引用和内存地址

c++ - CUDA NPP - 图像缩小 - 求所有图像像素的总和/平均值

c++ - main.obj : fatal error LNK1143: invalid or corrupt file: no symbol for COMDAT section 0x6

c++ - C++中的命名空间重构