CUDAC雙變量加法-創(chuàng)新互聯(lián)

#include#include#include#include//Definition of kernel function to add two variables
__global__ void gpuAdd(int d_a, int d_b, int *d_c)
{*d_c = d_a + d_b;
}

//main function
int main() 
{//Defining host variable to store answer
	int h_c;
	//Defining device pointer
	int *d_c;
	//Allocating memory for device pointer
	cudaMalloc((void**)&d_c, sizeof(int));
	//Kernel call by passing 1 and 4 as inputs and storing answer in d_c
	//<<<1,1>>>means 1 block is executed with 1 thread per block
	gpuAdd<<<1, 1 >>>(1, 4, d_c);
	//Copy result from device memory to host memory
	cudaMemcpy(&h_c, d_c, sizeof(int), cudaMemcpyDeviceToHost);
	printf("1 + 4 = %d\n", h_c);
	//Free up memory
	cudaFree(d_c);
	return 0;
}

在 main 函數(shù)中,前兩行定義主機和設(shè)備的變量。第三行使用cudaMalloc 函數(shù)在設(shè)備上分配d_c變量的內(nèi)存。cudaMalloc 函數(shù)類似于C中的malloc 函數(shù)。在 main 函數(shù)中調(diào)用 gpuAdd,其中1和4 是兩個輸人變量,d_c是一個作為輸出指針變量的設(shè)備顯存指針。如果 gpuAdd 的結(jié)果需要在主機上使用,那么它必須從設(shè)備的內(nèi)存復(fù)制到主機的內(nèi)存中,這是由 cudaMemcpy函數(shù)完成的。然后,使用 printf 函數(shù)打印這個結(jié)果。倒數(shù)第二行使用cudaFree 函數(shù)釋放設(shè)備上使用的內(nèi)存。從程序中釋放設(shè)備上使用的所有內(nèi)存是非常重要的,否則,你可能在某個時候耗盡內(nèi)存。
雙變量加法程序有兩個函數(shù):main 和gpuAdd。如你所見,gpuAdd 是通過使用__global__關(guān)鍵字定義的,因此它用于在設(shè)備上執(zhí)行,而 main 函數(shù)將在主機上執(zhí)行。這個程序?qū)⒃O(shè)備上的兩個變量相加,并在命令行上打印輸出。

創(chuàng)新互聯(lián)公司專注于根河企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站建設(shè)。根河網(wǎng)站建設(shè)公司,為根河等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

現(xiàn)在我們將看到如何通過引用傳遞參數(shù)來編寫相同的程序。為此,我們必須首先修改內(nèi)核函數(shù)來添加兩個變量。不是使用整數(shù)變量d_a和d_b作為內(nèi)核的輸入,而是將指向設(shè)備d_a和d_b上這些變量的指針作為輸入。相加后的答案會存儲在第三個整數(shù)指針d_c所指向的內(nèi)存位置。作為這個設(shè)備函數(shù)引用傳遞的指針應(yīng)該用cudaMalloc函數(shù)分配內(nèi)存。

#include#include#include#include//Kernel function to add two variables, parameters are passed by reference
__global__ void gpuAdd(int *d_a, int *d_b, int *d_c) 
{*d_c = *d_a + *d_b;
}

int main() 
{//Defining host variables
	int h_a,h_b, h_c;
	//Defining Device Pointers
	int *d_a,*d_b,*d_c;
	//Initializing host variables
	h_a = 1;
	h_b = 4;
	//Allocating memory for Device Pointers
	cudaMalloc((void**)&d_a, sizeof(int));
	cudaMalloc((void**)&d_b, sizeof(int));
	cudaMalloc((void**)&d_c, sizeof(int));
	//Coping value of host variables in device memory
	cudaMemcpy(d_a, &h_a, sizeof(int), cudaMemcpyHostToDevice);
	cudaMemcpy(d_b, &h_b, sizeof(int), cudaMemcpyHostToDevice);
	//Calling kernel with one thread and one block with parameters passed by reference
	gpuAdd<<<1, 1 >>>(d_a, d_b, d_c);
	//Coping result from device memory to host
	cudaMemcpy(&h_c, d_c, sizeof(int), cudaMemcpyDeviceToHost);
	printf("Passing Parameter by Reference Output: %d + %d = %d\n", h_a, h_b, h_c);
	//Free up memory 
	cudaFree(d_a);
	cudaFree(d_b);
	cudaFree(d_c);
	return 0;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:CUDAC雙變量加法-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article0/dhicoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、響應(yīng)式網(wǎng)站手機網(wǎng)站建設(shè)、App設(shè)計靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)