GPU加速(一)CUDA C编程及GPU基本知识
前 言
笔记来自深蓝学院《CUDA入门与深度神经网络加速》
补充:线程与线程
- 线程是进程中执行运算(CPU调度)的最小单位。同一类线程共享代码和数据空间;进程是资源分配的最小单位。每个进程都有独立的代码和数据空间。
- 多进程是指操作系统能同时运行多个任务(程序);多线程是指在同一程序中有多个顺序流在执行。
- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
- 资源分配给进程,同一进程的所有线程共享该进程的所有资源;处理机分给线程,即真正在处理机上运行的是线程。
- 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。
课堂笔记
1. GPU和CPU的基础知识
延迟:指令从发出到最终返回结果的时间。
吞吐量:单位时间处理指令的条数。
CPU特点(以减少延迟为导向):
- 多级高速缓存结构:经常访问的内容放在低级缓存中,不经常访问的放在高级缓存中。
- 复杂的控制单元:分支预测机制(if else),流水线数据前送。
- 强大运算单元:整型浮点型复杂运算。
GPU特点(以增加指令吞吐为导向):
- 缓存小:指令访问缓存的次数减少,提升内存访问指令的吞吐。
- 控制简单:没有分支预测和数据转发,使得控制简单的指令提升吞吐。
- 精简运算单元:计算单元多,以长延时流水线的形式提升运算简单指令的吞吐量
1.1 CPU与GPU对比
CPU适合处理复杂的指令(提升单指令的运行速度);
GPU适合处理多个简单指令(提升指令的执行数量)。
1.2 什么样的问题适合GPU
频繁访问缓存和控制复杂的指令不适合使用GPU,例如频繁访问磁盘的杀毒软件程序。
2. CUDA C编程基本知识
CUDA并行计算的整体步骤:
- 主机端(CPU)申请内存到设备端(GPU)
- 设备端核函数(GPU上运行的函数)实现运算密集和并行特点的指令
- 设备端拷贝到主机端 释放现存和内存
2.1 CUDA 内存模型
CUDA中的内存模型根据硬件端和软件端分为几个层次。
2.1.2 硬件端
• 每个线程处理器(SP)都用自己的registers(寄存器)。
• 每个SP都有自己的local memory(局部内存),register和local memory只能被线程自己访问。
• 每个多核处理器(SM)内都有自己的shared memory(共享内存),shared memory 可以被线程块内所有线程访问。
• 一个GPU的所有SM共有一块global memory(全局内存),不同线程块的线程都可使用。
2.1.2 软件端
• 线程处理器(SP)对应线程(thread)
• 多核处理器(SM)对应线程块(thread block)
• 设备端(device)对应线程块组合体(grid)
3. 并行计算向量相加
- 主机端:1.申请显存内存,2.转移拷贝,4.释放。
- 申请显存(全局内存)的函数
cudaMalloc( )
,例如:cudaError_t cudaMalloc (void **devPtr, size_t size)
,两个参数:地址和申请内存大小。 - 从设备全局内存中释放对象
cudaFree( )
,例如cudaError_t cudaFree ( void* devPtr )
,指向释放对象的指针。 - (同步)内存数据复制传递
cudaMemcpy( )
,例如
cudaError_t cudaMemcpy (void *dst, const void *src, size_t count, cudaMemcpyKind kind)
,从指针src拷贝到指针dst,count为执行大小,kind目前支持的四种选项:cudaMemcpyHostToDevice、cudaMemcpyDeviceToHost、cudaMemcpyDeviceToDevice、cudaMemcpyDefault。
- 申请显存(全局内存)的函数
- 设备端:3.读写线程寄存器,读写GRID的全局内存,读写block中的共享内存。
GPU加速(一)CUDA C编程及GPU基本知识相关推荐
- CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识
作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...
- CUDA (一):CUDA C 编程及 GPU 基本知识
目录 1 CPU 和 GPU 的基础知识 2 CUDA 编程的重要概念 3 并行计算向量相加 4 实践 4.1 向量相加 CUDA 代码 4.2 实践向量相加 5 给大家的一点参考资料 1 CPU 和 ...
- Premiere渲染程序没有GPU加速(CUDA)
文章目录 问题描述 解决方案 参考文献 问题描述 新装的电脑,GPU 是1080,用娱乐大师升级了驱动,Adobe Premiere 却没有上图的 GPU 加速 解决方案 升级驱动 驱动程序 | Ge ...
- 【GPU结构与CUDA系列4】GPU存储资源:寄存器,本地内存,共享内存,缓存,显存等存储器细节
0 软件抽象和硬件结构对应关系的例子 把GPU跟一个学校对应起来,学校里有教学楼.操场.食堂,还有老师和学生们:很快有领导(CPU)来检查卫生(需要执行的任务Host程序),因此这个学校的学生们要完成 ...
- L0 范数图像平滑(L0 Smooth) 的原理和 GPU 加速【CUDA】
一.概述 原作者提出了一种新的图像编辑方法,通过增加过渡的陡峭度,同时消除了一个低振幅结构的可管理程度,特别有效地锐化主要边缘.这种看似矛盾的效果是在一个利用 L0 梯度最小化的优化框架中实现的,它可 ...
- matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
不知道大家对于GPU硬件加速是否有了解,这是现在的浏览器必备的功能,开启后能大幅度提升浏览器的性能,给我们更加顺滑的浏览体验.GPU硬件加速能够利用GPU的图形性能,加速渲染网页中的图像信息. 如果我 ...
- [CUDA OpenCV]GPU加速的计算机视觉学习资源下载
点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家介绍一本学习CUDA加速的OpenCV的新书<Hands-On GPU-Accelerated Computer Vision with ...
- Matlab的Gpu加速(CUDA cudnn)
多CUDA版本的切换,及Matlab版本对应的CUDA版本 学习笔记–Matlab的Gpu加速 安装CUDA和cudnn时,踩了不少坑,总结如下几个经验: 1.显卡驱动的版本与CUDA是一对多的关系, ...
- 利用 GPU 加速人工智能:新型计算模式
纽约大学本周有一场探讨 "人工智能的未来" 的年度座谈会,Yann LeCun 邀请NVIDIA 联合创始人兼首席执行官黄仁勋 (Jen-Hsun Huang)先生在座谈会上发言. ...
最新文章
- list python 转tensor_TensorFlow 中的几个关键概念:Tensor,Operation,Graph,Session
- UIImage图片拉伸方法
- Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)
- 每个网页设计师应该知道的10条CSS规则
- 解决Fedora 自己编译的内核不能运行Virtualbox的问题。
- Java 设计模式之观察者模式
- JS中捉摸不透的==(宽松等于)
- 参数到不进oracle,Oracle对于启动参数检查不严格
- LaTex插入PDF图片并调整它的宽度
- icml和nips等各类重要会议论文收集
- 确定一个整数是否是2的幂
- C语言编程入门——程序练习(下)
- kx linux驱动下载,KX-MB2138CN Linux
- 2021-07-16 转载 - UmiJS应用框架
- 手机 播放音频 切换听筒和
- SQLite 对时间的支持
- 服务器系统2012浏览器,关闭Windows 2012系统IE浏览器”增强的安全配置已启用”问题 | 老左笔记...
- EventTarget.addEventListener()事件监听
- 请写下你的烦恼——读《解忧杂货店》有感
- Ghost备份后找不到GHO镜像文件
热门文章
- matlab如何写不等于号,不等于号(不等于号可以往右写么)
- 凉凉!写了个脚本,不小时锁了1W台手机。。
- 【第19天】内涵深厚才能妙语连珠
- Python简单绘制柱状图
- 【用pandas_alive几行代码绘制竞赛动图】全网首发pandas_alive数据可视化中文学习笔记合集,学不会来打我(配置好的venv虚拟环境+拿来即用测试代码+测试数据集+参数api解析)
- 文件删除终结者 v1.2 免费
- iphone版 天行skyline_App Store 上的“Skyline University”
- 十分详细的阳光十六法则 (转)
- Android studio系列:win10上Android studio4.0.2下载安装
- Formality使用总结1