[cuda 编程]深入优化

减少CPU和GPU通讯中的技巧

其中双缓存的概念在asc20 hpl优化的时候得到了验证,4*teslav100=32g =128g,内存占用也是128g。实际上host 到device 的带宽太小,不适合做大规模的内存迁移,所以双缓存还是十分必要的。

coalescing合并

gpu的延时是数百个时钟周期。

sm资源调度模型用于解决访存冲突。有texture 纹理寻址。

基本操作:

另外几种优化的方向。

single转double

Data Prefetching 数据预读

引入预读操作

编译器bb优化

[cuda 编程]优化cuda

一个block 不是最小单元,最好的优化是在warp上调度,warp的步调是一致的。

P.S. 尽量不要写过多的深层的递归,因为在gpu上实现这个是需要开指数级别的线程数,没开一个线程就意味着特定的内存开销,显存很容易被撑满。

用线程调度的方法来达到延时隐藏的效果,对于gpu的warp来说,context switch 的开销几乎为零。在特定的时间点只可能一个warp在执行。

如果warp内部线程沿不同的