• 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__ 符号声明

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

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

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

    在这里插入图片描述

        * 在CUDA中,每个线程都要执行核函数,并且每个线程都会分配一个唯一的线程号 thread ID,这个ID值可以通过核函数的内置变量threadx来获得。
    
    • 1
    • 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)

    在这里插入图片描述

  • 相关阅读:
    Android 10.0 Launcher3单层高斯模糊(毛玻璃)效果的实现
    解决连接数据库提示:Public Key Retrieval is not allowed
    unordered_map详解
    Dataworks API:调取 MC 项目下所有表单
    Sendmail 设置 SMTP主机
    【学习记录 time: 2022-07-21】Java8 Lambda 表达式中的 forEach 如何提前终止?
    ab4d:ViewerSvg - svg to xaml converter
    软考高项-合同管理
    selenium 自动化测试——WebDriver API
    05贪心:买卖股票的最佳时机 II
  • 原文地址:https://blog.csdn.net/qq_38762282/article/details/126671811