CUDA:cudaFree(0)

在学习代码的时候,遇到cudaFree(0),疑惑了一下,之前记得是释放显存,那么参数0是做什么操作?查阅资料并记录一下。

1:cudaFree函数API:接收void* devptr指针。释放指针指向的显存。如果输入参数时0,不会进行释放操作。

extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFree(void *devPtr);

2:那cudaFree(0)的到底是干嘛的呢?

参考1:https://blog.csdn.net/dfdfdsfdfdfdf/article/details/76674734

cuda里面没有对设备的初始化函数InitDevice(),只能每次调用的api函数的时候,加载设备的上下文,自动进行初始化,这将带来问题:


  • First函数调用的时候,需要自动初始化设备,因此耗时过长
  • 无法分析第一个api函数的耗时

处理办法

  • 在程序前加设置初始化函数: cudaFree(0),后面程序就不会再次初始化,cudamalloc()也将很快;
  • 一次初始化后,程序cudamalloc()分配的内存不释放,继续使用,所有程序运行结束后,再一起释放。 我这里就把上面参考链接里面的示例代码拿过作为示例,感兴趣的可以去看一下原文中的完整版。

参考2:https://www.cnblogs.com/xingzifei/p/6119452.html 这篇解释的更为详细和具体,感兴趣的可以去参看原文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风❤水墨

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值