首页 > 代码库 > CUDA编程学习(四)
CUDA编程学习(四)
利用Block和Thread进行并行加速
_global_ void add(int *a, int *b, int *c){ int index = threadIdx.x + blockIdx.x * blockDim.x; c[index] = a[index] + b[index];}#define N (2048*2048)#define THREAD_PER_BLOCK 512int main(){ int *a, *b, *c; //host copies of a, b, c int *d_a, *d_b, *d_c; //device copies of a, b, c int size = N * sizeof(int); //Alloc space for device copies of a, b, c cudaMalloc((void **)&d_a, size); cudaMalloc((void **)&d_b, size); cudaMalloc((void **)&d_c, size); //Alloc space for host copies of a, b, c and setup input values a = (int *)malloc(size); random_ints(a, N); b = (int *)malloc(size); random_ints(b, N); c = (int *)malloc(size); //Copy the data into device cudeMemcpy(d_a, a, size, cudaMemcpyHostToDevice); cudaMemcpy(d_b, b, size, cudaMemcpyHostToDevice); //Launch add() kernel on GPU with N blocks add<<<N/THREADS_PER_BLOCK,THREADS_PER_BLOCK>>>(d_a, d_b, d_c); //Copy result back to host cudaMemcpy(c, d_c, size, cudaMemcpyDeviceToHost); //Cleanup free(a); free(b); free(c); cudeFree(d_a); cudaFree(d_b); cudaFree(d_c); return 0;}/**** What‘s the function of random_ints****/void random_ints(int* a, int N){ int i; for (i = 0; i < N; ++i) a[i] = rand();}
CUDA编程学习(四)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。