CUDA教程: 2.初识CUDA---CUDA简介
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编程模型都会遵循一个流程:
- 把输入数据从CPU内存复制到GPU显存
- 在执行芯片上缓存数据,加载GPU程序并执行
- 将计算结果从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简介相关推荐
- CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
CV:NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略 目录 根据Anaconda的CUDA版本去安装对应匹配的NVIDIA驱动程序图文教程 ...
- Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题
Pytorch安装教程 及 解决 torch.cuda.is_available() 返回 False 的问题 有NVIDIA显卡的可以先去看CUDA安装教程,pytorch可以搭配CUDA10.0~ ...
- A100 GPU服务器安装CUDA教程
大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...
- DL之IDE:深度学习环境安装之NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
DL之IDE:深度学习环境安装之NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略 目录 根据Anaconda的CUDA版本去安装对应匹配的N ...
- Windows RTX3090 配置Pytorch/Tensorflow CUDA 教程
1. 查询显卡驱动版本. 电脑桌面-右键-NVIDIA控制面板-帮助-系统信息-驱动程序版本: 2. 查询CUDA Toolkit版本. 前往CUDA Toolkit版本官网查看与显卡驱动程序版本相对 ...
- CUDA+VS2017+win环境下 cuda工程环境搭建(解决标识符未定义或申明)
CUDA+VS2017+win环境下 cuda工程环境搭建 引言 前提准备(CUDA和VS的安装) Visual Studio 配置 测试 Reference 引言 在学习CUDA并行计算原理时,在V ...
- CUDA编程第三章: CUDA执行模型
前言: 本章内容: 通过配置文件驱动的方法优化内核 理解线程束执行的本质 增大GPU的并行性 掌握网格和线程块的启发式配置 学习多种CUDA的性能指标和事件 了解动态并行与嵌套执行 通过上一章的练习, ...
- CUDA编程-01: 搭建CUDA编程环境
CUDA简介 CUDA是英伟达开发的一种并行计算平台和编程模型,使用它可以让编程人员非常方便地利用GPU强大的算力.支持CUDA的GPU有数百个内核,可以同时运行数千个计算线程,这些内核拥有共享的资源 ...
- CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识
作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...
最新文章
- 神经网络迭代次数的简并和不可约谱项
- 2021年阳光高考成绩查询,高考攻略 | 2021年阳光高考月历来了!
- DAY3-“忙里偷闲”找你玩耍2018-1-11
- 如何从零开始搭建网站?
- linux echo 当前时间,linuxecho
- 所以,我们依然要读书
- 3GPP LTE/NR信道模型
- 酷睿i7 8750h相当于什么水平 i78750h属于什么级别
- 提高工作效率的12个小建议
- 利用python进行数据分析(4)
- 高效解答二进制数“多异或”和“多同或”连续运算问题
- 输出电阻与反馈网络的关系以及计算
- 什么是邓氏编码DUNS NUMBER?
- 工具篇之HBuilderX使用教程
- JAVA 导入数据到Elasticsearch中
- 什么是特征工程?如何进行特征工程?超详细解读
- java改变背景图片大小,设置背景图片大小相同的的Java应用程序窗口/屏幕
- 火狐和IE之间的区别
- 游戏运营岗位的相关知识点
- ma系列之-1-机器目录 系统结构
热门文章
- 在跑FIA时遇到的问题Restoring from checkpoint failed. This is most likely due to a Variable name or other gra
- 使用python绘制4个相切的圆形
- 存储过程--异常处理机制(Begin try Begin Catch)
- linux通过修改时间排序,linux按修改时间排序
- 怎么把线稿提取出来_手把手教你如何使用photoshop提取线稿
- Qt开发Android范例详入门详解
- 导出多个sheet页面
- P4072 [SDOI2016]征途
- OpenCV 基础实战一图像的读取和显示
- Winform UI界面设计例程(一)多窗口主题搭配