CUDA里一个WARP中有32个线程,SM里有48个SP,每个SP对应一个线程?
并行度是很复杂、很难估计的,它和很多因素有关,不能单从SP的数量来判断。一个SM最多有48个SP可以同时运行,它们执行同样的指令或者休眠,但是并不是说它们每一个负责一个block或者thread的运算。实际上,threads是按warp为单位执行的,一个warp有32个threads。一个SM可以最多有48个warp是active的,但是由于一个GPU时钟时间内可以执行的指令非常有限,所以这些warp不是全部并行执行的,而是随着GPU时钟来回切换执行,这个机制很复杂,是由GPU自己来部署的。所以,比较这种并行度是很难的,一般不这样比也不这样去考虑并行运算。
如果是单一的GPU优化问题,那就是比程序的吞吐量(throughput)和GPU最大吞吐量之间 (peak throughput)的差值,看一下优化的程度是不是好,越靠近最大吞吐量的优化就越好。如果只是做了一个加速的可能性,那么就比较加速比就可以了。
在实际编程中,你其实只需要考虑CUDA编程指南上面提到的那些优化方法就行了,比如增大occupancy,instruction level parallelism(指令级并行)等等就足够了。
谢谢,望采纳
并行度是很复杂、很难估计的,它和很多因素有关,不能单从SP的数量来判断。一个SM最多有48个SP可以同时运行,它们执行同样的指令或者休眠,但是并不是说它们每一个负责一个block或者thread的运算。
实际上,threads是按warp为单位执行的,一个warp有32个threads。一个SM可以最多有48个warp是active的,但是由于一个GPU时钟时间内可以执行的指令非常有限,所以这些warp不是全部并行执行的,而是随着GPU时钟来回切换执行,这个机制很复杂,是由GPU自己来部署的。所以,比较这种并行度是很难的,一般不这样比也不这样去考虑并行运算。
如果是单一的GPU优化问题,那就是比程序的吞吐量(throughput)和GPU最大吞吐量之间 (peak throughput)的差值,看一下优化的程度是不是好,越靠近最大吞吐量的优化就越好。如果只是做了一个加速的可能性,那么就比较加速比就可以了。
在实际编程中,你其实只需要考虑CUDA编程指南上面提到的那些优化方法就行了,比如增大occupancy,instruction level parallelism(指令级并行)等等就足够了。
“SM里有48个SP”, 一个SM里有48个SP的显卡是不存在的。
“一个SM在一个时间点上会执行一个Block中的一个Warp”,这是不准确的。具体能同时跑几个Warp由Compute capability所决定。楼主看的资料比较老,以前确实是这样的。
每一款具有cuda计算能力的显卡都有一个属性叫Compute capability,这个值由主版本和次版本号组成,比如:5.0, 6.1等。这值的主版本表示了这款显卡的架构。
同一款架构里SM里所包含的SP是固定的,同一时间跑几个Warp也是基本固定的。比如说:
Compute Capability 5.x ,A multiprocessor consists of:
128 CUDA cores for arithmetic operations (see Arithmetic Instructions for throughputs of arithmetic operations),
32 special function units for single-precision floating-point transcendental functions,
4 warp schedulers.
Compute Capability 7.x,A multiprocessor consists of:
64 FP32 cores for single-precision arithmetic operations,
32 FP64 cores for double-precision arithmetic operations, 28
64 INT32 cores for integer math,
8 mixed-precision Tensor Cores for deep learning matrix arithmetic
16 special function units for single-precision floating-point transcendental functions,
4 warp schedulers.
参考:网页链接