如何理解 CUDA 中的 cudaMalloc() 的參數

運行時函數的原型:
  1. cudaError_t cudaMalloc (void **devPtr, size_t  size );   
此函數返回值是 CUDA 中定義的一個錯誤代碼。

主要是第一個參數。爲什麼是兩個星星呢?用個例子來說明下。

  1. float *device_data=NULL;  
  2. size_t size = 1024*sizeof(float);  
  3. cudaMalloc((void**)&device_data, size);  
上面這個例子中我在顯存中申請了一個包含 1024 個單精度浮點數的一維數組。而 device_data 這個指針是存儲在主存上的。之所以取 device_data 的地址,是爲了將 cudaMalloc 在顯存上獲得的數組首地址賦值給 device_data。在函數中爲形參賦值是不會在實參中發生變化的,但是指針傳遞的是地址,我們操作了某個地址的數據,實際上是真的改變了指定地址的數據。像這個申請顯存的函數,第一個參數傳遞的是 device_data 這個指針的地址,然後改變這個地址的內容就會帶給實參真正的改變。
發佈了60 篇原創文章 · 獲贊 18 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章