CUDA教程: 2.初识CUDA

在上一章, 我们介绍了GPU的硬件, 这一张呢, 我们来聊聊CUDA编程的细节.

说到编程细节, 无非就是包含: 环境安装, 语法风格, 实现流程(或叫做编程模型), 关键字, 编译这些事. 接下来, 我们就这些内容展开介绍.

异构计算

CUDA是一种异构计算的编程模型, 所谓异构计算, 就是将一个任务分开几份, 分别在不同的设备上执行. 而在CUDA编程模型中, 我们是将主要计算的部分交给GPU来完成, 而逻辑控制和数据预处理等交给CPU来完成.

在CUDA编程模型中有两个重要的词汇: Host & Device

  • Host: CPU和内存(host memory)
  • Device: GPU和显存(device memory)

我们通常把CPU称作Host(或者主机), 把GPU称作Device(或者设备), 比如:主机函数, 主机变量, 设备函数, 设备内存等.

环境安装

官方给了非常详细的安装步骤:

  • 适用设备:

    • 所有包含NVIDIA GPU的服务器,工作站,个人电脑,嵌入式设备等电子设备
  • 软件安装:

    • Windows:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
      只需安装一个.exe的可执行程序

    • Linux:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
      按照上面的教程,需要6 / 7 个步骤即可

    • Jetson: https://developer.nvidia.com/embedded/jetpack
      直接利用NVIDIA SDK Manager 或者 SD image进行刷机即可

虽然都是英文的, 但是都是一些非常简单的词汇, 建议大家在配置环境之前看一下.

安装好环境之后, 你就可以检查下是否安装成功了:

查看当前设备中GPU状态:

  • 服务器,工作站,个人电脑:nvidia-smi

  • Jetson等设备: Jtop

  • 查看当前设备参数:

    • 在CUDA sample中1_Utilities/deviceQuery文件夹下的deviceQuery程序。以Ubuntu为例,deviceQuery 程序在:/usr/local/cuda/samples/1_Utilities/deviceQuery

CUDA程序编写

当我们在写CUDA程序时, 那些在GPU上执行的代码和在CPU上执行的代码可以放在一起, 会变成一个".cu"文件

而CUDA编程模型都会遵循一个流程:

  1. 把输入数据从CPU内存复制到GPU显存

  1. 在执行芯片上缓存数据,加载GPU程序并执行

  1. 将计算结果从GPU显存中复制到CPU内存中

而在GPU上执行的函数, 我们将它成为核函数. 在CPU上执行的函数, 我们称之为主机函数.

比如: __global__ void KernelFunc()这个函数, 前面的__global__修饰符限定了该函数就是在GPU上执行, 可以在GPU或者CPU上调用.

__device__修饰符限定了函数只能在GPU上执行和调用.

__host__修饰符限定了函数只能在CPU上执行和调用.

当然如果什么都不加, 那就和__host__一样.

比如在下面代码中:

VecAdd就是核函数, 它在GPU中执行, 在CPU main()函数中被调用

<<<>>>中的内容是执行这个核函数的线程个数, 以及现成层次等, 我们在下一章节进行说明.

那写好了代码之后, 我们就要将写好的代码进行编译:

我们写完代码之后, 将文件以.cu为后缀名的形式保存, 然后就可以使用专门的编译器 nvcc 来进行编译.

CUDA编译工作如下:输入程序经过预处理,用于设备编译编译,编译成CUDA二进制(cubin)或PTX中间代码,存放在fatbinary中。再次对输入程序进行预处理以进行主机编译,并进行合并以嵌入 fatbinary 并将 CUDA 特定的 C++ 扩展转换为标准 C++ 结构。然后 C++ 宿主编译器将带有嵌入式 fatbinary 的综合宿主代码编译成宿主对象。

每当主机程序启动设备代码时,CUDA 运行时系统都会检查嵌入式 fatbinary,以获得当前 GPU 的适当 fatbinary 图像。

CUDA程序默认以全程序编译模式编译,即设备代码不能从单独的文件中引用实体。在整个程序编译模式下,设备链接步骤无效。

