README
第5章 内存
为了最大化地提升性能,CUDA使用了多种内存类型,我们使用何种类型的内存依赖于预期的使用方法。主机内存指的是系统中CPU的内存。CUDA同样提供了API来更快的访问主机内存,可通过页面锁定将其映射给GPU。设备内存指的是使用一个专用内存控制器访问的GPU内存,并且,正像每一个CUDA的初学者都知道的,数据必须在主机与设备内存间显式复制,以便GPU处理。
设备内存可以通过多种方式分配与访问:
·全局内存可以被静态或动态地分配,并可以通过CUDA内核中的指针访问,内核可将其转化为全局加载/存储指令。
·常量内存是只读内存,通过被不同的指令以优化方式访问。来自多个线程的读请求可以借助缓存以广播方式实现。
·本地内存包含栈:不能被寄存器保存、不能作为参数、也不能作为子程序返回地址的本地变量。
·纹理内存(CUDA数组形式)通过纹理与表面加载/存储指令访问。同常量内存一样,来自纹理内存的读请求由独立缓存服务,借助该缓存能够对只读访问优化。
共享内存是CUDA中一个重要的内存类型,它不由设备内存提供。相反,它是对片上暂存内存的抽象,在每个线程块内线程间的快速数据交换中使用。物理上来看,共享内存以SM上的内建内存形式出现:在SM 1.x硬件上,共享内存用16KB的RAM实现;在SM 2.x和最近的硬件中,共享内存使用64KB缓存实现,这块缓存可以划分成48KB一级缓存/16KB共享内存,或48KB共享内存和16KB一级缓存。