CUDA編程——核函數(shù)參數(shù)傳遞與GPU內(nèi)存分配與調(diào)用

在程序中可以將CPU程序中的參數(shù)傳遞給核函數(shù)。

__global__ void add(int a,int b,int *c) {

????*c = a + b;

}

int main(void) {

????int c;

????int *dev_c;

? ? //在分配GPU的內(nèi)存

????cudaMalloc((void**)&dev_c, sizeof(int));

? ? //調(diào)用核函數(shù)

????add <<<1, 1 >>> (2, 7, dev_c);

? ? //將GPU運(yùn)算結(jié)果傳遞給主機(jī)

????cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);

????printf("2 + 7 = %d\n", c);

? ? //釋放GPU指針內(nèi)存

????cudaFree(dev_c);

????return 0;

}

????其中參數(shù)的傳遞是在核函數(shù)的尖括號(hào)后面,而且需要注意設(shè)備執(zhí)行任何有用的操作都需要分配內(nèi)存。其中cudaMalloc()是分配GPU中內(nèi)存的函數(shù),第一個(gè)參數(shù)是一個(gè)指針,用于保存新分配內(nèi)存地址的變量,第二個(gè)參數(shù)是分配內(nèi)存的大小。

????可以將cudMalloc()分配的指針傳遞給在設(shè)備上執(zhí)行的函數(shù)。設(shè)備中的代碼中使用cudaMalloc()分配的指針進(jìn)行內(nèi)存讀/寫操作。將cudaMalloc()分配的指針傳遞給主機(jī)上執(zhí)行的函數(shù)。指針用完后,需要調(diào)用cudaFree()釋放指針內(nèi)存。cudaMemcpy()函數(shù)是訪問(wèn)設(shè)備內(nèi)存的最常見(jiàn)的方法,其中cudaMemcpyToHost參數(shù)表明運(yùn)行時(shí)源指針時(shí)一個(gè)設(shè)備指針,目標(biāo)指針時(shí)一個(gè)主機(jī)指針,而cudaMemcpyHostToDevice表明與cudaMemcpyToHost相反的含義,還可以填寫cudaMemcpyDeviceToDevice表明兩個(gè)指針都位于設(shè)備上,如果源指針和目標(biāo)指針都位于主機(jī)上,直接調(diào)用標(biāo)準(zhǔn)C的memcpy()函數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容