如何理解CUDA中的cudaMalloc 的引數

2021-06-10 17:13:15 字數 833 閱讀 3416

對指標和位址比較熟悉的童鞋可以比較容易的理解這個概念,為了更好的讓更多的人理解cudamalloc的引數,寫這篇文章,以饗讀者。

首先看下此執行時函式的原型:

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這個指標的位址,然後改變這個位址的內容就會帶給實參真正的改變。

2023年3月13號16點42分追加:

「指標」也是一種變數,之所以叫他指標,完全是因為它的值是記憶體位址。

既然指標是變數,那麼變數也是需要儲存空間的。

cudamalloc的第乙個引數傳遞的是儲存在cpu記憶體中的指標變數的位址,cudamalloc在執行完成後,向這個位址中寫入了乙個位址值(此位址值是gpu視訊記憶體裡的)。

cuda中變數的屬性

在 device 亞程式中宣告的變數可以有以下幾種屬性 device,managed,constant,shared 和pinned device 資料儲存在 device 全域性儲存器中,可以通過以下方式宣告 real a 10 attributes device a 或 real device ...

CUDA中的計時函式

一 clock函式計時 在c和c 中有clock計時函式,由於cuda是包含c的,所以在cuda中我們也同樣可以使用這個函式。clock函式的定義 clock函式測的是在程式中從程式開始到呼叫clock函式之間在cpu上所經過的時鐘數 clocks clock函式的介紹 在c與c 的標頭檔案time...

Cuda中的cuda Malloc函式

很多人不理解為什麼cuda malloc的第乙個引數是兩個星星,其實直接用 dev c也是可以的,但是函式原型必須得是void 型的指標 請看我的指標遊戲系列部落格 之所以是void 這是因為我們不需要考慮傳入的指標型別,我們只需要這個指標的位址就夠了 怎麼解釋指標時你的事,我只管分配記憶體給你 如...