whoway / CUDA101

nvidia(英伟达)GPU的CUDA代码练习存档

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CUDA101

优化版

  • 对视频教程中的代码进行存档
  • 对视频教程中部分地方进行详细补充, 以求更好的帮助入门CUDA, 并想到好的优化方式

目录

第一章 CUDA开发环境搭建

  • 1.1 课程介绍(00:07:30)
  • 1.2 异构计算和并行计算(00:08:38)
  • 1.3 CUDA介绍(00:10:34)
  • 1.4 系统GPU检测(00:06:30)
  • 1.5 Linux系统检查(00:07:23)
  • 1.6.1 CUDA安装(一)(00:07:33)
  • 1.6.2 CUDA安装(二)(00:05:21)
  • 1.7 查询GPU信息(00:07:36)

第二章 线程模型

  • 2.1 CUDA编程模型(00:06:10)
  • 2.2 CUDA线程模型(00:06:36)
  • 2.3 CUDA内存模型(00:07:31)
  • 2.4 nvcc工作流程(00:07:11)
  • 2.5 nvcc命令行参数(00:08:02)
  • 2.6 CUDA内核函数(00:08:06)
  • 2.7 CUDA内核函数执行(00:07:07)
  • 2.8 获取线程索引(00:07:29)
  • 2.9 CUDA错误处理(00:08:32)
  • 2.10 运行时GPU信息查询(00:08:07)
  • 2.11 GPU架构(00:07:04)
  • 2.12 线程分割和执行(00:07:42)
  • 2.13 PTX介绍(00:07:29)
  • 2.14 PTX兼容性(00:07:38)
  • 2.15 二进制兼容性(00:07:34)
  • 2.16 CUDA运行时库(00:07:26)
  • 2.17 矩阵加法程序(00:06:42)
  • 2.18 矩阵加法初始化(00:08:42)
  • 2.19 GPU内存分配和数据拷贝(00:09:41)
  • 2.20 内核矩阵加法(00:10:45)
  • 2.21 监测内核执行时间(00:09:40)
  • 2.22 nvprof监测内核执行时间(00:06:19)
  • 2.23 用网格和块索引数据(00:10:12)
  • 2.24 二维网格和块配置(00:08:06)
  • 2.25 一维网格和块配置(00:07:42)
  • 2.26 二维网格和一维块配置(00:05:23)
  • 2.27 线程束分支(00:11:01)
  • 2.28 线程束分支优化(00:07:37)
  • 2.29 线程束分支特点(00:06:52)
  • 2.30 线程束计算资源分配(00:06:15)
  • 2.31 指令延迟隐藏(00:05:47)
  • 2.32 算术运算指令并行性需求(00:05:20)
  • 2.33 内存指令并行性需求(00:05:06)
  • 2.34 流处理器占用率计算(00:08:47)
  • 2.35 nvprof分析线程束和内存读写(00:06:29)
  • 2.36 邻域并行计算(00:10:37)
  • 2.37 间域并行计算(00:08:16)
  • 2.38 循环展开(00:07:49)
  • 2.39 模版函数(00:11:46)
  • 2.40 GPU动态并行(00:07:41)
  • 2.41 动态并行HelloWorld(00:10:35)

第三章 内存模型

  • 3.1 GPU内存结构(00:07:02)
  • 3.2 寄存器溢出(00:06:15)
  • 3.3 本地内存和共享内存(00:06:17)
  • 3.4 常量内存(00:07:43)
  • 3.5 全局内存(00:07:17)
  • 3.6 GPU缓存和变量作用域(00:05:24)
  • 3.7 静态全局内存传递(00:11:40)
  • 3.8 统一虚拟地址(00:09:25)
  • 3.9 统一内存空间(00:12:14)
  • 3.10 页锁定内存(00:10:02)
  • 3.11 零拷贝内存(00:09:02)
  • 3.12 内存加载模式(00:06:55)
  • 3.13 GPU缓存设置(00:06:27)
  • 3.14 缓存数据加载(00:06:40)
  • 3.15 无缓存数据加载(00:05:58)
  • 3.16 内存存储模式(00:05:34)
  • 3.17 共享内存(00:08:02)
  • 3.18 动态分配共享内存(00:05:55)
  • 3.19 共享内存bank(00:05:19)
  • 3.20 共享内存访问模式(00:07:06)
  • 3.21 共享内存访问模式设置.(00:06:33)
  • 3.22 共享内存大小配置(00:09:18)
  • 3.23 共享内存屏障(00:08:32)
  • 3.24 线程块栅栏(00:07:39)
  • 3.25 线程网格栅栏(00:05:25)
  • 3.26 广播shuffle指令(00:08:05)
  • 3.27 向上shuffle指令(00:09:04)
  • 3.28 向后shuffle指令(00:06:28)
  • 3.29 异或shuffle指令(00:06:15)

第四章 流和事件

  • 4.1 CUDA流(00:07:47)
  • 4.2 CUDA流创建(00:05:19)
  • 4.3 异步数据拷贝(00:06:30)
  • 4.4 流调度(00:09:34)
  • 4.5 流事件(00:06:53)
  • 4.6 流事件同步(00:08:35)
  • 4.7 流操作时长计算(00:06:06)
  • 4.8 流执行顺序(00:07:00)
  • 4.9 隐式和显式同步(00:07:15)
  • 4.10 可配置事件(00:09:59)
  • 4.11 GPU内核并发检测(00:05:16)
  • 4.12 多流多内核执行(00:09:03)
  • 4.13 Visual Profiler工具(00:07:12)
  • 4.14 Visual Profiler分析多内核执行(00:11:05)
  • 4.15 OpenMP介绍(00:06:12)
  • 4.16 多线程分发CUDA流(00:06:59)
  • 4.17 使用环境变量修改工作队列(00:09:17)
  • 4.18 内核和数据拷贝并行(00:07:11)
  • 4.19 流回调函数(00:08:30)

第五章 底层指令优化

  • 5.1 底层指令优化(00:06:17)
  • 5.2 浮点数二进制编码(00:07:30)
  • 5.3 单精度和双精度(00:05:54)
  • 5.4 内置和标准函数(00:07:07)
  • 5.5 原子操作(00:06:01)
  • 5.6 浮点数精度测试(00:05:29)
  • 5.7 浮点数性能测试(00:09:01)
  • 5.8 内置函数PTX代码分析(00:09:11)
  • 5.9 MAD指令优化(00:07:44)
  • 5.10 CAS原子操作(00:06:21)
  • 5.11 自定义原子操作(00:07:41)
  • 5.12 原子操作的性能损失(00:08:23)

第六章 CUDA调试

  • 6.1 CUDA程序调试(00:07:28)
  • 6.2 内核调试焦点(00:07:50)
  • 6.3 中断和单步执行(00:07:35)
  • 6.4 调试断点使用(00:08:08)
  • 6.5 内核入口断点(00:06:16)
  • 6.6 条件断点(00:06:58)
  • 6.7 查看变量值(00:07:30)
  • 6.8 CUDA状态信息查询(00:05:34)
  • 6.9 寄存器查看(00:06:09)
  • 6.10 事件通知(00:05:56)
  • 6.11 自动错误检测(00:05:14)
  • 6.12 cuda-memcheck介绍(00:05:52)
  • 6.13 内存错误检测(00:10:03)
  • 6.14 线程竞争检测(00:09:29)

参考资料

About

nvidia(英伟达)GPU的CUDA代码练习存档


Languages

Language:Cuda 99.7%Language:C 0.3%