Open Billccx opened 7 months ago
C++中的变量在离开其作用域之后会自动触发析构函数,这是编译器保证的。请善用谷歌搜索。
-----原始邮件----- 发件人:"Chenxi Cui" @.> 发送时间:2024-03-20 23:10:12 (星期三) 收件人: PKUFlyingPig/CMU10-714 @.> 抄送: Subscribed @.***> 主题: [PKUFlyingPig/CMU10-714] 关于hw4中显存的释放 (Issue #2)
您好! 我阅读了ndarray_backend_cuda.cu中关于CudaArray的实现
struct CudaArray { CudaArray(const size_t size) { cudaError_t err = cudaMalloc(&ptr, size * ELEM_SIZE); if (err != cudaSuccess) throw std::runtime_error(cudaGetErrorString(err)); this->size = size; } ~CudaArray() { cudaFree(ptr); } size_t ptr_as_int() { return (size_t)ptr; }
scalar_t* ptr; size_t size; };
CudaArray类在其析构函数中释放显存。那么请问CudaArray类的析构是如何触发的呢?我好像没有在代码中看到有关delete的操作,希望您能指点一下,谢谢!
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
C++中的变量在离开其作用域之后会自动触发析构函数,这是编译器保证的。请善用谷歌搜索。 … -----原始邮件----- 发件人:"Chenxi Cui" @.> 发送时间:2024-03-20 23:10:12 (星期三) 收件人: PKUFlyingPig/CMU10-714 @.> 抄送: Subscribed @.> 主题: [PKUFlyingPig/CMU10-714] 关于hw4中显存的释放 (Issue #2) 您好! 我阅读了ndarray_backend_cuda.cu中关于CudaArray的实现 struct CudaArray { CudaArray(const size_t size) { cudaError_t err = cudaMalloc(&ptr, size ELEM_SIZE); if (err != cudaSuccess) throw std::runtime_error(cudaGetErrorString(err)); this->size = size; } ~CudaArray() { cudaFree(ptr); } size_t ptr_as_int() { return (size_t)ptr; } scalar_t ptr; size_t size; }; CudaArray类在其析构函数中释放显存。那么请问CudaArray类的析构是如何触发的呢?我好像没有在代码中看到有关delete的操作,希望您能指点一下,谢谢! — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.>
是的,感谢您的回复。
很抱歉我没有把问题表述清楚。您的意思是,CudaArray都是以局部变量的形式存放在栈区的么?
我之前看过一个非常类似的项目,那个项目中,gpu上的显存的申请和释放的时机与python侧tensor的生命周期紧密关联,因此那个项目在python侧tensor类的del方法中实现了释放gpu显存的逻辑,即通过ctypes调用了一个包含cudaFree的函数。配合python的垃圾回收机制,可以实现显存的自动释放。
不知道在hw4中是否也有类似的逻辑呢?谢谢
CudaArray绑定的python对象的_del_方法好像会执行CudaArray析构函数来释放内存。
您好! 我阅读了ndarray_backend_cuda.cu中关于CudaArray的实现
CudaArray类在其析构函数中释放显存。那么请问CudaArray类的析构是如何触发的呢?我好像没有在代码中看到有关delete的操作,希望您能指点一下,谢谢!