您的位置:首页 > 其它

cuda——数组相加(矢量和)

2014-05-04 19:42 330 查看
#include <stdio.h>
#define N 65535//数组长度
#define M 128//指定的每个线程块的线程数量
int a
,b
,c
;
__global__ void add(int* a,int* b,int* c){
int tid = threadIdx.x+blockIdx.x*blockDim.x;//计算线程索引
while(tid < N){
c[tid] = a[tid]+b[tid];
tid += gridDim.x*blockDim.x;
}
}
int main(){
int i;
int *d_a,*d_b,*d_c;
for(i = 0;i<N;i++){
a[i] = 0;
b[i] = i;
}
//在GPU上分配内存
cudaMalloc((void**)&d_a,sizeof(int)*N);
cudaMalloc((void**)&d_b,sizeof(int)*N);
cudaMalloc((void**)&d_c,sizeof(int)*N);
//将数组a和b复制到GPU
cudaMemcpy(d_a,a,N*sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(d_b,b,N*sizeof(int),cudaMemcpyHostToDevice);
//调用核函数进行运算s
add<<<(N+M-1)/M,M>>>(d_a,d_b,d_c);
//将数组c从GPU复制到CPU
cudaMemcpy(c,d_c,N*sizeof(int),cudaMemcpyDeviceToHost);
for(i = N-10;i<N;i++)
printf("%d+%d=%d\n",a[i],b[i],c[i]);
//释放GPU上的内存
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: