# CUDA101 **Repository Path**: whoway2017/CUDA101 ## Basic Information - **Project Name**: CUDA101 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-01 - **Last Updated**: 2023-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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) ## 参考资料 - CUDA 人工智能编程, 中新金桥, 夏松老师 - 终身教育平台-链接: https://le.ouchn.cn/courseDetails/CABA010000050684/ABA010000050684 - 中新金桥-软件通-链接: https://rjt.softtone.cn/index/details/Course51525