2022-07 GPU 并行计算与 CUDA 编程
前情提要
逐渐掌握了并行计算相关算法实现,但是面向未来的技术不再是单纯的编码而是面向 GPU 编程通过算力解决发展生活中的实际问题,虚拟化,元宇宙,区块链等等技术基于 GPU 算力,虽然 CPU 和 GPU 一定时间内会长期共存,但是 GPU 应用的技术领域会越来越广泛并且越来越普及,所以学习要面向未来,面向世界才是;
课程概要
2022-07-07 杭州 周四 晴
GPU 并行计算与 CUDA 编程 第一课:https://www.bilibili.com/video/BV1eE411d7Gf?p=2&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第二课:https://www.bilibili.com/video/BV1eE411d7Gf?p=3&vd_source=d53aba77c7414634cc2f6cafda443c98
CPU 低延时导向设计:
GPU 基于吞吐量导向设计:
2022-07-09 杭州 周六 晴
第三课 cuda 软件环境:https://www.bilibili.com/video/BV1eE411d7Gf?p=4&vd_source=d53aba77c7414634cc2f6cafda443c98
第四课 cuda 硬件环境:https://www.bilibili.com/video/BV1eE411d7Gf?p=5&vd_source=d53aba77c7414634cc2f6cafda443c98
第五课 AWS 创建 GPU 服务:https://www.bilibili.com/video/BV1eE411d7Gf?p=6&vd_source=d53aba77c7414634cc2f6cafda443c98
略。。。
GPU 并行计算与 CUDA 编程 第 2 周
第六课 并行计算通讯模式: https://www.bilibili.com/video/BV1eE411d7Gf?p=7&vd_source=d53aba77c7414634cc2f6cafda443c98
第七课 开始编写 CUDA 程序: https://www.bilibili.com/video/BV1eE411d7Gf?p=8&vd_source=d53aba77c7414634cc2f6cafda443c98
第八课 CUDA 编程模型:https://www.bilibili.com/video/BV1eE411d7Gf?p=9&vd_source=d53aba77c7414634cc2f6cafda443c98
内存模型:
第九课 GPU 硬件模式:https://www.bilibili.com/video/BV1eE411d7Gf?p=10&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第 3 周
避免线程发散:
第十一课 kernal 的加载方式: https://www.bilibili.com/video/BV1eE411d7Gf?p=12&vd_source=d53aba77c7414634cc2f6cafda443c98
https://www.bilibili.com/video/BV1eE411d7Gf?p=12&vd_source=d53aba77c7414634cc2f6cafda443c98
第十二课 cuda 中的各种内存代码的使用:https://www.bilibili.com/video/BV1eE411d7Gf?p=13&vd_source=d53aba77c7414634cc2f6cafda443c98
本地内存:
全局内存:
共享内存:
课程总结:本地内存显然是最快的,但是本地内存因为属于局部变量,所以无法做到线程间的协作运行,此时就要使用到全局内存和共享内存的方式进行数据同步,但是全局内存的加载虽然方便但是速度上肯定没有共享内存便捷,所以共享内存因为需要设置读取,因此共享内存在代码量上相对会比较大些,当然速度上共享内存是具备明显优势的。
第十三课 cuda 中同步操作:https://www.bilibili.com/video/BV1eE411d7Gf?p=14&vd_source=d53aba77c7414634cc2f6cafda443c98
原子操作:
同步函数:
第十三课 并行化高效策略:https://www.bilibili.com/video/BV1eE411d7Gf?p=15&vd_source=d53aba77c7414634cc2f6cafda443c98
归约:
第十四课 扫描并行化实例:https://www.bilibili.com/video/BV1eE411d7Gf?p=16&vd_source=d53aba77c7414634cc2f6cafda443c98
第十五课 第三周作业讲解:https://www.bilibili.com/video/BV1eE411d7Gf?p=17&vd_source=d53aba77c7414634cc2f6cafda443c98
略。。。
GPU 并行计算与 CUDA 编程 第 4 周
2022-07-12 杭州 周二 热死个人
第十六课 并行化直方图计算:https://www.bilibili.com/video/BV1eE411d7Gf?p=18&vd_source=d53aba77c7414634cc2f6cafda443c98
2022-07-14 杭州 周四 挺热的
第十七课 压缩与分配:https://www.bilibili.com/video/BV1eE411d7Gf?p=19&vd_source=d53aba77c7414634cc2f6cafda443c98
第十八课 分段扫描:https://www.bilibili.com/video/BV1eE411d7Gf?p=20&vd_source=d53aba77c7414634cc2f6cafda443c98
矩阵中的稀疏矩阵经常用到分段扫描这样可以加速运算,提高并发效率;
第十九课 排序:https://www.bilibili.com/video/BV1eE411d7Gf?p=21&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第 5 周
2022-07-16 杭州 周六 暗无天日
第二十课 总结实例1:https://www.bilibili.com/video/BV1eE411d7Gf?p=22&vd_source=d53aba77c7414634cc2f6cafda443c98
略。。。
第二十一课 总结实例2:https://www.bilibili.com/video/BV1eE411d7Gf?p=23&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第 6 周
第二十二课 前言:https://www.bilibili.com/video/BV1eE411d7Gf?p=24&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十三课 流 Streams:https://www.bilibili.com/video/BV1eE411d7Gf?p=25&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十四课 多 GPU 编程:https://www.bilibili.com/video/BV1eE411d7Gf?p=26&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十五课 纹理内存与纹理操作:https://www.bilibili.com/video/BV1eE411d7Gf?p=27&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十六课 CPU&GPU 协同:https://www.bilibili.com/video/BV1eE411d7Gf?p=28&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第 7 周
小记: 真的是周末忙的要上天了,周末两天我给自己安排了两天的工作排期,写文档,做设计稿,代码编程,装系统,迁移应用,充实也是很充实,累也是真的很累的;
第二十七课 优化 GPU 程序策略:https://www.bilibili.com/video/BV1eE411d7Gf?p=29&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十八课 APOD -- 并行 : https://www.bilibili.com/video/BV1eE411d7Gf?p=30&vd_source=d53aba77c7414634cc2f6cafda443c98
第二十九课 测量内存使用率和带宽利用率:https://www.bilibili.com/video/BV1eE411d7Gf?p=31&vd_source=d53aba77c7414634cc2f6cafda443c98
第三十课 最小化线程发散策略:https://www.bilibili.com/video/BV1eE411d7Gf?p=32&vd_source=d53aba77c7414634cc2f6cafda443c98
GPU 并行计算与 CUDA 编程 第 8 周
第三十一课: MPI 简介:https://www.bilibili.com/video/BV1eE411d7Gf?p=33&vd_source=d53aba77c7414634cc2f6cafda443c98
第三十二课: MPI 函数:https://www.bilibili.com/video/BV1eE411d7Gf?p=34&spm_id_from=pageDriver&vd_source=d53aba77c7414634cc2f6cafda443c98
集群通信:
第三十三课: MPI 运行: https://www.bilibili.com/video/BV1eE411d7Gf?p=35
第三十四课: MPI & CUDA:https://www.bilibili.com/video/BV1eE411d7Gf?p=36&spm_id_from=pageDriver
课后感悟: gpu 并行编程的相关代码实现上,逐渐加入了集群概念,MPI 是基于 GPU 编程的一种开发语言实现,为了实现 cpu 与 gpu 的通信,往往需要一部分缓存将 cpu 中的数据转储到 GPU 中,为了解决 cpu 与 gpu 的数据寻址问题所以引入了统一的寻址存储,并且 MPI 可以实现跨机器的 GPU 的数据通信问题这样就可以更好的进行 GPU 并行计算了,人类真的是在逐渐攀登高峰,十多年前的技术难点问题,现在就可以通过简单的技术实现,不过越是复杂的问题,所依赖的往往是最基础的学科处理办法。
第三十五课: jacobi 迭代示例: https://www.bilibili.com/video/BV1eE411d7Gf?p=37&spm_id_from=pageDriver
GPU 并行计算与 CUDA 编程 第 9 周
待开始: https://www.bilibili.com/video/BV1eE411d7Gf?p=38&spm_id_from=pageDriver