CUDA里一个WARP中有32个线程,SM里有48个SP,每个SP对应一个线程吗?
1个回答
展开全部
并行度是很复杂、很难估计的,它和很多因素有关,不能单从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(指令级并行)等等就足够了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询