《GPU高性能编程CUDA实战》—— 《笔记一》——使用线程实现GPU上的矢量求和
2017-08-09 10:02
267 查看
使用线程实现GPU上的矢量求和
//**************使用线程实现GPU上的矢量求和**********// /* 时间:2017-8-9 参考书:《GPU高性能编程CUDA实战》 */ #include <iostream> #include <stdio.h> #define N 10 using namespace std; __global__ void add(int *a,int *b,int *c); int main() { int a ,b ,c ; int *dev_a,*dev_b,*dev_c; //在GPU上分配内存 cudaMalloc((void**)&dev_a,N*sizeof(int)); cudaMalloc((void**)&dev_b,N*sizeof(int)); cudaMalloc((void**)&dev_c,N*sizeof(int)); //在CPU上为数组"a""b"赋值 for(int i=0;i<N;i++) { a[i]=i; b[i]=i*i; } //将数组“a”"b"复制到GPU cudaMemcpy(dev_a,a,N*sizeof(int),cudaMemcpyHostToDevice); cudaMemcpy(dev_b,b,N*sizeof(int),cudaMemcpyHostToDevice); add<<< 1,N>>>(dev_a,dev_b,dev_c); //将数组“c”从GPU赋值到CPU cudaMemcpy(c,dev_c,N*sizeof(int),cudaMemcpyDeviceToHost); //显示结果 for(int i=0;i<N;i++) { printf("%d + %d = %d\n",a[i],b[i],c[i]); } //释放在GPU上分配的内存 cudaFree(dev_a); cudaFree(dev_b); cudaFree(dev_c); return 0; } __global__ void add(int *a,int *b,int *c) { int tid=threadIdx.x; if(tid<N) { c[tid]=a[tid]+b[tid]; } }
相关文章推荐
- 在GPU上使用线程实现波纹效果
- [菜鸟每天来段CUDA_C]GPU上实现任意长度的矢量求和
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- 使用C#实现远程线程插入.
- java中使用线程实现Timer(定时器)原理和源码
- 多线程编程之使用工作线程实现文档自动保存(II)
- java中使用线程实现Timer(定时器)原理和源码
- ASPNET中实现在线用户检测(使用后台守护线程)
- Java:使用wait()与notify()实现线程间协作
- 使用WaitForMultipleObjects实现线程间通信
- 一个方法最多2个线程同时使用的JAVA实现
- ASPNET中实现在线用户检测(使用后台守护线程)
- 使用C#实现远程线程插入.
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- 多线程编程之使用工作线程实现文档自动保存(I)
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码