如果你有幸学过
OpenCL
的话,会发现cuda
异常简单,甚至能用个周六日学完。
想着在下班时间学点什么,刷视频打游戏总不是办法。有时候下班都 22 点甚至更晚,但还是要顶住,哪怕学 10 分钟呢?想来想去决定从 cuda
开始了,本系列计划由两部分组成:
- 第一部分是
cuda
编程基础,持续更新 - 第二部分是
cuda
优化模型
不过搞完第一部分后我应该会去学 C++
,把一切基础知识准备就绪后开始学习 cuda
优化模型。时隔两个月,我学完 C++
回来了。
在 CudaBase
文件夹下,每个文件夹下配有文档和代码示例。下班时间很少,努力保证代码质量,但文档写的很急 ...... 如果没有特别声明,所有编译和运行的方式均为:
nvcc main.cu
./a.out
后续会过度到 cmake
,cmake
的编译方式为:
cd build
cmake ..
make install
./bin/main
文件 | 备注 |
---|---|
1helloworld |
安装与运行 hello world 级别的代码 |
2threadid |
线程模型中的索引计算 |
3matrixadd |
矩阵加法。小用一手模板,宏的黑魔法,以及避免内存泄漏 |
4runtime |
运行时。继续使用模板精简代码,运行时信息查询,函数计时等 |
5memorymodel |
内存模型。全局内存、局部内存、共享内存、统一内存等,并全部使用 cmake 编译和管理 |
6arch |
计算架构相关的东西,流多处理器、延时隐藏、线程束分化等问题 |
7stream |
多流计算,流同步、回调等 |
cuda
计算框架 CUFX
,取自单词 Cuda Framework eXtended
用来装逼。包含一些算子的实际项目,严格组织代码结构,TODO:
- 线程池
- 内存池
- 一些优雅的 C++ 实现
- 一些高性能 cuda 算子
- 可对外提供动态库,直接使用
下班后有点头晕眼花,但还是在艰难施工中。 也许哪天学到高大上的写法,比如一些好的日志实现,好的架构组织,我就回来填坑。 如果你有想法,哪怕是练手,想练习一个内存池,也欢迎。