概述
//实现一个一维1*16的小矩阵的加法。
//矩阵大小:1*16
//分配一个block,共有16个线程并发。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cuda_runtime.h>
#include <cutil.h>
#define VEC_SIZE 16
//kernel function
__global__ void vecAdd(float* d_A,float* d_B,float* d_C)
{
int index=threadIdx.x;
d_C[index]=d_A[index]+d_B[index];
}
int main()
{
//得到分配空间的大小
size_t size=VEC_SIZE*sizeof(float);
//为本地分配内存
float* h_A=(float*)malloc(size);
float* h_B=(float*)malloc(size);
float* h_C=(float*)malloc(size);
//初始化
for (int i=0;i<VEC_SIZE;++i)
{
h_A[i]=1.0;
h_B[i]=2.0;
}
//将本地内存的中的数据复制到设备中
float* d_A;
cudaMalloc((void**)&d_A,size);
cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice);
float* d_B;
cudaMalloc((void**)&d_B,size);
cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice);
//分配存放结果的空间
float* d_C;
cudaMalloc((void**)&d_C,size);
//定义16个线程
dim3 dimblock(16);
vecAdd<<<1,dimblock>>>(d_A,d_B,d_C);
//讲计算结果复制回主存中
cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost);
//输出计算结果
for (int j=0;j<VEC_SIZE;++j)
{
printf("%f/t",h_C[j]);
}
//释放主机和设备内存
cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);
free(h_A);
free(h_B);
free(h_C);
return 0;
}
最后
以上就是小巧八宝粥为你收集整理的CUDA学习--一维矩阵的加的全部内容,希望文章能够帮你解决CUDA学习--一维矩阵的加所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复