CUDA SHARED MEMORY
在global Memory部分,数据对齐和连续是很重要的话题,当使用L1的时候,对齐问题可以忽略,但是非连续的获取内存依然会降低性能。依赖于算法本质,某些情况下,非连续访问是不可避免的。使用shared memory是另一种提高性能的方式。
GPU上的memory有两种:
· On-board memory
· On-chip memory
global memory就是一块很大的on-board memory,并且有很高的latency。而shared memory正好相反,是一块很小,低延迟的on-chip memory,比global memory拥有高得多的带宽。我们可以把他当做可编程的cache,其主要作用有:
· An intra-block thread communication channel 线程间交流通道
· A program-managed cache for global memory data可编程cache
· Scratch pad memory for transforming data to improve global memory access patterns
本文主要涉及两个例子作解释:reduction kernel,matrix transpose kernel。
shared memory(SMEM)是GPU的重要组成之一。物理上,每个SM包含一个当前正在执行的block中所有thread共享的低延迟的内存池。SMEM使得同一个block中的thread能够相互合作,重用on-chip数据,并且能够显著减少kernel需要的global memory带宽。由于APP可以直接显式的操作SMEM的内容,所以又被称为可编程缓存。
由于shared memory和L1要比L2和global memory更接近SM,shared memory的延迟比global memory低20到30倍,带宽大约高10倍。

本文深入探讨了CUDA中共享内存(SMEM)的特性和优化策略,包括其作为线程间通信渠道、可编程缓存和用于改善全局内存访问模式的作用。通过reduction kernel和矩阵转置kernel的例子,详细讲解了如何利用共享内存提升GPU性能,讨论了共享内存的分配方式、内存块的概念及其对带宽的影响。
最低0.47元/天 解锁文章
2281

被折叠的 条评论
为什么被折叠?



