CUDA学习(三)
内存层次结构:
CUDA线程可能会在执行期间从多个内存空间访问数据,如图所示。每个线程都有专用本地内存(local menory)。 每个线程块都具有共享内存(shared memory),该块的所有线程都可见,并且具有与该块相同的生命周期。 所有线程都可以访问相同的全局内存(global memory)。
所有线程还有两个额外的只读内存空间:常量和纹理内存空间。 全局,常量和纹理内存空间针对不同的内存使用进行了优化。 对于某些特定的数据格式,纹理内存也提供了不同的寻址模式以及数据过滤功能。
全局,常量和纹理内存空间在同一应用程序的内核启动时保持不变
异构编程(Heterogeneous Programming):
这里设GPU设备为Device,CPU设备为Host,如图所示,kernel函数在Device上运行,其余C语言程序依然上CPU上运行。
CUDA编程模型还假定主机和设备都在DRAM中分别维护它们自己的独立存储空间,分别称为主机存储器和设备存储器。 因此,程序通过调用CUDA运行库来管理内核可见的全局,常量和纹理内存空间(在编程接口中描述)。 这包括设备内存分配和重新分配以及主机和设备内存之间的数据传输。
统一内存提供托管内存来桥接主机和设备内存空间。 托管内存可以从系统中的所有CPU和GPU作为具有共同地址空间的单一连贯内存映像访问。 这种功能使得设备内存的超额申请成为可能,并且通过消除在主机和设备上显式镜像数据的需要,可以大大简化移植应用程序的任务。
计算能力:
设备的计算能力由版本号表示,有时也称为“SM版本”。 该版本号标识GPU硬件支持的特征,并由运行时的应用程序使用以确定当前GPU上哪些硬件特征和指令可用。
计算能力包括主版本号X和次版本号Y,用X.Y表示。
主版本号相同的设备具有相同的核心架构。 基于Volta体系结构的设备主要版本为7,基于Pascal体系结构的设备为6,基于Maxwell体系结构的设备为5,基于开普勒体系结构的设备为3,基于费米体系结构的设备为2, 和基于特斯拉架构的设备为1.
次要版本号对应于核心架构的渐进式改进,可能包括新功能。
支持CUDA的GPU列出了所有支持CUDA的设备及其计算能力。 计算能力给出了每种计算能力的技术规格。
特斯拉和费米架构分别在CUDA7.0和CUDA9.0不被支持。


