SM是一种单指令多线程((single Instruction MultipleThread,SIMT)架构的处理器,类似单指令流多数据流(SIMD)的特点,含有指令发射单元,及若干个流处理器(strcamingProcessor,sp)或标量处理器(Scalarproeessor,SP),特殊函数处理器(speeial Funetion Proeessor,SFU),可快速访问的共享存储器(shared memory)以及指令和常量(constant)缓存"。
真正进行运算操作的就是流处理器SP,包含有浮点及整数处理单元和寄存器,可以进行浮点数的乘加/乘/加(FMAD/FMUL/FADD),整数的加/乘/比较/移位(ADD/MUL/CMP/MOVE)等操作"。
在cuda编程中,可用如下库函数获得显卡的相关参数信息。
cudaDeviceProp prop;
int count;
cudaGetDeviceCount( &count );
for (int i = 0; i < count; i++)
cudaGetdeviceProperties(& prop,i);
其中,prop.multiProcessorCount,prop.maxThreadsPerMultiProcessor 分别指设备上的流多处理器(SM)的数量和每个流多处理器(SM)最大线程数量。
在费米构架中,每个流多处理器中运算单元(SM,或Cores)与计算GPU能力相关:
- Compute Capability <= 1.3 --> 8 CUDA Cores / SM
- CC == 2.0 --> 32 CUDA cores / SM
- CC == 2.1 --> 48 CUDA cores / SM
Multiprocessors x Cores/MP = Cores
于是笔者算着自己电脑里GeForce 630 显卡的流多处理器数量数2,运算单元数是96,即每个流多处理器中运算单元数是48。更多显卡的详细参数和最大并行执行线程数量相关问题请参考下面的链接。