cuda编程初尝试

来源:互联网 发布:雅思怎么做精听 知乎 编辑:程序博客网 时间:2024/05/17 04:06

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

看了很久很久的书,觉得自己大致的框架以了解,但是从未动手尝试,一旦动手你就会发现很多地方就卡顿了,当你把这些卡顿解决以后,你才踏入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:负责计算的描述,线程的分配,内存的使用

原创粉丝点击