当然, 当你引入头文件的时候, 还可以这样编写:

当编译成功之后, 我们就有了一个可执行程序.

那我们还可以对这个可执行程序进行分析, NVIDIA提供了nvprof, nvvp, nsight等分析工具.



CUDA教程: 2.初识CUDA---CUDA简介相关推荐

  1. CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略

    CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略 目录 根据Anaconda的CUDA版本去安装对应匹配的NVIDIA驱动程序图文教程 ...

  2. Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题

    Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题 有NVIDIA显卡的可以先去看CUDA安装教程,pytorch可以搭配CUDA10.0~ ...

  3. A100 GPU服务器安装CUDA教程

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  4. DL之IDE:深度学习环境安装之NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略

    DL之IDE:深度学习环境安装之NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略 目录 根据Anaconda的CUDA版本去安装对应匹配的N ...

  5. Windows RTX3090 配置Pytorch/Tensorflow CUDA 教程

    1. 查询显卡驱动版本. 电脑桌面-右键-NVIDIA控制面板-帮助-系统信息-驱动程序版本: 2. 查询CUDA Toolkit版本. 前往CUDA Toolkit版本官网查看与显卡驱动程序版本相对 ...

  6. CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)

    CUDA+VS2017+win环境下 cuda工程环境搭建 引言 前提准备(CUDA和VS的安装) Visual Studio 配置 测试 Reference 引言 在学习CUDA并行计算原理时,在V ...

  7. CUDA编程第三章: CUDA执行模型

    前言: 本章内容: 通过配置文件驱动的方法优化内核 理解线程束执行的本质 增大GPU的并行性 掌握网格和线程块的启发式配置 学习多种CUDA的性能指标和事件 了解动态并行与嵌套执行 通过上一章的练习, ...

  8. CUDA编程-01: 搭建CUDA编程环境

    CUDA简介 CUDA是英伟达开发的一种并行计算平台和编程模型,使用它可以让编程人员非常方便地利用GPU强大的算力.支持CUDA的GPU有数百个内核,可以同时运行数千个计算线程,这些内核拥有共享的资源 ...

  9. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识

    作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...

最新文章

  1. 神经网络迭代次数的简并和不可约谱项
  2. 2021年阳光高考成绩查询,高考攻略 | 2021年阳光高考月历来了!
  3. DAY3-“忙里偷闲”找你玩耍2018-1-11
  4. 如何从零开始搭建网站?
  5. linux echo 当前时间,linuxecho
  6. 所以,我们依然要读书
  7. 3GPP LTE/NR信道模型
  8. 酷睿i7 8750h相当于什么水平 i78750h属于什么级别
  9. 提高工作效率的12个小建议
  10. 利用python进行数据分析(4)
  11. 高效解答二进制数“多异或”和“多同或”连续运算问题
  12. 输出电阻与反馈网络的关系以及计算
  13. 什么是邓氏编码DUNS NUMBER?
  14. 工具篇之HBuilderX使用教程
  15. JAVA 导入数据到Elasticsearch中
  16. 什么是特征工程?如何进行特征工程?超详细解读
  17. java改变背景图片大小,设置背景图片大小相同的的Java应用程序窗口/屏幕
  18. 火狐和IE之间的区别
  19. 游戏运营岗位的相关知识点
  20. ma系列之-1-机器目录 系统结构

热门文章

  1. 在跑FIA时遇到的问题Restoring from checkpoint failed. This is most likely due to a Variable name or other gra
  2. 使用python绘制4个相切的圆形
  3. 存储过程--异常处理机制(Begin try Begin Catch)
  4. linux通过修改时间排序,linux按修改时间排序
  5. 怎么把线稿提取出来_手把手教你如何使用photoshop提取线稿
  6. Qt开发Android范例详入门详解
  7. 导出多个sheet页面
  8. P4072 [SDOI2016]征途
  9. OpenCV 基础实战一图像的读取和显示
  10. Winform UI界面设计例程(一)多窗口主题搭配