一组带有 on-chip 共享内存的 SIMD 多处理器
设备可以被看作一组多处理器,如图所示。每个多处理器使用单指令多数据(SIMD)
架构:在任何给定的时钟周期内,多处理器的每个处理器执行同一指令,但操作不同的数据。
每个多处理器使用四个以下类型的on-chip
内存:
- 每个处理器一组 $32$ 位寄存器
- 并行数据缓存或共享内存,被所有处理器共享实现内存空间共享
- 通过设备内存的一个只读区域,一个只读常量缓存器被所有处理器共享
- 通过设备内存的一个只读区域,一个只读纹理缓存器被所有处理器共享
本地和全局内存空间作为设备内存的读写区域,而不被缓冲。 每个多处理器通过纹理单元访问纹理缓冲器,它执行各种各样的寻址模式和数据过滤。
执行模式
一个线程块网格是通过多处理器规划执行的。每个多处理器一个接一个的处理块批处理。一个块只被一个多处理器处理,因此可以对驻留在on-chip
共享内存的共享内存空间形成非常快速的访问。
一个批处理中每个多处理器可以处理多少个块,取决于每个线程中分配了多少个寄存器和已知内核中每个时钟需要多少的共享内存,因为多处理器的寄存器和内存在所有的线程中是分开的。如果在至少一个块中,每个多处理器没有足够高的寄存器或共享内存用,那么内核将无法启动。
线程块在一个批处理中被一个多处理器执行,被称为active
,每个active
块被划分成SIMD
线程组,被称为warps
;每一条这样的warp
包含数量相同的线程,叫做warp
大小,并且在SIMD
的方式下通过多处理器执行,执行调度程序周期性地从一条warp
切换到另一条warp
,以达到多处理器计算资源使用的最大化。
块被划分成warp
的方式总是相同的;每条warp
包含连续的线程,线程索引从第一个warp
包含着的线程 0 开始递增。
一个多处理器可以并发地处理几个块,通过划分在它们之中的寄存器和共享内存。更准确地说,每条线程可使用的寄存器数量,等于每个多处理器寄存器总数除以并发的线程数量,并发线程的数量等于并发块的数量乘以每块线程的数量。
在一个线程块网格内的块次序是未定义的,并且在块之间不存在同步机制,因此来自同一个网格的两个不同块的线程不能通过全局内存彼此安全地通讯。
计算兼容性
设备的兼容性由两个参数定义,主要版本号和次要版本号。设备拥有的主要版本号代表相同的核心架构。
次要版本号代表一些改进的核心架构。比如新的特性。
多设备
为一个应用程序使用多GPU
作为CUDA
设备,必须保证这些CPU
是一样的类型。如果系统工作在SLI
模式下,那么只有一个GPU
可以作为CUDA
设备,由于所有的GPU
在驱动堆栈中被底层的融合了。SLI
模式需要在控制面板中关闭,这样才能使多个GPU
作为CUDA
设备