第一个基于GPU CUDA的程序--向量相加的并行处理

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<cutil.h>
#define N 4
/*****功能:两个向量从主机端到设备端的拷贝,
进行向量求和后,再将数据拷贝加主机端*/

//设备端代码
__global__ void VecAdd(float* A,float* B,float* C)
{
 int i=threadIdx.x;
 if(i<N)//跳过没有用的线程
  C[i]=A[i]+B[i];
}
//主函数
int main()

 char c;
 int i;
 //显存中分配向量空间
 size_t size=N*sizeof(float);
 float* d_A;
 cudaMalloc((void**)&d_A,size);
 float* d_B;
 cudaMalloc((void**)&d_B,size);
 float* d_C;
 cudaMalloc((void**)&d_C,size);
 //内存中分配向量空间
 float* h_A=(float*)malloc(size);
 float* h_B=(float*)malloc(size);
 float* h_C=(float*)malloc(size);
 //从内存向显存拷贝向量
 cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice);
 cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice);
 //启动Kernel
 int threadsPerBlock=256;
 int threadsPerGrid=(N+threadsPerBlock-1)/threadsPerBlock;
 VecAdd<<<threadsPerGrid,threadsPerBlock>>>(d_A,d_B,d_C);
 //从显存向内存拷回结果
 cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost);
 //释放显存空间
 cudaFree(d_A);
 cudaFree(d_B);
 cudaFree(d_C);
 for(i=0;i<N;i++)
 {
  printf("%5.2f",h_C[i]);
 }
 scanf("%c",&c);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值