基于GPU的矢量求和运算

来源:互联网 发布:原唱变伴奏软件 编辑:程序博客网 时间:2024/05/17 05:57
#include <iostream>#include <cuda_runtime_api.h>const int N = 10 ;__global__ void add(int *a , int *b , int *c){     int tid = blockIdx.x ;//blockIdx是一个内置变量,计算该索引处的数据     if (tid < N)     {         c[tid] = a[tid] + b[tid] ;     }}void main(){     int a[N] , b[N] , c[N] ;     int *dev_a , *dev_b , *dev_c ;     cudaMalloc((void **)&dev_a , N * sizeof(int)) ;     cudaMalloc((void **)&dev_b , N * sizeof(int)) ;     cudaMalloc((void **)&dev_c , N * sizeof(int)) ;     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) ;     cudaMemcpy(dev_c , c , N * sizeof(int) , cudaMemcpyHostToDevice) ;     add<<<N , 1>>>(dev_a , dev_b , dev_c) ;//尖括号中的一个参数表示设备在执行核函数时使用的并行线程块的数量,第二个参数表示cuda运行时在每个线程块中创建的线程数量     //将数组c从GPU复制到cpu     cudaMemcpy(c , dev_c , N * sizeof(int) , cudaMemcpyDeviceToHost) ;//cudaMemcpyDeviceToHost指定参数复制回主机     //显示结果     for (int i = 0 ; i < N ; i++)     {         std::cout<<a[i]<<"\t"<<b[i]<<"\t"<<c[i]<<std::endl ;     }     //释放GPU上分配的内存     cudaFree(dev_a) ;     cudaFree(dev_b) ;     cudaFree(dev_c) ;}
0 0
原创粉丝点击