CUDA程序编写 【参加CUDA线上训练营】

目录

关键字/标识符

__global__

__device__

__host__

核函数

编程步骤

编译方法

性能检测工具

关键字/标识符

__global__

__global__ 执行空间说明符将函数声明为内核。

  • 在设备上执行;
  • 可从主机调用,可在计算能力为 3.2 或更高的设备调用;
  • __global__ 函数必须具有 void 返回类型,并且不能是类的成员;
  • 对 __global__ 函数的任何调用都必须指定其执行配置,如执行配置中所述;
  • 对 __global__ 函数的调用是异步的,这意味着它在设备完成执行之前返回。

__device__

__device__ 执行空间说明符声明了一个函数。

  • 在设备上执行,
  • 只能从设备调用。
  • __global__ 和 __device__ 执行空间说明符不能一起使用。

__host__

  • __host__ 执行空间说明符声明了一个函数:
  • 在主机上执行,
  • 只能从主机调用。
  • 相当于声明一个函数只带有 __host__ 执行空间说明符,或者声明它没有任何 __host__ 、__device__ 或 __global__ 执行空间说明符; 在任何一种情况下,该函数都仅为主机编译。

__global__ 和 __host__ 执行空间说明符不能一起使用;

__device__和__host__可以一起使用。

核函数

函数定义:

__global__ void hello_cuda()  { }

 函数调用:

hello_cuda<<<BlockPerGrid,ThreadPerBlock>>>();

BlockPerGrid:每个grid中含有的block数

        计算公式:BlockPerGrid= (N + ThreadPerBlock- 1) / ThreadPerBlock   N为数据个数?

ThreadPerBlock:每个block中含有thread数,推荐128.

编程步骤

1、赋初值:分配空间(维度、字节数)

2、初始化设备

3、分配主机cpu内存:malloc();

4、分配设备gpu内存:cudaMalloc(float(**)&addr,n*sizeof(float))

5、启动核函数:主机拷贝到设备,完成后设备拷贝到主机

        cudaError_t cudaMemcpy(void *dist, const void* src,size_t count,CudaMemcpyKind kind)

6、释放资源:free();cudafree();

编译方法

nvcc hello_gpu.cu -o hello_gpu

性能检测工具

工具:nvprof

sudo /usr/local/cuda/bin/nvprof --print-api-trace ./a.out

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值