-
cudaError_t cudaMalloc (void **devPtr, size_t size );
此函數返回值是 CUDA 中定義的一個錯誤代碼。
主要是第一個參數。爲什麼是兩個星星呢?用個例子來說明下。
-
float *device_data=NULL;
-
size_t size = 1024*sizeof(float);
-
cudaMalloc((void**)&device_data, size);
上面這個例子中我在顯存中申請了一個包含 1024 個單精度浮點數的一維數組。而 device_data 這個指針是存儲在主存上的。之所以取 device_data 的地址,是爲了將 cudaMalloc 在顯存上獲得的數組首地址賦值給 device_data。在函數中爲形參賦值是不會在實參中發生變化的,但是指針傳遞的是地址,我們操作了某個地址的數據,實際上是真的改變了指定地址的數據。像這個申請顯存的函數,第一個參數傳遞的是 device_data 這個指針的地址,然後改變這個地址的內容就會帶給實參真正的改變。