行业资讯
nvidia cuda入门p3、p4学习笔记
针对英伟达cuda入门课程的p3、p4做总结主要针对更多线程的角度和从内存访问优化的角度去优化代码。1.核心创建大量线程概念sm流处理器这是实际处理代码的硬件gpu的处理器的复杂度比cpu核心低的多甚至比alu还简单。1.1创建更多线程块因为一个线程块只能在一个流处理器而流处理器像多核的cpu是可以并行的所以充分利用流处理器资源的方法是创建更多线程块至少和sm数量一样。1.2warp一个warp32个线程这是sm调度的基本单位多线程状态下线程的切换可以隐藏诸如读取内存导致的延迟。warp的数量决定了可以隐藏延迟的长度如果希望隐藏更多延迟warp要更多。每个sm上可以有多个warp也就是线程束通过多个线程束隐藏延迟。2.内存子系统2.1层级像计算机存储分层级大的慢而便宜小的快而贵gpu的内存子系统也是分成最内层的寄存器、共享内存和l1 cache、l2 cache、全局内存共享内存是通过shared关键字由程序员显示使用l1和l2cache由系统管理不由程序员控制全局内存是最慢的。即使如此gpu的全局内存仍然比其他类型的处理器的内存快。2.2缓存行的加载粒度128字节因此如果一个warp中的线程访问的是连续的四字节的数据且刚好在一个缓存行内利用率就是100%。如果是连续但是跨越两个缓存行就是50%。要尽可能访问连续的空间增加利用率。2.3共享内存属于每个sm独有的部分特点是可以用来块内线程通信也可以提高访问速度提升性能。它的宽度是128字节高度由实际的大小决定不能超过48kB。一行中有32个存储体在同一时间只能访问一个存储体也就是其中一列。因此如果多个线程访问相同的存储体会降低访问效率。2.4 bank conflict存储体冲突就是warp中线程访问同一个存储体进而引发的阻塞。避免存储体冲突的一种方法是padding这样原本冲突的访问可能变得完全不冲突。2.5全局内存全局内存在我们的描述里是一种逻辑上的东西不严格的说一些分配在cpu上的也是属于这部分。总结优化cuda代码从更多线程以及访问降低冲突、利用共享内存的角度去考虑。
郑州网站建设
网页设计
企业官网