CUDA编程学习(1)

P3 CUDA编程模型

我的参考视频

    1. 基础知识

      • CUDA编程模型是异构的,需要CPU与GPU协同工作。
      • CUDA中,分为host和device两个概念,host指代CPU及其内存,device指代GPU及其内存。
      • CUDA程序里既包含host程序,也包含device程序,分别在CPU和GPU上运行。
      • host和device之间可以进行通信,它们之间可以进行数据拷贝。
    1. 程序执行流程
        1. 分配host内存,并进行数据初始化
        1. 分配device内存,从host将数据拷贝到device上
        1. 调用CUDA核函数在device上完成指定的运算
        1. 在device上的运算结果拷贝到host上(例如,写入磁盘等)
        1. 释放device和host上分配的内存
    1. 调用CUDA核函数在device上执行并行计算:
      • 核函数(kernel)使用 __global__ 符号声明

      • 调用时需要<<<grid, block>>>来指定kernel执行的线程数量及结构

      • grid与block定义为dim3类型的变量,dim3可以视为包含3个无符号整数(x,y,z)成员的结构体变量,缺省值初始化为1。

      • 以上两者可以灵活的定义为1-dim,2-dim,3-dim结构。在不同的GPU结构中,grid与block维度大小受限制。

在这里插入图片描述

    * 在CUDA中,每个线程都要执行核函数,并且每个线程都会分配一个唯一的线程号 thread ID,这个ID值可以通过核函数的内置变量threadx来获得。
  • GPU代码片段

在这里插入图片描述

  • bs指代的是blocksize,一个块有256线程

  • gs指代的是gridsize,一个grid有 预先定义的线程数/bs(向上取整), 此处的(N+bs-1)/bs,就是向上取整。

  • 一个kernel启动的所有线程称为一个网格(grid)

  • 同一个网格中的线程共享全局内存空间,grid是线程结构的第一层

  • 网格又划分成多个线程块block,这是第二层

  • 线程块中有多个线程,32个线程为一个warp,这是第三层

  • GPU代码结构

在这里插入图片描述

  • CUDA关键字

在这里插入图片描述

总结就是 __global__ 和 __device__、__host__都不能共用,但是__device__和__host__可以共用,表示在CPU和GPU都能编译调用。

  • CUDA 内置变量(无需定义,自带的)

在这里插入图片描述

  • GPU代码片段(getbid与gettid)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值