cuda编程初尝试

纸上得来终觉浅,绝知此事要躬行

看了很久很久的书,觉得自己大致的框架以了解,但是从未动手尝试,一旦动手你就会发现很多地方就卡顿了,当你把这些卡顿解决以后,你才踏入cuda编程的大门;

#define data_size 5
__global__ void addKernel(const int *a,const int *b,int *c)
{
	int tid;
	tid = threadIdx.x;
	c[tid] = a[tid] + b[tid];
	
}
int main()
{
	int a[data_size] = { 1,2,3,4,5 };
	int b[data_size] = { 2,4,6,7,8 };
	int c[data_size] = { 0 };
	int *da, *db, *dc;
	cudaMalloc((void**)&da, data_size * sizeof(int));
	cudaMalloc((void**)&db, data_size * sizeof(int));
	cudaMalloc((void**)&dc, data_size * sizeof(int));
	cudaMemcpy(da, a, data_size * sizeof(int), cudaMemcpyHostToDevice);
	cudaMemcpy(db, b, data_size * sizeof(int), cudaMemcpyHostToDevice);
	cudaMemcpy(dc, c, data_size * sizeof(int), cudaMemcpyHostToDevice);
	addKernel << <1, data_size>> > (da, db, dc);
	cudaMemcpy(c, dc, data_size * sizeof(int), cudaMemcpyDeviceToHost);
	printf("%d%d%d%d%d\n", c[0], c[1], c[2], c[3], c[4]);
	cudaFree(da);
	cudaFree(db);
	cudaFree(dc);
	return 0;
}
这是一个很简单的数组相加的程序,程序还是分为两部分host和device:

host:负责变量申明,赋初值,内存分配,函数调用

device:负责计算的描述,线程的分配,内存的使用

猜你喜欢

转载自blog.csdn.net/qq_qwer/article/details/75578969