如何学习cuda编程?

第一本cuda教材:

配套网课:

记得做网课作业。

然后就靠项目上手了。

我当时实习时候的项目是自己手撸了一遍caffe, 写了个内部的inference engine。顺带着学了很多 cuda 的实践。我觉得是个好项目,自己学了很多,但是看你自己兴趣/时间了。

==== 稍微更新下分割线

更新下上手之后对我帮助比较大的一些资料,这个时候对计算机底层不是很了解,做的东西还是浮于算法表面。

大致的知道要coalesced access,用vectorized datatype,以及大致的知道 atomics 慢,要避免 bank conflict, 但不是很懂architecture。

  1. 矩阵转置优化:

2. Reduction:

3. 图像上的连通区域分析 :

4. Summed area table (当时读的代码找不到了…让我到时候再找找)

上完班再来更一下==

我再上面这个阶段对于cuda的理解比较似是而非。很多时候知其然不知其所以然。

接下来对gpu/cuda 的理解从算法表面深入到体系结构了。

这个时候要祭出两本书,熟读后登堂入室。

  1. Computer architecture a quantitative approach https://www.elsevier.com/books/computer-architecture/hennessy/978-0-12-811905-1Computer ArchitectureComputer Architecture
  2. Parallel and High Performance Computing

以及microbenchmarking 里我一直会去读一下的报告

3. Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking


以上是我自己的学习路径。自己是数学系出身的所以很多东西都是在工作里慢慢才学起来。

我觉得计算机专业出身的话,可能学习的路径是反过来的。即体系结构出发,然后用cuda以及算法包装来达到目的。

我的领导就是我见过的最纯粹的体系结构派,碰到问题不是先写代码,而是先建一个excel表格来估算我们最好/最差的情况预期能达到怎样的效率。然后通过调整代码,调整算法,甚至调整编程语言(直接写ptx )来解决问题。

比如这个回答里的一篇文献,简单的矩阵转秩。里面作者的思路就是:转秩我们只会touch所有data 一次,那在理想情况下应该是和memcpy的效率一样。于是里面就通过各种技巧来逼近memcpy。

这种从体系结构 指导算法设计 的思路,我现在还在认真学习。

希望这篇回答能对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值