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 這篇解釋的更爲詳細和具體,感興趣的可以去參看原文。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章