Skip to content

Latest commit

 

History

History
69 lines (50 loc) · 3.49 KB

README.md

File metadata and controls

69 lines (50 loc) · 3.49 KB

CUDA 计划

如果你有幸学过 OpenCL 的话,会发现 cuda 异常简单,甚至能用个周六日学完。

想着在下班时间学点什么,刷视频打游戏总不是办法。有时候下班都 22 点甚至更晚,但还是要顶住,哪怕学 10 分钟呢?想来想去决定从 cuda 开始了,本系列计划由两部分组成:

  • 第一部分是 cuda 编程基础
  • 第二部分是 cuda 优化模型

不过搞完第一部分后我应该会去学 C++,把一切基础知识准备就绪后开始学习 cuda 优化模型。时隔两个月,我学完 C++ 回来了。

一份不错的 C++ 进阶文档

下班后有点头晕眼花,但还是在艰难施工中也许哪天学到高大上的写法,比如一些好的日志实现,好的架构组织,我就回来填坑。 如果你有想法,哪怕是练手,想练习一个内存池,也欢迎。

CudaBase

CudaBase 文件夹下,每个文件夹下配有文档和代码示例。下班时间很少,努力保证代码质量,但文档写的很急 ...... 如果没有特别声明,所有编译和运行的方式均为:

nvcc main.cu
./a.out

后续会过度到 cmakecmake 的编译方式为:

cd build
cmake ..
make install
./bin/main
文件 备注
1helloworld 安装与运行 hello world 级别的代码
2threadid 线程模型中的索引计算
3matrixadd 矩阵加法。小用一手模板,宏的黑魔法,以及避免内存泄漏
4runtime 运行时。继续使用模板精简代码,运行时信息查询,函数计时等
5memorymodel 内存模型。全局内存、局部内存、共享内存、统一内存等,并全部使用 cmake 编译和管理
6arch 计算架构相关的东西,流多处理器、延时隐藏、线程束分化等问题
7stream 多流计算,流同步、回调等

CUFX

cuda 计算框架 CUFX,取自单词 Cuda Framework eXtended 用来装逼。包含一些算子的实际项目,严格组织代码结构。大概计划是:

  • 线程池
  • 内存池
  • 基础日志、数据类型
  • 搭建工程结构,编写 cmakelists.txt
  • 一些优雅的 C++ 实现
  • 一些高性能 cuda 算子
  • 可对外提供动态库,直接使用
  • 自动化测试框架
文件 备注
reductsum reduce 优化,解决 bank conflict,交叉寻址,warp 展开等
gemm gemm 实践,共享内存、2d thread tile、双缓冲技术
conv 卷积实践,img2col 与隐 gemm 算法

参考

  1. 基础
  2. 内存
  3. 多流
  4. 进阶,不适用初学者