CUDA 模型

GPU计算基础知识

  • cuda编程模型是一个异构模型,需要CPU和GPU协同工作
  • 在cuda中,host和device是两个重要的概念,我们用host指代CPU及其内存,而用device指代GPU以及内存。
  • CUDA程序中即包括host程序,又包含device程序,他们分别在CPU和GPU上运行
  • host与device之间可以进行通信,这样他们之间可以进行数据拷贝

cuda程序执行流程

  1. 分配host 内存,并进行数据初始化
  2. 分配device内存,并从host将数据拷贝到device上
  3. 调用cuda的核函数在device上完成指定的运算
  4. 将device的运算结果拷贝到host上(性能)
  5. 释放host 和device上分配的内存

cuda程序

  • 上述流程最重要的是调用核函数来执行并行计算
  • kernel 是CUDA中的一个重要概念,kernel是在device上线程中并行执行的函数
  • 核函数用__global__符号声明,在调用时需要用<<<grid,block>>>来指定kernel要执行的线程数量
  • 在cuda中,每一个线程都要执行核函数,并且每个线程会分配一个唯一的线程号thread ID,这ID值可以通过核函数的内置变量threadIdx来获得

在这里插入图片描述

CUAD程序层次结构

  • GPU 上很多并行化的轻量级线程
  • kernel 在device上执行时实际上是启动很多线程,一个kernel所启动的所有线程称为一个网格(grid)
  • 同一个网格上的线程共享相同的全局内存空间,grid是线程结构的第一层次
  • 网格又可以分为很多线程块(block),一个线程块可以包含很多线程,这是第二层次
  • warp :32个线程一组,这是第三层次
  • grid和block都是定义为dim3类型的变量
  • dim3可以看成是包含三个无符号整数(x,y,z)成员的结构体变量,在定义时,缺省值初始化为1。
  • grid和block可以灵活地定义为为1-dim,2-dim,3dim。
  • 定义的grid和block如下所示,kernel在调用时也必须通过执行配置<<<grid,block>>>来指定kernel所使用的线程数及结构。
  • 不同GPU架构,grid和block的维度有限制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫仙森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值